Lines Matching refs:alarm
35 static rt_err_t alarm_set(struct rt_alarm *alarm) in alarm_set() argument
46 if (alarm->flag & RT_ALARM_STATE_START) in alarm_set()
51 wkalarm.tm_sec = alarm->wktime.tm_sec; in alarm_set()
52 wkalarm.tm_min = alarm->wktime.tm_min; in alarm_set()
53 wkalarm.tm_hour = alarm->wktime.tm_hour; in alarm_set()
65 alarm->wktime.tm_sec = wkalarm.tm_sec; in alarm_set()
66 alarm->wktime.tm_min = wkalarm.tm_min; in alarm_set()
67 alarm->wktime.tm_hour = wkalarm.tm_hour; in alarm_set()
74 static void alarm_wakeup(struct rt_alarm *alarm, struct tm *now) in alarm_wakeup() argument
80 sec_alarm = alarm_mkdaysec(&alarm->wktime); in alarm_wakeup()
83 if (alarm->flag & RT_ALARM_STATE_START) in alarm_wakeup()
85 switch (alarm->flag & 0xFF00) in alarm_wakeup()
89 sec_alarm = mktime(&alarm->wktime); in alarm_wakeup()
94 alarm->flag &= ~RT_ALARM_STATE_START; in alarm_wakeup()
95 alarm_set(alarm); in alarm_wakeup()
109 sec_alarm += alarm->wktime.tm_wday * 24 * 3600; in alarm_wakeup()
119 if (alarm->wktime.tm_mday == now->tm_mday) in alarm_wakeup()
128 if ((alarm->wktime.tm_mday == now->tm_mday) && \ in alarm_wakeup()
129 (alarm->wktime.tm_mon == now->tm_mon)) in alarm_wakeup()
138 if ((wakeup == RT_TRUE) && (alarm->callback != RT_NULL)) in alarm_wakeup()
141 alarm->callback(alarm, timestamp); in alarm_wakeup()
149 struct rt_alarm *alarm; in alarm_update() local
165 alarm = rt_list_entry(next, struct rt_alarm, list); in alarm_update()
167 alarm_wakeup(alarm, &now); in alarm_update()
176 alarm = rt_list_entry(next, struct rt_alarm, list); in alarm_update()
178 sec_alarm = alarm_mkdaysec(&alarm->wktime); in alarm_update()
180 if ((alarm->flag & RT_ALARM_STATE_START) && (alarm != _container.current)) in alarm_update()
189 alm_next = alarm; in alarm_update()
198 alm_prev = alarm; in alarm_update()
261 static rt_err_t alarm_setup(rt_alarm_t alarm, struct tm *wktime) in alarm_setup() argument
267 setup = &alarm->wktime; in alarm_setup()
280 switch (alarm->flag & 0xFF00) in alarm_setup()
361 alarm->flag |= RT_ALARM_STATE_INITED; in alarm_setup()
386 rt_err_t rt_alarm_control(rt_alarm_t alarm, int cmd, void *arg) in rt_alarm_control() argument
390 RT_ASSERT(alarm != RT_NULL); in rt_alarm_control()
401 rt_alarm_stop(alarm); in rt_alarm_control()
402 alarm->flag = setup->flag & 0xFF00; in rt_alarm_control()
403 alarm->wktime = setup->wktime; in rt_alarm_control()
404 ret = alarm_setup(alarm, &alarm->wktime); in rt_alarm_control()
419 rt_err_t rt_alarm_start(rt_alarm_t alarm) in rt_alarm_start() argument
426 if (alarm == RT_NULL) in rt_alarm_start()
429 if (!(alarm->flag & RT_ALARM_STATE_INITED)) in rt_alarm_start()
431 if (alarm_setup(alarm, &alarm->wktime) != RT_EOK) in rt_alarm_start()
434 if ((alarm->flag & 0x01) == RT_ALARM_STATE_STOP) in rt_alarm_start()
439 alarm->flag |= RT_ALARM_STATE_START; in rt_alarm_start()
443 ret = alarm_set(alarm); in rt_alarm_start()
449 sec_new = alarm_mkdaysec(&alarm->wktime); in rt_alarm_start()
453 ret = alarm_set(alarm); in rt_alarm_start()
457 ret = alarm_set(alarm); in rt_alarm_start()
461 ret = alarm_set(alarm); in rt_alarm_start()
472 _container.current = alarm; in rt_alarm_start()
487 rt_err_t rt_alarm_stop(rt_alarm_t alarm) in rt_alarm_stop() argument
491 if (alarm == RT_NULL) in rt_alarm_stop()
494 if (!(alarm->flag & RT_ALARM_STATE_START)) in rt_alarm_stop()
497 alarm->flag &= ~RT_ALARM_STATE_START; in rt_alarm_stop()
499 if (_container.current == alarm) in rt_alarm_stop()
501 ret = alarm_set(alarm); in rt_alarm_stop()
519 rt_err_t rt_alarm_delete(rt_alarm_t alarm) in rt_alarm_delete() argument
523 if (alarm == RT_NULL) in rt_alarm_delete()
527 alarm->flag &= ~RT_ALARM_STATE_START; in rt_alarm_delete()
528 if (_container.current == alarm) in rt_alarm_delete()
530 ret = alarm_set(alarm); in rt_alarm_delete()
535 rt_list_remove(&alarm->list); in rt_alarm_delete()
536 rt_free(alarm); in rt_alarm_delete()
550 struct rt_alarm *alarm; in rt_alarm_create() local
554 alarm = rt_malloc(sizeof(struct rt_alarm)); in rt_alarm_create()
555 if (alarm == RT_NULL) in rt_alarm_create()
557 rt_list_init(&alarm->list); in rt_alarm_create()
559 alarm->wktime = setup->wktime; in rt_alarm_create()
560 alarm->flag = setup->flag & 0xFF00; in rt_alarm_create()
561 alarm->callback = callback; in rt_alarm_create()
563 rt_list_insert_after(&_container.head, &alarm->list); in rt_alarm_create()
566 return (alarm); in rt_alarm_create()