1 /* 2 * Copyright (c) 2006-2018, RT-Thread Development Team 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Change Logs: 7 * Date Author Notes 8 * 2012-10-27 heyuanjie87 first version. 9 */ 10 11 #ifndef __ALARM_H__ 12 #define __ALARM_H__ 13 14 #include <time.h> 15 16 #define RT_ALARM_TM_NOW -1 /* set the alarm tm_day,tm_mon,tm_sec,etc. 17 to now.we also call it "don't care" value */ 18 19 /* alarm flags */ 20 #define RT_ALARM_ONESHOT 0x000 /* only alarm onece */ 21 #define RT_ALARM_DAILY 0x100 /* alarm everyday */ 22 #define RT_ALARM_WEEKLY 0x200 /* alarm weekly at Monday or Friday etc. */ 23 #define RT_ALARM_MONTHLY 0x400 /* alarm monthly at someday */ 24 #define RT_ALARM_YAERLY 0x800 /* alarm yearly at a certain date */ 25 26 /* alarm control cmd */ 27 #define RT_ALARM_CTRL_MODIFY 1 /* modify alarm time or alarm flag */ 28 29 typedef struct rt_alarm *rt_alarm_t; 30 typedef void (*rt_alarm_callback_t)(rt_alarm_t alarm, time_t timestamp); 31 32 /* used for low level RTC driver */ 33 struct rt_rtc_wkalarm 34 { 35 rt_bool_t enable; /* 0 = alarm disabled, 1 = alarm enabled */ 36 rt_int32_t tm_sec; /* alarm at tm_sec */ 37 rt_int32_t tm_min; /* alarm at tm_min */ 38 rt_int32_t tm_hour; /* alarm at tm_hour */ 39 }; 40 41 struct rt_alarm 42 { 43 rt_list_t list; 44 rt_uint32_t flag; 45 rt_alarm_callback_t callback; 46 struct tm wktime; 47 }; 48 49 struct rt_alarm_setup 50 { 51 rt_uint32_t flag; /* alarm flag */ 52 struct tm wktime; /* when will the alarm wake up user */ 53 }; 54 55 struct rt_alarm_container 56 { 57 rt_list_t head; 58 struct rt_mutex mutex; 59 struct rt_event event; 60 struct rt_alarm *current; 61 }; 62 63 rt_alarm_t rt_alarm_create(rt_alarm_callback_t callback, 64 struct rt_alarm_setup *setup); 65 rt_err_t rt_alarm_control(rt_alarm_t alarm, int cmd, void *arg); 66 void rt_alarm_update(rt_device_t dev, rt_uint32_t event); 67 rt_err_t rt_alarm_delete(rt_alarm_t alarm); 68 rt_err_t rt_alarm_start(rt_alarm_t alarm); 69 rt_err_t rt_alarm_stop(rt_alarm_t alarm); 70 void rt_alarm_system_init(void); 71 72 #endif /* __ALARM_H__ */ 73