LibDriver PMS3003
Loading...
Searching...
No Matches
driver_pms3003.c
Go to the documentation of this file.
1
36
37#include "driver_pms3003.h"
38
42#define CHIP_NAME "PLANTOWER PMS3003"
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 PMS3003_COMMAND_READ 0xE2
55#define PMS3003_COMMAND_CHANGE_WORKING_MODE 0xE1
56#define PMS3003_COMMAND_CHANGE_CHIP_MODE 0xE4
57
68static uint8_t a_pms3003_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_pms3003_parse_frame(pms3003_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("pms3003: 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_pms3003_parse_data(pms3003_handle_t *handle, uint8_t input[24], pms3003_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 < 22; i++) /* add all */
160 {
161 lrc += input[i]; /* sum */
162 }
163 lrc_check = ((uint16_t)input[22] << 8) | input[23]; /* get lrc */
164 if (lrc != lrc_check) /* check lrc */
165 {
166 handle->debug_print("pms3003: 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 != 20) /* 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
187 return 0; /* success return 0 */
188 }
189 else
190 {
191 return 1; /* return error */
192 }
193}
194
206{
207 uint8_t res;
208
209 if (handle == NULL) /* check handle */
210 {
211 return 2; /* return error */
212 }
213 if (handle->debug_print == NULL) /* check debug_print */
214 {
215 return 3; /* return error */
216 }
217 if (handle->uart_init == NULL) /* check uart_init */
218 {
219 handle->debug_print("pms3003: uart_init is null.\n"); /* uart_init is null */
220
221 return 3; /* return error */
222 }
223 if (handle->uart_deinit == NULL) /* check uart_deinit */
224 {
225 handle->debug_print("pms3003: uart_deinit is null.\n"); /* uart_deinit is null */
226
227 return 3; /* return error */
228 }
229 if (handle->uart_read == NULL) /* check uart_read */
230 {
231 handle->debug_print("pms3003: uart_read is null.\n"); /* uart_read is null */
232
233 return 3; /* return error */
234 }
235 if (handle->uart_flush == NULL) /* check uart_flush */
236 {
237 handle->debug_print("pms3003: uart_flush is null.\n"); /* uart_flush is null */
238
239 return 3; /* return error */
240 }
241 if (handle->uart_write == NULL) /* check uart_write */
242 {
243 handle->debug_print("pms3003: uart_write is null.\n"); /* uart_write is null */
244
245 return 3; /* return error */
246 }
247 if (handle->reset_gpio_init == NULL) /* check reset_gpio_init */
248 {
249 handle->debug_print("pms3003: reset_gpio_init is null.\n"); /* reset_gpio_init is null */
250
251 return 3; /* return error */
252 }
253 if (handle->reset_gpio_deinit == NULL) /* check reset_gpio_deinit */
254 {
255 handle->debug_print("pms3003: reset_gpio_deinit is null.\n"); /* reset_gpio_deinit is null */
256
257 return 3; /* return error */
258 }
259 if (handle->reset_gpio_write == NULL) /* check reset_gpio_write */
260 {
261 handle->debug_print("pms3003: reset_gpio_write is null.\n"); /* reset_gpio_write is null */
262
263 return 3; /* return error */
264 }
265 if (handle->set_gpio_init == NULL) /* check set_gpio_init */
266 {
267 handle->debug_print("pms3003: set_gpio_init is null.\n"); /* set_gpio_init is null */
268
269 return 3; /* return error */
270 }
271 if (handle->set_gpio_deinit == NULL) /* check set_gpio_deinit */
272 {
273 handle->debug_print("pms3003: set_gpio_deinit is null.\n"); /* set_gpio_deinit is null */
274
275 return 3; /* return error */
276 }
277 if (handle->set_gpio_write == NULL) /* check set_gpio_write */
278 {
279 handle->debug_print("pms3003: set_gpio_write is null.\n"); /* set_gpio_write is null */
280
281 return 3; /* return error */
282 }
283 if (handle->delay_ms == NULL) /* check delay_ms */
284 {
285 handle->debug_print("pms3003: delay_ms is null.\n"); /* delay_ms is null */
286
287 return 3; /* return error */
288 }
289
290 if (handle->reset_gpio_init() != 0) /* reset gpio init */
291 {
292 handle->debug_print("pms3003: reset gpio init failed.\n"); /* reset gpio init failed */
293
294 return 1; /* return error */
295 }
296 if (handle->set_gpio_init() != 0) /* set gpio init */
297 {
298 handle->debug_print("pms3003: set gpio init failed.\n"); /* set gpio init failed */
299 (void)handle->reset_gpio_deinit(); /* reset gpio deinit */
300
301 return 1; /* return error */
302 }
303 if (handle->uart_init() != 0) /* uart init */
304 {
305 handle->debug_print("pms3003: uart init failed.\n"); /* uart init failed */
306 (void)handle->reset_gpio_deinit(); /* reset gpio deinit */
307 (void)handle->set_gpio_deinit(); /* set gpio deinit */
308
309 return 1; /* return error */
310 }
311 if (handle->set_gpio_write(1) != 0) /* normal working */
312 {
313 handle->debug_print("pms3003: set gpio write failed.\n"); /* set gpio write failed */
314 (void)handle->reset_gpio_deinit(); /* reset gpio deinit */
315 (void)handle->set_gpio_deinit(); /* set gpio deinit */
316 (void)handle->uart_deinit(); /* uart deinit */
317
318 return 1; /* return error */
319 }
320 handle->delay_ms(100); /* delay 100ms */
321 if (handle->reset_gpio_write(0) != 0) /* set low */
322 {
323 handle->debug_print("pms3003: reset gpio write failed.\n"); /* reset gpio write failed */
324 (void)handle->reset_gpio_deinit(); /* reset gpio deinit */
325 (void)handle->set_gpio_deinit(); /* set gpio deinit */
326 (void)handle->uart_deinit(); /* uart deinit */
327
328 return 1; /* return error */
329 }
330 handle->delay_ms(100); /* delay 100ms */
331 if (handle->reset_gpio_write(1) != 0) /* set high */
332 {
333 handle->debug_print("pms3003: reset gpio write failed.\n"); /* reset gpio write failed */
334 (void)handle->reset_gpio_deinit(); /* reset gpio deinit */
335 (void)handle->set_gpio_deinit(); /* set gpio deinit */
336 (void)handle->uart_deinit(); /* uart deinit */
337
338 return 1; /* return error */
339 }
340 handle->delay_ms(300); /* delay 300ms */
341 res = handle->uart_flush(); /* uart flush */
342 if (res != 0) /* check result */
343 {
344 handle->debug_print("pms3003: uart flush failed.\n"); /* uart flush failed */
345 (void)handle->reset_gpio_deinit(); /* reset gpio deinit */
346 (void)handle->set_gpio_deinit(); /* set gpio deinit */
347 (void)handle->uart_deinit(); /* uart deinit */
348
349 return 1; /* return error */
350 }
351 handle->mode = (uint8_t)PMS3003_MODE_ACTIVE; /* init 1 */
352 handle->inited = 1; /* flag finish initialization */
353
354 return 0; /* success return 0 */
355}
356
368{
369 if (handle == NULL) /* check handle */
370 {
371 return 2; /* return error */
372 }
373 if (handle->inited != 1) /* check handle initialization */
374 {
375 return 3; /* return error */
376 }
377
378 if (handle->reset_gpio_deinit() != 0) /* reset gpio deinit */
379 {
380 handle->debug_print("pms3003: reset gpio deinit failed.\n"); /* reset gpio deinit failed */
381
382 return 1; /* return error */
383 }
384 if (handle->set_gpio_deinit() != 0) /* set gpio deinit */
385 {
386 handle->debug_print("pms3003: set gpio deinit failed.\n"); /* set gpio deinit failed */
387
388 return 1; /* return error */
389 }
390 if (handle->uart_deinit() != 0) /* uart deinit */
391 {
392 handle->debug_print("pms3003: uart deinit failed.\n"); /* uart deinit failed */
393
394 return 1; /* return error */
395 }
396 handle->inited = 0; /* flag close */
397
398 return 0; /* success return 0 */
399}
400
412{
413 if (handle == NULL) /* check handle */
414 {
415 return 2; /* return error */
416 }
417 if (handle->inited != 1) /* check handle initialization */
418 {
419 return 3; /* return error */
420 }
421
422 if (handle->reset_gpio_write(0) != 0) /* set low */
423 {
424 handle->debug_print("pms3003: reset gpio write failed.\n"); /* reset gpio write failed */
425
426 return 1; /* return error */
427 }
428 handle->delay_ms(100); /* delay 100ms */
429 if (handle->reset_gpio_write(1) != 0) /* set high */
430 {
431 handle->debug_print("pms3003: reset gpio write failed.\n"); /* reset gpio write failed */
432
433 return 1; /* return error */
434 }
435 handle->delay_ms(300); /* delay 300ms */
436
437 return 0; /* success return 0 */
438}
439
452{
453 if (handle == NULL) /* check handle */
454 {
455 return 2; /* return error */
456 }
457 if (handle->inited != 1) /* check handle initialization */
458 {
459 return 3; /* return error */
460 }
461
462 if ((uint8_t)mode != 0) /* normal */
463 {
464 if (handle->set_gpio_write(1) != 0) /* normal working */
465 {
466 handle->debug_print("pms3003: set gpio write failed.\n"); /* set gpio write failed */
467
468 return 1; /* return error */
469 }
470 }
471 else /* sleep */
472 {
473 if (handle->set_gpio_write(0) != 0) /* sleep working */
474 {
475 handle->debug_print("pms3003: set gpio write failed.\n"); /* set gpio write failed */
476
477 return 1; /* return error */
478 }
479 }
480 handle->delay_ms(300); /* delay 300ms */
481
482 return 0; /* success return 0 */
483}
484
498{
499 uint8_t res;
500 uint8_t data;
501 uint8_t output[7];
502 uint8_t input[8];
503 uint16_t len;
504
505 if (handle == NULL) /* check handle */
506 {
507 return 2; /* return error */
508 }
509 if (handle->inited != 1) /* check handle initialization */
510 {
511 return 3; /* return error */
512 }
513
514 (void)a_pms3003_make_frame(PMS3003_COMMAND_CHANGE_WORKING_MODE, (uint8_t)mode, output); /* make frame */
515 res = handle->uart_flush(); /* uart flush */
516 if (res != 0) /* check result */
517 {
518 handle->debug_print("pms3003: uart flush failed.\n"); /* uart flush failed */
519
520 return 1; /* return error */
521 }
522 res = handle->uart_write(output, 7); /* uart write */
523 if (res != 0) /* check result */
524 {
525 handle->debug_print("pms3003: uart write failed.\n"); /* uart write failed */
526
527 return 1; /* return error */
528 }
529 handle->delay_ms(100); /* delay 100ms */
530 len = handle->uart_read(input, 8); /* uart read */
531 if (len != 8) /* check length */
532 {
533 handle->debug_print("pms3003: uart read failed.\n"); /* uart read failed */
534
535 return 1; /* return error */
536 }
537 res = a_pms3003_parse_frame(handle, input, PMS3003_COMMAND_CHANGE_WORKING_MODE, &data); /* parse frame */
538 if (res != 0) /* check result */
539 {
540 handle->debug_print("pms3003: frame error.\n"); /* frame error */
541
542 return 4; /* return error */
543 }
544 if (data != (uint8_t)mode) /* check data */
545 {
546 handle->debug_print("pms3003: set mode failed.\n"); /* set mode failed */
547
548 return 1; /* return error */
549 }
550 handle->mode = (uint8_t)mode; /* save mode */
551
552 return 0; /* success return 0 */
553}
554
567{
568 uint8_t res;
569 uint8_t data;
570 uint8_t output[7];
571 uint8_t input[8];
572 uint16_t len;
573
574 if (handle == NULL) /* check handle */
575 {
576 return 2; /* return error */
577 }
578 if (handle->inited != 1) /* check handle initialization */
579 {
580 return 3; /* return error */
581 }
582
583 (void)a_pms3003_make_frame(PMS3003_COMMAND_CHANGE_CHIP_MODE, (uint8_t)0x00, output); /* make frame */
584 res = handle->uart_flush(); /* uart flush */
585 if (res != 0) /* check result */
586 {
587 handle->debug_print("pms3003: uart flush failed.\n"); /* uart flush failed */
588
589 return 1; /* return error */
590 }
591 res = handle->uart_write(output, 7); /* uart write */
592 if (res != 0) /* check result */
593 {
594 handle->debug_print("pms3003: uart write failed.\n"); /* uart write failed */
595
596 return 1; /* return error */
597 }
598 handle->delay_ms(100); /* delay 100ms */
599 len = handle->uart_read(input, 8);
600 if (len != 8) /* check length */
601 { /* uart read */
602 handle->debug_print("pms3003: uart read failed.\n"); /* uart read failed */
603
604 return 1; /* return error */
605 }
606 res = a_pms3003_parse_frame(handle, input, PMS3003_COMMAND_CHANGE_CHIP_MODE, &data); /* parse frame */
607 if (res != 0) /* check result */
608 {
609 handle->debug_print("pms3003: frame error.\n"); /* frame error */
610
611 return 4; /* return error */
612 }
613 if (data != (uint8_t)0x00) /* check data */
614 {
615 handle->debug_print("pms3003: sleep failed.\n"); /* sleep failed */
616
617 return 1; /* return error */
618 }
619
620 return 0; /* success return 0 */
621}
622
635{
636 uint8_t res;
637 uint8_t output[7];
638
639 if (handle == NULL) /* check handle */
640 {
641 return 2; /* return error */
642 }
643 if (handle->inited != 1) /* check handle initialization */
644 {
645 return 3; /* return error */
646 }
647
648 (void)a_pms3003_make_frame(PMS3003_COMMAND_CHANGE_CHIP_MODE, (uint8_t)0x01, output); /* make frame */
649 res = handle->uart_flush(); /* uart flush */
650 if (res != 0) /* check result */
651 {
652 handle->debug_print("pms3003: uart flush failed.\n"); /* uart flush failed */
653
654 return 1; /* return error */
655 }
656 res = handle->uart_write(output, 7); /* uart write */
657 if (res != 0) /* check result */
658 {
659 handle->debug_print("pms3003: uart write failed.\n"); /* uart write failed */
660
661 return 1; /* return error */
662 }
663 handle->delay_ms(300); /* delay 300ms */
664
665 return 0; /* success return 0 */
666}
667
681{
682 uint8_t res;
683 uint8_t j;
684 uint8_t done;
685 uint8_t output[7];
686 uint8_t input[48];
687 uint16_t len;
688
689 if (handle == NULL) /* check handle */
690 {
691 return 2; /* return error */
692 }
693 if (handle->inited != 1) /* check handle initialization */
694 {
695 return 3; /* return error */
696 }
697
698 if (handle->mode != 0) /* active mode */
699 {
700 len = handle->uart_read(input, 48); /* uart read */
701 if (len != 48) /* check length */
702 {
703 handle->debug_print("pms3003: uart read failed.\n"); /* uart read failed */
704
705 return 1; /* return error */
706 }
707 res = handle->uart_flush(); /* uart flush */
708 if (res != 0) /* check result */
709 {
710 handle->debug_print("pms3003: uart flush failed.\n"); /* uart flush failed */
711
712 return 1; /* return error */
713 }
714 done = 0; /* init 0 */
715 for (j = 0; j < 25; j++) /* loop all */
716 {
717 if ((input[j] == 0x42) && (input[j + 1] == 0x4D) && ((j + 23) < 48)) /* check frame */
718 {
719 uint8_t i;
720 uint16_t lrc;
721 uint16_t lrc_check;
722
723 lrc = 0; /* init 0 */
724 for (i = 0; i < 22; i++) /* add all */
725 {
726 lrc += input[i + j]; /* sum */
727 }
728 lrc_check = ((uint16_t)input[22 + j] << 8) | input[23 + j]; /* get lrc */
729 if (lrc != lrc_check) /* check lrc */
730 {
731 continue; /* continue */
732 }
733 done = 1; /* flag done */
734
735 break; /* break */
736 }
737 }
738 if (done != 1) /* check done */
739 {
740 handle->debug_print("pms3003: frame error.\n"); /* frame error */
741
742 return 4; /* return error */
743 }
744
745 res = a_pms3003_parse_data(handle, input + j, data); /* parse data */
746 if (res != 0) /* check result */
747 {
748 handle->debug_print("pms3003: frame error.\n"); /* frame error */
749
750 return 4; /* return error */
751 }
752 }
753 else /* passive mode */
754 {
755 (void)a_pms3003_make_frame(PMS3003_COMMAND_READ, (uint8_t)0x00, output); /* make frame */
756 res = handle->uart_flush(); /* uart flush */
757 if (res != 0) /* check result */
758 {
759 handle->debug_print("pms3003: uart flush failed.\n"); /* uart flush failed */
760
761 return 1; /* return error */
762 }
763 res = handle->uart_write(output, 7); /* uart write */
764 if (res != 0) /* check result */
765 {
766 handle->debug_print("pms3003: uart write failed.\n"); /* uart write failed */
767
768 return 1; /* return error */
769 }
770 handle->delay_ms(100); /* delay 100ms */
771 len = handle->uart_read(input, 24); /* uart read */
772 if (len != 24) /* check length */
773 {
774 handle->debug_print("pms3003: uart read failed.\n"); /* uart read failed */
775
776 return 1; /* return error */
777 }
778 res = a_pms3003_parse_data(handle, input, data); /* parse data */
779 if (res != 0) /* check result */
780 {
781 handle->debug_print("pms3003: frame error.\n"); /* frame error */
782
783 return 4; /* return error */
784 }
785 }
786
787 return 0; /* success return 0 */
788}
789
802uint8_t pms3003_set_buffer(pms3003_handle_t *handle, uint8_t *buf, uint16_t len)
803{
804 uint8_t res;
805
806 if (handle == NULL) /* check handle */
807 {
808 return 2; /* return error */
809 }
810 if (handle->inited != 1) /* check handle initialization */
811 {
812 return 3; /* return error */
813 }
814
815 res = handle->uart_flush(); /* uart flush */
816 if (res != 0) /* check result */
817 {
818 handle->debug_print("pms3003: uart flush failed.\n"); /* uart flush failed */
819
820 return 1; /* return error */
821 }
822 res = handle->uart_write(buf, len); /* uart write */
823 if (res != 0) /* check result */
824 {
825 handle->debug_print("pms3003: uart write failed.\n"); /* uart write failed */
826
827 return 1; /* return error */
828 }
829
830 return 0; /* success return 0 */
831}
832
845uint8_t pms3003_get_buffer(pms3003_handle_t *handle, uint8_t *buf, uint16_t len)
846{
847 uint16_t l;
848
849 if (handle == NULL) /* check handle */
850 {
851 return 2; /* return error */
852 }
853 if (handle->inited != 1) /* check handle initialization */
854 {
855 return 3; /* return error */
856 }
857
858 l = handle->uart_read((uint8_t *)buf, len); /* uart read */
859 if (l != len) /* check result */
860 {
861 handle->debug_print("pms3003: uart read failed.\n"); /* uart read failed */
862
863 return 1; /* return error */
864 }
865
866 return 0; /* success return 0 */
867}
868
878{
879 if (info == NULL) /* check handle */
880 {
881 return 2; /* return error */
882 }
883
884 memset(info, 0, sizeof(pms3003_info_t)); /* initialize pms3003 info structure */
885 strncpy(info->chip_name, CHIP_NAME, 32); /* copy chip name */
886 strncpy(info->manufacturer_name, MANUFACTURER_NAME, 32); /* copy manufacturer name */
887 strncpy(info->interface, "UART", 8); /* copy interface name */
888 info->supply_voltage_min_v = SUPPLY_VOLTAGE_MIN; /* set minimal supply voltage */
889 info->supply_voltage_max_v = SUPPLY_VOLTAGE_MAX; /* set maximum supply voltage */
890 info->max_current_ma = MAX_CURRENT; /* set maximum current */
891 info->temperature_max = TEMPERATURE_MAX; /* set maximum temperature */
892 info->temperature_min = TEMPERATURE_MIN; /* set minimal temperature */
893 info->driver_version = DRIVER_VERSION; /* set driver version */
894
895 return 0; /* success return 0 */
896}
#define PMS3003_COMMAND_CHANGE_CHIP_MODE
#define MAX_CURRENT
#define SUPPLY_VOLTAGE_MAX
#define TEMPERATURE_MAX
#define PMS3003_COMMAND_CHANGE_WORKING_MODE
#define MANUFACTURER_NAME
#define TEMPERATURE_MIN
#define SUPPLY_VOLTAGE_MIN
#define CHIP_NAME
chip information definition
#define DRIVER_VERSION
#define PMS3003_COMMAND_READ
chip command definition
driver pms3003 header file
pms3003_mode_t
pms3003 mode enumeration definition
struct pms3003_data_s pms3003_data_t
pms3003 data structure definition
uint8_t pms3003_set_hard_mode(pms3003_handle_t *handle, pms3003_hard_mode_t mode)
set hard mode
uint8_t pms3003_set_mode(pms3003_handle_t *handle, pms3003_mode_t mode)
set mode
uint8_t pms3003_read(pms3003_handle_t *handle, pms3003_data_t *data)
read the data
uint8_t pms3003_wake_up(pms3003_handle_t *handle)
wake up
uint8_t pms3003_init(pms3003_handle_t *handle)
initialize the chip
pms3003_hard_mode_t
pms3003 hard mode enumeration definition
uint8_t pms3003_deinit(pms3003_handle_t *handle)
close the chip
uint8_t pms3003_reset(pms3003_handle_t *handle)
reset
struct pms3003_info_s pms3003_info_t
pms3003 information structure definition
uint8_t pms3003_sleep(pms3003_handle_t *handle)
sleep
struct pms3003_handle_s pms3003_handle_t
pms3003 handle structure definition
uint8_t pms3003_info(pms3003_info_t *info)
get chip's information
@ PMS3003_MODE_ACTIVE
uint8_t pms3003_get_buffer(pms3003_handle_t *handle, uint8_t *buf, uint16_t len)
get buffer
uint8_t pms3003_set_buffer(pms3003_handle_t *handle, uint8_t *buf, uint16_t len)
set buffer
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 pm2p5_atmospheric_ug_m3
uint16_t pm10_standard_ug_m3
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]