LibDriver PCF8563
Loading...
Searching...
No Matches
driver_pcf8563_alarm_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static pcf8563_handle_t gs_handle;
41static volatile uint8_t gs_flag;
42
48static void a_receive_callback(uint8_t type)
49{
50 switch (type)
51 {
53 {
54 pcf8563_interface_debug_print("pcf8563: irq timer.\n");
55
56 break;
57 }
59 {
60 gs_flag = 1;
61 pcf8563_interface_debug_print("pcf8563: irq alarm.\n");
62
63 break;
64 }
65 default :
66 {
67 pcf8563_interface_debug_print("pcf8563: irq unknown.\n");
68
69 break;
70 }
71 }
72}
73
82{
83 if (pcf8563_irq_handler(&gs_handle) != 0)
84 {
85 return 1;
86 }
87
88 return 0;
89}
90
98uint8_t pcf8563_alarm_test(void)
99{
100 uint8_t res;
101 uint32_t i;
102 pcf8563_info_t info;
103 pcf8563_time_t time_in;
104 pcf8563_time_t time_out;
105
106 /* link functions */
114 DRIVER_PCF8563_LINK_RECEIVE_CALLBACK(&gs_handle, a_receive_callback);
115
116 /* get pcf8563 info */
117 res = pcf8563_info(&info);
118 if (res != 0)
119 {
120 pcf8563_interface_debug_print("pcf8563: get info failed.\n");
121
122 return 1;
123 }
124 else
125 {
126 /* print pcf8563 info */
127 pcf8563_interface_debug_print("pcf8563: chip is %s.\n", info.chip_name);
128 pcf8563_interface_debug_print("pcf8563: manufacturer is %s.\n", info.manufacturer_name);
129 pcf8563_interface_debug_print("pcf8563: interface is %s.\n", info.interface);
130 pcf8563_interface_debug_print("pcf8563: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
131 pcf8563_interface_debug_print("pcf8563: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
132 pcf8563_interface_debug_print("pcf8563: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
133 pcf8563_interface_debug_print("pcf8563: max current is %0.2fmA.\n", info.max_current_ma);
134 pcf8563_interface_debug_print("pcf8563: max temperature is %0.1fC.\n", info.temperature_max);
135 pcf8563_interface_debug_print("pcf8563: min temperature is %0.1fC.\n", info.temperature_min);
136 }
137
138 /* start alarm test */
139 pcf8563_interface_debug_print("pcf8563: start alarm test.\n");
140
141 /* init pcf8563 */
142 res = pcf8563_init(&gs_handle);
143 if (res != 0)
144 {
145 pcf8563_interface_debug_print("pcf8563: init failed.\n");
146
147 return 1;
148 }
149
150 /* disable rtc stop */
151 res = pcf8563_set_rtc_stop(&gs_handle, PCF8563_BOOL_FALSE);
152 if (res != 0)
153 {
154 pcf8563_interface_debug_print("pcf8563: set rtc stop failed.\n");
155 (void)pcf8563_deinit(&gs_handle);
156
157 return 1;
158 }
159
160 /* disable test mode */
161 res = pcf8563_set_test_mode(&gs_handle, PCF8563_BOOL_FALSE);
162 if (res != 0)
163 {
164 pcf8563_interface_debug_print("pcf8563: set test mode failed.\n");
165 (void)pcf8563_deinit(&gs_handle);
166
167 return 1;
168 }
169
170 /* disable power on reset */
172 if (res != 0)
173 {
174 pcf8563_interface_debug_print("pcf8563: set power on reset failed.\n");
175 (void)pcf8563_deinit(&gs_handle);
176
177 return 1;
178 }
179
180 /* disable clock out */
182 if (res != 0)
183 {
184 pcf8563_interface_debug_print("pcf8563: set clock out enable failed.\n");
185 (void)pcf8563_deinit(&gs_handle);
186
187 return 1;
188 }
189
190 /* disable timer interrupt */
192 if (res != 0)
193 {
194 pcf8563_interface_debug_print("pcf8563: set timer interrupt failed.\n");
195 (void)pcf8563_deinit(&gs_handle);
196
197 return 1;
198 }
199
200 /* set interrupt mode pulse */
202 if (res != 0)
203 {
204 pcf8563_interface_debug_print("pcf8563: set interrupt pin mode failed.\n");
205 (void)pcf8563_deinit(&gs_handle);
206
207 return 1;
208 }
209
210 /* disable hour alarm */
212 if (res != 0)
213 {
214 pcf8563_interface_debug_print("pcf8563: set hour alarm enable failed.\n");
215 (void)pcf8563_deinit(&gs_handle);
216
217 return 1;
218 }
219
220 /* disable day alarm */
222 if (res != 0)
223 {
224 pcf8563_interface_debug_print("pcf8563: set day alarm enable failed.\n");
225 (void)pcf8563_deinit(&gs_handle);
226
227 return 1;
228 }
229
230 /* disable week alarm */
232 if (res != 0)
233 {
234 pcf8563_interface_debug_print("pcf8563: set week alarm enable failed.\n");
235 (void)pcf8563_deinit(&gs_handle);
236
237 return 1;
238 }
239
240 /* set time */
241 time_in.year = rand() % 100 + 2000;
242 time_in.month = rand() % 12 + 1;
243 time_in.date = rand() % 20 + 1;
244 time_in.week = rand() % 7;
245 time_in.hour = rand() % 11 + 1;
246 time_in.minute = 0;
247 time_in.second = 0;
248 res = pcf8563_set_time(&gs_handle, &time_in);
249 if (res != 0)
250 {
251 pcf8563_interface_debug_print("pcf8563: set time failed.\n");
252 (void)pcf8563_deinit(&gs_handle);
253
254 return 1;
255 }
256
257 /* set minute */
258 res = pcf8563_set_minute_alarm(&gs_handle, 1);
259 if (res != 0)
260 {
261 pcf8563_interface_debug_print("pcf8563: set minute alarm failed.\n");
262 (void)pcf8563_deinit(&gs_handle);
263
264 return 1;
265 }
266
267 /* enable minute alarm */
269 if (res != 0)
270 {
271 pcf8563_interface_debug_print("pcf8563: set minute alarm enable failed.\n");
272 (void)pcf8563_deinit(&gs_handle);
273
274 return 1;
275 }
276
277 /* clear status */
279 if (res != 0)
280 {
281 pcf8563_interface_debug_print("pcf8563: clear status failed.\n");
282 (void)pcf8563_deinit(&gs_handle);
283
284 return 1;
285 }
286
287 /* enable alarm interrupt */
289 if (res != 0)
290 {
291 pcf8563_interface_debug_print("pcf8563: set alarm interrupt failed.\n");
292 (void)pcf8563_deinit(&gs_handle);
293
294 return 1;
295 }
296
297 /* wait for trigger */
298 gs_flag = 0;
299 for (i = 0; i < 180; i++)
300 {
301 if (gs_flag != 0)
302 {
303 break;
304 }
306 res = pcf8563_get_time(&gs_handle, &time_out);
307 if (res != 0)
308 {
309 pcf8563_interface_debug_print("pcf8563: get time failed.\n");
310 (void)pcf8563_deinit(&gs_handle);
311
312 return 1;
313 }
314 pcf8563_interface_debug_print("pcf8563: time is %02d:%02d:%02d.\n",
315 time_out.hour, time_out.minute, time_out.second
316 );
317 }
318
319 /* check flag */
320 if (gs_flag == 0)
321 {
322 pcf8563_interface_debug_print("pcf8563: not found alarm.\n");
323 }
324
325 /* disable minute alarm */
327 if (res != 0)
328 {
329 pcf8563_interface_debug_print("pcf8563: set minute alarm enable failed.\n");
330 (void)pcf8563_deinit(&gs_handle);
331
332 return 1;
333 }
334
335 /* disable alarm interrupt */
337 if (res != 0)
338 {
339 pcf8563_interface_debug_print("pcf8563: set alarm interrupt failed.\n");
340 (void)pcf8563_deinit(&gs_handle);
341
342 return 1;
343 }
344
345 /* finish alarm test */
346 pcf8563_interface_debug_print("pcf8563: finish alarm test.\n");
347 (void)pcf8563_deinit(&gs_handle);
348
349 return 0;
350}
driver pcf8563 alarm test header file
uint8_t pcf8563_info(pcf8563_info_t *info)
get chip's information
uint8_t pcf8563_set_week_alarm_enable(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable week alarm
uint8_t pcf8563_set_hour_alarm_enable(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable hour alarm
uint8_t pcf8563_deinit(pcf8563_handle_t *handle)
close the chip
uint8_t pcf8563_set_timer_interrupt(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable timer interrupt
uint8_t pcf8563_set_test_mode(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable test mode
uint8_t pcf8563_set_minute_alarm(pcf8563_handle_t *handle, uint8_t minute)
set minute alarm
uint8_t pcf8563_set_clock_out_enable(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable clock out enable
uint8_t pcf8563_init(pcf8563_handle_t *handle)
initialize the chip
struct pcf8563_info_s pcf8563_info_t
pcf8563 information structure definition
uint8_t pcf8563_set_time(pcf8563_handle_t *handle, pcf8563_time_t *t)
set the current time
struct pcf8563_time_s pcf8563_time_t
pcf8563 time structure definition
uint8_t pcf8563_irq_handler(pcf8563_handle_t *handle)
irq handler
uint8_t pcf8563_set_alarm_interrupt(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable alarm interrupt
uint8_t pcf8563_set_day_alarm_enable(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable day alarm
uint8_t pcf8563_set_minute_alarm_enable(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable minute alarm
uint8_t pcf8563_set_rtc_stop(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable rtc stop
struct pcf8563_handle_s pcf8563_handle_t
pcf8563 handle structure definition
uint8_t pcf8563_set_interrupt_mode(pcf8563_handle_t *handle, pcf8563_interrupt_mode_t mode)
set the interrupt mode
uint8_t pcf8563_get_time(pcf8563_handle_t *handle, pcf8563_time_t *t)
get the current time
uint8_t pcf8563_clear_status(pcf8563_handle_t *handle, pcf8563_interrupt_event_t event)
clear status
uint8_t pcf8563_set_power_on_reset(pcf8563_handle_t *handle, pcf8563_bool_t enable)
enable or disable power on reset
@ PCF8563_BOOL_TRUE
@ PCF8563_BOOL_FALSE
@ PCF8563_INTERRUPT_MODE_PULSE
@ PCF8563_INTERRUPT_EVENT_TIMER
@ PCF8563_INTERRUPT_EVENT_ALARM
uint8_t pcf8563_interface_iic_init(void)
interface iic bus init
uint8_t pcf8563_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
uint8_t pcf8563_interface_iic_deinit(void)
interface iic bus deinit
void pcf8563_interface_delay_ms(uint32_t ms)
interface delay ms
void pcf8563_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t pcf8563_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t pcf8563_alarm_test(void)
alarm test
uint8_t pcf8563_alarm_test_irq_handler(void)
alarm test irq
uint32_t driver_version
char manufacturer_name[32]