X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Ftimer.h;h=f5c5c64f2509ceb63d4878395ce6bfdb5ce823ae;hp=0ec3e0d9bbd071663f00e31f274aeac0934b6c33;hb=067d72c9fe698d305a07db17fc5b328e4a17cc8f;hpb=e99e38bbdcca3fe5956823bdb3d38544ccf93221 diff --git a/src/timer.h b/src/timer.h index 0ec3e0d9b..f5c5c64f2 100644 --- a/src/timer.h +++ b/src/timer.h @@ -1,4 +1,4 @@ -/*-*- Mode: C; c-basic-offset: 8 -*-*/ +/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ #ifndef footimerhfoo #define footimerhfoo @@ -30,20 +30,64 @@ typedef enum TimerState { TIMER_DEAD, TIMER_WAITING, TIMER_RUNNING, - _TIMER_STATE_MAX + TIMER_ELAPSED, + TIMER_FAILED, + _TIMER_STATE_MAX, + _TIMER_STATE_INVALID = -1 } TimerState; -struct Timer { - Meta meta; +typedef enum TimerBase { + TIMER_ACTIVE, + TIMER_BOOT, + TIMER_STARTUP, + TIMER_UNIT_ACTIVE, + TIMER_UNIT_INACTIVE, + _TIMER_BASE_MAX, + _TIMER_BASE_INVALID = -1 +} TimerBase; + +typedef struct TimerValue { + usec_t value; + usec_t next_elapse; + + LIST_FIELDS(struct TimerValue, value); - TimerState state; + TimerBase base; + bool disabled; +} TimerValue; + +typedef enum TimerResult { + TIMER_SUCCESS, + TIMER_FAILURE_RESOURCES, + _TIMER_RESULT_MAX, + _TIMER_RESULT_INVALID = -1 +} TimerResult; + +struct Timer { + Unit meta; - clockid_t clock_id; + LIST_HEAD(TimerValue, values); usec_t next_elapse; - Service *service; + TimerState state, deserialized_state; + UnitRef unit; + + Watch timer_watch; + + TimerResult result; }; +void timer_unit_notify(Unit *u, UnitActiveState new_state); + extern const UnitVTable timer_vtable; +const char *timer_state_to_string(TimerState i); +TimerState timer_state_from_string(const char *s); + +const char *timer_base_to_string(TimerBase i); +TimerBase timer_base_from_string(const char *s); + +const char* timer_result_to_string(TimerResult i); +TimerResult timer_result_from_string(const char *s); + #endif