xref: /nrf52832-nimble/rt-thread/components/drivers/include/drivers/alarm.h (revision 104654410c56c573564690304ae786df310c91fc)
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