1 /* 2 * Copyright (c) 2006-2023, 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 * 2013-05-17 aozima initial alarm event & mutex in system init. 10 * 2020-10-15 zhangsz add alarm flags hour minute second. 11 */ 12 13 #ifndef __DEV_ALARM_H__ 14 #define __DEV_ALARM_H__ 15 16 #include <sys/time.h> 17 #include <rtdef.h> 18 19 #define RT_ALARM_TM_NOW -1 /* set the alarm tm_day,tm_mon,tm_sec,etc. 20 to now.we also call it "don't care" value */ 21 22 /* alarm flags */ 23 #define RT_ALARM_ONESHOT 0x000 /* only alarm once */ 24 #define RT_ALARM_DAILY 0x100 /* alarm everyday */ 25 #define RT_ALARM_WEEKLY 0x200 /* alarm weekly at Monday or Friday etc. */ 26 #define RT_ALARM_MONTHLY 0x400 /* alarm monthly at someday */ 27 #define RT_ALARM_YAERLY 0x800 /* alarm yearly at a certain date */ 28 #define RT_ALARM_HOUR 0x1000 /* alarm each hour at a certain min:second */ 29 #define RT_ALARM_MINUTE 0x2000 /* alarm each minute at a certain second */ 30 #define RT_ALARM_SECOND 0x4000 /* alarm each second */ 31 32 #define RT_ALARM_STATE_INITED 0x02 33 #define RT_ALARM_STATE_START 0x01 34 #define RT_ALARM_STATE_STOP 0x00 35 36 /* alarm control cmd */ 37 #define RT_ALARM_CTRL_MODIFY 1 /* modify alarm time or alarm flag */ 38 39 typedef struct rt_alarm *rt_alarm_t; 40 typedef void (*rt_alarm_callback_t)(rt_alarm_t alarm, time_t timestamp); 41 42 struct rt_alarm 43 { 44 rt_list_t list; 45 rt_uint32_t flag; 46 rt_alarm_callback_t callback; 47 struct tm wktime; 48 49 void *user_data; 50 }; 51 52 struct rt_alarm_setup 53 { 54 rt_uint32_t flag; /* alarm flag */ 55 struct tm wktime; /* when will the alarm wake up user */ 56 }; 57 58 struct rt_alarm_container 59 { 60 rt_list_t head; 61 struct rt_mutex mutex; 62 struct rt_event event; 63 struct rt_alarm *current; 64 }; 65 66 rt_alarm_t rt_alarm_create(rt_alarm_callback_t callback, 67 struct rt_alarm_setup *setup); 68 rt_err_t rt_alarm_control(rt_alarm_t alarm, int cmd, void *arg); 69 void rt_alarm_update(rt_device_t dev, rt_uint32_t event); 70 rt_err_t rt_alarm_delete(rt_alarm_t alarm); 71 rt_err_t rt_alarm_start(rt_alarm_t alarm); 72 rt_err_t rt_alarm_stop(rt_alarm_t alarm); 73 int rt_alarm_system_init(void); 74 75 #endif /* __DEV_ALARM_H__ */ 76