LibDriver SPS30  1.0.0
SPS30 full-featured driver
driver_sps30.h
Go to the documentation of this file.
1 
37 #ifndef DRIVER_SPS30_H
38 #define DRIVER_SPS30_H
39 
40 #include <stdio.h>
41 #include <stdint.h>
42 #include <string.h>
43 
44 #ifdef __cplusplus
45 extern "C"{
46 #endif
47 
62 typedef enum
63 {
67 
71 typedef enum
72 {
76 
80 typedef enum
81 {
85 
89 typedef enum
90 {
95 
99 typedef struct sps30_handle_s
100 {
101  uint8_t (*iic_init)(void);
102  uint8_t (*iic_deinit)(void);
103  uint8_t (*iic_write_cmd)(uint8_t addr, uint8_t *buf, uint16_t len);
104  uint8_t (*iic_read_cmd)(uint8_t addr, uint8_t *buf, uint16_t len);
105  uint8_t (*uart_init)(void);
106  uint8_t (*uart_deinit)(void);
107  uint16_t (*uart_read)(uint8_t *buf, uint16_t len);
108  uint8_t (*uart_flush)(void);
109  uint8_t (*uart_write)(uint8_t *buf, uint16_t len);
110  void (*delay_ms)(uint32_t ms);
111  void (*debug_print)(const char *const fmt, ...);
112  uint8_t inited;
113  uint8_t iic_uart;
114  uint8_t format;
115  uint8_t buf[256];
117 
121 typedef struct sps30_pm_s
122 {
123  float pm1p0_ug_m3;
124  float pm2p5_ug_m3;
125  float pm4p0_ug_m3;
126  float pm10_ug_m3;
127  float pm0p5_cm3;
128  float pm1p0_cm3;
129  float pm2p5_cm3;
130  float pm4p0_cm3;
131  float pm10_cm3;
134 
138 typedef struct sps30_info_s
139 {
140  char chip_name[32];
141  char manufacturer_name[32];
142  char interface[16];
148  uint32_t driver_version;
150 
168 #define DRIVER_SPS30_LINK_INIT(HANDLE, STRUCTURE) memset(HANDLE, 0, sizeof(STRUCTURE))
169 
176 #define DRIVER_SPS30_LINK_UART_INIT(HANDLE, FUC) (HANDLE)->uart_init = FUC
177 
184 #define DRIVER_SPS30_LINK_UART_DEINIT(HANDLE, FUC) (HANDLE)->uart_deinit = FUC
185 
192 #define DRIVER_SPS30_LINK_UART_READ(HANDLE, FUC) (HANDLE)->uart_read = FUC
193 
200 #define DRIVER_SPS30_LINK_UART_WRITE(HANDLE, FUC) (HANDLE)->uart_write = FUC
201 
208 #define DRIVER_SPS30_LINK_UART_FLUSH(HANDLE, FUC) (HANDLE)->uart_flush = FUC
209 
216 #define DRIVER_SPS30_LINK_IIC_INIT(HANDLE, FUC) (HANDLE)->iic_init = FUC
217 
224 #define DRIVER_SPS30_LINK_IIC_DEINIT(HANDLE, FUC) (HANDLE)->iic_deinit = FUC
225 
232 #define DRIVER_SPS30_LINK_IIC_WRITE_COMMAND(HANDLE, FUC) (HANDLE)->iic_write_cmd = FUC
233 
240 #define DRIVER_SPS30_LINK_IIC_READ_COMMAND(HANDLE, FUC) (HANDLE)->iic_read_cmd = FUC
241 
248 #define DRIVER_SPS30_LINK_DELAY_MS(HANDLE, FUC) (HANDLE)->delay_ms = FUC
249 
256 #define DRIVER_SPS30_LINK_DEBUG_PRINT(HANDLE, FUC) (HANDLE)->debug_print = FUC
257 
277 uint8_t sps30_info(sps30_info_t *info);
278 
288 uint8_t sps30_set_interface(sps30_handle_t *handle, sps30_interface_t interface);
289 
299 uint8_t sps30_get_interface(sps30_handle_t *handle, sps30_interface_t *interface);
300 
312 uint8_t sps30_init(sps30_handle_t *handle);
313 
325 uint8_t sps30_deinit(sps30_handle_t *handle);
326 
339 uint8_t sps30_read(sps30_handle_t *handle, sps30_pm_t *pm);
340 
351 uint8_t sps30_sleep(sps30_handle_t *handle);
352 
363 uint8_t sps30_reset(sps30_handle_t *handle);
364 
375 uint8_t sps30_wake_up(sps30_handle_t *handle);
376 
388 uint8_t sps30_start_measurement(sps30_handle_t *handle, sps30_format_t format);
389 
400 uint8_t sps30_stop_measurement(sps30_handle_t *handle);
401 
414 
426 
439 uint8_t sps30_set_auto_cleaning_interval(sps30_handle_t *handle, uint32_t second);
440 
452 uint8_t sps30_get_auto_cleaning_interval(sps30_handle_t *handle, uint32_t *second);
453 
465 
477 uint8_t sps30_get_product_type(sps30_handle_t *handle, char type[9]);
478 
490 uint8_t sps30_get_serial_number(sps30_handle_t *handle, char sn[17]);
491 
504 uint8_t sps30_get_version(sps30_handle_t *handle, uint8_t *major, uint8_t *minor);
505 
517 uint8_t sps30_get_device_status(sps30_handle_t *handle, uint32_t *status);
518 
530 
555 uint8_t sps30_set_reg_iic(sps30_handle_t *handle, uint16_t reg, uint8_t *buf, uint16_t len);
556 
570 uint8_t sps30_get_reg_iic(sps30_handle_t *handle, uint16_t reg, uint8_t *buf, uint16_t len);
571 
584 uint8_t sps30_set_get_reg_uart(sps30_handle_t *handle, uint8_t *input, uint16_t in_len, uint8_t *output, uint16_t out_len);
585 
594 #ifdef __cplusplus
595 }
596 #endif
597 
598 #endif
uint8_t sps30_get_interface(sps30_handle_t *handle, sps30_interface_t *interface)
get the chip interface
Definition: driver_sps30.c:500
uint8_t sps30_set_auto_cleaning_interval(sps30_handle_t *handle, uint32_t second)
set the auto cleaning interval
Definition: driver_sps30.c:929
sps30_data_ready_flag_t
sps30 data ready flag enumeration definition
Definition: driver_sps30.h:81
uint8_t sps30_start_fan_cleaning(sps30_handle_t *handle)
start the fan cleaning
Definition: driver_sps30.c:860
uint8_t sps30_get_auto_cleaning_interval(sps30_handle_t *handle, uint32_t *second)
get the auto cleaning interval
uint8_t sps30_read(sps30_handle_t *handle, sps30_pm_t *pm)
read the result
struct sps30_info_s sps30_info_t
sps30 information structure definition
uint8_t sps30_wake_up(sps30_handle_t *handle)
wake up the chip
Definition: driver_sps30.c:787
sps30_interface_t
sps30 interface enumeration definition
Definition: driver_sps30.h:63
uint8_t sps30_start_measurement(sps30_handle_t *handle, sps30_format_t format)
start the measurement
Definition: driver_sps30.c:523
uint8_t sps30_stop_measurement(sps30_handle_t *handle)
stop the measurement
Definition: driver_sps30.c:599
sps30_format_t
sps30 format enumeration definition
Definition: driver_sps30.h:72
uint8_t sps30_get_product_type(sps30_handle_t *handle, char type[9])
get the product type
uint8_t sps30_get_device_status(sps30_handle_t *handle, uint32_t *status)
get the device status
uint8_t sps30_disable_auto_cleaning_interval(sps30_handle_t *handle)
disable the auto cleaning interval
uint8_t sps30_reset(sps30_handle_t *handle)
reset the chip
struct sps30_handle_s sps30_handle_t
sps30 handle structure definition
uint8_t sps30_read_data_flag(sps30_handle_t *handle, sps30_data_ready_flag_t *flag)
read the data read flag
Definition: driver_sps30.c:667
uint8_t sps30_info(sps30_info_t *info)
get chip information
uint8_t sps30_deinit(sps30_handle_t *handle)
close the chip
uint8_t sps30_init(sps30_handle_t *handle)
initialize the chip
uint8_t sps30_sleep(sps30_handle_t *handle)
enter the sleep mode
Definition: driver_sps30.c:720
uint8_t sps30_set_interface(sps30_handle_t *handle, sps30_interface_t interface)
set the chip interface
Definition: driver_sps30.c:479
uint8_t sps30_clear_device_status(sps30_handle_t *handle)
clear the device status
struct sps30_pm_s sps30_pm_t
sps30 pm structure definition
uint8_t sps30_get_version(sps30_handle_t *handle, uint8_t *major, uint8_t *minor)
get the version
uint8_t sps30_get_serial_number(sps30_handle_t *handle, char sn[17])
get the serial number
sps30_status_t
sps30 status enumeration definition
Definition: driver_sps30.h:90
@ SPS30_DATA_READY_FLAG_AVAILABLE
Definition: driver_sps30.h:83
@ SPS30_DATA_READY_FLAG_NOT_READY
Definition: driver_sps30.h:82
@ SPS30_INTERFACE_IIC
Definition: driver_sps30.h:64
@ SPS30_INTERFACE_UART
Definition: driver_sps30.h:65
@ SPS30_FORMAT_UINT16
Definition: driver_sps30.h:74
@ SPS30_FORMAT_IEEE754
Definition: driver_sps30.h:73
@ SPS30_STATUS_LASER_ERROR
Definition: driver_sps30.h:92
@ SPS30_STATUS_FAN_SPEED_ERROR
Definition: driver_sps30.h:91
@ SPS30_STATUS_FAN_ERROR
Definition: driver_sps30.h:93
uint8_t sps30_get_reg_iic(sps30_handle_t *handle, uint16_t reg, uint8_t *buf, uint16_t len)
get the chip register with iic interface
uint8_t sps30_set_get_reg_uart(sps30_handle_t *handle, uint8_t *input, uint16_t in_len, uint8_t *output, uint16_t out_len)
set and get the chip register with uart interface
uint8_t sps30_set_reg_iic(sps30_handle_t *handle, uint16_t reg, uint8_t *buf, uint16_t len)
set the chip register with iic interface
sps30 handle structure definition
Definition: driver_sps30.h:100
uint8_t iic_uart
Definition: driver_sps30.h:113
uint8_t(* uart_flush)(void)
Definition: driver_sps30.h:108
uint8_t buf[256]
Definition: driver_sps30.h:115
uint8_t(* uart_write)(uint8_t *buf, uint16_t len)
Definition: driver_sps30.h:109
void(* delay_ms)(uint32_t ms)
Definition: driver_sps30.h:110
uint8_t(* uart_deinit)(void)
Definition: driver_sps30.h:106
void(* debug_print)(const char *const fmt,...)
Definition: driver_sps30.h:111
uint8_t(* iic_init)(void)
Definition: driver_sps30.h:101
uint16_t(* uart_read)(uint8_t *buf, uint16_t len)
Definition: driver_sps30.h:107
uint8_t(* iic_read_cmd)(uint8_t addr, uint8_t *buf, uint16_t len)
Definition: driver_sps30.h:104
uint8_t(* uart_init)(void)
Definition: driver_sps30.h:105
uint8_t(* iic_deinit)(void)
Definition: driver_sps30.h:102
uint8_t(* iic_write_cmd)(uint8_t addr, uint8_t *buf, uint16_t len)
Definition: driver_sps30.h:103
sps30 information structure definition
Definition: driver_sps30.h:139
float temperature_max
Definition: driver_sps30.h:147
float supply_voltage_max_v
Definition: driver_sps30.h:144
uint32_t driver_version
Definition: driver_sps30.h:148
char interface[16]
Definition: driver_sps30.h:142
float temperature_min
Definition: driver_sps30.h:146
float max_current_ma
Definition: driver_sps30.h:145
char manufacturer_name[32]
Definition: driver_sps30.h:141
float supply_voltage_min_v
Definition: driver_sps30.h:143
char chip_name[32]
Definition: driver_sps30.h:140
sps30 pm structure definition
Definition: driver_sps30.h:122
float pm1p0_cm3
Definition: driver_sps30.h:128
float typical_particle_um
Definition: driver_sps30.h:132
float pm4p0_cm3
Definition: driver_sps30.h:130
float pm10_cm3
Definition: driver_sps30.h:131
float pm1p0_ug_m3
Definition: driver_sps30.h:123
float pm0p5_cm3
Definition: driver_sps30.h:127
float pm4p0_ug_m3
Definition: driver_sps30.h:125
float pm10_ug_m3
Definition: driver_sps30.h:126
float pm2p5_cm3
Definition: driver_sps30.h:129
float pm2p5_ug_m3
Definition: driver_sps30.h:124