LibDriver MLX90614  1.0.0
MLX90614 full-featured driver
driver_mlx90614_register_test.c
Go to the documentation of this file.
1 
38 #include <stdlib.h>
39 
40 static mlx90614_handle_t gs_handle;
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;
58  mlx90614_iir_t iir;
59  mlx90614_mode_t mode;
60  mlx90614_ir_sensor_t sensor;
61  mlx90614_ks_t ks;
62  mlx90614_kt2_t kt2;
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 */
130  res = mlx90614_set_addr(&gs_handle, MLX90614_ADDRESS_DEFAULT);
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 */
334  res = mlx90614_set_iir(&gs_handle, MLX90614_IIR_A1_0P5_B1_0P5);
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 */
434  res = mlx90614_set_iir(&gs_handle, MLX90614_IIR_A1_0P8_B1_0P2);
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 */
557  res = mlx90614_set_mode(&gs_handle, MLX90614_MODE_TOBJ1_TOBJ2);
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 */
852  res = mlx90614_set_sensor_test(&gs_handle, MLX90614_BOOL_TRUE);
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
uint8_t mlx90614_deinit(mlx90614_handle_t *handle)
close the chip
@ 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
mlx90614 handle structure definition
mlx90614 information structure definition
uint32_t driver_version
char manufacturer_name[32]