00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __AWALARM__
00021 #define __AWALARM__
00022
00026 #define AW_DEFAULT_ALARM_CYCLE_TIME ( AW_TIMESTAMP_PER_SEC / 10 )
00027
00028
00032 typedef enum {
00033 AW_ALARM_RUN_TYPE,
00034 AW_ALARM_INTERRUPT_TYPE
00035 } aw_alarm_type_t;
00036
00040 typedef enum {
00041 AW_ALARM_OK,
00042 AW_ALARM_REMOVE,
00043 AW_ALARM_NCODES
00044 } aw_alarm_code_t;
00045
00046
00050 typedef enum {
00051 AW_SCHED_NONE,
00052 AW_SCHED_PULSE,
00053 AW_SCHED_CALENDAR,
00054 } aw_alarm_sched_code_t;
00055
00056
00060 typedef enum {
00061 AW_SCHED_RUNONCE = 0x1,
00062 } aw_alarm_sched_flag_t;
00063
00067 typedef struct {
00068
00069
00070 aw_timestamp_t
00071 phase;
00072
00073
00074 aw_timestamp_t
00075 period;
00076
00077 } aw_alarm_sched_pulse_t;
00078
00082 typedef struct {
00083
00084
00085 u_int64_t
00086 min;
00087 u_int32_t
00088 hour,
00089 mday,
00090 mon,
00091 wday;
00092
00093 } aw_alarm_sched_cal_t;
00094
00098 typedef struct {
00099
00100 aw_alarm_sched_code_t
00101 method_type;
00102
00103 aw_alarm_sched_flag_t
00104 flags;
00105
00106
00107 union {
00108
00109 aw_alarm_sched_pulse_t
00110 pulse;
00111
00112 aw_alarm_sched_cal_t
00113 calendar;
00114
00115 } method;
00116
00117
00118
00119
00120
00121
00122 aw_alarm_sched_cal_t
00123 notch;
00124
00125 } aw_alarm_sched_t;
00126
00127
00131 typedef struct {
00132
00133
00134 aw_timestamp_t
00135 next_alarm_time;
00136
00137
00138 aw_alarm_sched_t
00139 sched;
00140
00141 } aw_alarm_state_t;
00142
00146 typedef struct {
00147
00148 aw_event_sig_t
00149 interrupt;
00150
00151 } aw_alarm_events_t;
00152
00153
00157 typedef struct aw_alarm_s {
00158
00159
00160 struct aw_alarm_s
00161 *next,*prev;
00162
00163
00164 aw_alarm_type_t
00165 type;
00166
00167
00168 aw_cache_allocator_t
00169 *factory;
00170
00171
00172 aw_alarm_state_t
00173 state;
00174
00175
00176 aw_alarm_events_t
00177 events;
00178
00179 } aw_alarm_t ;
00180
00181
00210 int32_t aw_set_sched_calendar(aw_alarm_sched_cal_t *cal, const byte_t *crontab, FILE *message_stream);
00211
00212 #endif