123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- #ifndef _RTC_H_
- #define _RTC_H_
- #include <zephyr/types.h>
- #include <device.h>
- #include <sys/util.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- struct rtc_time {
- uint8_t tm_sec;
- uint8_t tm_min;
- uint8_t tm_hour;
- uint8_t tm_mday;
- uint8_t tm_mon;
- uint8_t tm_wday;
- uint16_t tm_year;
- uint16_t tm_ms;
- };
- void rtc_time_to_tm(uint32_t time, struct rtc_time *tm);
- int rtc_valid_tm(struct rtc_time *tm);
- int rtc_tm_to_time(struct rtc_time *tm, uint32_t *time);
- void print_rtc_time(struct rtc_time *tm);
- int rtc_month_days(unsigned int month, unsigned int year);
- struct rtc_alarm_config {
- struct rtc_time alarm_time;
- void (*cb_fn)(const void *cb_data);
- const void *cb_data;
- };
- struct rtc_alarm_period_config {
- uint16_t tm_msec;
- uint8_t tm_sec;
- void (*cb_fn)(const void *cb_data);
- const void *cb_data;
- };
- struct rtc_alarm_status {
- struct rtc_time alarm_time;
- bool is_on;
- };
- struct rtc_driver_api {
- void (*enable)(const struct device *dev);
- void (*disable)(const struct device *dev);
- int (*get_time)(const struct device *dev, struct rtc_time *tm);
- int (*set_time)(const struct device *dev, const struct rtc_time *tm);
- int (*set_alarm)(const struct device *dev, struct rtc_alarm_config *config, bool enable);
- int (*set_period_alarm)(const struct device *dev, struct rtc_alarm_period_config *config, bool enable);
- int (*get_alarm)(const struct device *dev, struct rtc_alarm_status *sts);
- bool (*is_alarm_wakeup)(const struct device *dev);
- };
- static inline void rtc_enable(const struct device *dev)
- {
- const struct rtc_driver_api *api = dev->api;
- api->enable(dev);
- }
- static inline void rtc_disable(const struct device *dev)
- {
- const struct rtc_driver_api *api = dev->api;
- api->disable(dev);
- }
- static inline int rtc_get_time(const struct device *dev, struct rtc_time *tm)
- {
- const struct rtc_driver_api *api = dev->api;
- return api->get_time(dev, tm);
- }
- static inline int rtc_set_time(const struct device *dev, const struct rtc_time *tm)
- {
- const struct rtc_driver_api *api = dev->api;
- return api->set_time(dev, tm);
- }
- static inline int rtc_set_alarm(const struct device *dev, struct rtc_alarm_config *config, bool enable)
- {
- const struct rtc_driver_api *api = dev->api;
- return api->set_alarm(dev, config, enable);
- }
- static inline int rtc_set_period_alarm(const struct device *dev,
- struct rtc_alarm_period_config *config, bool enable)
- {
- const struct rtc_driver_api *api = dev->api;
- return api->set_period_alarm(dev, config, enable);
- }
- static inline int rtc_get_alarm(const struct device *dev, struct rtc_alarm_status *sts)
- {
- const struct rtc_driver_api *api = dev->api;
- return api->get_alarm(dev, sts);
- }
- static inline bool rtc_is_alarm_wakeup(const struct device *dev)
- {
- struct rtc_driver_api *api = (struct rtc_driver_api *)dev->api;
- return api->is_alarm_wakeup(dev);
- }
- #ifdef __cplusplus
- }
- #endif
- #endif
|