LibDriver QMC5883L
Loading...
Searching...
No Matches
driver_qmc5883l_register_test.c
Go to the documentation of this file.
1
36
37#include <stdlib.h>
39
40static qmc5883l_handle_t gs_handle;
41
50{
51 uint8_t res;
52 uint8_t reg;
53 uint8_t reg_check;
54 qmc5883l_info_t info;
55 qmc5883l_mode_t mode;
59 qmc5883l_bool_t enable;
60 uint8_t status;
61
62 /* link interface function */
70
71 /* get qmc5883l info */
72 res = qmc5883l_info(&info);
73 if (res != 0)
74 {
75 qmc5883l_interface_debug_print("qmc5883l: get info failed.\n");
76
77 return 1;
78 }
79 else
80 {
81 /* print chip information */
82 qmc5883l_interface_debug_print("qmc5883l: chip is %s.\n", info.chip_name);
83 qmc5883l_interface_debug_print("qmc5883l: manufacturer is %s.\n", info.manufacturer_name);
84 qmc5883l_interface_debug_print("qmc5883l: interface is %s.\n", info.interface);
85 qmc5883l_interface_debug_print("qmc5883l: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
86 qmc5883l_interface_debug_print("qmc5883l: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
87 qmc5883l_interface_debug_print("qmc5883l: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
88 qmc5883l_interface_debug_print("qmc5883l: max current is %0.2fmA.\n", info.max_current_ma);
89 qmc5883l_interface_debug_print("qmc5883l: max temperature is %0.1fC.\n", info.temperature_max);
90 qmc5883l_interface_debug_print("qmc5883l: min temperature is %0.1fC.\n", info.temperature_min);
91 }
92
93 /* qmc5883l init */
94 res = qmc5883l_init(&gs_handle);
95 if (res != 0)
96 {
97 qmc5883l_interface_debug_print("qmc5883l: init failed.\n");
98
99 return 1;
100 }
101
102 /* start register test */
103 qmc5883l_interface_debug_print("qmc5883l: start register test.\n");
104
105 /* qmc5883l_set_mode/qmc5883l_get_mode test */
106 qmc5883l_interface_debug_print("qmc5883l: qmc5883l_set_mode/qmc5883l_get_mode test.\n");
107
108 /* set continuous mode */
110 if (res != 0)
111 {
112 qmc5883l_interface_debug_print("qmc5883l: set mode failed.\n");
113 (void)qmc5883l_deinit(&gs_handle);
114
115 return 1;
116 }
117 qmc5883l_interface_debug_print("qmc5883l: set continuous mode.\n");
118 res = qmc5883l_get_mode(&gs_handle, &mode);
119 if (res != 0)
120 {
121 qmc5883l_interface_debug_print("qmc5883l: get mode failed.\n");
122 (void)qmc5883l_deinit(&gs_handle);
123
124 return 1;
125 }
126 qmc5883l_interface_debug_print("qmc5883l: check mode %s.\n", mode == QMC5883L_MODE_CONTINUOUS ? "ok" : "error");
127
128 /* set standby mode */
129 res = qmc5883l_set_mode(&gs_handle, QMC5883L_MODE_STANDBY);
130 if (res != 0)
131 {
132 qmc5883l_interface_debug_print("qmc5883l: set mode failed.\n");
133 (void)qmc5883l_deinit(&gs_handle);
134
135 return 1;
136 }
137 qmc5883l_interface_debug_print("qmc5883l: set standby mode.\n");
138 res = qmc5883l_get_mode(&gs_handle, &mode);
139 if (res != 0)
140 {
141 qmc5883l_interface_debug_print("qmc5883l: get mode failed.\n");
142 (void)qmc5883l_deinit(&gs_handle);
143
144 return 1;
145 }
146 qmc5883l_interface_debug_print("qmc5883l: check mode %s.\n", mode == QMC5883L_MODE_STANDBY ? "ok" : "error");
147
148 /* qmc5883l_set_output_rate/qmc5883l_get_output_rate test */
149 qmc5883l_interface_debug_print("qmc5883l: qmc5883l_set_output_rate/qmc5883l_get_output_rate test.\n");
150
151 /* set output rate 10Hz */
153 if (res != 0)
154 {
155 qmc5883l_interface_debug_print("qmc5883l: set output rate failed.\n");
156 (void)qmc5883l_deinit(&gs_handle);
157
158 return 1;
159 }
160 qmc5883l_interface_debug_print("qmc5883l: set output rate 10Hz.\n");
161 res = qmc5883l_get_output_rate(&gs_handle, &rate);
162 if (res != 0)
163 {
164 qmc5883l_interface_debug_print("qmc5883l: get output rate failed.\n");
165 (void)qmc5883l_deinit(&gs_handle);
166
167 return 1;
168 }
169 qmc5883l_interface_debug_print("qmc5883l: check output rate %s.\n", rate == QMC5883L_OUTPUT_RATE_10HZ ? "ok" : "error");
170
171 /* set output rate 50Hz */
173 if (res != 0)
174 {
175 qmc5883l_interface_debug_print("qmc5883l: set output rate failed.\n");
176 (void)qmc5883l_deinit(&gs_handle);
177
178 return 1;
179 }
180 qmc5883l_interface_debug_print("qmc5883l: set output rate 50Hz.\n");
181 res = qmc5883l_get_output_rate(&gs_handle, &rate);
182 if (res != 0)
183 {
184 qmc5883l_interface_debug_print("qmc5883l: get output rate failed.\n");
185 (void)qmc5883l_deinit(&gs_handle);
186
187 return 1;
188 }
189 qmc5883l_interface_debug_print("qmc5883l: check output rate %s.\n", rate == QMC5883L_OUTPUT_RATE_50HZ ? "ok" : "error");
190
191 /* set output rate 100Hz */
193 if (res != 0)
194 {
195 qmc5883l_interface_debug_print("qmc5883l: set output rate failed.\n");
196 (void)qmc5883l_deinit(&gs_handle);
197
198 return 1;
199 }
200 qmc5883l_interface_debug_print("qmc5883l: set output rate 100Hz.\n");
201 res = qmc5883l_get_output_rate(&gs_handle, &rate);
202 if (res != 0)
203 {
204 qmc5883l_interface_debug_print("qmc5883l: get output rate failed.\n");
205 (void)qmc5883l_deinit(&gs_handle);
206
207 return 1;
208 }
209 qmc5883l_interface_debug_print("qmc5883l: check output rate %s.\n", rate == QMC5883L_OUTPUT_RATE_100HZ ? "ok" : "error");
210
211 /* set output rate 200Hz */
213 if (res != 0)
214 {
215 qmc5883l_interface_debug_print("qmc5883l: set output rate failed.\n");
216 (void)qmc5883l_deinit(&gs_handle);
217
218 return 1;
219 }
220 qmc5883l_interface_debug_print("qmc5883l: set output rate 200Hz.\n");
221 res = qmc5883l_get_output_rate(&gs_handle, &rate);
222 if (res != 0)
223 {
224 qmc5883l_interface_debug_print("qmc5883l: get output rate failed.\n");
225 (void)qmc5883l_deinit(&gs_handle);
226
227 return 1;
228 }
229 qmc5883l_interface_debug_print("qmc5883l: check output rate %s.\n", rate == QMC5883L_OUTPUT_RATE_200HZ ? "ok" : "error");
230
231 /* qmc5883l_set_full_scale/qmc5883l_get_full_scale test */
232 qmc5883l_interface_debug_print("qmc5883l: qmc5883l_set_full_scale/qmc5883l_get_full_scale test.\n");
233
234 /* set 2 gauss */
236 if (res != 0)
237 {
238 qmc5883l_interface_debug_print("qmc5883l: set full scale failed.\n");
239 (void)qmc5883l_deinit(&gs_handle);
240
241 return 1;
242 }
243 qmc5883l_interface_debug_print("qmc5883l: set 2 gauss.\n");
244 res = qmc5883l_get_full_scale(&gs_handle, &scale);
245 if (res != 0)
246 {
247 qmc5883l_interface_debug_print("qmc5883l: get full scale failed.\n");
248 (void)qmc5883l_deinit(&gs_handle);
249
250 return 1;
251 }
252 qmc5883l_interface_debug_print("qmc5883l: check full scale %s.\n", scale == QMC5883L_FULL_SCALE_2GAUSS ? "ok" : "error");
253
254 /* set 8 gauss */
256 if (res != 0)
257 {
258 qmc5883l_interface_debug_print("qmc5883l: set full scale failed.\n");
259 (void)qmc5883l_deinit(&gs_handle);
260
261 return 1;
262 }
263 qmc5883l_interface_debug_print("qmc5883l: set 8 gauss.\n");
264 res = qmc5883l_get_full_scale(&gs_handle, &scale);
265 if (res != 0)
266 {
267 qmc5883l_interface_debug_print("qmc5883l: get full scale failed.\n");
268 (void)qmc5883l_deinit(&gs_handle);
269
270 return 1;
271 }
272 qmc5883l_interface_debug_print("qmc5883l: check full scale %s.\n", scale == QMC5883L_FULL_SCALE_8GAUSS ? "ok" : "error");
273
274 /* qmc5883l_set_over_sample/qmc5883l_get_over_sample test */
275 qmc5883l_interface_debug_print("qmc5883l: qmc5883l_set_over_sample/qmc5883l_get_over_sample test.\n");
276
277 /* set over sample 512 */
279 if (res != 0)
280 {
281 qmc5883l_interface_debug_print("qmc5883l: set over sample failed.\n");
282 (void)qmc5883l_deinit(&gs_handle);
283
284 return 1;
285 }
286 qmc5883l_interface_debug_print("qmc5883l: set over sample 512.\n");
287 res = qmc5883l_get_over_sample(&gs_handle, &sample);
288 if (res != 0)
289 {
290 qmc5883l_interface_debug_print("qmc5883l: get over sample failed.\n");
291 (void)qmc5883l_deinit(&gs_handle);
292
293 return 1;
294 }
295 qmc5883l_interface_debug_print("qmc5883l: check over sample %s.\n", sample == QMC5883L_OVER_SAMPLE_512 ? "ok" : "error");
296
297 /* set over sample 256 */
299 if (res != 0)
300 {
301 qmc5883l_interface_debug_print("qmc5883l: set over sample failed.\n");
302 (void)qmc5883l_deinit(&gs_handle);
303
304 return 1;
305 }
306 qmc5883l_interface_debug_print("qmc5883l: set over sample 256.\n");
307 res = qmc5883l_get_over_sample(&gs_handle, &sample);
308 if (res != 0)
309 {
310 qmc5883l_interface_debug_print("qmc5883l: get over sample failed.\n");
311 (void)qmc5883l_deinit(&gs_handle);
312
313 return 1;
314 }
315 qmc5883l_interface_debug_print("qmc5883l: check over sample %s.\n", sample == QMC5883L_OVER_SAMPLE_256 ? "ok" : "error");
316
317 /* set over sample 128 */
319 if (res != 0)
320 {
321 qmc5883l_interface_debug_print("qmc5883l: set over sample failed.\n");
322 (void)qmc5883l_deinit(&gs_handle);
323
324 return 1;
325 }
326 qmc5883l_interface_debug_print("qmc5883l: set over sample 128.\n");
327 res = qmc5883l_get_over_sample(&gs_handle, &sample);
328 if (res != 0)
329 {
330 qmc5883l_interface_debug_print("qmc5883l: get over sample failed.\n");
331 (void)qmc5883l_deinit(&gs_handle);
332
333 return 1;
334 }
335 qmc5883l_interface_debug_print("qmc5883l: check over sample %s.\n", sample == QMC5883L_OVER_SAMPLE_128 ? "ok" : "error");
336
337 /* set over sample 64 */
339 if (res != 0)
340 {
341 qmc5883l_interface_debug_print("qmc5883l: set over sample failed.\n");
342 (void)qmc5883l_deinit(&gs_handle);
343
344 return 1;
345 }
346 qmc5883l_interface_debug_print("qmc5883l: set over sample 64.\n");
347 res = qmc5883l_get_over_sample(&gs_handle, &sample);
348 if (res != 0)
349 {
350 qmc5883l_interface_debug_print("qmc5883l: get over sample failed.\n");
351 (void)qmc5883l_deinit(&gs_handle);
352
353 return 1;
354 }
355 qmc5883l_interface_debug_print("qmc5883l: check over sample %s.\n", sample == QMC5883L_OVER_SAMPLE_64 ? "ok" : "error");
356
357 /* qmc5883l_set_interrupt/qmc5883l_get_interrupt test */
358 qmc5883l_interface_debug_print("qmc5883l: qmc5883l_set_interrupt/qmc5883l_get_interrupt test.\n");
359
360 /* enable interrupt */
362 if (res != 0)
363 {
364 qmc5883l_interface_debug_print("qmc5883l: set interrupt failed.\n");
365 (void)qmc5883l_deinit(&gs_handle);
366
367 return 1;
368 }
369 qmc5883l_interface_debug_print("qmc5883l: enable interrupt.\n");
370 res = qmc5883l_get_interrupt(&gs_handle, &enable);
371 if (res != 0)
372 {
373 qmc5883l_interface_debug_print("qmc5883l: get interrupt failed.\n");
374 (void)qmc5883l_deinit(&gs_handle);
375
376 return 1;
377 }
378 qmc5883l_interface_debug_print("qmc5883l: check interrupt %s.\n", enable == QMC5883L_BOOL_TRUE ? "ok" : "error");
379
380 /* disable interrupt */
382 if (res != 0)
383 {
384 qmc5883l_interface_debug_print("qmc5883l: set interrupt failed.\n");
385 (void)qmc5883l_deinit(&gs_handle);
386
387 return 1;
388 }
389 qmc5883l_interface_debug_print("qmc5883l: disable interrupt.\n");
390 res = qmc5883l_get_interrupt(&gs_handle, &enable);
391 if (res != 0)
392 {
393 qmc5883l_interface_debug_print("qmc5883l: get interrupt failed.\n");
394 (void)qmc5883l_deinit(&gs_handle);
395
396 return 1;
397 }
398 qmc5883l_interface_debug_print("qmc5883l: check interrupt %s.\n", enable == QMC5883L_BOOL_FALSE ? "ok" : "error");
399
400 /* qmc5883l_set_pointer_roll_over/qmc5883l_get_pointer_roll_over test */
401 qmc5883l_interface_debug_print("qmc5883l: qmc5883l_set_pointer_roll_over/qmc5883l_get_pointer_roll_over test.\n");
402
403 /* enable pointer roll over */
405 if (res != 0)
406 {
407 qmc5883l_interface_debug_print("qmc5883l: set pointer roll over failed.\n");
408 (void)qmc5883l_deinit(&gs_handle);
409
410 return 1;
411 }
412 qmc5883l_interface_debug_print("qmc5883l: enable pointer roll over.\n");
413 res = qmc5883l_get_pointer_roll_over(&gs_handle, &enable);
414 if (res != 0)
415 {
416 qmc5883l_interface_debug_print("qmc5883l: get pointer roll over failed.\n");
417 (void)qmc5883l_deinit(&gs_handle);
418
419 return 1;
420 }
421 qmc5883l_interface_debug_print("qmc5883l: check pointer roll over %s.\n", enable == QMC5883L_BOOL_TRUE ? "ok" : "error");
422
423 /* disable pointer roll over */
425 if (res != 0)
426 {
427 qmc5883l_interface_debug_print("qmc5883l: set pointer roll over failed.\n");
428 (void)qmc5883l_deinit(&gs_handle);
429
430 return 1;
431 }
432 qmc5883l_interface_debug_print("qmc5883l: disable pointer roll over.\n");
433 res = qmc5883l_get_pointer_roll_over(&gs_handle, &enable);
434 if (res != 0)
435 {
436 qmc5883l_interface_debug_print("qmc5883l: get pointer roll over failed.\n");
437 (void)qmc5883l_deinit(&gs_handle);
438
439 return 1;
440 }
441 qmc5883l_interface_debug_print("qmc5883l: check pointer roll over %s.\n", enable == QMC5883L_BOOL_FALSE ? "ok" : "error");
442
443 /* qmc5883l_set_period/qmc5883l_get_period test */
444 qmc5883l_interface_debug_print("qmc5883l: qmc5883l_set_period/qmc5883l_get_period test.\n");
445
446 reg = rand() % 256;
447 res = qmc5883l_set_period(&gs_handle, reg);
448 if (res != 0)
449 {
450 qmc5883l_interface_debug_print("qmc5883l: set period failed.\n");
451 (void)qmc5883l_deinit(&gs_handle);
452
453 return 1;
454 }
455 qmc5883l_interface_debug_print("qmc5883l: set period %d.\n", reg);
456 res = qmc5883l_get_period(&gs_handle, &reg_check);
457 if (res != 0)
458 {
459 qmc5883l_interface_debug_print("qmc5883l: get period failed.\n");
460 (void)qmc5883l_deinit(&gs_handle);
461
462 return 1;
463 }
464 qmc5883l_interface_debug_print("qmc5883l: check period %s.\n", reg == reg_check ? "ok" : "error");
465
466 /* qmc5883l_get_status test */
467 qmc5883l_interface_debug_print("qmc5883l: qmc5883l_get_status test.\n");
468
469 res = qmc5883l_get_status(&gs_handle, &status);
470 if (res != 0)
471 {
472 qmc5883l_interface_debug_print("qmc5883l: get status failed.\n");
473 (void)qmc5883l_deinit(&gs_handle);
474
475 return 1;
476 }
477 qmc5883l_interface_debug_print("qmc5883l: status is 0x%02X.\n", status);
478
479 /* qmc5883l_soft_reset test */
480 qmc5883l_interface_debug_print("qmc5883l: qmc5883l_soft_reset test.\n");
481
482 /* soft reset */
483 res = qmc5883l_soft_reset(&gs_handle);
484 if (res != 0)
485 {
486 qmc5883l_interface_debug_print("qmc5883l: soft reset failed.\n");
487 (void)qmc5883l_deinit(&gs_handle);
488
489 return 1;
490 }
491 qmc5883l_interface_debug_print("qmc5883l: soft reset.\n");
492
493 /* finished register test */
494 qmc5883l_interface_debug_print("qmc5883l: finished register test.\n");
495 (void)qmc5883l_deinit(&gs_handle);
496
497 return 0;
498}
driver qmc5883l register test header file
uint8_t qmc5883l_set_full_scale(qmc5883l_handle_t *handle, qmc5883l_full_scale_t scale)
set the full scale
uint8_t qmc5883l_get_pointer_roll_over(qmc5883l_handle_t *handle, qmc5883l_bool_t *enable)
get pointer roll over status
uint8_t qmc5883l_get_over_sample(qmc5883l_handle_t *handle, qmc5883l_over_sample_t *sample)
get the over sample
uint8_t qmc5883l_get_full_scale(qmc5883l_handle_t *handle, qmc5883l_full_scale_t *scale)
get the full scale
uint8_t qmc5883l_get_period(qmc5883l_handle_t *handle, uint8_t *fbr)
get period
uint8_t qmc5883l_set_over_sample(qmc5883l_handle_t *handle, qmc5883l_over_sample_t sample)
set the over sample
uint8_t qmc5883l_get_interrupt(qmc5883l_handle_t *handle, qmc5883l_bool_t *enable)
get interrupt status
uint8_t qmc5883l_init(qmc5883l_handle_t *handle)
initialize the chip
qmc5883l_full_scale_t
qmc5883l full scale enumeration definition
uint8_t qmc5883l_set_pointer_roll_over(qmc5883l_handle_t *handle, qmc5883l_bool_t enable)
enable or disable pointer roll over
struct qmc5883l_handle_s qmc5883l_handle_t
qmc5883l handle structure definition
uint8_t qmc5883l_get_status(qmc5883l_handle_t *handle, uint8_t *status)
get status
uint8_t qmc5883l_set_interrupt(qmc5883l_handle_t *handle, qmc5883l_bool_t enable)
enable or disable interrupt
uint8_t qmc5883l_info(qmc5883l_info_t *info)
get chip's information
uint8_t qmc5883l_set_period(qmc5883l_handle_t *handle, uint8_t fbr)
set period
uint8_t qmc5883l_get_output_rate(qmc5883l_handle_t *handle, qmc5883l_output_rate_t *rate)
get the output rate
uint8_t qmc5883l_deinit(qmc5883l_handle_t *handle)
close the chip
uint8_t qmc5883l_set_output_rate(qmc5883l_handle_t *handle, qmc5883l_output_rate_t rate)
set the output rate
qmc5883l_bool_t
qmc5883l bool enumeration definition
struct qmc5883l_info_s qmc5883l_info_t
qmc5883l information structure definition
qmc5883l_output_rate_t
qmc5883l output rate enumeration definition
qmc5883l_mode_t
qmc5883l mode enumeration definition
qmc5883l_over_sample_t
qmc5883l over sample enumeration definition
uint8_t qmc5883l_soft_reset(qmc5883l_handle_t *handle)
soft reset
uint8_t qmc5883l_get_mode(qmc5883l_handle_t *handle, qmc5883l_mode_t *mode)
get the chip mode
uint8_t qmc5883l_set_mode(qmc5883l_handle_t *handle, qmc5883l_mode_t mode)
set the chip mode
@ QMC5883L_FULL_SCALE_8GAUSS
@ QMC5883L_FULL_SCALE_2GAUSS
@ QMC5883L_BOOL_TRUE
@ QMC5883L_BOOL_FALSE
@ QMC5883L_OUTPUT_RATE_50HZ
@ QMC5883L_OUTPUT_RATE_200HZ
@ QMC5883L_OUTPUT_RATE_100HZ
@ QMC5883L_OUTPUT_RATE_10HZ
@ QMC5883L_MODE_CONTINUOUS
@ QMC5883L_MODE_STANDBY
@ QMC5883L_OVER_SAMPLE_64
@ QMC5883L_OVER_SAMPLE_512
@ QMC5883L_OVER_SAMPLE_128
@ QMC5883L_OVER_SAMPLE_256
uint8_t qmc5883l_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t qmc5883l_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
void qmc5883l_interface_delay_ms(uint32_t ms)
interface delay ms
void qmc5883l_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t qmc5883l_interface_iic_init(void)
interface iic bus init
uint8_t qmc5883l_interface_iic_deinit(void)
interface iic bus deinit
uint8_t qmc5883l_register_test(void)
register test
char manufacturer_name[32]