LibDriver DS1302
Loading...
Searching...
No Matches
driver_ds1302_register_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static ds1302_handle_t gs_handle;
41
50{
51 uint8_t res;
52 uint8_t reg;
53 uint8_t reg_check;
54 uint8_t buf[8];
55 uint8_t buf_check[8];
56 ds1302_info_t info;
57 ds1302_time_t time_in;
58 ds1302_time_t time_out;
59 ds1302_bool_t enable;
60
61 /* link functions */
76
77 /* get ds1302 info */
78 res = ds1302_info(&info);
79 if (res != 0)
80 {
81 ds1302_interface_debug_print("ds1302: get info failed.\n");
82
83 return 1;
84 }
85 else
86 {
87 /* print ds1302 info */
88 ds1302_interface_debug_print("ds1302: chip is %s.\n", info.chip_name);
89 ds1302_interface_debug_print("ds1302: manufacturer is %s.\n", info.manufacturer_name);
90 ds1302_interface_debug_print("ds1302: interface is %s.\n", info.interface);
91 ds1302_interface_debug_print("ds1302: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
92 ds1302_interface_debug_print("ds1302: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
93 ds1302_interface_debug_print("ds1302: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
94 ds1302_interface_debug_print("ds1302: max current is %0.2fmA.\n", info.max_current_ma);
95 ds1302_interface_debug_print("ds1302: max temperature is %0.1fC.\n", info.temperature_max);
96 ds1302_interface_debug_print("ds1302: min temperature is %0.1fC.\n", info.temperature_min);
97 }
98
99 /* start register test */
100 ds1302_interface_debug_print("ds1302: start register test.\n");
101
102 /* init ds1302 */
103 res = ds1302_init(&gs_handle);
104 if (res != 0)
105 {
106 ds1302_interface_debug_print("ds1302: init failed.\n");
107
108 return 1;
109 }
110
111 /* set oscillator */
112 res = ds1302_set_oscillator(&gs_handle, DS1302_BOOL_TRUE);
113 if (res != 0)
114 {
115 ds1302_interface_debug_print("ds1302: set oscillator failed.\n");
116 (void)ds1302_deinit(&gs_handle);
117
118 return 1;
119 }
120
121 /* disable write protect */
123 if (res != 0)
124 {
125 ds1302_interface_debug_print("ds1302: set write protect failed.\n");
126 (void)ds1302_deinit(&gs_handle);
127
128 return 1;
129 }
130
131 /* ds1302_set_time/ds1302_get_time test */
132 ds1302_interface_debug_print("ds1302: ds1302_set_time/ds1302_get_time test.\n");
133
134 /* 12H format */
135 time_in.format = DS1302_FORMAT_12H;
136 time_in.am_pm = DS1302_PM;
137 time_in.year = rand() % 100 + 2000;
138 time_in.month = rand() % 12 + 1;
139 time_in.date = rand() % 20 + 1;
140 time_in.week = rand() % 7 + 1;
141 time_in.hour = rand() % 11 + 1;
142 time_in.minute = rand() % 60;
143 time_in.second = rand() % 60;
144 ds1302_interface_debug_print("ds1302: set time %04d-%02d-%02d PM %02d:%02d:%02d %d.\n",
145 time_in.year, time_in.month, time_in.date,
146 time_in.hour, time_in.minute, time_in.second, time_in.week
147 );
148 res = ds1302_set_time(&gs_handle, &time_in);
149 if (res != 0)
150 {
151 ds1302_interface_debug_print("ds1302: set time failed.\n");
152 (void)ds1302_deinit(&gs_handle);
153
154 return 1;
155 }
156 res = ds1302_get_time(&gs_handle, &time_out);
157 if (res != 0)
158 {
159 ds1302_interface_debug_print("ds1302: get time failed.\n");
160 (void)ds1302_deinit(&gs_handle);
161
162 return 1;
163 }
164 ds1302_interface_debug_print("ds1302: check time %s.\n", (memcmp((uint8_t *)&time_in, (uint8_t *)&time_out, sizeof(ds1302_time_t)) == 0) ? "ok" : "error");
165
166 /* 24H format */
167 time_in.format = DS1302_FORMAT_24H;
168 time_in.am_pm = DS1302_AM;
169 time_in.year = rand() % 100 + 2000;
170 time_in.month = rand() % 12 + 1;
171 time_in.date = rand() % 20 + 1;
172 time_in.week = rand() % 7 + 1;
173 time_in.hour = rand() % 24;
174 time_in.minute = rand() % 60;
175 time_in.second = rand() % 60;
176 ds1302_interface_debug_print("ds1302: set time %04d-%02d-%02d %02d:%02d:%02d %d.\n",
177 time_in.year, time_in.month, time_in.date,
178 time_in.hour, time_in.minute, time_in.second, time_in.week
179 );
180 res = ds1302_set_time(&gs_handle, &time_in);
181 if (res != 0)
182 {
183 ds1302_interface_debug_print("ds1302: set time failed.\n");
184 (void)ds1302_deinit(&gs_handle);
185
186 return 1;
187 }
188 res = ds1302_get_time(&gs_handle, &time_out);
189 if (res != 0)
190 {
191 ds1302_interface_debug_print("ds1302: get time failed.\n");
192 (void)ds1302_deinit(&gs_handle);
193
194 return 1;
195 }
196 ds1302_interface_debug_print("ds1302: check time %s.\n", (memcmp((uint8_t *)&time_in, (uint8_t *)&time_out, sizeof(ds1302_time_t)) == 0) ? "ok" : "error");
197
198 /* ds1302_set_charge/ds1302_get_charge test */
199 ds1302_interface_debug_print("ds1302: ds1302_set_charge/ds1302_get_charge test.\n");
200
201 /* set charge */
203 res = ds1302_set_charge(&gs_handle, reg);
204 if (res != 0)
205 {
206 ds1302_interface_debug_print("ds1302: set charge failed.\n");
207 (void)ds1302_deinit(&gs_handle);
208
209 return 1;
210 }
211 ds1302_interface_debug_print("ds1302: set charge 0x%02X.\n", reg);
212 res = ds1302_get_charge(&gs_handle, &reg_check);
213 if (res != 0)
214 {
215 ds1302_interface_debug_print("ds1302: get charge failed.\n");
216 (void)ds1302_deinit(&gs_handle);
217
218 return 1;
219 }
220 ds1302_interface_debug_print("ds1302: check time %s.\n", (reg == reg_check) ? "ok" : "error");
221
222 /* disable charge */
224 res = ds1302_set_charge(&gs_handle, reg);
225 if (res != 0)
226 {
227 ds1302_interface_debug_print("ds1302: set charge failed.\n");
228 (void)ds1302_deinit(&gs_handle);
229
230 return 1;
231 }
232 ds1302_interface_debug_print("ds1302: set charge 0x%02X.\n", reg);
233 res = ds1302_get_charge(&gs_handle, &reg_check);
234 if (res != 0)
235 {
236 ds1302_interface_debug_print("ds1302: get charge failed.\n");
237 (void)ds1302_deinit(&gs_handle);
238
239 return 1;
240 }
241 ds1302_interface_debug_print("ds1302: check time %s.\n", (reg == reg_check) ? "ok" : "error");
242
243 /* ds1302_clock_burst_write/ds1302_clock_burst_read test */
244 ds1302_interface_debug_print("ds1302: ds1302_clock_burst_write/ds1302_clock_burst_read test.\n");
245
246 buf[0] = 0x01;
247 buf[1] = 0x02;
248 buf[2] = 0x03;
249 buf[3] = 0x04;
250 buf[4] = 0x05;
251 buf[5] = 0x06;
252 buf[6] = 0x07;
253 buf[7] = 0x00;
254 res = ds1302_clock_burst_write(&gs_handle, buf, 8);
255 if (res != 0)
256 {
257 ds1302_interface_debug_print("ds1302: clock burst write failed.\n");
258 (void)ds1302_deinit(&gs_handle);
259
260 return 1;
261 }
262 ds1302_interface_debug_print("ds1302: set clock 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X.\n",
263 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]);
264 res = ds1302_clock_burst_read(&gs_handle, buf_check, 8);
265 if (res != 0)
266 {
267 ds1302_interface_debug_print("ds1302: clock burst read failed.\n");
268 (void)ds1302_deinit(&gs_handle);
269
270 return 1;
271 }
272 ds1302_interface_debug_print("ds1302: check clock burst %s.\n",
273 (memcmp((uint8_t *)buf, (uint8_t *)buf_check, sizeof(uint8_t) * 8) == 0) ? "ok" : "error");
274
275 /* ds1302_set_write_protect/ds1302_get_write_protect test */
276 ds1302_interface_debug_print("ds1302: ds1302_set_write_protect/ds1302_get_write_protect test.\n");
277
278 /* disable write protect */
280 if (res != 0)
281 {
282 ds1302_interface_debug_print("ds1302: set write protect failed.\n");
283 (void)ds1302_deinit(&gs_handle);
284
285 return 1;
286 }
287 ds1302_interface_debug_print("ds1302: disable write protect.\n");
288 res = ds1302_get_write_protect(&gs_handle, &enable);
289 if (res != 0)
290 {
291 ds1302_interface_debug_print("ds1302: get write protect failed.\n");
292 (void)ds1302_deinit(&gs_handle);
293
294 return 1;
295 }
296 ds1302_interface_debug_print("ds1302: check write protect %s.\n", (enable == DS1302_BOOL_FALSE) ? "ok" : "error");
297
298 /* enable write protect */
300 if (res != 0)
301 {
302 ds1302_interface_debug_print("ds1302: set write protect failed.\n");
303 (void)ds1302_deinit(&gs_handle);
304
305 return 1;
306 }
307 ds1302_interface_debug_print("ds1302: enable write protect.\n");
308 res = ds1302_get_write_protect(&gs_handle, &enable);
309 if (res != 0)
310 {
311 ds1302_interface_debug_print("ds1302: get write protect failed.\n");
312 (void)ds1302_deinit(&gs_handle);
313
314 return 1;
315 }
316 ds1302_interface_debug_print("ds1302: check write protect %s.\n", (enable == DS1302_BOOL_TRUE) ? "ok" : "error");
317
318 /* ds1302_set_oscillator/ds1302_get_oscillator test */
319 ds1302_interface_debug_print("ds1302: ds1302_set_oscillator/ds1302_get_oscillator test.\n");
320
321 /* enable */
322 res = ds1302_set_oscillator(&gs_handle, DS1302_BOOL_TRUE);
323 if (res != 0)
324 {
325 ds1302_interface_debug_print("ds1302: set oscillator failed.\n");
326 (void)ds1302_deinit(&gs_handle);
327
328 return 1;
329 }
330 ds1302_interface_debug_print("ds1302: enable oscillator.\n");
331 res = ds1302_get_oscillator(&gs_handle, &enable);
332 if (res != 0)
333 {
334 ds1302_interface_debug_print("ds1302: get oscillator failed.\n");
335 (void)ds1302_deinit(&gs_handle);
336
337 return 1;
338 }
339 ds1302_interface_debug_print("ds1302: check oscillator %s.\n", (enable == DS1302_BOOL_TRUE) ? "ok" : "error");
340
341 /* finish register test */
342 ds1302_interface_debug_print("ds1302: finish register test.\n");
343 (void)ds1302_deinit(&gs_handle);
344
345 return 0;
346}
driver ds1302 register test header file
uint8_t ds1302_clock_burst_read(ds1302_handle_t *handle, uint8_t *buf, uint8_t len)
clock burst read
uint8_t ds1302_clock_burst_write(ds1302_handle_t *handle, uint8_t *buf, uint8_t len)
clock burst write
uint8_t ds1302_init(ds1302_handle_t *handle)
initialize the chip
uint8_t ds1302_set_write_protect(ds1302_handle_t *handle, ds1302_bool_t enable)
enable or disable write protect
struct ds1302_time_s ds1302_time_t
ds1302 time structure definition
ds1302_bool_t
ds1302 bool enumeration definition
uint8_t ds1302_deinit(ds1302_handle_t *handle)
close the chip
struct ds1302_info_s ds1302_info_t
ds1302 information structure definition
uint8_t ds1302_set_oscillator(ds1302_handle_t *handle, ds1302_bool_t enable)
enable or disable the oscillator
uint8_t ds1302_get_write_protect(ds1302_handle_t *handle, ds1302_bool_t *enable)
get write protect status
uint8_t ds1302_get_time(ds1302_handle_t *handle, ds1302_time_t *t)
get the current time
uint8_t ds1302_info(ds1302_info_t *info)
get chip's information
uint8_t ds1302_get_oscillator(ds1302_handle_t *handle, ds1302_bool_t *enable)
get the chip oscillator status
struct ds1302_handle_s ds1302_handle_t
ds1302 handle structure definition
uint8_t ds1302_set_charge(ds1302_handle_t *handle, uint8_t charge)
set charge
uint8_t ds1302_set_time(ds1302_handle_t *handle, ds1302_time_t *t)
set the current time
uint8_t ds1302_get_charge(ds1302_handle_t *handle, uint8_t *charge)
get charge
@ DS1302_BOOL_FALSE
@ DS1302_BOOL_TRUE
@ DS1302_FORMAT_24H
@ DS1302_FORMAT_12H
@ DS1302_PM
@ DS1302_AM
@ DS1302_CHARGE_ENABLE
@ DS1302_CHARGE_DISABLE
@ DS1302_CHARGE_8K
@ DS1302_CHARGE_2_DIODE
uint8_t ds1302_interface_ce_gpio_init(void)
interface ce gpio init
uint8_t ds1302_interface_io_gpio_write(uint8_t value)
interface io gpio write
uint8_t ds1302_interface_sclk_gpio_deinit(void)
interface sclk gpio deinit
uint8_t ds1302_interface_sclk_gpio_write(uint8_t value)
interface sclk gpio write
void ds1302_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t ds1302_interface_io_gpio_read(uint8_t *value)
interface io gpio read
uint8_t ds1302_interface_io_gpio_deinit(void)
interface io gpio deinit
uint8_t ds1302_interface_io_gpio_init(void)
interface io gpio init
void ds1302_interface_delay_us(uint32_t us)
interface delay us
void ds1302_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t ds1302_interface_sclk_gpio_init(void)
interface sclk gpio init
uint8_t ds1302_interface_ce_gpio_deinit(void)
interface ce gpio deinit
uint8_t ds1302_interface_ce_gpio_write(uint8_t value)
interface ce gpio write
uint8_t ds1302_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]
ds1302_am_pm_t am_pm
ds1302_format_t format