LibDriver PMSX003
Loading...
Searching...
No Matches
driver_pmsx003.c
Go to the documentation of this file.
1
36
37#include "driver_pmsx003.h"
38
42#define CHIP_NAME "PLANTOWER PMSX003"
43#define MANUFACTURER_NAME "PLANTOWER"
44#define SUPPLY_VOLTAGE_MIN 4.5f
45#define SUPPLY_VOLTAGE_MAX 5.5f
46#define MAX_CURRENT 100.0f
47#define TEMPERATURE_MIN -10.0f
48#define TEMPERATURE_MAX 60.0f
49#define DRIVER_VERSION 1000
50
54#define PMSX003_COMMAND_READ 0xE2
55#define PMSX003_COMMAND_CHANGE_WORKING_MODE 0xE1
56#define PMSX003_COMMAND_CHANGE_CHIP_MODE 0xE4
57
68static uint8_t a_pmsx003_make_frame(uint8_t command, uint8_t data, uint8_t output[7])
69{
70 uint8_t i;
71 uint16_t lrc;
72
73 output[0] = 0x42; /* set 0x42 */
74 output[1] = 0x4D; /* set 0x4D */
75 output[2] = command; /* set command */
76 output[3] = 0x00; /* set 0x00 */
77 output[4] = data; /* set data */
78
79 lrc = 0; /* init 0 */
80 for (i = 0; i < 5; i++) /* add all */
81 {
82 lrc += output[i]; /* sum */
83 }
84 output[5] = (lrc >> 8) & 0xFF; /* set lrc msb */
85 output[6] = (lrc >> 0) & 0xFF; /* set lrc lsb */
86
87 return 0; /* success return 0 */
88}
89
101static uint8_t a_pmsx003_parse_frame(pmsx003_handle_t *handle, uint8_t input[8], uint8_t command, uint8_t *data)
102{
103 uint8_t i;
104 uint16_t lrc;
105 uint16_t lrc_check;
106
107 lrc = 0; /* init 0 */
108 for (i = 0; i < 6; i++) /* add all */
109 {
110 lrc += input[i]; /* sum */
111 }
112 lrc_check = ((uint16_t)input[6] << 8) | input[7]; /* get lrc */
113 if (lrc != lrc_check) /* check lrc */
114 {
115 handle->debug_print("pmsx003: lrc check error.\n"); /* lrc check error */
116
117 return 1; /* return error */
118 }
119 if ((input[0] == 0x42) && (input[1] == 0x4D)) /* check header */
120 {
121 uint16_t len;
122
123 len = ((uint16_t)input[2] << 8) | input[3]; /* get length */
124 if (len != 4) /* check length */
125 {
126 return 1; /* return error */
127 }
128 if (input[4] != command) /* check command */
129 {
130 return 1; /* return error */
131 }
132 *data = input[5]; /* get data */
133
134 return 0; /* success return 0 */
135 }
136 else
137 {
138 return 1; /* return error */
139 }
140}
141
152static uint8_t a_pmsx003_parse_data(pmsx003_handle_t *handle, uint8_t input[32], pmsx003_data_t *data)
153{
154 uint8_t i;
155 uint16_t lrc;
156 uint16_t lrc_check;
157
158 lrc = 0; /* init 0 */
159 for (i = 0; i < 30; i++) /* add all */
160 {
161 lrc += input[i]; /* sum */
162 }
163 lrc_check = ((uint16_t)input[30] << 8) | input[31]; /* get lrc */
164 if (lrc != lrc_check) /* check lrc */
165 {
166 handle->debug_print("pmsx003: lrc check error.\n"); /* lrc check error */
167
168 return 1; /* return error */
169 }
170 if ((input[0] == 0x42) && (input[1] == 0x4D)) /* check header */
171 {
172 uint16_t len;
173
174 len = ((uint16_t)input[2] << 8) | input[3]; /* get length */
175 if (len != 28) /* check length */
176 {
177 return 1; /* return error */
178 }
179
180 data->pm1p0_standard_ug_m3 = ((uint16_t)input[4] << 8) | input[5]; /* set pm1p0 standard ug/m3 */
181 data->pm2p5_standard_ug_m3 = ((uint16_t)input[6] << 8) | input[7]; /* set pm2p5 standard ug/m3 */
182 data->pm10_standard_ug_m3 = ((uint16_t)input[8] << 8) | input[9]; /* set pm10 standard ug/m3 */
183 data->pm1p0_atmospheric_ug_m3 = ((uint16_t)input[10] << 8) | input[11]; /* set pm1p0 atmospheric ug/m3 */
184 data->pm2p5_atmospheric_ug_m3 = ((uint16_t)input[12] << 8) | input[13]; /* set pm2p5 atmospheric ug/m3 */
185 data->pm10_atmospheric_ug_m3 = ((uint16_t)input[14] << 8) | input[15]; /* set pm10 atmospheric ug/m3 */
186 data->beyond_0p3um = ((uint16_t)input[16] << 8) | input[17]; /* set beyond 0p3um */
187 data->beyond_0p5um = ((uint16_t)input[18] << 8) | input[19]; /* set beyond 0p5um */
188 data->beyond_1p0um = ((uint16_t)input[20] << 8) | input[21]; /* set beyond 1p0um */
189 data->beyond_2p5um = ((uint16_t)input[22] << 8) | input[23]; /* set beyond 2p5um */
190 data->beyond_5p0um = ((uint16_t)input[24] << 8) | input[25]; /* set beyond 5p0um */
191 data->beyond_10um = ((uint16_t)input[26] << 8) | input[27]; /* set beyond 10um */
192 data->version = input[28]; /* set version */
193 data->error_code = input[29]; /* set error code */
194
195 return 0; /* success return 0 */
196 }
197 else
198 {
199 return 1; /* return error */
200 }
201}
202
214{
215 uint8_t res;
216
217 if (handle == NULL) /* check handle */
218 {
219 return 2; /* return error */
220 }
221 if (handle->debug_print == NULL) /* check debug_print */
222 {
223 return 3; /* return error */
224 }
225 if (handle->uart_init == NULL) /* check uart_init */
226 {
227 handle->debug_print("pmsx003: uart_init is null.\n"); /* uart_init is null */
228
229 return 3; /* return error */
230 }
231 if (handle->uart_deinit == NULL) /* check uart_deinit */
232 {
233 handle->debug_print("pmsx003: uart_deinit is null.\n"); /* uart_deinit is null */
234
235 return 3; /* return error */
236 }
237 if (handle->uart_read == NULL) /* check uart_read */
238 {
239 handle->debug_print("pmsx003: uart_read is null.\n"); /* uart_read is null */
240
241 return 3; /* return error */
242 }
243 if (handle->uart_flush == NULL) /* check uart_flush */
244 {
245 handle->debug_print("pmsx003: uart_flush is null.\n"); /* uart_flush is null */
246
247 return 3; /* return error */
248 }
249 if (handle->uart_write == NULL) /* check uart_write */
250 {
251 handle->debug_print("pmsx003: uart_write is null.\n"); /* uart_write is null */
252
253 return 3; /* return error */
254 }
255 if (handle->reset_gpio_init == NULL) /* check reset_gpio_init */
256 {
257 handle->debug_print("pmsx003: reset_gpio_init is null.\n"); /* reset_gpio_init is null */
258
259 return 3; /* return error */
260 }
261 if (handle->reset_gpio_deinit == NULL) /* check reset_gpio_deinit */
262 {
263 handle->debug_print("pmsx003: reset_gpio_deinit is null.\n"); /* reset_gpio_deinit is null */
264
265 return 3; /* return error */
266 }
267 if (handle->reset_gpio_write == NULL) /* check reset_gpio_write */
268 {
269 handle->debug_print("pmsx003: reset_gpio_write is null.\n"); /* reset_gpio_write is null */
270
271 return 3; /* return error */
272 }
273 if (handle->set_gpio_init == NULL) /* check set_gpio_init */
274 {
275 handle->debug_print("pmsx003: set_gpio_init is null.\n"); /* set_gpio_init is null */
276
277 return 3; /* return error */
278 }
279 if (handle->set_gpio_deinit == NULL) /* check set_gpio_deinit */
280 {
281 handle->debug_print("pmsx003: set_gpio_deinit is null.\n"); /* set_gpio_deinit is null */
282
283 return 3; /* return error */
284 }
285 if (handle->set_gpio_write == NULL) /* check set_gpio_write */
286 {
287 handle->debug_print("pmsx003: set_gpio_write is null.\n"); /* set_gpio_write is null */
288
289 return 3; /* return error */
290 }
291 if (handle->delay_ms == NULL) /* check delay_ms */
292 {
293 handle->debug_print("pmsx003: delay_ms is null.\n"); /* delay_ms is null */
294
295 return 3; /* return error */
296 }
297
298 if (handle->reset_gpio_init() != 0) /* reset gpio init */
299 {
300 handle->debug_print("pmsx003: reset gpio init failed.\n"); /* reset gpio init failed */
301
302 return 1; /* return error */
303 }
304 if (handle->set_gpio_init() != 0) /* set gpio init */
305 {
306 handle->debug_print("pmsx003: set gpio init failed.\n"); /* set gpio init failed */
307 (void)handle->reset_gpio_deinit(); /* reset gpio deinit */
308
309 return 1; /* return error */
310 }
311 if (handle->uart_init() != 0) /* uart init */
312 {
313 handle->debug_print("pmsx003: uart init failed.\n"); /* uart init failed */
314 (void)handle->reset_gpio_deinit(); /* reset gpio deinit */
315 (void)handle->set_gpio_deinit(); /* set gpio deinit */
316
317 return 1; /* return error */
318 }
319 if (handle->set_gpio_write(1) != 0) /* normal working */
320 {
321 handle->debug_print("pmsx003: set gpio write failed.\n"); /* set gpio write failed */
322 (void)handle->reset_gpio_deinit(); /* reset gpio deinit */
323 (void)handle->set_gpio_deinit(); /* set gpio deinit */
324 (void)handle->uart_deinit(); /* uart deinit */
325
326 return 1; /* return error */
327 }
328 handle->delay_ms(100); /* delay 100ms */
329 if (handle->reset_gpio_write(0) != 0) /* set low */
330 {
331 handle->debug_print("pmsx003: set gpio write failed.\n"); /* set gpio write failed */
332 (void)handle->reset_gpio_deinit(); /* reset gpio deinit */
333 (void)handle->set_gpio_deinit(); /* set gpio deinit */
334 (void)handle->uart_deinit(); /* uart deinit */
335
336 return 1; /* return error */
337 }
338 handle->delay_ms(100); /* delay 100ms */
339 if (handle->reset_gpio_write(1) != 0) /* set high */
340 {
341 handle->debug_print("pmsx003: set gpio write failed.\n"); /* set gpio write failed */
342 (void)handle->reset_gpio_deinit(); /* reset gpio deinit */
343 (void)handle->set_gpio_deinit(); /* set gpio deinit */
344 (void)handle->uart_deinit(); /* uart deinit */
345
346 return 1; /* return error */
347 }
348 handle->delay_ms(300); /* delay 300ms */
349 res = handle->uart_flush(); /* uart flush */
350 if (res != 0) /* check result */
351 {
352 handle->debug_print("pmsx003: uart flush failed.\n"); /* uart flush failed */
353 (void)handle->reset_gpio_deinit(); /* reset gpio deinit */
354 (void)handle->set_gpio_deinit(); /* set gpio deinit */
355 (void)handle->uart_deinit(); /* uart deinit */
356
357 return 1; /* return error */
358 }
359 handle->mode = (uint8_t)PMSX003_MODE_ACTIVE; /* init 1 */
360 handle->inited = 1; /* flag finish initialization */
361
362 return 0; /* success return 0 */
363}
364
376{
377 if (handle == NULL) /* check handle */
378 {
379 return 2; /* return error */
380 }
381 if (handle->inited != 1) /* check handle initialization */
382 {
383 return 3; /* return error */
384 }
385
386 if (handle->reset_gpio_deinit() != 0) /* reset gpio deinit */
387 {
388 handle->debug_print("pmsx003: reset gpio deinit failed.\n"); /* reset gpio deinit failed */
389
390 return 1; /* return error */
391 }
392 if (handle->set_gpio_deinit() != 0) /* set gpio deinit */
393 {
394 handle->debug_print("pmsx003: set gpio deinit failed.\n"); /* set gpio deinit failed */
395
396 return 1; /* return error */
397 }
398 if (handle->uart_deinit() != 0) /* uart deinit */
399 {
400 handle->debug_print("pmsx003: uart deinit failed.\n"); /* uart deinit failed */
401
402 return 1; /* return error */
403 }
404 handle->inited = 0; /* flag close */
405
406 return 0; /* success return 0 */
407}
408
420{
421 if (handle == NULL) /* check handle */
422 {
423 return 2; /* return error */
424 }
425 if (handle->inited != 1) /* check handle initialization */
426 {
427 return 3; /* return error */
428 }
429
430 if (handle->reset_gpio_write(0) != 0) /* set low */
431 {
432 handle->debug_print("pmsx003: set gpio write failed.\n"); /* set gpio write failed */
433
434 return 1; /* return error */
435 }
436 handle->delay_ms(100); /* delay 100ms */
437 if (handle->reset_gpio_write(1) != 0) /* set high */
438 {
439 handle->debug_print("pmsx003: set gpio write failed.\n"); /* set gpio write failed */
440
441 return 1; /* return error */
442 }
443 handle->delay_ms(300); /* delay 300ms */
444
445 return 0; /* success return 0 */
446}
447
460{
461 if (handle == NULL) /* check handle */
462 {
463 return 2; /* return error */
464 }
465 if (handle->inited != 1) /* check handle initialization */
466 {
467 return 3; /* return error */
468 }
469
470 if ((uint8_t)mode != 0) /* normal */
471 {
472 if (handle->set_gpio_write(1) != 0) /* normal working */
473 {
474 handle->debug_print("pmsx003: set gpio write failed.\n"); /* set gpio write failed */
475
476 return 1; /* return error */
477 }
478 }
479 else /* sleep */
480 {
481 if (handle->set_gpio_write(0) != 0) /* sleep working */
482 {
483 handle->debug_print("pmsx003: set gpio write failed.\n"); /* set gpio write failed */
484
485 return 1; /* return error */
486 }
487 }
488 handle->delay_ms(300); /* delay 300ms */
489
490 return 0; /* success return 0 */
491}
492
506{
507 uint8_t res;
508 uint8_t data;
509 uint8_t output[7];
510 uint8_t input[8];
511 uint16_t len;
512
513 if (handle == NULL) /* check handle */
514 {
515 return 2; /* return error */
516 }
517 if (handle->inited != 1) /* check handle initialization */
518 {
519 return 3; /* return error */
520 }
521
522 (void)a_pmsx003_make_frame(PMSX003_COMMAND_CHANGE_WORKING_MODE, (uint8_t)mode, output); /* make frame */
523 res = handle->uart_flush(); /* uart flush */
524 if (res != 0) /* check result */
525 {
526 handle->debug_print("pmsx003: uart flush failed.\n"); /* uart flush failed */
527
528 return 1; /* return error */
529 }
530 res = handle->uart_write(output, 7); /* uart write */
531 if (res != 0) /* check result */
532 {
533 handle->debug_print("pmsx003: uart write failed.\n"); /* uart write failed */
534
535 return 1; /* return error */
536 }
537 handle->delay_ms(100); /* delay 100ms */
538 len = handle->uart_read(input, 8); /* uart read */
539 if (len != 8) /* check length */
540 {
541 handle->debug_print("pmsx003: uart read failed.\n"); /* uart read failed */
542
543 return 1; /* return error */
544 }
545 res = a_pmsx003_parse_frame(handle, input, PMSX003_COMMAND_CHANGE_WORKING_MODE, &data); /* parse frame */
546 if (res != 0) /* check result */
547 {
548 handle->debug_print("pmsx003: frame error.\n"); /* frame error */
549
550 return 4; /* return error */
551 }
552 if (data != (uint8_t)mode) /* check data */
553 {
554 handle->debug_print("pmsx003: set mode failed.\n"); /* set mode failed */
555
556 return 1; /* return error */
557 }
558 handle->mode = (uint8_t)mode; /* save mode */
559
560 return 0; /* success return 0 */
561}
562
575{
576 uint8_t res;
577 uint8_t data;
578 uint8_t output[7];
579 uint8_t input[8];
580 uint16_t len;
581
582 if (handle == NULL) /* check handle */
583 {
584 return 2; /* return error */
585 }
586 if (handle->inited != 1) /* check handle initialization */
587 {
588 return 3; /* return error */
589 }
590
591 (void)a_pmsx003_make_frame(PMSX003_COMMAND_CHANGE_CHIP_MODE, (uint8_t)0x00, output); /* make frame */
592 res = handle->uart_flush(); /* uart flush */
593 if (res != 0) /* check result */
594 {
595 handle->debug_print("pmsx003: uart flush failed.\n"); /* uart flush failed */
596
597 return 1; /* return error */
598 }
599 res = handle->uart_write(output, 7); /* uart write */
600 if (res != 0) /* check result */
601 {
602 handle->debug_print("pmsx003: uart write failed.\n"); /* uart write failed */
603
604 return 1; /* return error */
605 }
606 handle->delay_ms(100); /* delay 100ms */
607 len = handle->uart_read(input, 8);
608 if (len != 8) /* check length */
609 { /* uart read */
610 handle->debug_print("pmsx003: uart read failed.\n"); /* uart read failed */
611
612 return 1; /* return error */
613 }
614 res = a_pmsx003_parse_frame(handle, input, PMSX003_COMMAND_CHANGE_CHIP_MODE, &data); /* parse frame */
615 if (res != 0) /* check result */
616 {
617 handle->debug_print("pmsx003: frame error.\n"); /* frame error */
618
619 return 4; /* return error */
620 }
621 if (data != (uint8_t)0x00) /* check data */
622 {
623 handle->debug_print("pmsx003: sleep failed.\n"); /* sleep failed */
624
625 return 1; /* return error */
626 }
627
628 return 0; /* success return 0 */
629}
630
643{
644 uint8_t res;
645 uint8_t output[7];
646
647 if (handle == NULL) /* check handle */
648 {
649 return 2; /* return error */
650 }
651 if (handle->inited != 1) /* check handle initialization */
652 {
653 return 3; /* return error */
654 }
655
656 (void)a_pmsx003_make_frame(PMSX003_COMMAND_CHANGE_CHIP_MODE, (uint8_t)0x01, output); /* make frame */
657 res = handle->uart_flush(); /* uart flush */
658 if (res != 0) /* check result */
659 {
660 handle->debug_print("pmsx003: uart flush failed.\n"); /* uart flush failed */
661
662 return 1; /* return error */
663 }
664 res = handle->uart_write(output, 7); /* uart write */
665 if (res != 0) /* check result */
666 {
667 handle->debug_print("pmsx003: uart write failed.\n"); /* uart write failed */
668
669 return 1; /* return error */
670 }
671 handle->delay_ms(300); /* delay 300ms */
672
673 return 0; /* success return 0 */
674}
675
690{
691 uint8_t res;
692 uint8_t output[7];
693 uint8_t input[32];
694 uint16_t len;
695
696 if (handle == NULL) /* check handle */
697 {
698 return 2; /* return error */
699 }
700 if (handle->inited != 1) /* check handle initialization */
701 {
702 return 3; /* return error */
703 }
704
705 if (handle->mode != 0) /* active mode */
706 {
707 len = handle->uart_read(input, 32); /* uart read */
708 if (len != 32) /* check length */
709 {
710 handle->debug_print("pmsx003: uart read failed.\n"); /* uart read failed */
711
712 return 1; /* return error */
713 }
714 res = handle->uart_flush(); /* uart flush */
715 if (res != 0) /* check result */
716 {
717 handle->debug_print("pmsx003: uart flush failed.\n"); /* uart flush failed */
718
719 return 1; /* return error */
720 }
721 res = a_pmsx003_parse_data(handle, input, data); /* parse data */
722 if (res != 0) /* check result */
723 {
724 handle->debug_print("pmsx003: frame error.\n"); /* frame error */
725
726 return 4; /* return error */
727 }
728 if (data->error_code != 0) /* check error code */
729 {
730 handle->debug_print("pmsx003: data error.\n"); /* data error */
731
732 return 5; /* return error */
733 }
734 }
735 else /* passive mode */
736 {
737 (void)a_pmsx003_make_frame(PMSX003_COMMAND_READ, (uint8_t)0x00, output); /* make frame */
738 res = handle->uart_flush(); /* uart flush */
739 if (res != 0) /* check result */
740 {
741 handle->debug_print("pmsx003: uart flush failed.\n"); /* uart flush failed */
742
743 return 1; /* return error */
744 }
745 res = handle->uart_write(output, 7); /* uart write */
746 if (res != 0) /* check result */
747 {
748 handle->debug_print("pmsx003: uart write failed.\n"); /* uart write failed */
749
750 return 1; /* return error */
751 }
752 handle->delay_ms(100); /* delay 100ms */
753 len = handle->uart_read(input, 32); /* uart read */
754 if (len != 32) /* check length */
755 {
756 handle->debug_print("pmsx003: uart read failed.\n"); /* uart read failed */
757
758 return 1; /* return error */
759 }
760 res = a_pmsx003_parse_data(handle, input, data); /* parse data */
761 if (res != 0) /* check result */
762 {
763 handle->debug_print("pmsx003: frame error.\n"); /* frame error */
764
765 return 4; /* return error */
766 }
767 if (data->error_code != 0) /* check error code */
768 {
769 handle->debug_print("pmsx003: data error.\n"); /* data error */
770
771 return 5; /* return error */
772 }
773 }
774
775 return 0; /* success return 0 */
776}
777
790uint8_t pmsx003_set_buffer(pmsx003_handle_t *handle, uint8_t *buf, uint16_t len)
791{
792 uint8_t res;
793
794 if (handle == NULL) /* check handle */
795 {
796 return 2; /* return error */
797 }
798 if (handle->inited != 1) /* check handle initialization */
799 {
800 return 3; /* return error */
801 }
802
803 res = handle->uart_flush(); /* uart flush */
804 if (res != 0) /* check result */
805 {
806 handle->debug_print("pmsx003: uart flush failed.\n"); /* uart flush failed */
807
808 return 1; /* return error */
809 }
810 res = handle->uart_write(buf, len); /* uart write */
811 if (res != 0) /* check result */
812 {
813 handle->debug_print("pmsx003: uart write failed.\n"); /* uart write failed */
814
815 return 1; /* return error */
816 }
817
818 return 0; /* success return 0 */
819}
820
833uint8_t pmsx003_get_buffer(pmsx003_handle_t *handle, uint8_t *buf, uint16_t len)
834{
835 uint16_t l;
836
837 if (handle == NULL) /* check handle */
838 {
839 return 2; /* return error */
840 }
841 if (handle->inited != 1) /* check handle initialization */
842 {
843 return 3; /* return error */
844 }
845
846 l = handle->uart_read((uint8_t *)buf, len); /* uart read */
847 if (l != len) /* check result */
848 {
849 handle->debug_print("pmsx003: uart read failed.\n"); /* uart read failed */
850
851 return 1; /* return error */
852 }
853
854 return 0; /* success return 0 */
855}
856
866{
867 if (info == NULL) /* check handle */
868 {
869 return 2; /* return error */
870 }
871
872 memset(info, 0, sizeof(pmsx003_info_t)); /* initialize pmsx003 info structure */
873 strncpy(info->chip_name, CHIP_NAME, 32); /* copy chip name */
874 strncpy(info->manufacturer_name, MANUFACTURER_NAME, 32); /* copy manufacturer name */
875 strncpy(info->interface, "UART", 8); /* copy interface name */
876 info->supply_voltage_min_v = SUPPLY_VOLTAGE_MIN; /* set minimal supply voltage */
877 info->supply_voltage_max_v = SUPPLY_VOLTAGE_MAX; /* set maximum supply voltage */
878 info->max_current_ma = MAX_CURRENT; /* set maximum current */
879 info->temperature_max = TEMPERATURE_MAX; /* set minimal temperature */
880 info->temperature_min = TEMPERATURE_MIN; /* set maximum temperature */
881 info->driver_version = DRIVER_VERSION; /* set driver version */
882
883 return 0; /* success return 0 */
884}
#define PMSX003_COMMAND_CHANGE_CHIP_MODE
#define MAX_CURRENT
#define PMSX003_COMMAND_READ
chip command definition
#define SUPPLY_VOLTAGE_MAX
#define TEMPERATURE_MAX
#define MANUFACTURER_NAME
#define TEMPERATURE_MIN
#define SUPPLY_VOLTAGE_MIN
#define PMSX003_COMMAND_CHANGE_WORKING_MODE
#define CHIP_NAME
chip information definition
#define DRIVER_VERSION
driver pmsx003 header file
pmsx003_mode_t
pmsx003 mode enumeration definition
uint8_t pmsx003_set_hard_mode(pmsx003_handle_t *handle, pmsx003_hard_mode_t mode)
set hard mode
uint8_t pmsx003_sleep(pmsx003_handle_t *handle)
sleep
uint8_t pmsx003_read(pmsx003_handle_t *handle, pmsx003_data_t *data)
read the data
struct pmsx003_info_s pmsx003_info_t
pmsx003 information structure definition
uint8_t pmsx003_reset(pmsx003_handle_t *handle)
reset
uint8_t pmsx003_info(pmsx003_info_t *info)
get chip's information
pmsx003_hard_mode_t
pmsx003 hard mode enumeration definition
struct pmsx003_handle_s pmsx003_handle_t
pmsx003 handle structure definition
uint8_t pmsx003_deinit(pmsx003_handle_t *handle)
close the chip
uint8_t pmsx003_init(pmsx003_handle_t *handle)
initialize the chip
struct pmsx003_data_s pmsx003_data_t
pmsx003 data structure definition
uint8_t pmsx003_wake_up(pmsx003_handle_t *handle)
wake up
uint8_t pmsx003_set_mode(pmsx003_handle_t *handle, pmsx003_mode_t mode)
set mode
@ PMSX003_MODE_ACTIVE
uint8_t pmsx003_get_buffer(pmsx003_handle_t *handle, uint8_t *buf, uint16_t len)
get buffer
uint8_t pmsx003_set_buffer(pmsx003_handle_t *handle, uint8_t *buf, uint16_t len)
set buffer
uint16_t beyond_0p5um
uint16_t pm2p5_standard_ug_m3
uint16_t pm10_atmospheric_ug_m3
uint16_t pm1p0_standard_ug_m3
uint16_t pm1p0_atmospheric_ug_m3
uint16_t beyond_10um
uint16_t beyond_0p3um
uint16_t pm2p5_atmospheric_ug_m3
uint16_t beyond_2p5um
uint16_t pm10_standard_ug_m3
uint16_t beyond_1p0um
uint16_t beyond_5p0um
uint8_t(* uart_flush)(void)
uint8_t(* uart_write)(uint8_t *buf, uint16_t len)
void(* delay_ms)(uint32_t ms)
uint8_t(* uart_deinit)(void)
uint8_t(* set_gpio_init)(void)
uint8_t(* set_gpio_deinit)(void)
uint8_t(* reset_gpio_deinit)(void)
uint8_t(* set_gpio_write)(uint8_t level)
void(* debug_print)(const char *const fmt,...)
uint16_t(* uart_read)(uint8_t *buf, uint16_t len)
uint8_t(* reset_gpio_init)(void)
uint8_t(* uart_init)(void)
uint8_t(* reset_gpio_write)(uint8_t level)
uint32_t driver_version
char manufacturer_name[32]