LibDriver RX8025T
Loading...
Searching...
No Matches
driver_rx8025t_alarm.c
Go to the documentation of this file.
1
36
38
39static rx8025t_handle_t gs_handle;
40static int8_t gs_time_zone = 0;
41
50{
51 if (rx8025t_irq_handler(&gs_handle) != 0)
52 {
53 return 1;
54 }
55
56 return 0;
57}
58
67uint8_t rx8025t_alarm_init(void (*callback)(uint8_t type))
68{
69 uint8_t res;
70
71 /* link functions */
79 DRIVER_RX8025T_LINK_RECEIVE_CALLBACK(&gs_handle, callback);
80
81 /* init rx8025t */
82 res = rx8025t_init(&gs_handle);
83 if (res != 0)
84 {
85 rx8025t_interface_debug_print("rx8025t: init failed.\n");
86
87 return 1;
88 }
89
90 /* start the clock */
91 res = rx8025t_start(&gs_handle);
92 if (res != 0)
93 {
94 rx8025t_interface_debug_print("rx8025t: start failed.\n");
95 (void)rx8025t_deinit(&gs_handle);
96
97 return 1;
98 }
99
100 /* set default temperature compensation interval */
102 if (res != 0)
103 {
104 rx8025t_interface_debug_print("rx8025t: set temperature compensation interval failed.\n");
105 (void)rx8025t_deinit(&gs_handle);
106
107 return 1;
108 }
109
110 /* set default update interrupt */
112 if (res != 0)
113 {
114 rx8025t_interface_debug_print("rx8025t: set update interrupt failed.\n");
115 (void)rx8025t_deinit(&gs_handle);
116
117 return 1;
118 }
119
120 /* set default update select */
122 if (res != 0)
123 {
124 rx8025t_interface_debug_print("rx8025t: set update select failed.\n");
125 (void)rx8025t_deinit(&gs_handle);
126
127 return 1;
128 }
129
130 /* disable timer interrupt */
132 if (res != 0)
133 {
134 rx8025t_interface_debug_print("rx8025t: set timer interrupt failed.\n");
135 (void)rx8025t_deinit(&gs_handle);
136
137 return 1;
138 }
139
140 /* enable alarm interrupt */
142 if (res != 0)
143 {
144 rx8025t_interface_debug_print("rx8025t: set alarm interrupt failed.\n");
145 (void)rx8025t_deinit(&gs_handle);
146
147 return 1;
148 }
149
150 /* clear flag */
151 res = rx8025t_clear_flag(&gs_handle);
152 if (res != 0)
153 {
154 rx8025t_interface_debug_print("rx8025t: clear flag failed.\n");
155 (void)rx8025t_deinit(&gs_handle);
156
157 return 1;
158 }
159
160 /* disable test */
161 res = rx8025t_set_test(&gs_handle, RX8025T_BOOL_FALSE);
162 if (res != 0)
163 {
164 rx8025t_interface_debug_print("rx8025t: set test failed.\n");
165 (void)rx8025t_deinit(&gs_handle);
166
167 return 1;
168 }
169
170 /* disable timer */
171 res = rx8025t_set_timer(&gs_handle, RX8025T_BOOL_FALSE);
172 if (res != 0)
173 {
174 rx8025t_interface_debug_print("rx8025t: set timer failed.\n");
175 (void)rx8025t_deinit(&gs_handle);
176
177 return 1;
178 }
179
180 return 0;
181}
182
191{
192 if (rx8025t_deinit(&gs_handle) != 0)
193 {
194 return 1;
195 }
196
197 return 0;
198}
199
215uint8_t rx8025t_alarm_config(uint8_t minute, uint8_t hour,
216 rx8025t_alarm_t date_week, uint8_t date, uint8_t week,
217 rx8025t_bool_t minute_mask, rx8025t_bool_t hour_mask, rx8025t_bool_t day_week_mask)
218{
219 uint8_t res;
220
221 /* set minute alarm */
222 res = rx8025t_set_minute_alarm(&gs_handle, minute);
223 if (res != 0)
224 {
225 return 1;
226 }
227
228 /* set hour alarm */
229 res = rx8025t_set_hour_alarm(&gs_handle, hour);
230 if (res != 0)
231 {
232 return 1;
233 }
234
235 /* set alarm day week */
236 res = rx8025t_set_alarm_day_week(&gs_handle, date_week);
237 if (res != 0)
238 {
239 return 1;
240 }
241
242 /* set date alarm */
243 res = rx8025t_set_date_alarm(&gs_handle, date);
244 if (res != 0)
245 {
246 return 1;
247 }
248
249 /* set week alarm */
250 res = rx8025t_set_week_alarm(&gs_handle, week);
251 if (res != 0)
252 {
253 return 1;
254 }
255
256 /* set minute alarm mask */
257 res = rx8025t_set_minute_alarm_mask(&gs_handle, minute_mask);
258 if (res != 0)
259 {
260 return 1;
261 }
262
263 /* set hour alarm mask */
264 res = rx8025t_set_hour_alarm_mask(&gs_handle, hour_mask);
265 if (res != 0)
266 {
267 return 1;
268 }
269
270 /* set week day alarm mask */
271 res = rx8025t_set_week_day_alarm_mask(&gs_handle, day_week_mask);
272 if (res != 0)
273 {
274 return 1;
275 }
276
277 return 0;
278}
279
289{
290 /* set time */
291 if (rx8025t_set_time(&gs_handle, t) != 0)
292 {
293 return 1;
294 }
295
296 return 0;
297}
298
307uint8_t rx8025t_alarm_set_timestamp(time_t timestamp)
308{
310 struct tm *timeptr;
311
312 /* convert times */
313 timestamp += (time_t)(gs_time_zone * 3600);
314 timeptr = localtime(&timestamp);
315 t.date = (uint8_t)timeptr->tm_mday;
316 t.hour = (uint8_t)timeptr->tm_hour;
317 t.minute = (uint8_t)timeptr->tm_min;
318 t.month = (uint8_t)timeptr->tm_mon + 1;
319 t.second = (uint8_t)timeptr->tm_sec;
320 if (timeptr->tm_wday == 0)
321 {
322 t.week = 7;
323 }
324 else
325 {
326 t.week = (uint8_t)timeptr->tm_wday;
327 }
328 t.year = (uint16_t)(timeptr->tm_year + 1900);
329
330 /* set time */
331 if (rx8025t_set_time(&gs_handle, &t) != 0)
332 {
333 return 1;
334 }
335
336 return 0;
337}
338
347{
348 gs_time_zone = zone;
349
350 return 0;
351}
352
362{
363 /* get time */
364 if (rx8025t_get_time(&gs_handle, t) != 0)
365 {
366 return 1;
367 }
368
369 return 0;
370}
371
380uint8_t rx8025t_alarm_get_timestamp(time_t *timestamp)
381{
383 struct tm timeptr;
384
385 /* get time */
386 if (rx8025t_get_time(&gs_handle, &t) != 0)
387 {
388 return 1;
389 }
390 timeptr.tm_year = t.year - 1900;
391 timeptr.tm_mon = t.month - 1;
392 timeptr.tm_wday = t.week;
393 timeptr.tm_mday = t.date;
394 timeptr.tm_hour = t.hour;
395 timeptr.tm_min = t.minute;
396 timeptr.tm_sec = t.second;
397
398 /* make time */
399 *timestamp = mktime(&timeptr) - gs_time_zone * 3600;
400
401 return 0;
402}
403
412{
413 *zone = gs_time_zone;
414
415 return 0;
416}
417
427uint8_t rx8025t_alarm_get_ascii_time(char *buf, uint8_t len)
428{
430
431 /* get time */
432 if (rx8025t_get_time(&gs_handle, &t) != 0)
433 {
434 return 1;
435 }
436
437 (void)snprintf(buf, len, "%04d-%02d-%02d %02d:%02d:%02d %d.\n", t.year, t.month, t.date, t.hour, t.minute, t.second, t.week);
438
439 return 0;
440}
441
450uint8_t rx8025t_alarm_read_ram(uint8_t *data)
451{
452 if (rx8025t_get_ram(&gs_handle, data) != 0)
453 {
454 return 1;
455 }
456
457 return 0;
458}
459
468uint8_t rx8025t_alarm_write_ram(uint8_t data)
469{
470 if (rx8025t_set_ram(&gs_handle, data) != 0)
471 {
472 return 1;
473 }
474
475 return 0;
476}
driver rx8025t alarm header file
uint8_t rx8025t_set_time(rx8025t_handle_t *handle, rx8025t_time_t *t)
set the current time
uint8_t rx8025t_set_update_interrupt(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable update interrupt
uint8_t rx8025t_set_minute_alarm_mask(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable minute alarm mask
uint8_t rx8025t_set_ram(rx8025t_handle_t *handle, uint8_t data)
set ram
uint8_t rx8025t_set_timer_interrupt(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable timer interrupt
uint8_t rx8025t_set_hour_alarm(rx8025t_handle_t *handle, uint8_t hour)
set hour alarm
uint8_t rx8025t_set_alarm_interrupt(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable alarm interrupt
uint8_t rx8025t_start(rx8025t_handle_t *handle)
start
uint8_t rx8025t_init(rx8025t_handle_t *handle)
initialize the chip
uint8_t rx8025t_clear_flag(rx8025t_handle_t *handle)
clear flag
rx8025t_alarm_t
rx8025t alarm enumeration definition
uint8_t rx8025t_set_update_select(rx8025t_handle_t *handle, rx8025t_update_select_t select)
set update select
uint8_t rx8025t_get_ram(rx8025t_handle_t *handle, uint8_t *data)
get ram
struct rx8025t_time_s rx8025t_time_t
rx8025t time structure definition
uint8_t rx8025t_set_week_alarm(rx8025t_handle_t *handle, uint8_t week)
set week alarm
uint8_t rx8025t_set_test(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable test
uint8_t rx8025t_set_hour_alarm_mask(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable hour alarm mask
uint8_t rx8025t_get_time(rx8025t_handle_t *handle, rx8025t_time_t *t)
get the current time
uint8_t rx8025t_set_week_day_alarm_mask(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable week day alarm mask
uint8_t rx8025t_set_temperature_compensation_interval(rx8025t_handle_t *handle, rx8025t_temperature_compensation_interval_t interval)
set the temperature compensation interval
uint8_t rx8025t_set_alarm_day_week(rx8025t_handle_t *handle, rx8025t_alarm_t alarm)
set alarm day week
uint8_t rx8025t_irq_handler(rx8025t_handle_t *handle)
irq handler
rx8025t_bool_t
rx8025t bool enumeration definition
uint8_t rx8025t_set_minute_alarm(rx8025t_handle_t *handle, uint8_t minute)
set minute alarm
uint8_t rx8025t_set_timer(rx8025t_handle_t *handle, rx8025t_bool_t enable)
enable or disable timer
struct rx8025t_handle_s rx8025t_handle_t
rx8025t handle structure definition
uint8_t rx8025t_set_date_alarm(rx8025t_handle_t *handle, uint8_t date)
set date alarm
uint8_t rx8025t_deinit(rx8025t_handle_t *handle)
close the chip
@ RX8025T_BOOL_TRUE
@ RX8025T_BOOL_FALSE
uint8_t rx8025t_alarm_get_ascii_time(char *buf, uint8_t len)
alarm example get the ascii time
uint8_t rx8025t_alarm_get_timestamp(time_t *timestamp)
alarm example get the time in a unix timestamp
uint8_t rx8025t_alarm_get_timestamp_time_zone(int8_t *zone)
alarm example get the local time zone
uint8_t rx8025t_alarm_set_timestamp_time_zone(int8_t zone)
alarm example set the local time zone
uint8_t rx8025t_alarm_set_timestamp(time_t timestamp)
alarm example set the time by a unix timestamp
uint8_t rx8025t_alarm_get_time(rx8025t_time_t *t)
alarm example get the time
uint8_t rx8025t_alarm_write_ram(uint8_t data)
alarm example write ram
#define RX8025T_ALARM_DEFAULT_UPDATE_SELECT
uint8_t rx8025t_alarm_init(void(*callback)(uint8_t type))
alarm example init
uint8_t rx8025t_alarm_read_ram(uint8_t *data)
alarm example read ram
uint8_t rx8025t_alarm_deinit(void)
alarm example deinit
uint8_t rx8025t_alarm_irq_handler(void)
alarm irq
#define RX8025T_ALARM_DEFAULT_INTERRUPT_UPDATE
uint8_t rx8025t_alarm_config(uint8_t minute, uint8_t hour, rx8025t_alarm_t date_week, uint8_t date, uint8_t week, rx8025t_bool_t minute_mask, rx8025t_bool_t hour_mask, rx8025t_bool_t day_week_mask)
alarm example config
#define RX8025T_ALARM_DEFAULT_TEMPERATURE_COMPENSATION_INTERVAL
rx8025t alarm example default definition
uint8_t rx8025t_alarm_set_time(rx8025t_time_t *t)
alarm example set the time
uint8_t rx8025t_interface_iic_init(void)
interface iic bus init
uint8_t rx8025t_interface_iic_deinit(void)
interface iic bus deinit
uint8_t rx8025t_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
void rx8025t_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t rx8025t_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
void rx8025t_interface_delay_ms(uint32_t ms)
interface delay ms