]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/core/timer.h
core: convert PID 1 to libsystemd-bus
[thirdparty/systemd.git] / src / core / timer.h
CommitLineData
03467c88 1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
5cb5a6ff 2
c2f1db8f 3#pragma once
5cb5a6ff 4
a7334b09
LP
5/***
6 This file is part of systemd.
7
8 Copyright 2010 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
a7334b09
LP
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 18 Lesser General Public License for more details.
a7334b09 19
5430f7f2 20 You should have received a copy of the GNU Lesser General Public License
a7334b09
LP
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
5cb5a6ff
LP
24typedef struct Timer Timer;
25
87f0e418 26#include "unit.h"
36697dc0 27#include "calendarspec.h"
5cb5a6ff
LP
28
29typedef enum TimerState {
30 TIMER_DEAD,
31 TIMER_WAITING,
32 TIMER_RUNNING,
871d7de4 33 TIMER_ELAPSED,
fdf20a31 34 TIMER_FAILED,
871d7de4
LP
35 _TIMER_STATE_MAX,
36 _TIMER_STATE_INVALID = -1
5cb5a6ff
LP
37} TimerState;
38
871d7de4
LP
39typedef enum TimerBase {
40 TIMER_ACTIVE,
41 TIMER_BOOT,
42 TIMER_STARTUP,
43 TIMER_UNIT_ACTIVE,
44 TIMER_UNIT_INACTIVE,
36697dc0 45 TIMER_CALENDAR,
871d7de4
LP
46 _TIMER_BASE_MAX,
47 _TIMER_BASE_INVALID = -1
48} TimerBase;
49
50typedef struct TimerValue {
36697dc0
LP
51 TimerBase base;
52 bool disabled;
53 clockid_t clock_id;
54
b719810d
LP
55 usec_t value; /* only for monotonic events */
56 CalendarSpec *calendar_spec; /* only for calendar events */
871d7de4
LP
57 usec_t next_elapse;
58
871d7de4
LP
59 LIST_FIELDS(struct TimerValue, value);
60} TimerValue;
61
067d72c9
LP
62typedef enum TimerResult {
63 TIMER_SUCCESS,
64 TIMER_FAILURE_RESOURCES,
65 _TIMER_RESULT_MAX,
66 _TIMER_RESULT_INVALID = -1
67} TimerResult;
68
5cb5a6ff 69struct Timer {
ac155bb8 70 Unit meta;
5cb5a6ff 71
871d7de4 72 LIST_HEAD(TimerValue, values);
36697dc0
LP
73 usec_t next_elapse_monotonic;
74 usec_t next_elapse_realtime;
5cb5a6ff 75
01f78473 76 TimerState state, deserialized_state;
871d7de4 77
718db961
LP
78 sd_event_source *monotonic_event_source;
79 sd_event_source *realtime_event_source;
871d7de4 80
067d72c9 81 TimerResult result;
e41e1943
LP
82
83 usec_t last_trigger_monotonic;
5cb5a6ff
LP
84};
85
74051b9b
LP
86void timer_free_values(Timer *t);
87
47be870b 88extern const UnitVTable timer_vtable;
5cb5a6ff 89
44a6b1b6
ZJS
90const char *timer_state_to_string(TimerState i) _const_;
91TimerState timer_state_from_string(const char *s) _pure_;
871d7de4 92
44a6b1b6
ZJS
93const char *timer_base_to_string(TimerBase i) _const_;
94TimerBase timer_base_from_string(const char *s) _pure_;
871d7de4 95
44a6b1b6
ZJS
96const char* timer_result_to_string(TimerResult i) _const_;
97TimerResult timer_result_from_string(const char *s) _pure_;