LibDriver DS3231
Loading...
Searching...
No Matches
driver_ds3231_alarm_test.c
Go to the documentation of this file.
1
37
39#include <stdlib.h>
40
41static ds3231_handle_t gs_handle;
42
50uint8_t ds3231_alarm_test(void)
51{
52 uint8_t res;
53 int8_t reg;
54 uint8_t times;
55 uint8_t status;
56 ds3231_info_t info;
57 ds3231_time_t time_in;
58
59 /* link functions */
68
69 /* get ds3231 info */
70 res = ds3231_info(&info);
71 if (res != 0)
72 {
73 ds3231_interface_debug_print("ds3231: get info failed.\n");
74
75 return 1;
76 }
77 else
78 {
79 /* print ds3231 info */
80 ds3231_interface_debug_print("ds3231: chip is %s.\n", info.chip_name);
81 ds3231_interface_debug_print("ds3231: manufacturer is %s.\n", info.manufacturer_name);
82 ds3231_interface_debug_print("ds3231: interface is %s.\n", info.interface);
83 ds3231_interface_debug_print("ds3231: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
84 ds3231_interface_debug_print("ds3231: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
85 ds3231_interface_debug_print("ds3231: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
86 ds3231_interface_debug_print("ds3231: max current is %0.2fmA.\n", info.max_current_ma);
87 ds3231_interface_debug_print("ds3231: max temperature is %0.1fC.\n", info.temperature_max);
88 ds3231_interface_debug_print("ds3231: min temperature is %0.1fC.\n", info.temperature_min);
89 }
90
91 /* start alarm test */
92 ds3231_interface_debug_print("ds3231: start alarm test.\n");
93
94 /* init ds3231 */
95 res = ds3231_init(&gs_handle);
96 if (res != 0)
97 {
98 ds3231_interface_debug_print("ds3231: init failed.\n");
99
100 return 1;
101 }
102
103 /* set oscillator */
104 res = ds3231_set_oscillator(&gs_handle, DS3231_BOOL_TRUE);
105 if (res != 0)
106 {
107 ds3231_interface_debug_print("ds3231: set oscillator failed.\n");
108 (void)ds3231_deinit(&gs_handle);
109
110 return 1;
111 }
112
113 /* enable alarm1 */
115 if (res != 0)
116 {
117 ds3231_interface_debug_print("ds3231: set alarm1 interrupt failed.\n");
118 (void)ds3231_deinit(&gs_handle);
119
120 return 1;
121 }
122
123 /* enable alarm2 */
125 if (res != 0)
126 {
127 ds3231_interface_debug_print("ds3231: set alarm2 interrupt failed.\n");
128 (void)ds3231_deinit(&gs_handle);
129
130 return 1;
131 }
132
133 /* set interrupt */
134 res = ds3231_set_pin(&gs_handle, DS3231_PIN_INTERRUPT);
135 if (res != 0)
136 {
137 ds3231_interface_debug_print("ds3231: set pin failed.\n");
138 (void)ds3231_deinit(&gs_handle);
139
140 return 1;
141 }
142
143 /* disable square wave */
144 res = ds3231_set_square_wave(&gs_handle, DS3231_BOOL_FALSE);
145 if (res != 0)
146 {
147 ds3231_interface_debug_print("ds3231: set square wave failed.\n");
148 (void)ds3231_deinit(&gs_handle);
149
150 return 1;
151 }
152
153 /* disable 32khz output */
155 if (res != 0)
156 {
157 ds3231_interface_debug_print("ds3231: set 32khz output failed.\n");
158 (void)ds3231_deinit(&gs_handle);
159
160 return 1;
161 }
162
163 /* convert to register */
164 res = ds3231_aging_offset_convert_to_register(&gs_handle, 0, (int8_t *)&reg);
165 if (res != 0)
166 {
167 ds3231_interface_debug_print("ds3231: convert to register failed.\n");
168 (void)ds3231_deinit(&gs_handle);
169
170 return 1;
171 }
172
173 /* set aging offset */
174 res = ds3231_set_aging_offset(&gs_handle, reg);
175 if (res != 0)
176 {
177 ds3231_interface_debug_print("ds3231: set aging offset failed.\n");
178 (void)ds3231_deinit(&gs_handle);
179
180 return 1;
181 }
182
183 /* 24H format */
184 time_in.format = DS3231_FORMAT_24H;
185 time_in.am_pm = DS3231_AM;
186 time_in.year = rand() % 100 + 2090;
187 time_in.month = rand() % 12 + 1;
188 time_in.date = rand() % 20 + 1;
189 time_in.week = rand() % 7 + 1;
190 time_in.hour = rand() % 12 + 12;
191 time_in.minute = rand() % 60;
192 time_in.second = rand() % 60;
193 ds3231_interface_debug_print("ds3231: set time %04d-%02d-%02d %02d:%02d:%02d %d in 24 format.\n",
194 time_in.year, time_in.month, time_in.date,
195 time_in.hour, time_in.minute, time_in.second, time_in.week
196 );
197 res = ds3231_set_time(&gs_handle, &time_in);
198 if (res != 0)
199 {
200 ds3231_interface_debug_print("ds3231: set time failed.\n");
201 (void)ds3231_deinit(&gs_handle);
202
203 return 1;
204 }
205
206 /* clear alarm 1 */
207 res = ds3231_alarm_clear(&gs_handle, DS3231_ALARM_1);
208 if (res != 0)
209 {
210 ds3231_interface_debug_print("ds3231: alarm clear failed.\n");
211 (void)ds3231_deinit(&gs_handle);
212
213 return 1;
214 }
215 res = ds3231_set_alarm1(&gs_handle, &time_in, DS3231_ALARM1_MODE_ONCE_A_SECOND);
216 if (res != 0)
217 {
218 ds3231_interface_debug_print("ds3231: set alarm1 failed.\n");
219 (void)ds3231_deinit(&gs_handle);
220
221 return 1;
222 }
224 res = ds3231_get_status(&gs_handle, (uint8_t *)&status);
225 if (res != 0)
226 {
227 ds3231_interface_debug_print("ds3231: get status failed.\n");
228 (void)ds3231_deinit(&gs_handle);
229
230 return 1;
231 }
232 if ((status & DS3231_STATUS_ALARM_1) != 0)
233 {
234 ds3231_interface_debug_print("ds3231: check alarm1 %s.\n", "ok");
235 }
236 else
237 {
238 ds3231_interface_debug_print("ds3231: check alarm1 %s.\n", "error");
239 (void)ds3231_deinit(&gs_handle);
240
241 return 1;
242 }
243
244 /* disable alarm1 */
246 if (res != 0)
247 {
248 ds3231_interface_debug_print("ds3231: set alarm1 interrupt failed.\n");
249 (void)ds3231_deinit(&gs_handle);
250
251 return 1;
252 }
253
254 /* clear alarm 2 */
255 res = ds3231_alarm_clear(&gs_handle, DS3231_ALARM_2);
256 if (res != 0)
257 {
258 ds3231_interface_debug_print("ds3231: alarm clear failed.\n");
259 (void)ds3231_deinit(&gs_handle);
260
261 return 1;
262 }
263 res = ds3231_set_alarm2(&gs_handle, &time_in, DS3231_ALARM2_MODE_ONCE_A_MINUTE);
264 if (res != 0)
265 {
266 ds3231_interface_debug_print("ds3231: set alarm2 failed.\n");
267 (void)ds3231_deinit(&gs_handle);
268
269 return 1;
270 }
271 times = 61;
272 while (times != 0)
273 {
275 times--;
276 ds3231_interface_debug_print("ds3231: time left %ds.\n", times);
277 }
278 res = ds3231_get_status(&gs_handle, (uint8_t *)&status);
279 if (res != 0)
280 {
281 ds3231_interface_debug_print("ds3231: get status failed.\n");
282 (void)ds3231_deinit(&gs_handle);
283
284 return 1;
285 }
286 if ((status & DS3231_STATUS_ALARM_2) != 0)
287 {
288 ds3231_interface_debug_print("ds3231: check alarm2 %s.\n", "ok");
289 }
290 else
291 {
292 ds3231_interface_debug_print("ds3231: check alarm2 %s.\n", "error");
293 (void)ds3231_deinit(&gs_handle);
294
295 return 1;
296 }
297
298 /* disable alarm2 */
300 if (res != 0)
301 {
302 ds3231_interface_debug_print("ds3231: set alarm1 interrupt failed.\n");
303 (void)ds3231_deinit(&gs_handle);
304
305 return 1;
306 }
307
308 /* finish alarm test */
309 ds3231_interface_debug_print("ds3231: finish alarm test.\n");
310 (void)ds3231_deinit(&gs_handle);
311
312 return 0;
313}
driver ds3231 alarm test header file
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_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_set_alarm_interrupt(ds3231_handle_t *handle, ds3231_alarm_t alarm, ds3231_bool_t enable)
enable or disable the alarm interrupt
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_alarm_clear(ds3231_handle_t *handle, ds3231_alarm_t alarm)
clear the alarm flag
uint8_t ds3231_set_alarm1(ds3231_handle_t *handle, ds3231_time_t *t, ds3231_alarm1_mode_t mode)
set the alarm1 time
@ DS3231_ALARM2_MODE_ONCE_A_MINUTE
@ DS3231_ALARM1_MODE_ONCE_A_SECOND
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
struct ds3231_time_s ds3231_time_t
ds3231 time structure 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_deinit(ds3231_handle_t *handle)
close the chip
uint8_t ds3231_get_status(ds3231_handle_t *handle, uint8_t *status)
get the chip status
@ DS3231_AM
@ DS3231_ALARM_2
@ DS3231_ALARM_1
@ DS3231_FORMAT_24H
@ DS3231_PIN_INTERRUPT
@ DS3231_STATUS_ALARM_1
@ DS3231_STATUS_ALARM_2
@ 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_alarm_test(void)
alarm 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