LibDriver MLX90614
Loading...
Searching...
No Matches
driver_mlx90614_register_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static mlx90614_handle_t gs_handle;
41
50{
51 uint8_t res;
52 uint8_t addr, addr_check;
53 uint16_t value, value_check;
54 double s, s_check;
55 uint16_t id[4];
56 uint16_t flag;
59 mlx90614_mode_t mode;
63 mlx90614_gain_t gain;
64 mlx90614_bool_t enable;
65 mlx90614_info_t info;
66
67 /* link interface function */
77
78 /* get information */
79 res = mlx90614_info(&info);
80 if (res != 0)
81 {
82 mlx90614_interface_debug_print("mlx90614: get info failed.\n");
83
84 return 1;
85 }
86 else
87 {
88 /* print chip info */
89 mlx90614_interface_debug_print("mlx90614: chip is %s.\n", info.chip_name);
90 mlx90614_interface_debug_print("mlx90614: manufacturer is %s.\n", info.manufacturer_name);
91 mlx90614_interface_debug_print("mlx90614: interface is %s.\n", info.interface);
92 mlx90614_interface_debug_print("mlx90614: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
93 mlx90614_interface_debug_print("mlx90614: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
94 mlx90614_interface_debug_print("mlx90614: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
95 mlx90614_interface_debug_print("mlx90614: max current is %0.2fmA.\n", info.max_current_ma);
96 mlx90614_interface_debug_print("mlx90614: max temperature is %0.1fC.\n", info.temperature_max);
97 mlx90614_interface_debug_print("mlx90614: min temperature is %0.1fC.\n", info.temperature_min);
98 }
99
100 /* start register test */
101 mlx90614_interface_debug_print("mlx90614: start register test.\n");
102
103 /* mlx90614_set_addr/mlx90614_get_addr test */
104 mlx90614_interface_debug_print("mlx90614: mlx90614_set_addr/mlx90614_get_addr test.\n");
105
106 /* generate the addr */
107 addr = rand() % 256;
108
109 /* set the addr */
110 res = mlx90614_set_addr(&gs_handle, addr);
111 if (res != 0)
112 {
113 mlx90614_interface_debug_print("mlx90614: set addr failed.\n");
114
115 return 1;
116 }
117 mlx90614_interface_debug_print("mlx90614: set addr 0x%02X.\n", addr);
118
119 /* get the addr */
120 res = mlx90614_get_addr(&gs_handle, (uint8_t *)&addr_check);
121 if (res != 0)
122 {
123 mlx90614_interface_debug_print("mlx90614: get addr failed.\n");
124
125 return 1;
126 }
127 mlx90614_interface_debug_print("mlx90614: check addr %s.\n", addr_check == addr ? "ok" : "error");
128
129 /* set address */
131 if (res != 0)
132 {
133 mlx90614_interface_debug_print("mlx90614: set addr failed.\n");
134
135 return 1;
136 }
137
138 /* mlx90614 init */
139 res = mlx90614_init(&gs_handle);
140 if (res != 0)
141 {
142 mlx90614_interface_debug_print("mlx90614: init failed.\n");
143
144 return 1;
145 }
146
147 /* pwm to smbus */
148 res = mlx90614_pwm_to_smbus(&gs_handle);
149 if (res != 0)
150 {
151 mlx90614_interface_debug_print("mlx90614: pwm to smbus failed.\n");
152 (void)mlx90614_deinit(&gs_handle);
153
154 return 1;
155 }
156
157 /* exit sleep mode */
158 res = mlx90614_exit_sleep_mode(&gs_handle);
159 if (res != 0)
160 {
161 mlx90614_interface_debug_print("mlx90614: exit sleep mode failed.\n");
162 (void)mlx90614_deinit(&gs_handle);
163
164 return 1;
165 }
166
167 /* mlx90614_set_fir_length/mlx90614_get_fir_length test */
168 mlx90614_interface_debug_print("mlx90614: mlx90614_set_fir_length/mlx90614_get_fir_length test.\n");
169
170 /* set fir length 8 */
172 if (res != 0)
173 {
174 mlx90614_interface_debug_print("mlx90614: set fir length failed.\n");
175 (void)mlx90614_deinit(&gs_handle);
176
177 return 1;
178 }
179 mlx90614_interface_debug_print("mlx90614: set fir length 8.\n");
180 res = mlx90614_get_fir_length(&gs_handle, &len);
181 if (res != 0)
182 {
183 mlx90614_interface_debug_print("mlx90614: get fir length failed.\n");
184 (void)mlx90614_deinit(&gs_handle);
185
186 return 1;
187 }
188 mlx90614_interface_debug_print("mlx90614: check fir length %s.\n", len == MLX90614_FIR_LENGTH_8 ? "ok" : "error");
189
190 /* set fir length 16 */
192 if (res != 0)
193 {
194 mlx90614_interface_debug_print("mlx90614: set fir length failed.\n");
195 (void)mlx90614_deinit(&gs_handle);
196
197 return 1;
198 }
199 mlx90614_interface_debug_print("mlx90614: set fir length 16.\n");
200 res = mlx90614_get_fir_length(&gs_handle, &len);
201 if (res != 0)
202 {
203 mlx90614_interface_debug_print("mlx90614: get fir length failed.\n");
204 (void)mlx90614_deinit(&gs_handle);
205
206 return 1;
207 }
208 mlx90614_interface_debug_print("mlx90614: check fir length %s.\n", len == MLX90614_FIR_LENGTH_16 ? "ok" : "error");
209
210 /* set fir length 32 */
212 if (res != 0)
213 {
214 mlx90614_interface_debug_print("mlx90614: set fir length failed.\n");
215 (void)mlx90614_deinit(&gs_handle);
216
217 return 1;
218 }
219 mlx90614_interface_debug_print("mlx90614: set fir length 32.\n");
220 res = mlx90614_get_fir_length(&gs_handle, &len);
221 if (res != 0)
222 {
223 mlx90614_interface_debug_print("mlx90614: get fir length failed.\n");
224 (void)mlx90614_deinit(&gs_handle);
225
226 return 1;
227 }
228 mlx90614_interface_debug_print("mlx90614: check fir length %s.\n", len == MLX90614_FIR_LENGTH_32 ? "ok" : "error");
229
230 /* set fir length 64 */
232 if (res != 0)
233 {
234 mlx90614_interface_debug_print("mlx90614: set fir length failed.\n");
235 (void)mlx90614_deinit(&gs_handle);
236
237 return 1;
238 }
239 mlx90614_interface_debug_print("mlx90614: set fir length 64.\n");
240 res = mlx90614_get_fir_length(&gs_handle, &len);
241 if (res != 0)
242 {
243 mlx90614_interface_debug_print("mlx90614: get fir length failed.\n");
244 (void)mlx90614_deinit(&gs_handle);
245
246 return 1;
247 }
248 mlx90614_interface_debug_print("mlx90614: check fir length %s.\n", len == MLX90614_FIR_LENGTH_64 ? "ok" : "error");
249
250 /* set fir length 128 */
252 if (res != 0)
253 {
254 mlx90614_interface_debug_print("mlx90614: set fir length failed.\n");
255 (void)mlx90614_deinit(&gs_handle);
256
257 return 1;
258 }
259 mlx90614_interface_debug_print("mlx90614: set fir length 128.\n");
260 res = mlx90614_get_fir_length(&gs_handle, &len);
261 if (res != 0)
262 {
263 mlx90614_interface_debug_print("mlx90614: get fir length failed.\n");
264 (void)mlx90614_deinit(&gs_handle);
265
266 return 1;
267 }
268 mlx90614_interface_debug_print("mlx90614: check fir length %s.\n", len == MLX90614_FIR_LENGTH_128 ? "ok" : "error");
269
270 /* set fir length 256 */
272 if (res != 0)
273 {
274 mlx90614_interface_debug_print("mlx90614: set fir length failed.\n");
275 (void)mlx90614_deinit(&gs_handle);
276
277 return 1;
278 }
279 mlx90614_interface_debug_print("mlx90614: set fir length 256.\n");
280 res = mlx90614_get_fir_length(&gs_handle, &len);
281 if (res != 0)
282 {
283 mlx90614_interface_debug_print("mlx90614: get fir length failed.\n");
284 (void)mlx90614_deinit(&gs_handle);
285
286 return 1;
287 }
288 mlx90614_interface_debug_print("mlx90614: check fir length %s.\n", len == MLX90614_FIR_LENGTH_256 ? "ok" : "error");
289
290 /* set fir length 512 */
292 if (res != 0)
293 {
294 mlx90614_interface_debug_print("mlx90614: set fir length failed.\n");
295 (void)mlx90614_deinit(&gs_handle);
296
297 return 1;
298 }
299 mlx90614_interface_debug_print("mlx90614: set fir length 512.\n");
300 res = mlx90614_get_fir_length(&gs_handle, &len);
301 if (res != 0)
302 {
303 mlx90614_interface_debug_print("mlx90614: get fir length failed.\n");
304 (void)mlx90614_deinit(&gs_handle);
305
306 return 1;
307 }
308 mlx90614_interface_debug_print("mlx90614: check fir length %s.\n", len == MLX90614_FIR_LENGTH_512 ? "ok" : "error");
309
310 /* set fir length 1024 */
312 if (res != 0)
313 {
314 mlx90614_interface_debug_print("mlx90614: set fir length failed.\n");
315 (void)mlx90614_deinit(&gs_handle);
316
317 return 1;
318 }
319 mlx90614_interface_debug_print("mlx90614: set fir length 1024.\n");
320 res = mlx90614_get_fir_length(&gs_handle, &len);
321 if (res != 0)
322 {
323 mlx90614_interface_debug_print("mlx90614: get fir length failed.\n");
324 (void)mlx90614_deinit(&gs_handle);
325
326 return 1;
327 }
328 mlx90614_interface_debug_print("mlx90614: check fir length %s.\n", len == MLX90614_FIR_LENGTH_1024 ? "ok" : "error");
329
330 /* mlx90614_set_iir/mlx90614_get_iir test */
331 mlx90614_interface_debug_print("mlx90614: mlx90614_set_iir/mlx90614_get_iir test.\n");
332
333 /* set iir a1 0.5 b1 0.5 */
335 if (res != 0)
336 {
337 mlx90614_interface_debug_print("mlx90614: set iir failed.\n");
338 (void)mlx90614_deinit(&gs_handle);
339
340 return 1;
341 }
342 mlx90614_interface_debug_print("mlx90614: set iir a1 0.5 b1 0.5.\n");
343 res = mlx90614_get_iir(&gs_handle, &iir);
344 if (res != 0)
345 {
346 mlx90614_interface_debug_print("mlx90614: get iir failed.\n");
347 (void)mlx90614_deinit(&gs_handle);
348
349 return 1;
350 }
351 mlx90614_interface_debug_print("mlx90614: check iir %s.\n", iir == MLX90614_IIR_A1_0P5_B1_0P5 ? "ok" : "error");
352
353 /* set iir a1 0.25 b1 0.75 */
355 if (res != 0)
356 {
357 mlx90614_interface_debug_print("mlx90614: set iir failed.\n");
358 (void)mlx90614_deinit(&gs_handle);
359
360 return 1;
361 }
362 mlx90614_interface_debug_print("mlx90614: set iir a1 0.25 b1 0.75.\n");
363 res = mlx90614_get_iir(&gs_handle, &iir);
364 if (res != 0)
365 {
366 mlx90614_interface_debug_print("mlx90614: get iir failed.\n");
367 (void)mlx90614_deinit(&gs_handle);
368
369 return 1;
370 }
371 mlx90614_interface_debug_print("mlx90614: check iir %s.\n", iir == MLX90614_IIR_A1_0P25_B1_0P75 ? "ok" : "error");
372
373 /* set iir a1 0.166 b1 0.83 */
375 if (res != 0)
376 {
377 mlx90614_interface_debug_print("mlx90614: set iir failed.\n");
378 (void)mlx90614_deinit(&gs_handle);
379
380 return 1;
381 }
382 mlx90614_interface_debug_print("mlx90614: set iir a1 0.166 b1 0.83.\n");
383 res = mlx90614_get_iir(&gs_handle, &iir);
384 if (res != 0)
385 {
386 mlx90614_interface_debug_print("mlx90614: get iir failed.\n");
387 (void)mlx90614_deinit(&gs_handle);
388
389 return 1;
390 }
391 mlx90614_interface_debug_print("mlx90614: check iir %s.\n", iir == MLX90614_IIR_A1_0P166_B1_0P83 ? "ok" : "error");
392
393 /* set iir a1 0.125 b1 0.875 */
395 if (res != 0)
396 {
397 mlx90614_interface_debug_print("mlx90614: set iir failed.\n");
398 (void)mlx90614_deinit(&gs_handle);
399
400 return 1;
401 }
402 mlx90614_interface_debug_print("mlx90614: set iir a1 0.125 b1 0.875.\n");
403 res = mlx90614_get_iir(&gs_handle, &iir);
404 if (res != 0)
405 {
406 mlx90614_interface_debug_print("mlx90614: get iir failed.\n");
407 (void)mlx90614_deinit(&gs_handle);
408
409 return 1;
410 }
411 mlx90614_interface_debug_print("mlx90614: check iir %s.\n", iir == MLX90614_IIR_A1_0P125_B1_0P875 ? "ok" : "error");
412
413 /* set iir a1 1 b1 0 */
414 res = mlx90614_set_iir(&gs_handle, MLX90614_IIR_A1_1_B1_0);
415 if (res != 0)
416 {
417 mlx90614_interface_debug_print("mlx90614: set iir failed.\n");
418 (void)mlx90614_deinit(&gs_handle);
419
420 return 1;
421 }
422 mlx90614_interface_debug_print("mlx90614: set iir a1 1 b1 0.\n");
423 res = mlx90614_get_iir(&gs_handle, &iir);
424 if (res != 0)
425 {
426 mlx90614_interface_debug_print("mlx90614: get iir failed.\n");
427 (void)mlx90614_deinit(&gs_handle);
428
429 return 1;
430 }
431 mlx90614_interface_debug_print("mlx90614: check iir %s.\n", iir == MLX90614_IIR_A1_1_B1_0 ? "ok" : "error");
432
433 /* set iir a1 0.8 b1 0.2 */
435 if (res != 0)
436 {
437 mlx90614_interface_debug_print("mlx90614: set iir failed.\n");
438 (void)mlx90614_deinit(&gs_handle);
439
440 return 1;
441 }
442 mlx90614_interface_debug_print("mlx90614: set iir a1 0.8 b1 0.2.\n");
443 res = mlx90614_get_iir(&gs_handle, &iir);
444 if (res != 0)
445 {
446 mlx90614_interface_debug_print("mlx90614: get iir failed.\n");
447 (void)mlx90614_deinit(&gs_handle);
448
449 return 1;
450 }
451 mlx90614_interface_debug_print("mlx90614: check iir %s.\n", iir == MLX90614_IIR_A1_0P8_B1_0P2 ? "ok" : "error");
452
453 /* set iir a1 0.666 b1 0.333 */
455 if (res != 0)
456 {
457 mlx90614_interface_debug_print("mlx90614: set iir failed.\n");
458 (void)mlx90614_deinit(&gs_handle);
459
460 return 1;
461 }
462 mlx90614_interface_debug_print("mlx90614: set iir a1 0.666 b1 0.333.\n");
463 res = mlx90614_get_iir(&gs_handle, &iir);
464 if (res != 0)
465 {
466 mlx90614_interface_debug_print("mlx90614: get iir failed.\n");
467 (void)mlx90614_deinit(&gs_handle);
468
469 return 1;
470 }
471 mlx90614_interface_debug_print("mlx90614: check iir %s.\n", iir == MLX90614_IIR_A1_0P666_B1_0P333 ? "ok" : "error");
472
473 /* set iir a1 0.571 b1 0.428 */
475 if (res != 0)
476 {
477 mlx90614_interface_debug_print("mlx90614: set iir failed.\n");
478 (void)mlx90614_deinit(&gs_handle);
479
480 return 1;
481 }
482 mlx90614_interface_debug_print("mlx90614: set iir a1 0.571 b1 0.428.\n");
483 res = mlx90614_get_iir(&gs_handle, &iir);
484 if (res != 0)
485 {
486 mlx90614_interface_debug_print("mlx90614: get iir failed.\n");
487 (void)mlx90614_deinit(&gs_handle);
488
489 return 1;
490 }
491 mlx90614_interface_debug_print("mlx90614: check iir %s.\n", iir == MLX90614_IIR_A1_0P571_B1_0P428 ? "ok" : "error");
492
493 /* mlx90614_set_mode/mlx90614_get_mode test */
494 mlx90614_interface_debug_print("mlx90614: mlx90614_set_mode/mlx90614_get_mode test.\n");
495
496 /* set ta tobj1 mode */
497 res = mlx90614_set_mode(&gs_handle, MLX90614_MODE_TA_TOBJ1);
498 if (res != 0)
499 {
500 mlx90614_interface_debug_print("mlx90614: set mode failed.\n");
501 (void)mlx90614_deinit(&gs_handle);
502
503 return 1;
504 }
505 mlx90614_interface_debug_print("mlx90614: set ta tobj1 mode.\n");
506 res = mlx90614_get_mode(&gs_handle, &mode);
507 if (res != 0)
508 {
509 mlx90614_interface_debug_print("mlx90614: get mode failed.\n");
510 (void)mlx90614_deinit(&gs_handle);
511
512 return 1;
513 }
514 mlx90614_interface_debug_print("mlx90614: check mode %s.\n", mode == MLX90614_MODE_TA_TOBJ1 ? "ok" : "error");
515
516 /* set ta tobj2 mode */
517 res = mlx90614_set_mode(&gs_handle, MLX90614_MODE_TA_TOBJ2);
518 if (res != 0)
519 {
520 mlx90614_interface_debug_print("mlx90614: set mode failed.\n");
521 (void)mlx90614_deinit(&gs_handle);
522
523 return 1;
524 }
525 mlx90614_interface_debug_print("mlx90614: set ta tobj2 mode.\n");
526 res = mlx90614_get_mode(&gs_handle, &mode);
527 if (res != 0)
528 {
529 mlx90614_interface_debug_print("mlx90614: get mode failed.\n");
530 (void)mlx90614_deinit(&gs_handle);
531
532 return 1;
533 }
534 mlx90614_interface_debug_print("mlx90614: check mode %s.\n", mode == MLX90614_MODE_TA_TOBJ2 ? "ok" : "error");
535
536 /* set tobj2 mode */
537 res = mlx90614_set_mode(&gs_handle, MLX90614_MODE_TOBJ2);
538 if (res != 0)
539 {
540 mlx90614_interface_debug_print("mlx90614: set mode failed.\n");
541 (void)mlx90614_deinit(&gs_handle);
542
543 return 1;
544 }
545 mlx90614_interface_debug_print("mlx90614: set tobj2 mode.\n");
546 res = mlx90614_get_mode(&gs_handle, &mode);
547 if (res != 0)
548 {
549 mlx90614_interface_debug_print("mlx90614: get mode failed.\n");
550 (void)mlx90614_deinit(&gs_handle);
551
552 return 1;
553 }
554 mlx90614_interface_debug_print("mlx90614: check mode %s.\n", mode == MLX90614_MODE_TOBJ2 ? "ok" : "error");
555
556 /* set tobj1 tobj2 mode */
558 if (res != 0)
559 {
560 mlx90614_interface_debug_print("mlx90614: set mode failed.\n");
561 (void)mlx90614_deinit(&gs_handle);
562
563 return 1;
564 }
565 mlx90614_interface_debug_print("mlx90614: set tobj1 tobj2 mode.\n");
566 res = mlx90614_get_mode(&gs_handle, &mode);
567 if (res != 0)
568 {
569 mlx90614_interface_debug_print("mlx90614: get mode failed.\n");
570 (void)mlx90614_deinit(&gs_handle);
571
572 return 1;
573 }
574 mlx90614_interface_debug_print("mlx90614: check mode %s.\n", mode == MLX90614_MODE_TOBJ1_TOBJ2 ? "ok" : "error");
575
576 /* mlx90614_set_ir_sensor/mlx90614_get_ir_sensor test */
577 mlx90614_interface_debug_print("mlx90614: mlx90614_set_ir_sensor/mlx90614_get_ir_sensor test.\n");
578
579 /* set ir sensor single */
581 if (res != 0)
582 {
583 mlx90614_interface_debug_print("mlx90614: set ir sensor failed.\n");
584 (void)mlx90614_deinit(&gs_handle);
585
586 return 1;
587 }
588 mlx90614_interface_debug_print("mlx90614: set ir sensor single.\n");
589 res = mlx90614_get_ir_sensor(&gs_handle, &sensor);
590 if (res != 0)
591 {
592 mlx90614_interface_debug_print("mlx90614: get ir sensor failed.\n");
593 (void)mlx90614_deinit(&gs_handle);
594
595 return 1;
596 }
597 mlx90614_interface_debug_print("mlx90614: check ir sensor %s.\n", sensor == MLX90614_IR_SENSOR_SINGLE ? "ok" : "error");
598
599 /* set ir sensor dual */
601 if (res != 0)
602 {
603 mlx90614_interface_debug_print("mlx90614: set ir sensor failed.\n");
604 (void)mlx90614_deinit(&gs_handle);
605
606 return 1;
607 }
608 mlx90614_interface_debug_print("mlx90614: set ir sensor dual.\n");
609 res = mlx90614_get_ir_sensor(&gs_handle, &sensor);
610 if (res != 0)
611 {
612 mlx90614_interface_debug_print("mlx90614: get ir sensor failed.\n");
613 (void)mlx90614_deinit(&gs_handle);
614
615 return 1;
616 }
617 mlx90614_interface_debug_print("mlx90614: check ir sensor %s.\n", sensor == MLX90614_IR_SENSOR_DUAL ? "ok" : "error");
618
619 /* mlx90614_set_ks/mlx90614_get_ks test */
620 mlx90614_interface_debug_print("mlx90614: mlx90614_set_ks/mlx90614_get_ks test.\n");
621
622 /* set ks positive */
623 res = mlx90614_set_ks(&gs_handle, MLX90614_KS_POSITIVE);
624 if (res != 0)
625 {
626 mlx90614_interface_debug_print("mlx90614: set ks failed.\n");
627 (void)mlx90614_deinit(&gs_handle);
628
629 return 1;
630 }
631 mlx90614_interface_debug_print("mlx90614: set ks positive.\n");
632 res = mlx90614_get_ks(&gs_handle, &ks);
633 if (res != 0)
634 {
635 mlx90614_interface_debug_print("mlx90614: get ks failed.\n");
636 (void)mlx90614_deinit(&gs_handle);
637
638 return 1;
639 }
640 mlx90614_interface_debug_print("mlx90614: check ks %s.\n", ks == MLX90614_KS_POSITIVE ? "ok" : "error");
641
642 /* set ks negative */
643 res = mlx90614_set_ks(&gs_handle, MLX90614_KS_NEGATIVE);
644 if (res != 0)
645 {
646 mlx90614_interface_debug_print("mlx90614: set ks failed.\n");
647 (void)mlx90614_deinit(&gs_handle);
648
649 return 1;
650 }
651 mlx90614_interface_debug_print("mlx90614: set ks negative.\n");
652 res = mlx90614_get_ks(&gs_handle, &ks);
653 if (res != 0)
654 {
655 mlx90614_interface_debug_print("mlx90614: get ks failed.\n");
656 (void)mlx90614_deinit(&gs_handle);
657
658 return 1;
659 }
660 mlx90614_interface_debug_print("mlx90614: check ks %s.\n", ks == MLX90614_KS_NEGATIVE ? "ok" : "error");
661
662 /* mlx90614_set_kt2/mlx90614_get_kt2 test */
663 mlx90614_interface_debug_print("mlx90614: mlx90614_set_kt2/mlx90614_get_kt2 test.\n");
664
665 /* set kt2 positive */
666 res = mlx90614_set_kt2(&gs_handle, MLX90614_KT2_POSITIVE);
667 if (res != 0)
668 {
669 mlx90614_interface_debug_print("mlx90614: set kt2 failed.\n");
670 (void)mlx90614_deinit(&gs_handle);
671
672 return 1;
673 }
674 mlx90614_interface_debug_print("mlx90614: set kt2 positive.\n");
675 res = mlx90614_get_kt2(&gs_handle, &kt2);
676 if (res != 0)
677 {
678 mlx90614_interface_debug_print("mlx90614: get kt2 failed.\n");
679 (void)mlx90614_deinit(&gs_handle);
680
681 return 1;
682 }
683 mlx90614_interface_debug_print("mlx90614: check kt2 %s.\n", kt2 == MLX90614_KT2_POSITIVE ? "ok" : "error");
684
685 /* set kt2 negative */
686 res = mlx90614_set_kt2(&gs_handle, MLX90614_KT2_NEGATIVE);
687 if (res != 0)
688 {
689 mlx90614_interface_debug_print("mlx90614: set kt2 failed.\n");
690 (void)mlx90614_deinit(&gs_handle);
691
692 return 1;
693 }
694 mlx90614_interface_debug_print("mlx90614: set kt2 negative.\n");
695 res = mlx90614_get_kt2(&gs_handle, &kt2);
696 if (res != 0)
697 {
698 mlx90614_interface_debug_print("mlx90614: get kt2 failed.\n");
699 (void)mlx90614_deinit(&gs_handle);
700
701 return 1;
702 }
703 mlx90614_interface_debug_print("mlx90614: check kt2 %s.\n", kt2 == MLX90614_KT2_NEGATIVE ? "ok" : "error");
704
705 /* mlx90614_set_gain/mlx90614_get_gain test */
706 mlx90614_interface_debug_print("mlx90614: mlx90614_set_gain/mlx90614_get_gain test.\n");
707
708 /* set gain 1 */
709 res = mlx90614_set_gain(&gs_handle, MLX90614_GAIN_1);
710 if (res != 0)
711 {
712 mlx90614_interface_debug_print("mlx90614: set gain failed.\n");
713 (void)mlx90614_deinit(&gs_handle);
714
715 return 1;
716 }
717 mlx90614_interface_debug_print("mlx90614: set gain 1.\n");
718 res = mlx90614_get_gain(&gs_handle, &gain);
719 if (res != 0)
720 {
721 mlx90614_interface_debug_print("mlx90614: get gain failed.\n");
722 (void)mlx90614_deinit(&gs_handle);
723
724 return 1;
725 }
726 mlx90614_interface_debug_print("mlx90614: check gain %s.\n", gain == MLX90614_GAIN_1 ? "ok" : "error");
727
728 /* set gain 3 */
729 res = mlx90614_set_gain(&gs_handle, MLX90614_GAIN_3);
730 if (res != 0)
731 {
732 mlx90614_interface_debug_print("mlx90614: set gain failed.\n");
733 (void)mlx90614_deinit(&gs_handle);
734
735 return 1;
736 }
737 mlx90614_interface_debug_print("mlx90614: set gain 3.\n");
738 res = mlx90614_get_gain(&gs_handle, &gain);
739 if (res != 0)
740 {
741 mlx90614_interface_debug_print("mlx90614: get gain failed.\n");
742 (void)mlx90614_deinit(&gs_handle);
743
744 return 1;
745 }
746 mlx90614_interface_debug_print("mlx90614: check gain %s.\n", gain == MLX90614_GAIN_3 ? "ok" : "error");
747
748 /* set gain 6 */
749 res = mlx90614_set_gain(&gs_handle, MLX90614_GAIN_6);
750 if (res != 0)
751 {
752 mlx90614_interface_debug_print("mlx90614: set gain failed.\n");
753 (void)mlx90614_deinit(&gs_handle);
754
755 return 1;
756 }
757 mlx90614_interface_debug_print("mlx90614: set gain 6.\n");
758 res = mlx90614_get_gain(&gs_handle, &gain);
759 if (res != 0)
760 {
761 mlx90614_interface_debug_print("mlx90614: get gain failed.\n");
762 (void)mlx90614_deinit(&gs_handle);
763
764 return 1;
765 }
766 mlx90614_interface_debug_print("mlx90614: check gain %s.\n", gain == MLX90614_GAIN_6 ? "ok" : "error");
767
768 /* set gain 12.5 */
769 res = mlx90614_set_gain(&gs_handle, MLX90614_GAIN_12P5);
770 if (res != 0)
771 {
772 mlx90614_interface_debug_print("mlx90614: set gain failed.\n");
773 (void)mlx90614_deinit(&gs_handle);
774
775 return 1;
776 }
777 mlx90614_interface_debug_print("mlx90614: set gain 12.5.\n");
778 res = mlx90614_get_gain(&gs_handle, &gain);
779 if (res != 0)
780 {
781 mlx90614_interface_debug_print("mlx90614: get gain failed.\n");
782 (void)mlx90614_deinit(&gs_handle);
783
784 return 1;
785 }
786 mlx90614_interface_debug_print("mlx90614: check gain %s.\n", gain == MLX90614_GAIN_12P5 ? "ok" : "error");
787
788 /* set gain 25 */
789 res = mlx90614_set_gain(&gs_handle, MLX90614_GAIN_25);
790 if (res != 0)
791 {
792 mlx90614_interface_debug_print("mlx90614: set gain failed.\n");
793 (void)mlx90614_deinit(&gs_handle);
794
795 return 1;
796 }
797 mlx90614_interface_debug_print("mlx90614: set gain 25.\n");
798 res = mlx90614_get_gain(&gs_handle, &gain);
799 if (res != 0)
800 {
801 mlx90614_interface_debug_print("mlx90614: get gain failed.\n");
802 (void)mlx90614_deinit(&gs_handle);
803
804 return 1;
805 }
806 mlx90614_interface_debug_print("mlx90614: check gain %s.\n", gain == MLX90614_GAIN_25 ? "ok" : "error");
807
808 /* set gain 50 */
809 res = mlx90614_set_gain(&gs_handle, MLX90614_GAIN_50);
810 if (res != 0)
811 {
812 mlx90614_interface_debug_print("mlx90614: set gain failed.\n");
813 (void)mlx90614_deinit(&gs_handle);
814
815 return 1;
816 }
817 mlx90614_interface_debug_print("mlx90614: set gain 50.\n");
818 res = mlx90614_get_gain(&gs_handle, &gain);
819 if (res != 0)
820 {
821 mlx90614_interface_debug_print("mlx90614: get gain failed.\n");
822 (void)mlx90614_deinit(&gs_handle);
823
824 return 1;
825 }
826 mlx90614_interface_debug_print("mlx90614: check gain %s.\n", gain == MLX90614_GAIN_50 ? "ok" : "error");
827
828 /* set gain 100 */
829 res = mlx90614_set_gain(&gs_handle, MLX90614_GAIN_100);
830 if (res != 0)
831 {
832 mlx90614_interface_debug_print("mlx90614: set gain failed.\n");
833 (void)mlx90614_deinit(&gs_handle);
834
835 return 1;
836 }
837 mlx90614_interface_debug_print("mlx90614: set gain 100.\n");
838 res = mlx90614_get_gain(&gs_handle, &gain);
839 if (res != 0)
840 {
841 mlx90614_interface_debug_print("mlx90614: get gain failed.\n");
842 (void)mlx90614_deinit(&gs_handle);
843
844 return 1;
845 }
846 mlx90614_interface_debug_print("mlx90614: check gain %s.\n", gain == MLX90614_GAIN_100 ? "ok" : "error");
847
848 /* mlx90614_set_sensor_test/mlx90614_get_sensor_test test */
849 mlx90614_interface_debug_print("mlx90614: mlx90614_set_sensor_test/mlx90614_get_sensor_test test.\n");
850
851 /* enable sensor test */
853 if (res != 0)
854 {
855 mlx90614_interface_debug_print("mlx90614: set sensor test failed.\n");
856 (void)mlx90614_deinit(&gs_handle);
857
858 return 1;
859 }
860 mlx90614_interface_debug_print("mlx90614: enable sensor test.\n");
861 res = mlx90614_get_sensor_test(&gs_handle, &enable);
862 if (res != 0)
863 {
864 mlx90614_interface_debug_print("mlx90614: get sensor test failed.\n");
865 (void)mlx90614_deinit(&gs_handle);
866
867 return 1;
868 }
869 mlx90614_interface_debug_print("mlx90614: check sensor test %s.\n", enable == MLX90614_BOOL_TRUE ? "ok" : "error");
870
871 /* disable sensor test */
873 if (res != 0)
874 {
875 mlx90614_interface_debug_print("mlx90614: set sensor test failed.\n");
876 (void)mlx90614_deinit(&gs_handle);
877
878 return 1;
879 }
880 mlx90614_interface_debug_print("mlx90614: disable sensor test.\n");
881 res = mlx90614_get_sensor_test(&gs_handle, &enable);
882 if (res != 0)
883 {
884 mlx90614_interface_debug_print("mlx90614: get sensor test failed.\n");
885 (void)mlx90614_deinit(&gs_handle);
886
887 return 1;
888 }
889 mlx90614_interface_debug_print("mlx90614: check sensor test %s.\n", enable == MLX90614_BOOL_FALSE ? "ok" : "error");
890
891 /* mlx90614_set_repeat_sensor_test/mlx90614_get_repeat_sensor_test test */
892 mlx90614_interface_debug_print("mlx90614: mlx90614_set_repeat_sensor_test/mlx90614_get_repeat_sensor_test test.\n");
893
894 /* enable repeat sensor test */
896 if (res != 0)
897 {
898 mlx90614_interface_debug_print("mlx90614: set repeat sensor test failed.\n");
899 (void)mlx90614_deinit(&gs_handle);
900
901 return 1;
902 }
903 mlx90614_interface_debug_print("mlx90614: enable repeat sensor test.\n");
904 res = mlx90614_get_repeat_sensor_test(&gs_handle, &enable);
905 if (res != 0)
906 {
907 mlx90614_interface_debug_print("mlx90614: get repeat sensor test failed.\n");
908 (void)mlx90614_deinit(&gs_handle);
909
910 return 1;
911 }
912 mlx90614_interface_debug_print("mlx90614: check repeat sensor test %s.\n", enable == MLX90614_BOOL_TRUE ? "ok" : "error");
913
914 /* disable repeat sensor test */
916 if (res != 0)
917 {
918 mlx90614_interface_debug_print("mlx90614: set repeat sensor test failed.\n");
919 (void)mlx90614_deinit(&gs_handle);
920
921 return 1;
922 }
923 mlx90614_interface_debug_print("mlx90614: disable repeat sensor test.\n");
924 res = mlx90614_get_repeat_sensor_test(&gs_handle, &enable);
925 if (res != 0)
926 {
927 mlx90614_interface_debug_print("mlx90614: get repeat sensor test failed.\n");
928 (void)mlx90614_deinit(&gs_handle);
929
930 return 1;
931 }
932 mlx90614_interface_debug_print("mlx90614: check repeat sensor test %s.\n", enable == MLX90614_BOOL_FALSE ? "ok" : "error");
933
934 /* mlx90614_set_emissivity_correction_coefficient/mlx90614_get_emissivity_correction_coefficient test */
935 mlx90614_interface_debug_print("mlx90614: mlx90614_set_emissivity_correction_coefficient/mlx90614_get_emissivity_correction_coefficient test.\n");
936
937 value = rand() % 65536;
938 res = mlx90614_set_emissivity_correction_coefficient(&gs_handle, value);
939 if (res != 0)
940 {
941 mlx90614_interface_debug_print("mlx90614: set emissivity correction coefficient failed.\n");
942 (void)mlx90614_deinit(&gs_handle);
943
944 return 1;
945 }
946 mlx90614_interface_debug_print("mlx90614: set emissivity correction coefficient %d.\n", value);
947 res = mlx90614_get_emissivity_correction_coefficient(&gs_handle, (uint16_t *)&value_check);
948 if (res != 0)
949 {
950 mlx90614_interface_debug_print("mlx90614: get emissivity correction coefficient failed.\n");
951 (void)mlx90614_deinit(&gs_handle);
952
953 return 1;
954 }
955 mlx90614_interface_debug_print("mlx90614: check emissivity correction coefficient %s.\n", value_check == value ? "ok" : "error");
956
957 /* mlx90614_emissivity_correction_coefficient_convert_to_register/mlx90614_emissivity_correction_coefficient_convert_to_data test */
958 mlx90614_interface_debug_print("mlx90614: mlx90614_emissivity_correction_coefficient_convert_to_register/mlx90614_emissivity_correction_coefficient_convert_to_data test.\n");
959
960 s = (double)(rand() % 65536) / 65536.0;
961 res = mlx90614_emissivity_correction_coefficient_convert_to_register(&gs_handle, s, (uint16_t *)&value);
962 if (res != 0)
963 {
964 mlx90614_interface_debug_print("mlx90614: emissivity correction coefficient convert to register failed.\n");
965 (void)mlx90614_deinit(&gs_handle);
966
967 return 1;
968 }
969 mlx90614_interface_debug_print("mlx90614: %f convert to register 0x%02X.\n", s, value);
970 res = mlx90614_emissivity_correction_coefficient_convert_to_data(&gs_handle, value, (double *)&s_check);
971 if (res != 0)
972 {
973 mlx90614_interface_debug_print("mlx90614: emissivity correction coefficient convert to data failed.\n");
974 (void)mlx90614_deinit(&gs_handle);
975
976 return 1;
977 }
978 mlx90614_interface_debug_print("mlx90614: 0x%02X convert to data %f.\n", value, s_check);
979
980 /* mlx90614_get_id test */
981 mlx90614_interface_debug_print("mlx90614: mlx90614_get_id test.\n");
982
983 res = mlx90614_get_id(&gs_handle, (uint16_t *)id);
984 if (res != 0)
985 {
986 mlx90614_interface_debug_print("mlx90614: get id failed.\n");
987 (void)mlx90614_deinit(&gs_handle);
988
989 return 1;
990 }
991 mlx90614_interface_debug_print("mlx90614: get id is 0x%02X 0x%02X 0x%02X 0x%02X.\n", id[0], id[1], id[2], id[3]);
992
993 /* mlx90614_enter_sleep_mode test */
994 mlx90614_interface_debug_print("mlx90614: mlx90614_enter_sleep_mode test.\n");
995
996 res = mlx90614_enter_sleep_mode(&gs_handle);
997 if (res != 0)
998 {
999 mlx90614_interface_debug_print("mlx90614: enter sleep mode failed.\n");
1000 (void)mlx90614_deinit(&gs_handle);
1001
1002 return 1;
1003 }
1004 mlx90614_interface_debug_print("mlx90614: enter sleep mode.\n");
1005
1006 /* mlx90614_exit_sleep_mode test */
1007 mlx90614_interface_debug_print("mlx90614: mlx90614_exit_sleep_mode test.\n");
1008
1009 res = mlx90614_exit_sleep_mode(&gs_handle);
1010 if (res != 0)
1011 {
1012 mlx90614_interface_debug_print("mlx90614: exit sleep mode failed.\n");
1013 (void)mlx90614_deinit(&gs_handle);
1014
1015 return 1;
1016 }
1017 mlx90614_interface_debug_print("mlx90614: exit sleep mode.\n");
1018
1019 /* mlx90614_get_flag test */
1020 mlx90614_interface_debug_print("mlx90614: mlx90614_get_flag test.\n");
1021
1022 res = mlx90614_get_flag(&gs_handle, (uint16_t *)&flag);
1023 if (res != 0)
1024 {
1025 mlx90614_interface_debug_print("mlx90614: get flag failed.\n");
1026 (void)mlx90614_deinit(&gs_handle);
1027
1028 return 1;
1029 }
1030 mlx90614_interface_debug_print("mlx90614: get flag 0x%04X.\n", flag);
1031
1032 /* finish register test */
1033 mlx90614_interface_debug_print("mlx90614: finish register test.\n");
1034 (void)mlx90614_deinit(&gs_handle);
1035
1036 return 0;
1037}
driver mlx90614 register test header file
uint8_t mlx90614_set_gain(mlx90614_handle_t *handle, mlx90614_gain_t gain)
set the gain param
mlx90614_gain_t
mlx90614 gain enumeration definition
mlx90614_ir_sensor_t
mlx90614 ir sensor enumeration definition
mlx90614_ks_t
mlx90614 ks enumeration definition
uint8_t mlx90614_emissivity_correction_coefficient_convert_to_data(mlx90614_handle_t *handle, uint16_t reg, double *s)
emissivity correction coefficient convert to data
uint8_t mlx90614_set_fir_length(mlx90614_handle_t *handle, mlx90614_fir_length_t len)
set the ir sensor fir length
uint8_t mlx90614_get_emissivity_correction_coefficient(mlx90614_handle_t *handle, uint16_t *value)
get the emissivity correction coefficient
uint8_t mlx90614_set_repeat_sensor_test(mlx90614_handle_t *handle, mlx90614_bool_t enable)
enable or disable the repeat sensor test
uint8_t mlx90614_get_id(mlx90614_handle_t *handle, uint16_t id[4])
get the chip id
uint8_t mlx90614_get_mode(mlx90614_handle_t *handle, mlx90614_mode_t *mode)
get the mode
uint8_t mlx90614_set_mode(mlx90614_handle_t *handle, mlx90614_mode_t mode)
set the mode
uint8_t mlx90614_set_emissivity_correction_coefficient(mlx90614_handle_t *handle, uint16_t value)
set the emissivity correction coefficient
uint8_t mlx90614_get_kt2(mlx90614_handle_t *handle, mlx90614_kt2_t *kt2)
get the kt2 param
uint8_t mlx90614_get_sensor_test(mlx90614_handle_t *handle, mlx90614_bool_t *enable)
get the sensor test status
mlx90614_bool_t
mlx90614 bool enumeration definition
uint8_t mlx90614_get_flag(mlx90614_handle_t *handle, uint16_t *flag)
get the flag
uint8_t mlx90614_set_iir(mlx90614_handle_t *handle, mlx90614_iir_t iir)
set the iir param
uint8_t mlx90614_set_ir_sensor(mlx90614_handle_t *handle, mlx90614_ir_sensor_t sensor)
set the ir sensor mode
uint8_t mlx90614_get_gain(mlx90614_handle_t *handle, mlx90614_gain_t *gain)
get the gain param
uint8_t mlx90614_get_repeat_sensor_test(mlx90614_handle_t *handle, mlx90614_bool_t *enable)
get the repeat sensor test status
uint8_t mlx90614_get_iir(mlx90614_handle_t *handle, mlx90614_iir_t *iir)
get the iir param
uint8_t mlx90614_exit_sleep_mode(mlx90614_handle_t *handle)
exit from sleep mode
uint8_t mlx90614_set_ks(mlx90614_handle_t *handle, mlx90614_ks_t ks)
set the ks param
uint8_t mlx90614_get_ks(mlx90614_handle_t *handle, mlx90614_ks_t *ks)
get the ks param
mlx90614_mode_t
mlx90614 mode enumeration definition
uint8_t mlx90614_pwm_to_smbus(mlx90614_handle_t *handle)
change pwm mode to smbus mode
mlx90614_iir_t
mlx90614 iir enumeration definition
uint8_t mlx90614_get_ir_sensor(mlx90614_handle_t *handle, mlx90614_ir_sensor_t *sensor)
get the ir sensor mode
uint8_t mlx90614_set_kt2(mlx90614_handle_t *handle, mlx90614_kt2_t kt2)
set the kt2 param
uint8_t mlx90614_set_sensor_test(mlx90614_handle_t *handle, mlx90614_bool_t enable)
enable or disable the sensor test
uint8_t mlx90614_get_fir_length(mlx90614_handle_t *handle, mlx90614_fir_length_t *len)
get the ir sensor fir length
uint8_t mlx90614_enter_sleep_mode(mlx90614_handle_t *handle)
enter to sleep mode
mlx90614_kt2_t
mlx90614 kt2 enumeration definition
uint8_t mlx90614_emissivity_correction_coefficient_convert_to_register(mlx90614_handle_t *handle, double s, uint16_t *reg)
convert the emissivity correction coefficient to the register raw data
mlx90614_fir_length_t
mlx90614 fir length enumeration definition
@ MLX90614_GAIN_3
@ MLX90614_GAIN_25
@ MLX90614_GAIN_12P5
@ MLX90614_GAIN_1
@ MLX90614_GAIN_50
@ MLX90614_GAIN_6
@ MLX90614_GAIN_100
@ MLX90614_IR_SENSOR_SINGLE
@ MLX90614_IR_SENSOR_DUAL
@ MLX90614_KS_NEGATIVE
@ MLX90614_KS_POSITIVE
@ MLX90614_BOOL_FALSE
@ MLX90614_BOOL_TRUE
@ MLX90614_MODE_TOBJ1_TOBJ2
@ MLX90614_MODE_TOBJ2
@ MLX90614_MODE_TA_TOBJ1
@ MLX90614_MODE_TA_TOBJ2
@ MLX90614_IIR_A1_0P25_B1_0P75
@ MLX90614_IIR_A1_0P571_B1_0P428
@ MLX90614_IIR_A1_0P5_B1_0P5
@ MLX90614_IIR_A1_0P166_B1_0P83
@ MLX90614_IIR_A1_0P8_B1_0P2
@ MLX90614_IIR_A1_0P666_B1_0P333
@ MLX90614_IIR_A1_0P125_B1_0P875
@ MLX90614_IIR_A1_1_B1_0
@ MLX90614_KT2_POSITIVE
@ MLX90614_KT2_NEGATIVE
@ MLX90614_FIR_LENGTH_16
@ MLX90614_FIR_LENGTH_64
@ MLX90614_FIR_LENGTH_128
@ MLX90614_FIR_LENGTH_1024
@ MLX90614_FIR_LENGTH_32
@ MLX90614_FIR_LENGTH_256
@ MLX90614_FIR_LENGTH_512
@ MLX90614_FIR_LENGTH_8
uint8_t mlx90614_info(mlx90614_info_t *info)
get chip information
uint8_t mlx90614_get_addr(mlx90614_handle_t *handle, uint8_t *addr)
get the address
uint8_t mlx90614_init(mlx90614_handle_t *handle)
initialize the chip
uint8_t mlx90614_set_addr(mlx90614_handle_t *handle, uint8_t addr)
set the address
struct mlx90614_info_s mlx90614_info_t
mlx90614 information structure definition
uint8_t mlx90614_deinit(mlx90614_handle_t *handle)
close the chip
struct mlx90614_handle_s mlx90614_handle_t
mlx90614 handle structure definition
@ MLX90614_ADDRESS_DEFAULT
uint8_t mlx90614_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t mlx90614_interface_iic_init(void)
interface iic bus init
void mlx90614_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t mlx90614_interface_iic_deinit(void)
interface iic bus deinit
uint8_t mlx90614_interface_sda_write(uint8_t value)
interface sda write
uint8_t mlx90614_interface_scl_write(uint8_t value)
interface scl write
uint8_t mlx90614_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
void mlx90614_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t mlx90614_register_test(void)
register test
char manufacturer_name[32]