LibDriver SCD30
Loading...
Searching...
No Matches
driver_scd30.h
Go to the documentation of this file.
1
36
37#ifndef DRIVER_SCD30_H
38#define DRIVER_SCD30_H
39
40#include <stdio.h>
41#include <stdint.h>
42#include <string.h>
43
44#ifdef __cplusplus
45extern "C"{
46#endif
47
53
58
67
71typedef enum
72{
74 SCD30_BOOL_TRUE = 0x0001,
76
80typedef struct scd30_handle_s
81{
82 uint8_t (*iic_init)(void);
83 uint8_t (*iic_deinit)(void);
84 uint8_t (*iic_write_cmd)(uint8_t addr, uint8_t *buf, uint16_t len);
85 uint8_t (*iic_read_cmd)(uint8_t addr, uint8_t *buf, uint16_t len);
86 uint8_t (*uart_init)(void);
87 uint8_t (*uart_deinit)(void);
88 uint16_t (*uart_read)(uint8_t *buf, uint16_t len);
89 uint8_t (*uart_flush)(void);
90 uint8_t (*uart_write)(uint8_t *buf, uint16_t len);
91 void (*delay_ms)(uint32_t ms);
92 void (*debug_print)(const char *const fmt, ...);
93 uint8_t inited;
94 uint8_t iic_uart;
96
109
125
129
136
143#define DRIVER_SCD30_LINK_INIT(HANDLE, STRUCTURE) memset(HANDLE, 0, sizeof(STRUCTURE))
144
151#define DRIVER_SCD30_LINK_UART_INIT(HANDLE, FUC) (HANDLE)->uart_init = FUC
152
159#define DRIVER_SCD30_LINK_UART_DEINIT(HANDLE, FUC) (HANDLE)->uart_deinit = FUC
160
167#define DRIVER_SCD30_LINK_UART_READ(HANDLE, FUC) (HANDLE)->uart_read = FUC
168
175#define DRIVER_SCD30_LINK_UART_WRITE(HANDLE, FUC) (HANDLE)->uart_write = FUC
176
183#define DRIVER_SCD30_LINK_UART_FLUSH(HANDLE, FUC) (HANDLE)->uart_flush = FUC
184
191#define DRIVER_SCD30_LINK_IIC_INIT(HANDLE, FUC) (HANDLE)->iic_init = FUC
192
199#define DRIVER_SCD30_LINK_IIC_DEINIT(HANDLE, FUC) (HANDLE)->iic_deinit = FUC
200
207#define DRIVER_SCD30_LINK_IIC_WRITE_COMMAND(HANDLE, FUC) (HANDLE)->iic_write_cmd = FUC
208
215#define DRIVER_SCD30_LINK_IIC_READ_COMMAND(HANDLE, FUC) (HANDLE)->iic_read_cmd = FUC
216
223#define DRIVER_SCD30_LINK_DELAY_MS(HANDLE, FUC) (HANDLE)->delay_ms = FUC
224
231#define DRIVER_SCD30_LINK_DEBUG_PRINT(HANDLE, FUC) (HANDLE)->debug_print = FUC
232
236
243
252uint8_t scd30_info(scd30_info_t *info);
253
263uint8_t scd30_set_interface(scd30_handle_t *handle, scd30_interface_t interface);
264
274uint8_t scd30_get_interface(scd30_handle_t *handle, scd30_interface_t *interface);
275
287uint8_t scd30_init(scd30_handle_t *handle);
288
300uint8_t scd30_deinit(scd30_handle_t *handle);
301
314uint8_t scd30_read(scd30_handle_t *handle, scd30_data_t *data);
315
329
341
353
366uint8_t scd30_set_measurement_interval(scd30_handle_t *handle, uint16_t second);
367
379uint8_t scd30_get_measurement_interval(scd30_handle_t *handle, uint16_t *second);
380
392uint8_t scd30_get_data_ready_status(scd30_handle_t *handle, uint16_t *status);
393
406
419
432uint8_t scd30_set_forced_recalibration(scd30_handle_t *handle, uint16_t co2_ppm);
433
445uint8_t scd30_get_forced_recalibration(scd30_handle_t *handle, uint16_t *co2_ppm);
446
458uint8_t scd30_set_temperature_offset(scd30_handle_t *handle, uint16_t deg);
459
471uint8_t scd30_get_temperature_offset(scd30_handle_t *handle, uint16_t *deg);
472
484uint8_t scd30_temperature_offset_convert_to_register(scd30_handle_t *handle, float deg, uint16_t *reg);
485
497uint8_t scd30_temperature_offset_convert_to_data(scd30_handle_t *handle, uint16_t reg, float *deg);
498
510uint8_t scd30_set_altitude_compensation(scd30_handle_t *handle, uint16_t m);
511
523uint8_t scd30_get_altitude_compensation(scd30_handle_t *handle, uint16_t *m);
524
536uint8_t scd30_get_firmware_version(scd30_handle_t *handle, uint16_t *version);
537
548uint8_t scd30_soft_reset(scd30_handle_t *handle);
549
553
560
574uint8_t scd30_set_reg_iic(scd30_handle_t *handle, uint16_t reg, uint8_t *buf, uint16_t len);
575
589uint8_t scd30_get_reg_iic(scd30_handle_t *handle, uint16_t reg, uint8_t *buf, uint16_t len);
590
603uint8_t scd30_set_get_reg_uart(scd30_handle_t *handle, uint8_t *input, uint16_t in_len, uint8_t *output, uint16_t out_len);
604
608
612
613#ifdef __cplusplus
614}
615#endif
616
617#endif
uint8_t scd30_init(scd30_handle_t *handle)
initialize the chip
struct scd30_info_s scd30_info_t
scd30 information structure definition
uint8_t scd30_deinit(scd30_handle_t *handle)
close the chip
struct scd30_data_s scd30_data_t
scd30 data structure definition
uint8_t scd30_temperature_offset_convert_to_data(scd30_handle_t *handle, uint16_t reg, float *deg)
convert the register raw data to the temperature offset
uint8_t scd30_stop_measurement(scd30_handle_t *handle)
stop the measurement
uint8_t scd30_set_altitude_compensation(scd30_handle_t *handle, uint16_t m)
set altitude compensation
uint8_t scd30_soft_reset(scd30_handle_t *handle)
soft reset
uint8_t scd30_get_forced_recalibration(scd30_handle_t *handle, uint16_t *co2_ppm)
get forced recalibration
uint8_t scd30_get_data_ready_status(scd30_handle_t *handle, uint16_t *status)
get data ready status
uint8_t scd30_read(scd30_handle_t *handle, scd30_data_t *data)
read the result
uint8_t scd30_get_temperature_offset(scd30_handle_t *handle, uint16_t *deg)
get temperature offset
uint8_t scd30_temperature_offset_convert_to_register(scd30_handle_t *handle, float deg, uint16_t *reg)
convert the temperature offset to the register raw data
scd30_interface_t
scd30 interface enumeration definition
uint8_t scd30_get_firmware_version(scd30_handle_t *handle, uint16_t *version)
get firmware version
uint8_t scd30_get_automatic_self_calibration(scd30_handle_t *handle, scd30_bool_t *enable)
get automatic self calibration
uint8_t scd30_set_interface(scd30_handle_t *handle, scd30_interface_t interface)
set the chip interface
uint8_t scd30_set_automatic_self_calibration(scd30_handle_t *handle, scd30_bool_t enable)
set automatic self calibration
uint8_t scd30_start_measurement(scd30_handle_t *handle)
start the measurement
uint8_t scd30_info(scd30_info_t *info)
get chip information
uint8_t scd30_set_temperature_offset(scd30_handle_t *handle, uint16_t deg)
set temperature offset
uint8_t scd30_get_interface(scd30_handle_t *handle, scd30_interface_t *interface)
get the chip interface
struct scd30_handle_s scd30_handle_t
scd30 handle structure definition
uint8_t scd30_set_forced_recalibration(scd30_handle_t *handle, uint16_t co2_ppm)
set forced recalibration
uint8_t scd30_set_measurement_interval(scd30_handle_t *handle, uint16_t second)
set the measurement interval
uint8_t scd30_get_measurement_interval(scd30_handle_t *handle, uint16_t *second)
get the measurement interval
uint8_t scd30_start_measurement_with_pressure_compensation(scd30_handle_t *handle, uint16_t mbar)
start the measurement with pressure compensation
uint8_t scd30_get_altitude_compensation(scd30_handle_t *handle, uint16_t *m)
get altitude compensation
scd30_bool_t
scd30 bool enumeration definition
@ SCD30_INTERFACE_UART
@ SCD30_INTERFACE_IIC
@ SCD30_BOOL_FALSE
@ SCD30_BOOL_TRUE
uint8_t scd30_set_get_reg_uart(scd30_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 scd30_get_reg_iic(scd30_handle_t *handle, uint16_t reg, uint8_t *buf, uint16_t len)
get the chip register with iic interface
uint8_t scd30_set_reg_iic(scd30_handle_t *handle, uint16_t reg, uint8_t *buf, uint16_t len)
set the chip register with iic interface
scd30 data structure definition
uint16_t temperature_raw
uint16_t humidity_raw
uint16_t co2_raw
float temperature_deg
float humidity_percent
scd30 handle structure definition
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)
void(* debug_print)(const char *const fmt,...)
uint8_t(* iic_init)(void)
uint16_t(* uart_read)(uint8_t *buf, uint16_t len)
uint8_t(* iic_read_cmd)(uint8_t addr, uint8_t *buf, uint16_t len)
uint8_t(* uart_init)(void)
uint8_t(* iic_deinit)(void)
uint8_t(* iic_write_cmd)(uint8_t addr, uint8_t *buf, uint16_t len)
scd30 information structure definition
float temperature_max
float supply_voltage_max_v
uint32_t driver_version
char interface[16]
float temperature_min
float max_current_ma
char manufacturer_name[32]
float supply_voltage_min_v
char chip_name[32]