LibDriver SEN5X
Loading...
Searching...
No Matches
driver_sen5x_register_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static sen5x_handle_t gs_handle;
41
51{
52 uint8_t res;
53 uint32_t second;
54 uint32_t second_check;
55 char buf[32];
56 int16_t reg16s0;
57 int16_t reg16s0_check;
58 int16_t reg16s1;
59 int16_t reg16s1_check;
60 int16_t reg16s2;
61 int16_t reg16s2_check;
62 int16_t reg16s3;
63 int16_t reg16s3_check;
64 int16_t reg16s4;
65 int16_t reg16s4_check;
66 int16_t reg16s5;
67 int16_t reg16s5_check;
68 uint16_t reg16u0;
69 uint16_t reg16u0_check;
70 uint8_t version;
71 uint32_t status;
72 uint16_t state[4];
73 uint16_t state_check[4];
74 float f0;
75 float f0_check;
76 float f1;
77 float f1_check;
78 float f2;
79 float f2_check;
80 sen5x_info_t info;
81 sen5x_type_t type_check;
84
85 /* link functions */
93
94 /* get information */
95 res = sen5x_info(&info);
96 if (res != 0)
97 {
98 sen5x_interface_debug_print("sen5x: get info failed.\n");
99
100 return 1;
101 }
102 else
103 {
104 /* print chip info */
105 sen5x_interface_debug_print("sen5x: chip is %s.\n", info.chip_name);
106 sen5x_interface_debug_print("sen5x: manufacturer is %s.\n", info.manufacturer_name);
107 sen5x_interface_debug_print("sen5x: interface is %s.\n", info.interface);
108 sen5x_interface_debug_print("sen5x: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
109 sen5x_interface_debug_print("sen5x: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
110 sen5x_interface_debug_print("sen5x: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
111 sen5x_interface_debug_print("sen5x: max current is %0.2fmA.\n", info.max_current_ma);
112 sen5x_interface_debug_print("sen5x: max temperature is %0.1fC.\n", info.temperature_max);
113 sen5x_interface_debug_print("sen5x: min temperature is %0.1fC.\n", info.temperature_min);
114 }
115
116 /* start register test */
117 sen5x_interface_debug_print("sen5x: start register test.\n");
118
119 /* sen5x_set_type/sen5x_get_type test */
120 sen5x_interface_debug_print("sen5x: sen5x_set_type/sen5x_get_type test.\n");
121
122 /* set type sen50 */
123 res = sen5x_set_type(&gs_handle, SEN50);
124 if (res != 0)
125 {
126 sen5x_interface_debug_print("sen5x: set type failed.\n");
127
128 return 1;
129 }
130 sen5x_interface_debug_print("sen5x: set type sen50.\n");
131 res = sen5x_get_type(&gs_handle, &type_check);
132 if (res != 0)
133 {
134 sen5x_interface_debug_print("sen5x: get type failed.\n");
135
136 return 1;
137 }
138 sen5x_interface_debug_print("sen5x: check type %s.\n", SEN50 == type_check ? "ok" : "error");
139
140 /* set type sen54 */
141 res = sen5x_set_type(&gs_handle, SEN54);
142 if (res != 0)
143 {
144 sen5x_interface_debug_print("sen5x: set type failed.\n");
145
146 return 1;
147 }
148 sen5x_interface_debug_print("sen5x: set type sen54.\n");
149 res = sen5x_get_type(&gs_handle, &type_check);
150 if (res != 0)
151 {
152 sen5x_interface_debug_print("sen5x: get type failed.\n");
153
154 return 1;
155 }
156 sen5x_interface_debug_print("sen5x: check type %s.\n", SEN54 == type_check ? "ok" : "error");
157
158 /* set type sen55 */
159 res = sen5x_set_type(&gs_handle, SEN55);
160 if (res != 0)
161 {
162 sen5x_interface_debug_print("sen5x: set type failed.\n");
163
164 return 1;
165 }
166 sen5x_interface_debug_print("sen5x: set type sen55.\n");
167 res = sen5x_get_type(&gs_handle, &type_check);
168 if (res != 0)
169 {
170 sen5x_interface_debug_print("sen5x: get type failed.\n");
171
172 return 1;
173 }
174 sen5x_interface_debug_print("sen5x: check type %s.\n", SEN55 == type_check ? "ok" : "error");
175
176 /* set the type */
177 res = sen5x_set_type(&gs_handle, type);
178 if (res != 0)
179 {
180 sen5x_interface_debug_print("sen5x: set type failed.\n");
181
182 return 1;
183 }
184
185 /* init the chip */
186 res = sen5x_init(&gs_handle);
187 if (res != 0)
188 {
189 sen5x_interface_debug_print("sen5x: init failed.\n");
190
191 return 1;
192 }
193
194 /* sen5x_set_auto_cleaning_interval/sen5x_get_auto_cleaning_interval test */
195 sen5x_interface_debug_print("sen5x: sen5x_set_auto_cleaning_interval/sen5x_get_auto_cleaning_interval test.\n");
196
197 second = rand() % 65536 + 65536;
198 res = sen5x_set_auto_cleaning_interval(&gs_handle, second);
199 if (res != 0)
200 {
201 sen5x_interface_debug_print("sen5x: set auto cleaning interval failed.\n");
202 (void)sen5x_deinit(&gs_handle);
203
204 return 1;
205 }
206 sen5x_interface_debug_print("sen5x: set auto cleaning interval %d.\n", second);
207 res = sen5x_get_auto_cleaning_interval(&gs_handle, (uint32_t *)&second_check);
208 if (res != 0)
209 {
210 sen5x_interface_debug_print("sen5x: get auto cleaning interval failed.\n");
211 (void)sen5x_deinit(&gs_handle);
212
213 return 1;
214 }
215 sen5x_interface_debug_print("sen5x: check interval %s.\n", second_check == second ? "ok" : "error");
216
217 /* sen5x_disable_auto_cleaning_interval test */
218 sen5x_interface_debug_print("sen5x: sen5x_disable_auto_cleaning_interval test.\n");
219 res = sen5x_disable_auto_cleaning_interval(&gs_handle);
220 if (res != 0)
221 {
222 sen5x_interface_debug_print("sen5x: disable auto cleaning interval failed.\n");
223 (void)sen5x_deinit(&gs_handle);
224
225 return 1;
226 }
227 sen5x_interface_debug_print("sen5x: check disable cleaning %s.\n", res == 0 ? "ok" : "error");
228
229 if (type != SEN50)
230 {
231 /* sen5x_set_temperature_compensation/sen5x_get_temperature_compensation test */
232 sen5x_interface_debug_print("sen5x: sen5x_set_temperature_compensation/sen5x_get_temperature_compensation test.\n");
233
234 reg16s0 = rand() % 100;
235 reg16s1 = -(rand() % 100);
236 reg16u0 = rand() % 100;
237 res = sen5x_set_temperature_compensation(&gs_handle, reg16s0, reg16s1, reg16u0);
238 if (res != 0)
239 {
240 sen5x_interface_debug_print("sen5x: set temperature compensation failed.\n");
241 (void)sen5x_deinit(&gs_handle);
242
243 return 1;
244 }
245 sen5x_interface_debug_print("sen5x: set temperature offset %d.\n", reg16s0);
246 sen5x_interface_debug_print("sen5x: set normalized temperature offset slope %d.\n", reg16s1);
247 sen5x_interface_debug_print("sen5x: set time constant %d.\n", reg16u0);
248 res = sen5x_get_temperature_compensation(&gs_handle, &reg16s0_check, &reg16s1_check, &reg16u0_check);
249 if (res != 0)
250 {
251 sen5x_interface_debug_print("sen5x: get temperature compensation failed.\n");
252 (void)sen5x_deinit(&gs_handle);
253
254 return 1;
255 }
256 sen5x_interface_debug_print("sen5x: check temperature offset %s.\n", reg16s0 == reg16s0_check ? "ok" : "error");
257 sen5x_interface_debug_print("sen5x: check normalized temperature offset slope %s.\n", reg16s1 == reg16s1_check ? "ok" : "error");
258 sen5x_interface_debug_print("sen5x: check time constant %s.\n", reg16u0 == reg16u0_check ? "ok" : "error");
259
260 /* restore */
261 res = sen5x_set_temperature_compensation(&gs_handle, 0, 0, 0);
262 if (res != 0)
263 {
264 sen5x_interface_debug_print("sen5x: set temperature compensation failed.\n");
265 (void)sen5x_deinit(&gs_handle);
266
267 return 1;
268 }
269 }
270
271 if (type != SEN50)
272 {
273 /* sen5x_set_warm_start/sen5x_get_warm_start test */
274 sen5x_interface_debug_print("sen5x: sen5x_set_warm_start/sen5x_get_warm_start test.\n");
275
276 reg16u0 = rand() % 100;
277 res = sen5x_set_warm_start(&gs_handle, reg16u0);
278 if (res != 0)
279 {
280 sen5x_interface_debug_print("sen5x: set warm start failed.\n");
281 (void)sen5x_deinit(&gs_handle);
282
283 return 1;
284 }
285 sen5x_interface_debug_print("sen5x: set warm start %d.\n", reg16u0);
286 res = sen5x_get_warm_start(&gs_handle, &reg16u0_check);
287 if (res != 0)
288 {
289 sen5x_interface_debug_print("sen5x: get warm start failed.\n");
290 (void)sen5x_deinit(&gs_handle);
291
292 return 1;
293 }
294 sen5x_interface_debug_print("sen5x: check warm start %s.\n", reg16u0 == reg16u0_check ? "ok" : "error");
295
296 /* restore */
297 res = sen5x_set_warm_start(&gs_handle, 0);
298 if (res != 0)
299 {
300 sen5x_interface_debug_print("sen5x: set warm start failed.\n");
301 (void)sen5x_deinit(&gs_handle);
302
303 return 1;
304 }
305 }
306
307 if (type != SEN50)
308 {
309 /* sen5x_set_voc_algorithm_tuning/sen5x_get_voc_algorithm_tuning test */
310 sen5x_interface_debug_print("sen5x: sen5x_set_voc_algorithm_tuning/sen5x_get_voc_algorithm_tuning test.\n");
311
312 reg16s0 = (rand() % 100) + 1;
313 reg16s1 = (rand() % 100) + 1;
314 reg16s2 = (rand() % 100) + 1;
315 reg16s3 = (rand() % 100) + 1;
316 reg16s4 = (rand() % 100) + 10;
317 reg16s5 = (rand() % 100) + 1;
318 res = sen5x_set_voc_algorithm_tuning(&gs_handle, reg16s0, reg16s1, reg16s2,
319 reg16s3, reg16s4, reg16s5);
320 if (res != 0)
321 {
322 sen5x_interface_debug_print("sen5x: set voc algorithm tuning failed.\n");
323 (void)sen5x_deinit(&gs_handle);
324
325 return 1;
326 }
327 sen5x_interface_debug_print("sen5x: set index offset %d.\n", reg16s0);
328 sen5x_interface_debug_print("sen5x: set learning time offset hour %d.\n", reg16s1);
329 sen5x_interface_debug_print("sen5x: set learning time gain hour %d.\n", reg16s2);
330 sen5x_interface_debug_print("sen5x: set gating max duration minute %d.\n", reg16s3);
331 sen5x_interface_debug_print("sen5x: set std initial %d.\n", reg16s4);
332 sen5x_interface_debug_print("sen5x: set gain factor %d.\n", reg16s5);
333 res = sen5x_get_voc_algorithm_tuning(&gs_handle, &reg16s0_check, &reg16s1_check, &reg16s2_check,
334 &reg16s3_check, &reg16s4_check, &reg16s5_check);
335 if (res != 0)
336 {
337 sen5x_interface_debug_print("sen5x: get voc algorithm tuning failed.\n");
338 (void)sen5x_deinit(&gs_handle);
339
340 return 1;
341 }
342 sen5x_interface_debug_print("sen5x: check index offset %s.\n", reg16s0 == reg16s0_check ? "ok" : "error");
343 sen5x_interface_debug_print("sen5x: check learning time offset hour %s.\n", reg16s1 == reg16s1_check ? "ok" : "error");
344 sen5x_interface_debug_print("sen5x: check learning time gain hour %s.\n", reg16s2 == reg16s2_check ? "ok" : "error");
345 sen5x_interface_debug_print("sen5x: check gating max duration minute %s.\n", reg16s3 == reg16s3_check ? "ok" : "error");
346 sen5x_interface_debug_print("sen5x: check std initial %s.\n", reg16s4 == reg16s4_check ? "ok" : "error");
347 sen5x_interface_debug_print("sen5x: check gain factor %s.\n", reg16s5 == reg16s5_check ? "ok" : "error");
348
349 /* restore */
350 res = sen5x_set_voc_algorithm_tuning(&gs_handle, 100, 12, 12, 180, 50, 230);
351 if (res != 0)
352 {
353 sen5x_interface_debug_print("sen5x: set voc algorithm tuning failed.\n");
354 (void)sen5x_deinit(&gs_handle);
355
356 return 1;
357 }
358 }
359
360 if (type == SEN55)
361 {
362 /* sen5x_set_nox_algorithm_tuning/sen5x_get_nox_algorithm_tuning test */
363 sen5x_interface_debug_print("sen5x: sen5x_set_nox_algorithm_tuning/sen5x_get_nox_algorithm_tuning test.\n");
364
365 reg16s0 = (rand() % 100) + 1;
366 reg16s1 = (rand() % 100) + 1;
367 reg16s2 = 12;
368 reg16s3 = (rand() % 100) + 1;
369 reg16s4 = 50;
370 reg16s5 = (rand() % 100) + 1;
371 res = sen5x_set_nox_algorithm_tuning(&gs_handle, reg16s0, reg16s1, reg16s2,
372 reg16s3, reg16s4, reg16s5);
373 if (res != 0)
374 {
375 sen5x_interface_debug_print("sen5x: set nox algorithm tuning failed.\n");
376 (void)sen5x_deinit(&gs_handle);
377
378 return 1;
379 }
380 sen5x_interface_debug_print("sen5x: set index offset %d.\n", reg16s0);
381 sen5x_interface_debug_print("sen5x: set learning time offset hour %d.\n", reg16s1);
382 sen5x_interface_debug_print("sen5x: set learning time gain hour %d.\n", reg16s2);
383 sen5x_interface_debug_print("sen5x: set gating max duration minute %d.\n", reg16s3);
384 sen5x_interface_debug_print("sen5x: set std initial %d.\n", reg16s4);
385 sen5x_interface_debug_print("sen5x: set gain factor %d.\n", reg16s5);
386 res = sen5x_get_nox_algorithm_tuning(&gs_handle, &reg16s0_check, &reg16s1_check, &reg16s2_check,
387 &reg16s3_check, &reg16s4_check, &reg16s5_check);
388 if (res != 0)
389 {
390 sen5x_interface_debug_print("sen5x: get nox algorithm tuning failed.\n");
391 (void)sen5x_deinit(&gs_handle);
392
393 return 1;
394 }
395 sen5x_interface_debug_print("sen5x: check index offset %s.\n", reg16s0 == reg16s0_check ? "ok" : "error");
396 sen5x_interface_debug_print("sen5x: check learning time offset hour %s.\n", reg16s1 == reg16s1_check ? "ok" : "error");
397 sen5x_interface_debug_print("sen5x: check learning time gain hour %s.\n", reg16s2 == reg16s2_check ? "ok" : "error");
398 sen5x_interface_debug_print("sen5x: check gating max duration minute %s.\n", reg16s3 == reg16s3_check ? "ok" : "error");
399 sen5x_interface_debug_print("sen5x: check std initial %s.\n", reg16s4 == reg16s4_check ? "ok" : "error");
400 sen5x_interface_debug_print("sen5x: check gain factor %s.\n", reg16s5 == reg16s5_check ? "ok" : "error");
401
402 /* restore */
403 res = sen5x_set_nox_algorithm_tuning(&gs_handle, 1, 12, 12, 720, 50, 230);
404 if (res != 0)
405 {
406 sen5x_interface_debug_print("sen5x: set nox algorithm tuning failed.\n");
407 (void)sen5x_deinit(&gs_handle);
408
409 return 1;
410 }
411 }
412
413 if (type != SEN50)
414 {
415 /* sen5x_set_rht_acceleration_mode/sen5x_get_rht_acceleration_mode test */
416 sen5x_interface_debug_print("sen5x: sen5x_set_rht_acceleration_mode/sen5x_get_rht_acceleration_mode test.\n");
417
418 /* set rht acceleration mode low */
420 if (res != 0)
421 {
422 sen5x_interface_debug_print("sen5x: set rht acceleration mode failed.\n");
423 (void)sen5x_deinit(&gs_handle);
424
425 return 1;
426 }
427 sen5x_interface_debug_print("sen5x: set rht acceleration mode low.\n");
428 res = sen5x_get_rht_acceleration_mode(&gs_handle, &mode);
429 if (res != 0)
430 {
431 sen5x_interface_debug_print("sen5x: get rht acceleration mode failed.\n");
432 (void)sen5x_deinit(&gs_handle);
433
434 return 1;
435 }
436 sen5x_interface_debug_print("sen5x: check rht acceleration mode %s.\n", mode == SEN5X_RHT_ACCELERATION_LOW ? "ok" : "error");
437
438 /* set rht acceleration mode high */
440 if (res != 0)
441 {
442 sen5x_interface_debug_print("sen5x: set rht acceleration mode failed.\n");
443 (void)sen5x_deinit(&gs_handle);
444
445 return 1;
446 }
447 sen5x_interface_debug_print("sen5x: set rht acceleration mode high.\n");
448 res = sen5x_get_rht_acceleration_mode(&gs_handle, &mode);
449 if (res != 0)
450 {
451 sen5x_interface_debug_print("sen5x: get rht acceleration mode failed.\n");
452 (void)sen5x_deinit(&gs_handle);
453
454 return 1;
455 }
456 sen5x_interface_debug_print("sen5x: check rht acceleration mode %s.\n", mode == SEN5X_RHT_ACCELERATION_HIGH ? "ok" : "error");
457
458 /* set rht acceleration mode medium */
460 if (res != 0)
461 {
462 sen5x_interface_debug_print("sen5x: set rht acceleration mode failed.\n");
463 (void)sen5x_deinit(&gs_handle);
464
465 return 1;
466 }
467 sen5x_interface_debug_print("sen5x: set rht acceleration mode medium.\n");
468 res = sen5x_get_rht_acceleration_mode(&gs_handle, &mode);
469 if (res != 0)
470 {
471 sen5x_interface_debug_print("sen5x: get rht acceleration mode failed.\n");
472 (void)sen5x_deinit(&gs_handle);
473
474 return 1;
475 }
476 sen5x_interface_debug_print("sen5x: check rht acceleration mode %s.\n", mode == SEN5X_RHT_ACCELERATION_MEDIUM ? "ok" : "error");
477 }
478
479 if (type != SEN50)
480 {
481 /* sen5x_set_voc_algorithm_state/sen5x_get_voc_algorithm_state test */
482 sen5x_interface_debug_print("sen5x: sen5x_set_voc_algorithm_state/sen5x_get_voc_algorithm_state test.\n");
483
484 state[0] = rand() % 0xFFFFU;
485 state[1] = rand() % 0xFFFFU;
486 state[2] = rand() % 0xFFFFU;
487 state[3] = rand() % 0xFFFFU;
488 res = sen5x_set_voc_algorithm_state(&gs_handle, state);
489 if (res != 0)
490 {
491 sen5x_interface_debug_print("sen5x: set voc algorithm state failed.\n");
492 (void)sen5x_deinit(&gs_handle);
493
494 return 1;
495 }
496 sen5x_interface_debug_print("sen5x: set state0 0x%04X.\n", state[0]);
497 sen5x_interface_debug_print("sen5x: set state1 0x%04X.\n", state[1]);
498 sen5x_interface_debug_print("sen5x: set state2 0x%04X.\n", state[2]);
499 sen5x_interface_debug_print("sen5x: set state3 0x%04X.\n", state[3]);
500 res = sen5x_get_voc_algorithm_state(&gs_handle, state_check);
501 if (res != 0)
502 {
503 sen5x_interface_debug_print("sen5x: get voc algorithm state failed.\n");
504 (void)sen5x_deinit(&gs_handle);
505
506 return 1;
507 }
508 sen5x_interface_debug_print("sen5x: check state0 %s.\n", state[0] == state_check[0] ? "ok" : "error");
509 sen5x_interface_debug_print("sen5x: check state1 %s.\n", state[1] == state_check[1] ? "ok" : "error");
510 sen5x_interface_debug_print("sen5x: check state2 %s.\n", state[2] == state_check[2] ? "ok" : "error");
511 sen5x_interface_debug_print("sen5x: check state3 %s.\n", state[3] == state_check[3] ? "ok" : "error");
512 }
513
514 /* sen5x_start_fan_cleaning test */
515 sen5x_interface_debug_print("sen5x: sen5x_start_fan_cleaning test.\n");
516
517 /* start measurement */
518 res = sen5x_start_measurement(&gs_handle);
519 if (res != 0)
520 {
521 sen5x_interface_debug_print("sen5x: start measurement failed.\n");
522 (void)sen5x_deinit(&gs_handle);
523
524 return 1;
525 }
526
527 /* delay 2000 ms */
529
530 /* start fan cleaning */
531 res = sen5x_start_fan_cleaning(&gs_handle);
532 if (res != 0)
533 {
534 sen5x_interface_debug_print("sen5x: start fan cleaning failed.\n");
535 (void)sen5x_deinit(&gs_handle);
536
537 return 1;
538 }
539
540 /* delay 10000 ms */
542
543 /* stop measurement */
544 res = sen5x_stop_measurement(&gs_handle);
545 if (res != 0)
546 {
547 sen5x_interface_debug_print("sen5x: stop measurement failed.\n");
548 (void)sen5x_deinit(&gs_handle);
549
550 return 1;
551 }
552
553 /* delay 2000 ms */
555
556 /* sen5x_get_product_name test */
557 sen5x_interface_debug_print("sen5x: sen5x_get_product_name test.\n");
558
559 /* get product name */
560 res = sen5x_get_product_name(&gs_handle, buf);
561 if (res != 0)
562 {
563 sen5x_interface_debug_print("sen5x: get product name failed.\n");
564 (void)sen5x_deinit(&gs_handle);
565
566 return 1;
567 }
568 sen5x_interface_debug_print("sen5x: product name is %s.\n", buf);
569
570 /* sen5x_get_serial_number test */
571 sen5x_interface_debug_print("sen5x: sen5x_get_serial_number test.\n");
572
573 /* get serial number */
574 res = sen5x_get_serial_number(&gs_handle, buf);
575 if (res != 0)
576 {
577 sen5x_interface_debug_print("sen5x: get serial number failed.\n");
578 (void)sen5x_deinit(&gs_handle);
579
580 return 1;
581 }
582 sen5x_interface_debug_print("sen5x: serial number is %s.\n", buf);
583
584 /* sen5x_get_version test */
585 sen5x_interface_debug_print("sen5x: sen5x_get_version test.\n");
586
587 /* get the version */
588 res = sen5x_get_version(&gs_handle, &version);
589 if (res != 0)
590 {
591 sen5x_interface_debug_print("sen5x: get version failed.\n");
592 (void)sen5x_deinit(&gs_handle);
593
594 return 1;
595 }
596 sen5x_interface_debug_print("sen5x: version is 0x%02X.\n", version);
597
598 /* sen5x_get_device_status test */
599 sen5x_interface_debug_print("sen5x: sen5x_get_device_status test.\n");
600
601 /* get device status */
602 res = sen5x_get_device_status(&gs_handle, &status);
603 if (res != 0)
604 {
605 sen5x_interface_debug_print("sen5x: get device status failed.\n");
606 (void)sen5x_deinit(&gs_handle);
607
608 return 1;
609 }
610 sen5x_interface_debug_print("sen5x: device status is 0x%08X.\n", status);
611
612 /* sen5x_clear_device_status test */
613 sen5x_interface_debug_print("sen5x: sen5x_clear_device_status test.\n");
614
615 /* clear device status */
616 res = sen5x_clear_device_status(&gs_handle);
617 if (res != 0)
618 {
619 sen5x_interface_debug_print("sen5x: clear device status failed.\n");
620 (void)sen5x_deinit(&gs_handle);
621
622 return 1;
623 }
624 sen5x_interface_debug_print("sen5x: check clear device status %s.\n", res == 0 ? "ok" : "error");
625
626 /* sen5x_read_data_flag test */
627 sen5x_interface_debug_print("sen5x: sen5x_read_data_flag test.\n");
628
629 /* read data flag */
630 res = sen5x_read_data_flag(&gs_handle, &flag);
631 if (res != 0)
632 {
633 sen5x_interface_debug_print("sen5x: read data flag failed.\n");
634 (void)sen5x_deinit(&gs_handle);
635
636 return 1;
637 }
638 sen5x_interface_debug_print("sen5x: data flag is 0x%02X.\n", (uint8_t)flag);
639
640 /* sen5x_reset test */
641 sen5x_interface_debug_print("sen5x: sen5x_reset test.\n");
642
643 /* reset */
644 res = sen5x_reset(&gs_handle);
645 if (res != 0)
646 {
647 sen5x_interface_debug_print("sen5x: reset failed.\n");
648 (void)sen5x_deinit(&gs_handle);
649
650 return 1;
651 }
652 sen5x_interface_debug_print("sen5x: check reset %s.\n", res == 0 ? "ok" : "error");
653
654 /* sen5x_temperature_compensation_convert_to_register/sen5x_temperature_compensation_convert_to_data test */
655 sen5x_interface_debug_print("sen5x: sen5x_temperature_compensation_convert_to_register/sen5x_temperature_compensation_convert_to_data test.\n");
656
657 f0 = (float)(rand() % 100) / 10.0f;
658 f1 = (float)(rand() % 100) / 100.0f;
659 f2 = (float)(rand() % 100);
660 res = sen5x_temperature_compensation_convert_to_register(&gs_handle, f0, f1, f2, &reg16s0, &reg16s1, &reg16u0);
661 if (res != 0)
662 {
663 sen5x_interface_debug_print("sen5x: temperature compensation convert to register failed.\n");
664 (void)sen5x_deinit(&gs_handle);
665
666 return 1;
667 }
668 sen5x_interface_debug_print("sen5x: set temperature offset %0.2f.\n", f0);
669 sen5x_interface_debug_print("sen5x: set normalized temperature offset slope %0.2f.\n", f1);
670 sen5x_interface_debug_print("sen5x: set time constant %0.2f.\n", f2);
671 res = sen5x_temperature_compensation_convert_to_data(&gs_handle, reg16s0, reg16s1, reg16u0, &f0_check, &f1_check, &f2_check);
672 if (res != 0)
673 {
674 sen5x_interface_debug_print("sen5x: temperature compensation convert to data failed.\n");
675 (void)sen5x_deinit(&gs_handle);
676
677 return 1;
678 }
679 sen5x_interface_debug_print("sen5x: check temperature offset %0.2f.\n", f0_check);
680 sen5x_interface_debug_print("sen5x: check normalized temperature offset slope %0.2f.\n", f1_check);
681 sen5x_interface_debug_print("sen5x: check time constant %0.2f.\n", f2_check);
682
683 /* finish register test */
684 sen5x_interface_debug_print("sen5x: finish register test.\n");
685 (void)sen5x_deinit(&gs_handle);
686
687 return 0;
688}
driver sen5x register test header file
uint8_t sen5x_set_nox_algorithm_tuning(sen5x_handle_t *handle, int16_t index_offset, int16_t learning_time_offset_hour, int16_t learning_time_gain_hour, int16_t gating_max_duration_minute, int16_t std_initial, int16_t gain_factor)
set nox algorithm tuning
uint8_t sen5x_temperature_compensation_convert_to_register(sen5x_handle_t *handle, float temperature_offset_degree, float normalized_temperature_offset_slope_factor, float time_constant_second, int16_t *temperature_offset_reg, int16_t *normalized_temperature_offset_slope_reg, uint16_t *time_constant_reg)
convert the temperature compensation to the register raw data
uint8_t sen5x_info(sen5x_info_t *info)
get chip information
uint8_t sen5x_set_voc_algorithm_state(sen5x_handle_t *handle, uint16_t state[4])
set voc algorithm state
uint8_t sen5x_get_temperature_compensation(sen5x_handle_t *handle, int16_t *temperature_offset, int16_t *normalized_temperature_offset_slope, uint16_t *time_constant)
get temperature compensation
uint8_t sen5x_set_temperature_compensation(sen5x_handle_t *handle, int16_t temperature_offset, int16_t normalized_temperature_offset_slope, uint16_t time_constant)
set temperature compensation
uint8_t sen5x_get_warm_start(sen5x_handle_t *handle, uint16_t *param)
get warm start
uint8_t sen5x_set_type(sen5x_handle_t *handle, sen5x_type_t type)
set the chip type
uint8_t sen5x_read_data_flag(sen5x_handle_t *handle, sen5x_data_ready_flag_t *flag)
read the data flag
uint8_t sen5x_get_device_status(sen5x_handle_t *handle, uint32_t *status)
get the device status
uint8_t sen5x_start_fan_cleaning(sen5x_handle_t *handle)
start the fan cleaning
uint8_t sen5x_get_version(sen5x_handle_t *handle, uint8_t *version)
get the version
uint8_t sen5x_start_measurement(sen5x_handle_t *handle)
start the measurement
uint8_t sen5x_get_nox_algorithm_tuning(sen5x_handle_t *handle, int16_t *index_offset, int16_t *learning_time_offset_hour, int16_t *learning_time_gain_hour, int16_t *gating_max_duration_minute, int16_t *std_initial, int16_t *gain_factor)
get nox algorithm tuning
uint8_t sen5x_get_type(sen5x_handle_t *handle, sen5x_type_t *type)
get the chip type
sen5x_data_ready_flag_t
sen5x data ready flag enumeration definition
uint8_t sen5x_reset(sen5x_handle_t *handle)
reset the chip
uint8_t sen5x_get_rht_acceleration_mode(sen5x_handle_t *handle, sen5x_rht_acceleration_mode_t *mode)
get rht acceleration mode
sen5x_type_t
sen5x type enumeration definition
uint8_t sen5x_deinit(sen5x_handle_t *handle)
close the chip
uint8_t sen5x_get_serial_number(sen5x_handle_t *handle, char sn[32])
get the serial number
struct sen5x_handle_s sen5x_handle_t
sen5x handle structure definition
uint8_t sen5x_get_product_name(sen5x_handle_t *handle, char name[32])
get the product name
uint8_t sen5x_get_voc_algorithm_tuning(sen5x_handle_t *handle, int16_t *index_offset, int16_t *learning_time_offset_hour, int16_t *learning_time_gain_hour, int16_t *gating_max_duration_minute, int16_t *std_initial, int16_t *gain_factor)
get voc algorithm tuning
uint8_t sen5x_clear_device_status(sen5x_handle_t *handle)
clear the device status
uint8_t sen5x_set_voc_algorithm_tuning(sen5x_handle_t *handle, int16_t index_offset, int16_t learning_time_offset_hour, int16_t learning_time_gain_hour, int16_t gating_max_duration_minute, int16_t std_initial, int16_t gain_factor)
set voc algorithm tuning
uint8_t sen5x_get_auto_cleaning_interval(sen5x_handle_t *handle, uint32_t *second)
get the auto cleaning interval
uint8_t sen5x_temperature_compensation_convert_to_data(sen5x_handle_t *handle, int16_t temperature_offset_reg, int16_t normalized_temperature_offset_slope_reg, uint16_t time_constant_reg, float *temperature_offset_degree, float *normalized_temperature_offset_slope_factor, float *time_constant_second)
convert the temperature compensation to the real data
uint8_t sen5x_disable_auto_cleaning_interval(sen5x_handle_t *handle)
disable the auto cleaning interval
uint8_t sen5x_set_rht_acceleration_mode(sen5x_handle_t *handle, sen5x_rht_acceleration_mode_t mode)
set rht acceleration mode
struct sen5x_info_s sen5x_info_t
sen5x information structure definition
uint8_t sen5x_init(sen5x_handle_t *handle)
initialize the chip
uint8_t sen5x_set_warm_start(sen5x_handle_t *handle, uint16_t param)
set warm start
uint8_t sen5x_set_auto_cleaning_interval(sen5x_handle_t *handle, uint32_t second)
set the auto cleaning interval
uint8_t sen5x_stop_measurement(sen5x_handle_t *handle)
stop the measurement
sen5x_rht_acceleration_mode_t
sen5x rht acceleration mode enumeration definition
uint8_t sen5x_get_voc_algorithm_state(sen5x_handle_t *handle, uint16_t state[4])
get voc algorithm state
@ SEN50
@ SEN54
@ SEN55
@ SEN5X_RHT_ACCELERATION_MEDIUM
@ SEN5X_RHT_ACCELERATION_HIGH
@ SEN5X_RHT_ACCELERATION_LOW
uint8_t sen5x_interface_iic_write_cmd(uint8_t addr, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t sen5x_interface_iic_read_cmd(uint8_t addr, uint8_t *buf, uint16_t len)
interface iic bus read
uint8_t sen5x_interface_iic_init(void)
interface iic bus init
uint8_t sen5x_interface_iic_deinit(void)
interface iic bus deinit
void sen5x_interface_delay_ms(uint32_t ms)
interface delay ms
void sen5x_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t sen5x_register_test(sen5x_type_t type)
register test
float temperature_max
float supply_voltage_max_v
uint32_t driver_version
float temperature_min
float max_current_ma
char manufacturer_name[32]
float supply_voltage_min_v
char interface[8]
char chip_name[32]