LibDriver DS3231
Loading...
Searching...
No Matches
driver_ds3231_register_test.c
Go to the documentation of this file.
1
37
39#include <stdlib.h>
40
41static ds3231_handle_t gs_handle;
42
51{
52 uint8_t res;
53 int8_t offset, offset_check;
54 uint8_t status;
55 float o, o_check;
56 ds3231_info_t info;
57 ds3231_time_t time_in, time_out;
60 ds3231_bool_t enable;
61 ds3231_pin_t pin;
62
63 /* link functions */
72
73 /* get ds3231 info */
74 res = ds3231_info(&info);
75 if (res != 0)
76 {
77 ds3231_interface_debug_print("ds3231: get info failed.\n");
78
79 return 1;
80 }
81 else
82 {
83 /* print ds3231 info */
84 ds3231_interface_debug_print("ds3231: chip is %s.\n", info.chip_name);
85 ds3231_interface_debug_print("ds3231: manufacturer is %s.\n", info.manufacturer_name);
86 ds3231_interface_debug_print("ds3231: interface is %s.\n", info.interface);
87 ds3231_interface_debug_print("ds3231: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
88 ds3231_interface_debug_print("ds3231: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
89 ds3231_interface_debug_print("ds3231: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
90 ds3231_interface_debug_print("ds3231: max current is %0.2fmA.\n", info.max_current_ma);
91 ds3231_interface_debug_print("ds3231: max temperature is %0.1fC.\n", info.temperature_max);
92 ds3231_interface_debug_print("ds3231: min temperature is %0.1fC.\n", info.temperature_min);
93 }
94
95 /* start register test */
96 ds3231_interface_debug_print("ds3231: start register test.\n");
97
98 /* init ds3231 */
99 res = ds3231_init(&gs_handle);
100 if (res != 0)
101 {
102 ds3231_interface_debug_print("ds3231: init failed.\n");
103
104 return 1;
105 }
106
107 /* ds3231_set_time/ds3231_get_time test */
108 ds3231_interface_debug_print("ds3231: ds3231_set_time/ds3231_get_time test.\n");
109
110 /* 12H format */
111 time_in.format = DS3231_FORMAT_12H;
112 time_in.am_pm = DS3231_PM;
113 time_in.year = rand() % 100 + 2000;
114 time_in.month = rand() % 12 + 1;
115 time_in.date = rand() % 20 + 1;
116 time_in.date = rand() % 20 + 1;
117 time_in.week = rand() % 7 + 1;
118 time_in.hour = rand() % 11 + 1;
119 time_in.minute = rand() % 60;
120 time_in.second = rand() % 60;
121 ds3231_interface_debug_print("ds3231: set time %04d-%02d-%02d PM %02d:%02d:%02d %d.\n",
122 time_in.year, time_in.month, time_in.date,
123 time_in.hour, time_in.minute, time_in.second, time_in.week
124 );
125 res = ds3231_set_time(&gs_handle, &time_in);
126 if (res != 0)
127 {
128 ds3231_interface_debug_print("ds3231: set time failed.\n");
129 (void)ds3231_deinit(&gs_handle);
130
131 return 1;
132 }
133 res = ds3231_get_time(&gs_handle, &time_out);
134 if (res != 0)
135 {
136 ds3231_interface_debug_print("ds3231: get time failed.\n");
137 (void)ds3231_deinit(&gs_handle);
138
139 return 1;
140 }
141 ds3231_interface_debug_print("ds3231: check time %s.\n", (memcmp(&time_in, &time_out, sizeof(ds3231_time_t))==0)?"ok":"error");
142
143 /* 24H format */
144 time_in.format = DS3231_FORMAT_24H;
145 time_in.am_pm = DS3231_AM;
146 time_in.year = rand() % 100 + 2090;
147 time_in.month = rand() % 12 + 1;
148 time_in.date = rand() % 20 + 1;
149 time_in.week = rand() % 7 + 1;
150 time_in.hour = rand() % 24;
151 time_in.minute = rand() % 60;
152 time_in.second = rand() % 60;
153 ds3231_interface_debug_print("ds3231: set time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
154 time_in.year, time_in.month, time_in.date,
155 time_in.hour, time_in.minute, time_in.second, time_in.week
156 );
157 res = ds3231_set_time(&gs_handle, &time_in);
158 if (res != 0)
159 {
160 ds3231_interface_debug_print("ds3231: set time failed.\n");
161 (void)ds3231_deinit(&gs_handle);
162
163 return 1;
164 }
165 res = ds3231_get_time(&gs_handle, &time_out);
166 if (res != 0)
167 {
168 ds3231_interface_debug_print("ds3231: get time failed.\n");
169 (void)ds3231_deinit(&gs_handle);
170
171 return 1;
172 }
173 ds3231_interface_debug_print("ds3231: check time %s.\n", (memcmp(&time_in, &time_out, sizeof(ds3231_time_t))==0)?"ok":"error");
174
175 /* ds3231_set_alarm1/ds3231_get_alarm1 test */
176 ds3231_interface_debug_print("ds3231: ds3231_set_alarm1/ds3231_get_alarm1 test.\n");
177
178 /* 12H format */
179 time_in.format = DS3231_FORMAT_12H;
180 time_in.am_pm = DS3231_PM;
181 time_in.year = 0;
182 time_in.month = 0;
183 time_in.week = rand() % 7 + 1;
184 time_in.date = 1;
185 time_in.hour = rand() % 11 + 1;
186 time_in.minute = rand() % 60;
187 time_in.second = rand() % 60;
188 ds3231_interface_debug_print("ds3231: set alarm1 time %04d-%02d-%02d PM %02d:%02d:%02d %d.\n",
189 time_in.year, time_in.month, time_in.date,
190 time_in.hour, time_in.minute, time_in.second, time_in.week
191 );
193 if (res != 0)
194 {
195 ds3231_interface_debug_print("ds3231: set alarm1 failed.\n");
196 (void)ds3231_deinit(&gs_handle);
197
198 return 1;
199 }
200 res = ds3231_get_alarm1(&gs_handle, &time_out, &mode1);
201 if (res != 0)
202 {
203 ds3231_interface_debug_print("ds3231: get alarm1 failed.\n");
204 (void)ds3231_deinit(&gs_handle);
205
206 return 1;
207 }
208 time_in.date = 0;
209 ds3231_interface_debug_print("ds3231: check alarm1 time %s.\n", (memcmp(&time_in, &time_out, sizeof(ds3231_time_t))==0)?"ok":"error");
210
211 /* 24H format */
212 time_in.format = DS3231_FORMAT_24H;
213 time_in.am_pm = DS3231_AM;
214 time_in.year = 0;
215 time_in.month = 0;
216 time_in.week = rand() % 7 + 1;
217 time_in.date = 1;
218 time_in.hour = rand() % 24;
219 time_in.minute = rand() % 60;
220 time_in.second = rand() % 60;
221 ds3231_interface_debug_print("ds3231: set alarm1 time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
222 time_in.year, time_in.month, time_in.date,
223 time_in.hour, time_in.minute, time_in.second, time_in.week
224 );
226 if (res != 0)
227 {
228 ds3231_interface_debug_print("ds3231: set alarm1 failed.\n");
229 (void)ds3231_deinit(&gs_handle);
230
231 return 1;
232 }
233 res = ds3231_get_alarm1(&gs_handle, &time_out, &mode1);
234 if (res != 0)
235 {
236 ds3231_interface_debug_print("ds3231: get alarm1 failed.\n");
237 (void)ds3231_deinit(&gs_handle);
238
239 return 1;
240 }
241 time_in.date = 0;
242 ds3231_interface_debug_print("ds3231: check alarm1 time %s.\n", (memcmp(&time_in, &time_out, sizeof(ds3231_time_t))==0)?"ok":"error");
243
244 /* ALARM1_MODE_ONCE_A_SECOND */
245 time_in.format = DS3231_FORMAT_24H;
246 time_in.am_pm = DS3231_AM;
247 time_in.year = 0;
248 time_in.month = 0;
249 time_in.week = rand() % 7 + 1;
250 time_in.date = rand() % 20 + 1;
251 time_in.hour = rand() % 24;
252 time_in.minute = rand() % 60;
253 time_in.second = rand() % 60;
254 ds3231_interface_debug_print("ds3231: set alarm1 time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
255 time_in.year, time_in.month, time_in.date,
256 time_in.hour, time_in.minute, time_in.second, time_in.week
257 );
258 res = ds3231_set_alarm1(&gs_handle, &time_in, DS3231_ALARM1_MODE_ONCE_A_SECOND);
259 if (res != 0)
260 {
261 ds3231_interface_debug_print("ds3231: set alarm1 failed.\n");
262 (void)ds3231_deinit(&gs_handle);
263
264 return 1;
265 }
266 ds3231_interface_debug_print("ds3231: set alarm1 mode ALARM1_MODE_ONCE_A_SECOND.\n");
267 res = ds3231_get_alarm1(&gs_handle, &time_out, &mode1);
268 if (res != 0)
269 {
270 ds3231_interface_debug_print("ds3231: get alarm1 failed.\n");
271 (void)ds3231_deinit(&gs_handle);
272
273 return 1;
274 }
275 ds3231_interface_debug_print("ds3231: check alarm1 mode %s.\n", (mode1 == DS3231_ALARM1_MODE_ONCE_A_SECOND)?"ok":"error");
276
277 /* ALARM1_MODE_SECOND_MATCH */
278 time_in.format = DS3231_FORMAT_24H;
279 time_in.am_pm = DS3231_AM;
280 time_in.year = 0;
281 time_in.month = 0;
282 time_in.week = rand() % 7 + 1;
283 time_in.date = rand() % 20 + 1;
284 time_in.hour = rand() % 24;
285 time_in.minute = rand() % 60;
286 time_in.second = rand() % 60;
287 ds3231_interface_debug_print("ds3231: set alarm1 time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
288 time_in.year, time_in.month, time_in.date,
289 time_in.hour, time_in.minute, time_in.second, time_in.week
290 );
291 res = ds3231_set_alarm1(&gs_handle, &time_in, DS3231_ALARM1_MODE_SECOND_MATCH);
292 if (res != 0)
293 {
294 ds3231_interface_debug_print("ds3231: set alarm1 failed.\n");
295 (void)ds3231_deinit(&gs_handle);
296
297 return 1;
298 }
299 ds3231_interface_debug_print("ds3231: set alarm1 mode ALARM1_MODE_SECOND_MATCH.\n");
300 res = ds3231_get_alarm1(&gs_handle, &time_out, &mode1);
301 if (res != 0)
302 {
303 ds3231_interface_debug_print("ds3231: get alarm1 failed.\n");
304 (void)ds3231_deinit(&gs_handle);
305
306 return 1;
307 }
308 ds3231_interface_debug_print("ds3231: check alarm1 mode %s.\n", (mode1 == DS3231_ALARM1_MODE_SECOND_MATCH)?"ok":"error");
309
310 /* ALARM1_MODE_MINUTE_SECOND_MATCH */
311 time_in.format = DS3231_FORMAT_24H;
312 time_in.am_pm = DS3231_AM;
313 time_in.year = 0;
314 time_in.month = 0;
315 time_in.week = rand() % 7 + 1;
316 time_in.date = rand() % 20 + 1;
317 time_in.hour = rand() % 24;
318 time_in.minute = rand() % 60;
319 time_in.second = rand() % 60;
320 ds3231_interface_debug_print("ds3231: set alarm1 time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
321 time_in.year, time_in.month, time_in.date,
322 time_in.hour, time_in.minute, time_in.second, time_in.week
323 );
325 if (res != 0)
326 {
327 ds3231_interface_debug_print("ds3231: set alarm1 failed.\n");
328 (void)ds3231_deinit(&gs_handle);
329
330 return 1;
331 }
332 ds3231_interface_debug_print("ds3231: set alarm1 mode ALARM1_MODE_MINUTE_SECOND_MATCH.\n");
333 res = ds3231_get_alarm1(&gs_handle, &time_out, &mode1);
334 if (res != 0)
335 {
336 ds3231_interface_debug_print("ds3231: get alarm1 failed.\n");
337 (void)ds3231_deinit(&gs_handle);
338
339 return 1;
340 }
341 ds3231_interface_debug_print("ds3231: check alarm1 mode %s.\n", (mode1 == DS3231_ALARM1_MODE_MINUTE_SECOND_MATCH)?"ok":"error");
342
343 /* ALARM1_MODE_HOUR_MINUTE_SECOND_MATCH */
344 time_in.format = DS3231_FORMAT_24H;
345 time_in.am_pm = DS3231_AM;
346 time_in.year = 0;
347 time_in.month = 0;
348 time_in.week = rand() % 7 + 1;
349 time_in.date = rand() % 20 + 1;
350 time_in.hour = rand() % 24;
351 time_in.minute = rand() % 60;
352 time_in.second = rand() % 60;
353 ds3231_interface_debug_print("ds3231: set alarm1 time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
354 time_in.year, time_in.month, time_in.date,
355 time_in.hour, time_in.minute, time_in.second, time_in.week
356 );
358 if (res != 0)
359 {
360 ds3231_interface_debug_print("ds3231: set alarm1 failed.\n");
361 (void)ds3231_deinit(&gs_handle);
362
363 return 1;
364 }
365 ds3231_interface_debug_print("ds3231: set alarm1 mode ALARM1_MODE_HOUR_MINUTE_SECOND_MATCH.\n");
366 res = ds3231_get_alarm1(&gs_handle, &time_out, &mode1);
367 if (res != 0)
368 {
369 ds3231_interface_debug_print("ds3231: get alarm1 failed.\n");
370 (void)ds3231_deinit(&gs_handle);
371
372 return 1;
373 }
374 ds3231_interface_debug_print("ds3231: check alarm1 mode %s.\n", (mode1 == DS3231_ALARM1_MODE_HOUR_MINUTE_SECOND_MATCH)?"ok":"error");
375
376 /* DS3231_ALARM1_MODE_DATE_HOUR_MINUTE_SECOND_MATCH */
377 time_in.format = DS3231_FORMAT_24H;
378 time_in.am_pm = DS3231_AM;
379 time_in.year = 0;
380 time_in.month = 0;
381 time_in.week = rand() % 7 + 1;
382 time_in.date = rand() % 20 + 1;
383 time_in.hour = rand() % 24;
384 time_in.minute = rand() % 60;
385 time_in.second = rand() % 60;
386 ds3231_interface_debug_print("ds3231: set alarm1 time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
387 time_in.year, time_in.month, time_in.date,
388 time_in.hour, time_in.minute, time_in.second, time_in.week
389 );
391 if (res != 0)
392 {
393 ds3231_interface_debug_print("ds3231: set alarm1 failed.\n");
394 (void)ds3231_deinit(&gs_handle);
395
396 return 1;
397 }
398 ds3231_interface_debug_print("ds3231: set alarm1 mode ALARM1_MODE_DATE_HOUR_MINUTE_SECOND_MATCH.\n");
399 res = ds3231_get_alarm1(&gs_handle, &time_out, &mode1);
400 if (res != 0)
401 {
402 ds3231_interface_debug_print("ds3231: get alarm1 failed.\n");
403 (void)ds3231_deinit(&gs_handle);
404
405 return 1;
406 }
407 ds3231_interface_debug_print("ds3231: check alarm1 mode %s.\n", (mode1 == DS3231_ALARM1_MODE_DATE_HOUR_MINUTE_SECOND_MATCH)?"ok":"error");
408
409 /* DS3231_ALARM1_MODE_WEEK_HOUR_MINUTE_SECOND_MATCH */
410 time_in.format = DS3231_FORMAT_24H;
411 time_in.am_pm = DS3231_AM;
412 time_in.year = 0;
413 time_in.month = 0;
414 time_in.week = rand() % 7 + 1;
415 time_in.date = rand() % 20 + 1;
416 time_in.hour = rand() % 24;
417 time_in.minute = rand() % 60;
418 time_in.second = rand() % 60;
419 ds3231_interface_debug_print("ds3231: set alarm1 time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
420 time_in.year, time_in.month, time_in.date,
421 time_in.hour, time_in.minute, time_in.second, time_in.week
422 );
424 if (res != 0)
425 {
426 ds3231_interface_debug_print("ds3231: set alarm1 failed.\n");
427 (void)ds3231_deinit(&gs_handle);
428
429 return 1;
430 }
431 ds3231_interface_debug_print("ds3231: set alarm1 mode ALARM1_MODE_WEEK_HOUR_MINUTE_SECOND_MATCH.\n");
432 res = ds3231_get_alarm1(&gs_handle, &time_out, &mode1);
433 if (res != 0)
434 {
435 ds3231_interface_debug_print("ds3231: get alarm1 failed.\n");
436 (void)ds3231_deinit(&gs_handle);
437
438 return 1;
439 }
440 ds3231_interface_debug_print("ds3231: check alarm1 mode %s.\n", (mode1 == DS3231_ALARM1_MODE_WEEK_HOUR_MINUTE_SECOND_MATCH)?"ok":"error");
441
442 /* ds3231_set_alarm2/ds3231_get_alarm2 test */
443 ds3231_interface_debug_print("ds3231: ds3231_set_alarm2/ds3231_get_alarm2 test.\n");
444
445 /* 12H format */
446 time_in.format = DS3231_FORMAT_12H;
447 time_in.am_pm = DS3231_AM;
448 time_in.year = 0;
449 time_in.month = 0;
450 time_in.week = rand() % 7 + 1;
451 time_in.date = rand() % 20 + 1;
452 time_in.hour = rand() % 11 + 1;
453 time_in.minute = rand() % 60;
454 time_in.second = 0;
455 ds3231_interface_debug_print("ds3231: set alarm2 time %04d-%02d-%02d PM %02d:%02d:%02d %d.\n",
456 time_in.year, time_in.month, time_in.date,
457 time_in.hour, time_in.minute, time_in.second, time_in.week
458 );
460 if (res != 0)
461 {
462 ds3231_interface_debug_print("ds3231: set alarm2 failed.\n");
463 (void)ds3231_deinit(&gs_handle);
464
465 return 1;
466 }
467 res = ds3231_get_alarm2(&gs_handle, &time_out, &mode2);
468 if (res != 0)
469 {
470 ds3231_interface_debug_print("ds3231: get alarm2 failed.\n");
471 (void)ds3231_deinit(&gs_handle);
472
473 return 1;
474 }
475 time_in.date = 0;
476 ds3231_interface_debug_print("ds3231: check alarm2 time %s.\n", (memcmp(&time_in, &time_out, sizeof(ds3231_time_t))==0)?"ok":"error");
477
478 /* 24H format */
479 time_in.format = DS3231_FORMAT_24H;
480 time_in.am_pm = DS3231_AM;
481 time_in.year = 0;
482 time_in.month = 0;
483 time_in.week = rand() % 7 + 1;
484 time_in.date = rand() % 20 + 1;
485 time_in.hour = rand() % 24;
486 time_in.minute = rand() % 60;
487 time_in.second = 0;
488 ds3231_interface_debug_print("ds3231: set alarm2 time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
489 time_in.year, time_in.month, time_in.date,
490 time_in.hour, time_in.minute, time_in.second, time_in.week
491 );
493 if (res != 0)
494 {
495 ds3231_interface_debug_print("ds3231: set alarm2 failed.\n");
496 (void)ds3231_deinit(&gs_handle);
497
498 return 1;
499 }
500 res = ds3231_get_alarm2(&gs_handle, &time_out, &mode2);
501 if (res != 0)
502 {
503 ds3231_interface_debug_print("ds3231: get alarm2 failed.\n");
504 (void)ds3231_deinit(&gs_handle);
505
506 return 1;
507 }
508 time_in.date = 0;
509 ds3231_interface_debug_print("ds3231: check alarm2 time %s.\n", (memcmp(&time_in, &time_out, sizeof(ds3231_time_t))==0)?"ok":"error");
510
511 /* DS3231_ALARM2_MODE_ONCE_A_MINUTE */
512 time_in.format = DS3231_FORMAT_24H;
513 time_in.am_pm = DS3231_AM;
514 time_in.year = 0;
515 time_in.month = 0;
516 time_in.week = rand() % 7 + 1;
517 time_in.date = rand() % 20 + 1;
518 time_in.hour = rand() % 24;
519 time_in.minute = rand() % 60;
520 time_in.second = 0;
521 ds3231_interface_debug_print("ds3231: set alarm2 time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
522 time_in.year, time_in.month, time_in.date,
523 time_in.hour, time_in.minute, time_in.second, time_in.week
524 );
525 res = ds3231_set_alarm2(&gs_handle, &time_in, DS3231_ALARM2_MODE_ONCE_A_MINUTE);
526 if (res != 0)
527 {
528 ds3231_interface_debug_print("ds3231: set alarm2 failed.\n");
529 (void)ds3231_deinit(&gs_handle);
530
531 return 1;
532 }
533 ds3231_interface_debug_print("ds3231: set mode ALARM2_MODE_ONCE_A_MINUTE.\n");
534 res = ds3231_get_alarm2(&gs_handle, &time_out, &mode2);
535 if (res != 0)
536 {
537 ds3231_interface_debug_print("ds3231: get alarm2 failed.\n");
538 (void)ds3231_deinit(&gs_handle);
539
540 return 1;
541 }
542 ds3231_interface_debug_print("ds3231: check alarm2 time %s.\n", (mode2 == DS3231_ALARM2_MODE_ONCE_A_MINUTE)?"ok":"error");
543
544 /* ALARM2_MODE_MINUTE_MATCH */
545 time_in.format = DS3231_FORMAT_24H;
546 time_in.am_pm = DS3231_AM;
547 time_in.year = 0;
548 time_in.month = 0;
549 time_in.week = rand() % 7 + 1;
550 time_in.date = rand() % 20 + 1;
551 time_in.hour = rand() % 24;
552 time_in.minute = rand() % 60;
553 time_in.second = 0;
554 ds3231_interface_debug_print("ds3231: set alarm2 time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
555 time_in.year, time_in.month, time_in.date,
556 time_in.hour, time_in.minute, time_in.second, time_in.week
557 );
558 res = ds3231_set_alarm2(&gs_handle, &time_in, DS3231_ALARM2_MODE_MINUTE_MATCH);
559 if (res != 0)
560 {
561 ds3231_interface_debug_print("ds3231: set alarm2 failed.\n");
562 (void)ds3231_deinit(&gs_handle);
563
564 return 1;
565 }
566 ds3231_interface_debug_print("ds3231: set mode ALARM2_MODE_MINUTE_MATCH.\n");
567 res = ds3231_get_alarm2(&gs_handle, &time_out, &mode2);
568 if (res != 0)
569 {
570 ds3231_interface_debug_print("ds3231: get alarm2 failed.\n");
571 (void)ds3231_deinit(&gs_handle);
572
573 return 1;
574 }
575 ds3231_interface_debug_print("ds3231: check alarm2 time %s.\n", (mode2 == DS3231_ALARM2_MODE_MINUTE_MATCH)?"ok":"error");
576
577 /* ALARM2_MODE_HOUR_MINUTE_MATCH */
578 time_in.format = DS3231_FORMAT_24H;
579 time_in.am_pm = DS3231_AM;
580 time_in.year = 0;
581 time_in.month = 0;
582 time_in.week = rand() % 7 + 1;
583 time_in.date = rand() % 20 + 1;
584 time_in.hour = rand() % 24;
585 time_in.minute = rand() % 60;
586 time_in.second = 0;
587 ds3231_interface_debug_print("ds3231: set alarm2 time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
588 time_in.year, time_in.month, time_in.date,
589 time_in.hour, time_in.minute, time_in.second, time_in.week
590 );
591 res = ds3231_set_alarm2(&gs_handle, &time_in, DS3231_ALARM2_MODE_HOUR_MINUTE_MATCH);
592 if (res != 0)
593 {
594 ds3231_interface_debug_print("ds3231: set alarm2 failed.\n");
595 (void)ds3231_deinit(&gs_handle);
596
597 return 1;
598 }
599 ds3231_interface_debug_print("ds3231: set mode ALARM2_MODE_HOUR_MINUTE_MATCH.\n");
600 res = ds3231_get_alarm2(&gs_handle, &time_out, &mode2);
601 if (res != 0)
602 {
603 ds3231_interface_debug_print("ds3231: get alarm2 failed.\n");
604 (void)ds3231_deinit(&gs_handle);
605
606 return 1;
607 }
608 ds3231_interface_debug_print("ds3231: check alarm2 time %s.\n", (mode2 == DS3231_ALARM2_MODE_HOUR_MINUTE_MATCH)?"ok":"error");
609
610 /* DS3231_ALARM2_MODE_DATE_HOUR_MINUTE_MATCH */
611 time_in.format = DS3231_FORMAT_24H;
612 time_in.am_pm = DS3231_AM;
613 time_in.year = 0;
614 time_in.month = 0;
615 time_in.week = rand() % 7 + 1;
616 time_in.date = rand() % 20 + 1;
617 time_in.hour = rand() % 24;
618 time_in.minute = rand() % 60;
619 time_in.second = 0;
620 ds3231_interface_debug_print("ds3231: set alarm2 time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
621 time_in.year, time_in.month, time_in.date,
622 time_in.hour, time_in.minute, time_in.second, time_in.week
623 );
625 if (res != 0)
626 {
627 ds3231_interface_debug_print("ds3231: set alarm2 failed.\n");
628 (void)ds3231_deinit(&gs_handle);
629
630 return 1;
631 }
632 ds3231_interface_debug_print("ds3231: set mode ALARM2_MODE_DATE_HOUR_MINUTE_MATCH.\n");
633 res = ds3231_get_alarm2(&gs_handle, &time_out, &mode2);
634 if (res != 0)
635 {
636 ds3231_interface_debug_print("ds3231: get alarm2 failed.\n");
637 (void)ds3231_deinit(&gs_handle);
638
639 return 1;
640 }
641 ds3231_interface_debug_print("ds3231: check alarm2 time %s.\n", (mode2 == DS3231_ALARM2_MODE_DATE_HOUR_MINUTE_MATCH)?"ok":"error");
642
643 /* DS3231_ALARM2_MODE_WEEK_HOUR_MINUTE_MATCH */
644 time_in.format = DS3231_FORMAT_24H;
645 time_in.am_pm = DS3231_AM;
646 time_in.year = 0;
647 time_in.month = 0;
648 time_in.week = rand() % 7 + 1;
649 time_in.date = rand() % 20 + 1;
650 time_in.hour = rand() % 24;
651 time_in.minute = rand() % 60;
652 time_in.second = 0;
653 ds3231_interface_debug_print("ds3231: set alarm2 time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
654 time_in.year, time_in.month, time_in.date,
655 time_in.hour, time_in.minute, time_in.second, time_in.week
656 );
658 if (res != 0)
659 {
660 ds3231_interface_debug_print("ds3231: set alarm2 failed.\n");
661 (void)ds3231_deinit(&gs_handle);
662
663 return 1;
664 }
665 ds3231_interface_debug_print("ds3231: set mode ALARM2_MODE_WEEK_HOUR_MINUTE_MATCH.\n");
666 res = ds3231_get_alarm2(&gs_handle, &time_out, &mode2);
667 if (res != 0)
668 {
669 ds3231_interface_debug_print("ds3231: get alarm2 failed.\n");
670 (void)ds3231_deinit(&gs_handle);
671
672 return 1;
673 }
674 ds3231_interface_debug_print("ds3231: check alarm2 time %s.\n", (mode2 == DS3231_ALARM2_MODE_WEEK_HOUR_MINUTE_MATCH)?"ok":"error");
675
676 /* ds3231_set_oscillator/ds3231_get_oscillator test */
677 ds3231_interface_debug_print("ds3231: ds3231_set_oscillator/ds3231_get_oscillator test.\n");
678
679 /* enable */
680 res = ds3231_set_oscillator(&gs_handle, DS3231_BOOL_TRUE);
681 if (res != 0)
682 {
683 ds3231_interface_debug_print("ds3231: set oscillator failed.\n");
684 (void)ds3231_deinit(&gs_handle);
685
686 return 1;
687 }
688 ds3231_interface_debug_print("ds3231: enable.\n");
689 res = ds3231_get_oscillator(&gs_handle, &enable);
690 if (res != 0)
691 {
692 ds3231_interface_debug_print("ds3231: get oscillator failed.\n");
693 (void)ds3231_deinit(&gs_handle);
694
695 return 1;
696 }
697 ds3231_interface_debug_print("ds3231: check bool %s.\n", (enable == DS3231_BOOL_TRUE)?"ok":"error");
698
699 /* disable */
700 res = ds3231_set_oscillator(&gs_handle, DS3231_BOOL_FALSE);
701 if (res != 0)
702 {
703 ds3231_interface_debug_print("ds3231: set oscillator failed.\n");
704 (void)ds3231_deinit(&gs_handle);
705
706 return 1;
707 }
708 ds3231_interface_debug_print("ds3231: disable.\n");
709 res = ds3231_get_oscillator(&gs_handle, &enable);
710 if (res != 0)
711 {
712 ds3231_interface_debug_print("ds3231: get oscillator failed.\n");
713 (void)ds3231_deinit(&gs_handle);
714
715 return 1;
716 }
717 ds3231_interface_debug_print("ds3231: check bool %s.\n", (enable == DS3231_BOOL_FALSE)?"ok":"error");
718
719 /* ds3231_set_alarm_interrupt/ds3231_get_alarm_interrupt */
720 ds3231_interface_debug_print("ds3231: ds3231_set_alarm_interrupt/ds3231_get_alarm_interrupt test.\n");
721
722 /* alarm1 enable*/
724 if (res != 0)
725 {
726 ds3231_interface_debug_print("ds3231: set alarm interrupt failed.\n");
727 (void)ds3231_deinit(&gs_handle);
728
729 return 1;
730 }
731 ds3231_interface_debug_print("ds3231: alarm1 enable.\n");
732 res = ds3231_get_alarm_interrupt(&gs_handle, DS3231_ALARM_1, &enable);
733 if (res != 0)
734 {
735 ds3231_interface_debug_print("ds3231: get alarm interrupt failed.\n");
736 (void)ds3231_deinit(&gs_handle);
737
738 return 1;
739 }
740 ds3231_interface_debug_print("ds3231: check alarm1 bool %s.\n", (enable == DS3231_BOOL_TRUE)?"ok":"error");
741
742 /* alarm1 disable*/
744 if (res != 0)
745 {
746 ds3231_interface_debug_print("ds3231: set alarm interrupt failed.\n");
747 (void)ds3231_deinit(&gs_handle);
748
749 return 1;
750 }
751 ds3231_interface_debug_print("ds3231: alarm1 disable.\n");
752 res = ds3231_get_alarm_interrupt(&gs_handle, DS3231_ALARM_1, &enable);
753 if (res != 0)
754 {
755 ds3231_interface_debug_print("ds3231: get alarm interrupt failed.\n");
756 (void)ds3231_deinit(&gs_handle);
757
758 return 1;
759 }
760 ds3231_interface_debug_print("ds3231: check alarm1 bool %s.\n", (enable == DS3231_BOOL_FALSE)?"ok":"error");
761
762 /* alarm2 enable*/
764 if (res != 0)
765 {
766 ds3231_interface_debug_print("ds3231: set alarm interrupt failed.\n");
767 (void)ds3231_deinit(&gs_handle);
768
769 return 1;
770 }
771 ds3231_interface_debug_print("ds3231: alarm2 enable.\n");
772 res = ds3231_get_alarm_interrupt(&gs_handle, DS3231_ALARM_2, &enable);
773 if (res != 0)
774 {
775 ds3231_interface_debug_print("ds3231: get alarm interrupt failed.\n");
776 (void)ds3231_deinit(&gs_handle);
777
778 return 1;
779 }
780 ds3231_interface_debug_print("ds3231: check alarm2 bool %s.\n", (enable == DS3231_BOOL_TRUE)?"ok":"error");
781
782 /* alarm2 disable*/
784 if (res != 0)
785 {
786 ds3231_interface_debug_print("ds3231: set alarm interrupt failed.\n");
787 (void)ds3231_deinit(&gs_handle);
788
789 return 1;
790 }
791 ds3231_interface_debug_print("ds3231: alarm2 disable.\n");
792 res = ds3231_get_alarm_interrupt(&gs_handle, DS3231_ALARM_2, &enable);
793 if (res != 0)
794 {
795 ds3231_interface_debug_print("ds3231: get alarm interrupt failed.\n");
796 (void)ds3231_deinit(&gs_handle);
797
798 return 1;
799 }
800 ds3231_interface_debug_print("ds3231: check alarm2 bool %s.\n", (enable == DS3231_BOOL_FALSE)?"ok":"error");
801
802 /* ds3231_set_pin/ds3231_get_pin */
803 ds3231_interface_debug_print("ds3231: ds3231_set_pin/ds3231_get_pin test.\n");
804
805 /* set square wave pin */
806 res = ds3231_set_pin(&gs_handle, DS3231_PIN_SQUARE_WAVE);
807 if (res != 0)
808 {
809 ds3231_interface_debug_print("ds3231: set pin failed.\n");
810 (void)ds3231_deinit(&gs_handle);
811
812 return 1;
813 }
814 ds3231_interface_debug_print("ds3231: set square wave pin.\n");
815 res = ds3231_get_pin(&gs_handle, &pin);
816 if (res != 0)
817 {
818 ds3231_interface_debug_print("ds3231: get pin failed.\n");
819 (void)ds3231_deinit(&gs_handle);
820
821 return 1;
822 }
823 ds3231_interface_debug_print("ds3231: check pin %s.\n", (pin == DS3231_PIN_SQUARE_WAVE)?"ok":"error");
824
825 /* set interrupt pin */
826 res = ds3231_set_pin(&gs_handle, DS3231_PIN_INTERRUPT);
827 if (res != 0)
828 {
829 ds3231_interface_debug_print("ds3231: set pin failed.\n");
830 (void)ds3231_deinit(&gs_handle);
831
832 return 1;
833 }
834 ds3231_interface_debug_print("ds3231: set interrupt pin.\n");
835 res = ds3231_get_pin(&gs_handle, &pin);
836 if (res != 0)
837 {
838 ds3231_interface_debug_print("ds3231: get pin failed.\n");
839 (void)ds3231_deinit(&gs_handle);
840
841 return 1;
842 }
843 ds3231_interface_debug_print("ds3231: check pin %s.\n", (pin == DS3231_PIN_INTERRUPT)?"ok":"error");
844
845 /* ds3231_set_square_wave/ds3231_get_square_wave */
846 ds3231_interface_debug_print("ds3231: ds3231_set_square_wave/ds3231_get_square_wave test.\n");
847
848 /* enable */
849 res = ds3231_set_square_wave(&gs_handle, DS3231_BOOL_TRUE);
850 if (res != 0)
851 {
852 ds3231_interface_debug_print("ds3231: set square wave failed.\n");
853 (void)ds3231_deinit(&gs_handle);
854
855 return 1;
856 }
857 ds3231_interface_debug_print("ds3231: set enable.\n");
858 res = ds3231_get_square_wave(&gs_handle, &enable);
859 if (res != 0)
860 {
861 ds3231_interface_debug_print("ds3231: get square wave failed.\n");
862 (void)ds3231_deinit(&gs_handle);
863
864 return 1;
865 }
866 ds3231_interface_debug_print("ds3231: check bool %s.\n", (enable == DS3231_BOOL_TRUE)?"ok":"error");
867
868 /* disable */
869 res = ds3231_set_square_wave(&gs_handle, DS3231_BOOL_FALSE);
870 if (res != 0)
871 {
872 ds3231_interface_debug_print("ds3231: set square wave failed.\n");
873 (void)ds3231_deinit(&gs_handle);
874
875 return 1;
876 }
877 ds3231_interface_debug_print("ds3231: set disable.\n");
878 res = ds3231_get_square_wave(&gs_handle, &enable);
879 if (res != 0)
880 {
881 ds3231_interface_debug_print("ds3231: get square wave failed.\n");
882 (void)ds3231_deinit(&gs_handle);
883
884 return 1;
885 }
886 ds3231_interface_debug_print("ds3231: check bool %s.\n", (enable == DS3231_BOOL_FALSE)?"ok":"error");
887
888 /* ds3231_set_32khz_output/ds3231_get_32khz_output */
889 ds3231_interface_debug_print("ds3231: ds3231_set_32khz_output/ds3231_get_32khz_output test.\n");
890
891 /* enable */
892 res = ds3231_set_32khz_output(&gs_handle, DS3231_BOOL_TRUE);
893 if (res != 0)
894 {
895 ds3231_interface_debug_print("ds3231: set 32khz output failed.\n");
896 (void)ds3231_deinit(&gs_handle);
897
898 return 1;
899 }
900 ds3231_interface_debug_print("ds3231: enable.\n");
901 res = ds3231_get_32khz_output(&gs_handle, &enable);
902 if (res != 0)
903 {
904 ds3231_interface_debug_print("ds3231: get 32khz output failed.\n");
905 (void)ds3231_deinit(&gs_handle);
906
907 return 1;
908 }
909 ds3231_interface_debug_print("ds3231: check bool %s.\n", (enable == DS3231_BOOL_TRUE)?"ok":"error");
910
911 /* disable */
913 if (res != 0)
914 {
915 ds3231_interface_debug_print("ds3231: set 32khz output failed.\n");
916 (void)ds3231_deinit(&gs_handle);
917
918 return 1;
919 }
920 ds3231_interface_debug_print("ds3231: disable.\n");
921 res = ds3231_get_32khz_output(&gs_handle, &enable);
922 if (res != 0)
923 {
924 ds3231_interface_debug_print("ds3231: get 32khz output failed.\n");
925 (void)ds3231_deinit(&gs_handle);
926
927 return 1;
928 }
929 ds3231_interface_debug_print("ds3231: check bool %s.\n", (enable == DS3231_BOOL_FALSE)?"ok":"error");
930
931 /* ds3231_set_aging_offset/ds3231_get_aging_offset */
932 ds3231_interface_debug_print("ds3231: ds3231_set_aging_offset/ds3231_get_aging_offset test.\n");
933 offset = -(rand() % 128);
934 res = ds3231_set_aging_offset(&gs_handle, offset);
935 if (res != 0)
936 {
937 ds3231_interface_debug_print("ds3231: set aging offset failed.\n");
938 (void)ds3231_deinit(&gs_handle);
939
940 return 1;
941 }
942 ds3231_interface_debug_print("ds3231: set offset %d.\n", offset);
943 res = ds3231_get_aging_offset(&gs_handle, (int8_t *)&offset_check);
944 if (res != 0)
945 {
946 ds3231_interface_debug_print("ds3231: get aging offset failed.\n");
947 (void)ds3231_deinit(&gs_handle);
948
949 return 1;
950 }
951 ds3231_interface_debug_print("ds3231: check offset %s.\n", (offset_check == offset)?"ok":"error");
952
953 /* ds3231_get_status_offset */
954 ds3231_interface_debug_print("ds3231: ds3231_get_status test.\n");
955 res = ds3231_get_status(&gs_handle, (uint8_t *)&status);
956 if (res != 0)
957 {
958 ds3231_interface_debug_print("ds3231: get status failed.\n");
959 (void)ds3231_deinit(&gs_handle);
960
961 return 1;
962 }
963 ds3231_interface_debug_print("ds3231: check status 0x%02X.\n", status);
964
965 /* ds3231_aging_offset_convert_to_register/ds3231_aging_offset_convert_to_data test */
966 ds3231_interface_debug_print("ds3231: ds3231_aging_offset_convert_to_register/ds3231_aging_offset_convert_to_data test.\n");
967 o = (float)(rand() % 100) /100.0f;
968 res = ds3231_aging_offset_convert_to_register(&gs_handle, o, (int8_t *)&offset);
969 if (res != 0)
970 {
971 ds3231_interface_debug_print("ds3231: aging offset convert to register failed.\n");
972 (void)ds3231_deinit(&gs_handle);
973
974 return 1;
975 }
976 ds3231_interface_debug_print("ds3231: offset is %d.\n", offset);
977 res = ds3231_aging_offset_convert_to_data(&gs_handle, offset, (float *)&o_check);
978 if (res != 0)
979 {
980 ds3231_interface_debug_print("ds3231: aging offset convert to data failed.\n");
981 (void)ds3231_deinit(&gs_handle);
982
983 return 1;
984 }
985 ds3231_interface_debug_print("ds3231: offset is %0.3f.\n", o);
986 ds3231_interface_debug_print("ds3231: convert offset is %0.3f.\n", o_check);
987
988 /* finish register test */
989 ds3231_interface_debug_print("ds3231: finish register test.\n");
990 (void)ds3231_deinit(&gs_handle);
991
992 return 0;
993}
driver ds3231 register test header file
uint8_t ds3231_get_32khz_output(ds3231_handle_t *handle, ds3231_bool_t *enable)
get the 32KHz output status
uint8_t ds3231_get_pin(ds3231_handle_t *handle, ds3231_pin_t *pin)
get the chip pin function
uint8_t ds3231_set_aging_offset(ds3231_handle_t *handle, int8_t offset)
set the chip aging offset
uint8_t ds3231_set_pin(ds3231_handle_t *handle, ds3231_pin_t pin)
set the chip pin function
uint8_t ds3231_aging_offset_convert_to_data(ds3231_handle_t *handle, int8_t reg, float *offset)
convert a register raw data to a converted aging offset data
uint8_t ds3231_get_aging_offset(ds3231_handle_t *handle, int8_t *offset)
get the chip aging offset
uint8_t ds3231_aging_offset_convert_to_register(ds3231_handle_t *handle, float offset, int8_t *reg)
convert a aging offset value to a register raw data
uint8_t ds3231_set_32khz_output(ds3231_handle_t *handle, ds3231_bool_t enable)
enable or disable the 32KHz output
uint8_t ds3231_set_square_wave(ds3231_handle_t *handle, ds3231_bool_t enable)
enable or disable the square wave output
uint8_t ds3231_get_square_wave(ds3231_handle_t *handle, ds3231_bool_t *enable)
get the square wave output status
uint8_t ds3231_get_alarm_interrupt(ds3231_handle_t *handle, ds3231_alarm_t alarm, ds3231_bool_t *enable)
get the alarm interrupt status
uint8_t ds3231_set_alarm_interrupt(ds3231_handle_t *handle, ds3231_alarm_t alarm, ds3231_bool_t enable)
enable or disable the alarm interrupt
ds3231_alarm2_mode_t
ds3231 alarm2 enumeration definition
uint8_t ds3231_get_alarm1(ds3231_handle_t *handle, ds3231_time_t *t, ds3231_alarm1_mode_t *mode)
get the alarm1 time
ds3231_alarm1_mode_t
ds3231 alarm1 enumeration definition
uint8_t ds3231_set_alarm2(ds3231_handle_t *handle, ds3231_time_t *t, ds3231_alarm2_mode_t mode)
set the alarm2 time
uint8_t ds3231_set_alarm1(ds3231_handle_t *handle, ds3231_time_t *t, ds3231_alarm1_mode_t mode)
set the alarm1 time
uint8_t ds3231_get_alarm2(ds3231_handle_t *handle, ds3231_time_t *t, ds3231_alarm2_mode_t *mode)
get the alarm2 time
@ DS3231_ALARM2_MODE_ONCE_A_MINUTE
@ DS3231_ALARM2_MODE_WEEK_HOUR_MINUTE_MATCH
@ DS3231_ALARM2_MODE_HOUR_MINUTE_MATCH
@ DS3231_ALARM2_MODE_MINUTE_MATCH
@ DS3231_ALARM2_MODE_DATE_HOUR_MINUTE_MATCH
@ DS3231_ALARM1_MODE_WEEK_HOUR_MINUTE_SECOND_MATCH
@ DS3231_ALARM1_MODE_ONCE_A_SECOND
@ DS3231_ALARM1_MODE_MINUTE_SECOND_MATCH
@ DS3231_ALARM1_MODE_SECOND_MATCH
@ DS3231_ALARM1_MODE_HOUR_MINUTE_SECOND_MATCH
@ DS3231_ALARM1_MODE_DATE_HOUR_MINUTE_SECOND_MATCH
uint8_t ds3231_set_oscillator(ds3231_handle_t *handle, ds3231_bool_t enable)
enable or disable the oscillator
uint8_t ds3231_set_time(ds3231_handle_t *handle, ds3231_time_t *t)
set the current time
uint8_t ds3231_get_oscillator(ds3231_handle_t *handle, ds3231_bool_t *enable)
get the chip oscillator status
struct ds3231_time_s ds3231_time_t
ds3231 time structure definition
ds3231_pin_t
ds3231 pin enumeration definition
uint8_t ds3231_info(ds3231_info_t *info)
get chip's information
struct ds3231_handle_s ds3231_handle_t
ds3231 handle structure definition
uint8_t ds3231_init(ds3231_handle_t *handle)
initialize the chip
struct ds3231_info_s ds3231_info_t
ds3231 information structure definition
uint8_t ds3231_get_time(ds3231_handle_t *handle, ds3231_time_t *t)
get the current time
uint8_t ds3231_deinit(ds3231_handle_t *handle)
close the chip
ds3231_bool_t
ds3231 bool enumeration definition
uint8_t ds3231_get_status(ds3231_handle_t *handle, uint8_t *status)
get the chip status
@ DS3231_PM
@ DS3231_AM
@ DS3231_ALARM_2
@ DS3231_ALARM_1
@ DS3231_FORMAT_24H
@ DS3231_FORMAT_12H
@ DS3231_PIN_INTERRUPT
@ DS3231_PIN_SQUARE_WAVE
@ DS3231_BOOL_TRUE
@ DS3231_BOOL_FALSE
uint8_t ds3231_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t ds3231_interface_iic_init(void)
interface iic bus init
uint8_t ds3231_interface_iic_deinit(void)
interface iic bus deinit
void ds3231_interface_delay_ms(uint32_t ms)
interface delay ms
void ds3231_interface_debug_print(const char *const fmt,...)
interface print format data
void ds3231_interface_receive_callback(uint8_t type)
interface receive callback
uint8_t ds3231_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
uint8_t ds3231_register_test(void)
register test
float supply_voltage_max_v
uint32_t driver_version
char manufacturer_name[32]
float supply_voltage_min_v
char chip_name[32]
ds3231_am_pm_t am_pm
ds3231_format_t format