TIMER_DEAD,
TIMER_WAITING,
TIMER_RUNNING,
- _TIMER_STATE_MAX
+ TIMER_ELAPSED,
+ TIMER_MAINTENANCE,
+ _TIMER_STATE_MAX,
+ _TIMER_STATE_INVALID = -1
} TimerState;
+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 {
+ TimerBase base;
+ usec_t value;
+
+ usec_t next_elapse;
+
+ bool disabled;
+
+ LIST_FIELDS(struct TimerValue, value);
+} TimerValue;
+
struct Timer {
Meta meta;
- TimerState state;
-
- clockid_t clock_id;
+ LIST_HEAD(TimerValue, values);
usec_t next_elapse;
- Service *service;
+ TimerState state, deserialized_state;
+ Unit *unit;
+
+ Watch timer_watch;
+
+ bool failure;
};
+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);
+
#endif