MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / alarm_set

Function alarm_set

components/drivers/rtc/dev_alarm.c:50–95  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

48}
49
50static rt_err_t alarm_set(struct rt_alarm *alarm)
51{
52 rt_device_t device;
53 struct rt_rtc_wkalarm wkalarm;
54 rt_err_t ret;
55
56 device = rt_device_find("rtc");
57
58 if (device == RT_NULL)
59 {
60 return (RT_ERROR);
61 }
62
63 if (alarm->flag & RT_ALARM_STATE_START)
64 wkalarm.enable = RT_TRUE;
65 else
66 wkalarm.enable = RT_FALSE;
67
68 wkalarm.tm_sec = alarm->wktime.tm_sec;
69 wkalarm.tm_min = alarm->wktime.tm_min;
70 wkalarm.tm_hour = alarm->wktime.tm_hour;
71 wkalarm.tm_mday = alarm->wktime.tm_mday;
72 wkalarm.tm_mon = alarm->wktime.tm_mon;
73 wkalarm.tm_year = alarm->wktime.tm_year;
74
75 ret = rt_device_control(device, RT_DEVICE_CTRL_RTC_SET_ALARM, &wkalarm);
76 if ((ret == RT_EOK) && wkalarm.enable)
77 {
78 ret = rt_device_control(device, RT_DEVICE_CTRL_RTC_GET_ALARM, &wkalarm);
79 if (ret == RT_EOK)
80 {
81 /*
82 some RTC device like RX8025,it's alarms precision is 1 minute.
83 in this case,low level RTC driver should set wkalarm->tm_sec to 0.
84 */
85 alarm->wktime.tm_sec = wkalarm.tm_sec;
86 alarm->wktime.tm_min = wkalarm.tm_min;
87 alarm->wktime.tm_hour = wkalarm.tm_hour;
88 alarm->wktime.tm_mday = wkalarm.tm_mday;
89 alarm->wktime.tm_mon = wkalarm.tm_mon;
90 alarm->wktime.tm_year = wkalarm.tm_year;
91 }
92 }
93
94 return (ret);
95}
96
97static void alarm_wakeup(struct rt_alarm *alarm, struct tm *now)
98{

Callers 5

alarm_wakeupFunction · 0.85
alarm_updateFunction · 0.85
rt_alarm_startFunction · 0.85
rt_alarm_stopFunction · 0.85
rt_alarm_deleteFunction · 0.85

Calls 2

rt_device_findFunction · 0.85
rt_device_controlFunction · 0.85

Tested by

no test coverage detected