alarm.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. #ifndef __ALARM_H__
  11. #define __ALARM_H__
  12. #include <time.h>
  13. #define RT_ALARM_TM_NOW -1 /* set the alarm tm_day,tm_mon,tm_sec,etc.
  14. to now.we also call it "don't care" value */
  15. /* alarm flags */
  16. #define RT_ALARM_ONESHOT 0x000 /* only alarm onece */
  17. #define RT_ALARM_DAILY 0x100 /* alarm everyday */
  18. #define RT_ALARM_WEEKLY 0x200 /* alarm weekly at Monday or Friday etc. */
  19. #define RT_ALARM_MONTHLY 0x400 /* alarm monthly at someday */
  20. #define RT_ALARM_YAERLY 0x800 /* alarm yearly at a certain date */
  21. /* alarm control cmd */
  22. #define RT_ALARM_CTRL_MODIFY 1 /* modify alarm time or alarm flag */
  23. typedef struct rt_alarm *rt_alarm_t;
  24. typedef void (*rt_alarm_callback_t)(rt_alarm_t alarm, time_t timestamp);
  25. /* used for low level RTC driver */
  26. struct rt_rtc_wkalarm
  27. {
  28. rt_bool_t enable; /* 0 = alarm disabled, 1 = alarm enabled */
  29. rt_int32_t tm_sec; /* alarm at tm_sec */
  30. rt_int32_t tm_min; /* alarm at tm_min */
  31. rt_int32_t tm_hour; /* alarm at tm_hour */
  32. };
  33. struct rt_alarm
  34. {
  35. rt_list_t list;
  36. rt_uint32_t flag;
  37. rt_alarm_callback_t callback;
  38. struct tm wktime;
  39. };
  40. struct rt_alarm_setup
  41. {
  42. rt_uint32_t flag; /* alarm flag */
  43. struct tm wktime; /* when will the alarm wake up user */
  44. };
  45. struct rt_alarm_container
  46. {
  47. rt_list_t head;
  48. struct rt_mutex mutex;
  49. struct rt_event event;
  50. struct rt_alarm *current;
  51. };
  52. rt_alarm_t rt_alarm_create(rt_alarm_callback_t callback,
  53. struct rt_alarm_setup *setup);
  54. rt_err_t rt_alarm_control(rt_alarm_t alarm, int cmd, void *arg);
  55. void rt_alarm_update(rt_device_t dev, rt_uint32_t event);
  56. rt_err_t rt_alarm_delete(rt_alarm_t alarm);
  57. rt_err_t rt_alarm_start(rt_alarm_t alarm);
  58. rt_err_t rt_alarm_stop(rt_alarm_t alarm);
  59. void rt_alarm_system_init(void);
  60. #endif /* __ALARM_H__ */