LibDriver DS1307
Loading...
Searching...
No Matches
driver_ds1307_register_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static ds1307_handle_t gs_handle;
41
50{
51 uint8_t res;
52 ds1307_info_t info;
53 ds1307_time_t time_in;
54 ds1307_time_t time_out;
55 ds1307_bool_t enable;
59
60 /* link functions */
68
69 /* get ds1307 info */
70 res = ds1307_info(&info);
71 if (res != 0)
72 {
73 ds1307_interface_debug_print("ds1307: get info failed.\n");
74
75 return 1;
76 }
77 else
78 {
79 /* print ds1307 info */
80 ds1307_interface_debug_print("ds1307: chip is %s.\n", info.chip_name);
81 ds1307_interface_debug_print("ds1307: manufacturer is %s.\n", info.manufacturer_name);
82 ds1307_interface_debug_print("ds1307: interface is %s.\n", info.interface);
83 ds1307_interface_debug_print("ds1307: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
84 ds1307_interface_debug_print("ds1307: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
85 ds1307_interface_debug_print("ds1307: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
86 ds1307_interface_debug_print("ds1307: max current is %0.2fmA.\n", info.max_current_ma);
87 ds1307_interface_debug_print("ds1307: max temperature is %0.1fC.\n", info.temperature_max);
88 ds1307_interface_debug_print("ds1307: min temperature is %0.1fC.\n", info.temperature_min);
89 }
90
91 /* start register test */
92 ds1307_interface_debug_print("ds1307: start register test.\n");
93
94 /* init ds1307 */
95 res = ds1307_init(&gs_handle);
96 if (res != 0)
97 {
98 ds1307_interface_debug_print("ds1307: init failed.\n");
99
100 return 1;
101 }
102
103 /* set oscillator */
104 res = ds1307_set_oscillator(&gs_handle, DS1307_BOOL_TRUE);
105 if (res != 0)
106 {
107 ds1307_interface_debug_print("ds1307: set oscillator failed.\n");
108 (void)ds1307_deinit(&gs_handle);
109
110 return 1;
111 }
112
113 /* ds1307_set_time/ds1307_get_time test */
114 ds1307_interface_debug_print("ds1307: ds1307_set_time/ds1307_get_time test.\n");
115
116 /* 12H format */
117 time_in.format = DS1307_FORMAT_12H;
118 time_in.am_pm = DS1307_PM;
119 time_in.year = rand() % 100 + 2000;
120 time_in.month = rand() % 12 + 1;
121 time_in.date = rand() % 20 + 1;
122 time_in.week = rand() % 7 + 1;
123 time_in.hour = rand() % 11 + 1;
124 time_in.minute = rand() % 60;
125 time_in.second = rand() % 60;
126 ds1307_interface_debug_print("ds1307: set time %04d-%02d-%02d PM %02d:%02d:%02d %d.\n",
127 time_in.year, time_in.month, time_in.date,
128 time_in.hour, time_in.minute, time_in.second, time_in.week
129 );
130 res = ds1307_set_time(&gs_handle, &time_in);
131 if (res != 0)
132 {
133 ds1307_interface_debug_print("ds1307: set time failed.\n");
134 (void)ds1307_deinit(&gs_handle);
135
136 return 1;
137 }
138 res = ds1307_get_time(&gs_handle, &time_out);
139 if (res != 0)
140 {
141 ds1307_interface_debug_print("ds1307: get time failed.\n");
142 (void)ds1307_deinit(&gs_handle);
143
144 return 1;
145 }
146 ds1307_interface_debug_print("ds1307: check time %s.\n", (memcmp((uint8_t *)&time_in, (uint8_t *)&time_out, sizeof(ds1307_time_t)) == 0) ? "ok" : "error");
147
148 /* 24H format */
149 time_in.format = DS1307_FORMAT_24H;
150 time_in.am_pm = DS1307_AM;
151 time_in.year = rand() % 100 + 2000;
152 time_in.month = rand() % 12 + 1;
153 time_in.date = rand() % 20 + 1;
154 time_in.week = rand() % 7 + 1;
155 time_in.hour = rand() % 24;
156 time_in.minute = rand() % 60;
157 time_in.second = rand() % 60;
158 ds1307_interface_debug_print("ds1307: set time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
159 time_in.year, time_in.month, time_in.date,
160 time_in.hour, time_in.minute, time_in.second, time_in.week
161 );
162 res = ds1307_set_time(&gs_handle, &time_in);
163 if (res != 0)
164 {
165 ds1307_interface_debug_print("ds1307: set time failed.\n");
166 (void)ds1307_deinit(&gs_handle);
167
168 return 1;
169 }
170 res = ds1307_get_time(&gs_handle, &time_out);
171 if (res != 0)
172 {
173 ds1307_interface_debug_print("ds1307: get time failed.\n");
174 (void)ds1307_deinit(&gs_handle);
175
176 return 1;
177 }
178 ds1307_interface_debug_print("ds1307: check time %s.\n", (memcmp((uint8_t *)&time_in, (uint8_t *)&time_out, sizeof(ds1307_time_t)) == 0) ? "ok" : "error");
179
180 /* ds1307_set_oscillator/ds1307_get_oscillator test */
181 ds1307_interface_debug_print("ds1307: ds1307_set_oscillator/ds1307_get_oscillator test.\n");
182
183 /* enable */
184 res = ds1307_set_oscillator(&gs_handle, DS1307_BOOL_TRUE);
185 if (res != 0)
186 {
187 ds1307_interface_debug_print("ds1307: set oscillator failed.\n");
188 (void)ds1307_deinit(&gs_handle);
189
190 return 1;
191 }
192 ds1307_interface_debug_print("ds1307: enable oscillator.\n");
193 res = ds1307_get_oscillator(&gs_handle, &enable);
194 if (res != 0)
195 {
196 ds1307_interface_debug_print("ds1307: get oscillator failed.\n");
197 (void)ds1307_deinit(&gs_handle);
198
199 return 1;
200 }
201 ds1307_interface_debug_print("ds1307: check oscillator %s.\n", (enable == DS1307_BOOL_TRUE) ? "ok" : "error");
202
203 /* disable */
204 res = ds1307_set_oscillator(&gs_handle, DS1307_BOOL_FALSE);
205 if (res != 0)
206 {
207 ds1307_interface_debug_print("ds1307: set oscillator failed.\n");
208 (void)ds1307_deinit(&gs_handle);
209
210 return 1;
211 }
212 ds1307_interface_debug_print("ds1307: disable oscillator.\n");
213 res = ds1307_get_oscillator(&gs_handle, &enable);
214 if (res != 0)
215 {
216 ds1307_interface_debug_print("ds1307: get oscillator failed.\n");
217 (void)ds1307_deinit(&gs_handle);
218
219 return 1;
220 }
221 ds1307_interface_debug_print("ds1307: check oscillator %s.\n", (enable == DS1307_BOOL_FALSE) ? "ok" : "error");
222
223 /* ds1307_set_output_level/ds1307_get_output_level test */
224 ds1307_interface_debug_print("ds1307: ds1307_set_output_level/ds1307_get_output_level test.\n");
225
226 /* set output level high */
228 if (res != 0)
229 {
230 ds1307_interface_debug_print("ds1307: set output level failed.\n");
231 (void)ds1307_deinit(&gs_handle);
232
233 return 1;
234 }
235
236 /* set output level high */
237 ds1307_interface_debug_print("ds1307: set output level high.\n");
238
239 /* get output level */
240 res = ds1307_get_output_level(&gs_handle, &level);
241 if (res != 0)
242 {
243 ds1307_interface_debug_print("ds1307: get output level failed.\n");
244 (void)ds1307_deinit(&gs_handle);
245
246 return 1;
247 }
248 ds1307_interface_debug_print("ds1307: check output level %s.\n", (level == DS1307_OUTPUT_LEVEL_HIGH) ? "ok" : "error");
249
250 /* set output level low */
252 if (res != 0)
253 {
254 ds1307_interface_debug_print("ds1307: set output level failed.\n");
255 (void)ds1307_deinit(&gs_handle);
256
257 return 1;
258 }
259
260 /* set output level low */
261 ds1307_interface_debug_print("ds1307: set output level low.\n");
262
263 /* get output level */
264 res = ds1307_get_output_level(&gs_handle, &level);
265 if (res != 0)
266 {
267 ds1307_interface_debug_print("ds1307: get output level failed.\n");
268 (void)ds1307_deinit(&gs_handle);
269
270 return 1;
271 }
272 ds1307_interface_debug_print("ds1307: check output level %s.\n", (level == DS1307_OUTPUT_LEVEL_LOW) ? "ok" : "error");
273
274 /* ds1307_set_output_mode/ds1307_get_output_mode test */
275 ds1307_interface_debug_print("ds1307: ds1307_set_output_mode/ds1307_get_output_mode test.\n");
276
277 /* set square wave mode */
279 if (res != 0)
280 {
281 ds1307_interface_debug_print("ds1307: set output mode failed.\n");
282 (void)ds1307_deinit(&gs_handle);
283
284 return 1;
285 }
286
287 /* set square wave mode */
288 ds1307_interface_debug_print("ds1307: set square wave mode.\n");
289
290 /* get square wave mode */
291 res = ds1307_get_output_mode(&gs_handle, &mode);
292 if (res != 0)
293 {
294 ds1307_interface_debug_print("ds1307: get output mode failed.\n");
295 (void)ds1307_deinit(&gs_handle);
296
297 return 1;
298 }
299 ds1307_interface_debug_print("ds1307: check output mode %s.\n", (mode == DS1307_OUTPUT_MODE_SQUARE_WAVE) ? "ok" : "error");
300
301 /* set level mode */
303 if (res != 0)
304 {
305 ds1307_interface_debug_print("ds1307: set output mode failed.\n");
306 (void)ds1307_deinit(&gs_handle);
307
308 return 1;
309 }
310
311 /* set level mode */
312 ds1307_interface_debug_print("ds1307: set level mode.\n");
313
314 /* get level mode */
315 res = ds1307_get_output_mode(&gs_handle, &mode);
316 if (res != 0)
317 {
318 ds1307_interface_debug_print("ds1307: get level mode failed.\n");
319 (void)ds1307_deinit(&gs_handle);
320
321 return 1;
322 }
323 ds1307_interface_debug_print("ds1307: check output mode %s.\n", (mode == DS1307_OUTPUT_MODE_LEVEL) ? "ok" : "error");
324
325 /* ds1307_set_square_wave_frequency/ds1307_get_square_wave_frequency test */
326 ds1307_interface_debug_print("ds1307: ds1307_set_square_wave_frequency/ds1307_get_square_wave_frequency test.\n");
327
328 /* 1Hz */
330 if (res != 0)
331 {
332 ds1307_interface_debug_print("ds1307: set square wave frequency failed.\n");
333 (void)ds1307_deinit(&gs_handle);
334
335 return 1;
336 }
337
338 /* 1Hz */
339 ds1307_interface_debug_print("ds1307: set square wave frequency 1Hz.\n");
340
341 /* get square wave frequency */
342 res = ds1307_get_square_wave_frequency(&gs_handle, &freq);
343 if (res != 0)
344 {
345 ds1307_interface_debug_print("ds1307: get square wave frequency failed.\n");
346 (void)ds1307_deinit(&gs_handle);
347
348 return 1;
349 }
350 ds1307_interface_debug_print("ds1307: check square wave frequency %s.\n", (freq == DS1307_SQUARE_WAVE_FREQUENCY_1_HZ) ? "ok" : "error");
351
352 /* 4096Hz */
354 if (res != 0)
355 {
356 ds1307_interface_debug_print("ds1307: set square wave frequency failed.\n");
357 (void)ds1307_deinit(&gs_handle);
358
359 return 1;
360 }
361
362 /* 4096Hz */
363 ds1307_interface_debug_print("ds1307: set square wave frequency 4096Hz.\n");
364
365 /* get square wave frequency */
366 res = ds1307_get_square_wave_frequency(&gs_handle, &freq);
367 if (res != 0)
368 {
369 ds1307_interface_debug_print("ds1307: get square wave frequency failed.\n");
370 (void)ds1307_deinit(&gs_handle);
371
372 return 1;
373 }
374 ds1307_interface_debug_print("ds1307: check square wave frequency %s.\n", (freq == DS1307_SQUARE_WAVE_FREQUENCY_4096_HZ) ? "ok" : "error");
375
376 /* 8192Hz */
378 if (res != 0)
379 {
380 ds1307_interface_debug_print("ds1307: set square wave frequency failed.\n");
381 (void)ds1307_deinit(&gs_handle);
382
383 return 1;
384 }
385
386 /* 8192Hz */
387 ds1307_interface_debug_print("ds1307: set square wave frequency 8192Hz.\n");
388
389 /* get square wave frequency */
390 res = ds1307_get_square_wave_frequency(&gs_handle, &freq);
391 if (res != 0)
392 {
393 ds1307_interface_debug_print("ds1307: get square wave frequency failed.\n");
394 (void)ds1307_deinit(&gs_handle);
395
396 return 1;
397 }
398 ds1307_interface_debug_print("ds1307: check square wave frequency %s.\n", (freq == DS1307_SQUARE_WAVE_FREQUENCY_8192_HZ) ? "ok" : "error");
399
400 /* 32768Hz */
402 if (res != 0)
403 {
404 ds1307_interface_debug_print("ds1307: set square wave frequency failed.\n");
405 (void)ds1307_deinit(&gs_handle);
406
407 return 1;
408 }
409
410 /* 32768Hz */
411 ds1307_interface_debug_print("ds1307: set square wave frequency 32768Hz.\n");
412
413 /* get square wave frequency */
414 res = ds1307_get_square_wave_frequency(&gs_handle, &freq);
415 if (res != 0)
416 {
417 ds1307_interface_debug_print("ds1307: get square wave frequency failed.\n");
418 (void)ds1307_deinit(&gs_handle);
419
420 return 1;
421 }
422 ds1307_interface_debug_print("ds1307: check square wave frequency %s.\n", (freq == DS1307_SQUARE_WAVE_FREQUENCY_32768_HZ) ? "ok" : "error");
423
424 /* finish register test */
425 ds1307_interface_debug_print("ds1307: finish register test.\n");
426 (void)ds1307_deinit(&gs_handle);
427
428 return 0;
429}
driver ds1307 register test header file
uint8_t ds1307_info(ds1307_info_t *info)
get chip's information
struct ds1307_info_s ds1307_info_t
ds1307 information structure definition
uint8_t ds1307_get_output_level(ds1307_handle_t *handle, ds1307_output_level_t *level)
get the output level
struct ds1307_handle_s ds1307_handle_t
ds1307 handle structure definition
ds1307_square_wave_frequency_t
ds1307 square wave frequency enumeration definition
uint8_t ds1307_get_square_wave_frequency(ds1307_handle_t *handle, ds1307_square_wave_frequency_t *freq)
get the square wave frequency
uint8_t ds1307_get_oscillator(ds1307_handle_t *handle, ds1307_bool_t *enable)
get the chip oscillator status
uint8_t ds1307_set_output_mode(ds1307_handle_t *handle, ds1307_output_mode_t mode)
set the output mode
struct ds1307_time_s ds1307_time_t
ds1307 time structure definition
uint8_t ds1307_get_output_mode(ds1307_handle_t *handle, ds1307_output_mode_t *mode)
get the output mode
uint8_t ds1307_set_oscillator(ds1307_handle_t *handle, ds1307_bool_t enable)
enable or disable the oscillator
uint8_t ds1307_init(ds1307_handle_t *handle)
initialize the chip
uint8_t ds1307_set_time(ds1307_handle_t *handle, ds1307_time_t *t)
set the current time
ds1307_output_level_t
ds1307 output level enumeration definition
uint8_t ds1307_set_output_level(ds1307_handle_t *handle, ds1307_output_level_t level)
set the output level
uint8_t ds1307_set_square_wave_frequency(ds1307_handle_t *handle, ds1307_square_wave_frequency_t freq)
set the square wave frequency
ds1307_bool_t
ds1307 bool enumeration definition
uint8_t ds1307_deinit(ds1307_handle_t *handle)
close the chip
uint8_t ds1307_get_time(ds1307_handle_t *handle, ds1307_time_t *t)
get the current time
ds1307_output_mode_t
ds1307 output mode enumeration definition
@ DS1307_PM
@ DS1307_AM
@ DS1307_SQUARE_WAVE_FREQUENCY_4096_HZ
@ DS1307_SQUARE_WAVE_FREQUENCY_8192_HZ
@ DS1307_SQUARE_WAVE_FREQUENCY_32768_HZ
@ DS1307_SQUARE_WAVE_FREQUENCY_1_HZ
@ DS1307_FORMAT_12H
@ DS1307_FORMAT_24H
@ DS1307_OUTPUT_LEVEL_HIGH
@ DS1307_OUTPUT_LEVEL_LOW
@ DS1307_BOOL_TRUE
@ DS1307_BOOL_FALSE
@ DS1307_OUTPUT_MODE_SQUARE_WAVE
@ DS1307_OUTPUT_MODE_LEVEL
void ds1307_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t ds1307_interface_iic_deinit(void)
interface iic bus deinit
uint8_t ds1307_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
uint8_t ds1307_interface_iic_init(void)
interface iic bus init
uint8_t ds1307_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
void ds1307_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t ds1307_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]
ds1307_am_pm_t am_pm
ds1307_format_t format