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
54#define PMS3003_COMMAND_READ 0xE2
55#define PMS3003_COMMAND_CHANGE_WORKING_MODE 0xE1
56#define PMS3003_COMMAND_CHANGE_CHIP_MODE 0xE4
68static uint8_t a_pms3003_make_frame(uint8_t command, uint8_t data, uint8_t output[7])
80 for (i = 0; i < 5; i++)
84 output[5] = (lrc >> 8) & 0xFF;
85 output[6] = (lrc >> 0) & 0xFF;
101static uint8_t a_pms3003_parse_frame(
pms3003_handle_t *handle, uint8_t input[8], uint8_t command, uint8_t *data)
108 for (i = 0; i < 6; i++)
112 lrc_check = ((uint16_t)input[6] << 8) | input[7];
113 if (lrc != lrc_check)
115 handle->
debug_print(
"pms3003: lrc check error.\n");
119 if ((input[0] == 0x42) && (input[1] == 0x4D))
123 len = ((uint16_t)input[2] << 8) | input[3];
128 if (input[4] != command)
159 for (i = 0; i < 22; i++)
163 lrc_check = ((uint16_t)input[22] << 8) | input[23];
164 if (lrc != lrc_check)
166 handle->
debug_print(
"pms3003: lrc check error.\n");
170 if ((input[0] == 0x42) && (input[1] == 0x4D))
174 len = ((uint16_t)input[2] << 8) | input[3];
219 handle->
debug_print(
"pms3003: uart_init is null.\n");
225 handle->
debug_print(
"pms3003: uart_deinit is null.\n");
231 handle->
debug_print(
"pms3003: uart_read is null.\n");
237 handle->
debug_print(
"pms3003: uart_flush is null.\n");
243 handle->
debug_print(
"pms3003: uart_write is null.\n");
249 handle->
debug_print(
"pms3003: reset_gpio_init is null.\n");
255 handle->
debug_print(
"pms3003: reset_gpio_deinit is null.\n");
261 handle->
debug_print(
"pms3003: reset_gpio_write is null.\n");
267 handle->
debug_print(
"pms3003: set_gpio_init is null.\n");
273 handle->
debug_print(
"pms3003: set_gpio_deinit is null.\n");
279 handle->
debug_print(
"pms3003: set_gpio_write is null.\n");
285 handle->
debug_print(
"pms3003: delay_ms is null.\n");
292 handle->
debug_print(
"pms3003: reset gpio init failed.\n");
298 handle->
debug_print(
"pms3003: set gpio init failed.\n");
305 handle->
debug_print(
"pms3003: uart init failed.\n");
313 handle->
debug_print(
"pms3003: set gpio write failed.\n");
323 handle->
debug_print(
"pms3003: reset gpio write failed.\n");
333 handle->
debug_print(
"pms3003: reset gpio write failed.\n");
344 handle->
debug_print(
"pms3003: uart flush failed.\n");
380 handle->
debug_print(
"pms3003: reset gpio deinit failed.\n");
386 handle->
debug_print(
"pms3003: set gpio deinit failed.\n");
392 handle->
debug_print(
"pms3003: uart deinit failed.\n");
424 handle->
debug_print(
"pms3003: reset gpio write failed.\n");
431 handle->
debug_print(
"pms3003: reset gpio write failed.\n");
462 if ((uint8_t)mode != 0)
466 handle->
debug_print(
"pms3003: set gpio write failed.\n");
475 handle->
debug_print(
"pms3003: set gpio write failed.\n");
518 handle->
debug_print(
"pms3003: uart flush failed.\n");
525 handle->
debug_print(
"pms3003: uart write failed.\n");
533 handle->
debug_print(
"pms3003: uart read failed.\n");
544 if (data != (uint8_t)mode)
546 handle->
debug_print(
"pms3003: set mode failed.\n");
550 handle->
mode = (uint8_t)mode;
587 handle->
debug_print(
"pms3003: uart flush failed.\n");
594 handle->
debug_print(
"pms3003: uart write failed.\n");
602 handle->
debug_print(
"pms3003: uart read failed.\n");
613 if (data != (uint8_t)0x00)
652 handle->
debug_print(
"pms3003: uart flush failed.\n");
659 handle->
debug_print(
"pms3003: uart write failed.\n");
698 if (handle->
mode != 0)
703 handle->
debug_print(
"pms3003: uart read failed.\n");
710 handle->
debug_print(
"pms3003: uart flush failed.\n");
715 for (j = 0; j < 25; j++)
717 if ((input[j] == 0x42) && (input[j + 1] == 0x4D) && ((j + 23) < 48))
724 for (i = 0; i < 22; i++)
728 lrc_check = ((uint16_t)input[22 + j] << 8) | input[23 + j];
729 if (lrc != lrc_check)
745 res = a_pms3003_parse_data(handle, input + j, data);
759 handle->
debug_print(
"pms3003: uart flush failed.\n");
766 handle->
debug_print(
"pms3003: uart write failed.\n");
774 handle->
debug_print(
"pms3003: uart read failed.\n");
778 res = a_pms3003_parse_data(handle, input, data);
818 handle->
debug_print(
"pms3003: uart flush failed.\n");
825 handle->
debug_print(
"pms3003: uart write failed.\n");
858 l = handle->
uart_read((uint8_t *)buf, len);
861 handle->
debug_print(
"pms3003: uart read failed.\n");
#define PMS3003_COMMAND_CHANGE_CHIP_MODE
#define SUPPLY_VOLTAGE_MAX
#define PMS3003_COMMAND_CHANGE_WORKING_MODE
#define MANUFACTURER_NAME
#define SUPPLY_VOLTAGE_MIN
#define CHIP_NAME
chip information definition
#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
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)
float supply_voltage_max_v
char manufacturer_name[32]
float supply_voltage_min_v