LibDriver BME688
Loading...
Searching...
No Matches
driver_bme688.h
Go to the documentation of this file.
1
36
37#ifndef DRIVER_BME688_H
38#define DRIVER_BME688_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
62typedef enum
63{
67
76
80typedef enum
81{
82 BME688_ADDRESS_ADO_LOW = (0x76 << 1),
85
98
108
123
127typedef enum
128{
132
150
160
170
187
198
202typedef struct bme688_handle_s
203{
204 uint8_t iic_addr;
205 uint8_t (*iic_init)(void);
206 uint8_t (*iic_deinit)(void);
207 uint8_t (*iic_read)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len);
208 uint8_t (*iic_write)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len);
209 uint8_t (*spi_init)(void);
210 uint8_t (*spi_deinit)(void);
211 uint8_t (*spi_read)(uint8_t reg, uint8_t *buf, uint16_t len);
212 uint8_t (*spi_write)(uint8_t reg, uint8_t *buf, uint16_t len);
213 void (*delay_ms)(uint32_t ms);
214 void (*debug_print)(const char *const fmt, ...);
215 void (*receive_callback)(uint8_t status, bme688_parallel_data_t *data,
216 uint8_t len);
217 uint8_t inited;
218 uint8_t iic_spi;
219 uint8_t page;
220 uint16_t par_h1;
221 uint16_t par_h2;
222 int8_t par_h3;
223 int8_t par_h4;
224 int8_t par_h5;
225 uint8_t par_h6;
226 int8_t par_h7;
227 int8_t par_gh1;
228 int16_t par_gh2;
229 int8_t par_gh3;
230 uint16_t par_t1;
231 int16_t par_t2;
232 int8_t par_t3;
233 uint16_t par_p1;
234 int16_t par_p2;
235 int8_t par_p3;
236 int16_t par_p4;
237 int16_t par_p5;
238 int8_t par_p6;
239 int8_t par_p7;
240 int16_t par_p8;
241 int16_t par_p9;
242 uint8_t par_p10;
246 int8_t amb_temp;
247 float t_fine;
254
270
274
281
288#define DRIVER_BME688_LINK_INIT(HANDLE, STRUCTURE) memset(HANDLE, 0, sizeof(STRUCTURE))
289
296#define DRIVER_BME688_LINK_IIC_INIT(HANDLE, FUC) (HANDLE)->iic_init = FUC
297
304#define DRIVER_BME688_LINK_IIC_DEINIT(HANDLE, FUC) (HANDLE)->iic_deinit = FUC
305
312#define DRIVER_BME688_LINK_IIC_READ(HANDLE, FUC) (HANDLE)->iic_read = FUC
313
320#define DRIVER_BME688_LINK_IIC_WRITE(HANDLE, FUC) (HANDLE)->iic_write = FUC
321
328#define DRIVER_BME688_LINK_SPI_INIT(HANDLE, FUC) (HANDLE)->spi_init = FUC
329
336#define DRIVER_BME688_LINK_SPI_DEINIT(HANDLE, FUC) (HANDLE)->spi_deinit = FUC
337
344#define DRIVER_BME688_LINK_SPI_READ(HANDLE, FUC) (HANDLE)->spi_read = FUC
345
352#define DRIVER_BME688_LINK_SPI_WRITE(HANDLE, FUC) (HANDLE)->spi_write = FUC
353
360#define DRIVER_BME688_LINK_DELAY_MS(HANDLE, FUC) (HANDLE)->delay_ms = FUC
361
368#define DRIVER_BME688_LINK_DEBUG_PRINT(HANDLE, FUC) (HANDLE)->debug_print = FUC
369
376#define DRIVER_BME688_LINK_RECEIVE_CALLBACK(HANDLE, FUC) (HANDLE)->receive_callback = FUC
377
381
388
397uint8_t bme688_info(bme688_info_t *info);
398
409
419uint8_t bme688_get_interface(bme688_handle_t *handle, bme688_interface_t *interface);
420
430uint8_t bme688_set_addr_pin(bme688_handle_t *handle, bme688_address_t addr_pin);
431
441uint8_t bme688_get_addr_pin(bme688_handle_t *handle, bme688_address_t *addr_pin);
442
456uint8_t bme688_init(bme688_handle_t *handle);
457
469uint8_t bme688_deinit(bme688_handle_t *handle);
470
496uint8_t bme688_read(bme688_handle_t *handle, bme688_section_t section,
497 uint32_t *temperature_raw, float *temperature_c,
498 uint32_t *pressure_raw, float *pressure_pa,
499 uint32_t *humidity_raw, float *humidity_percentage,
500 uint16_t *adc_raw, uint8_t *adc_range, float *ohms, uint8_t *index);
501
522 uint32_t *temperature_raw, float *temperature_c,
523 uint32_t *pressure_raw, float *pressure_pa,
524 uint32_t *humidity_raw, float *humidity_percentage);
525
541uint8_t bme688_read_pressure(bme688_handle_t *handle, bme688_section_t section, uint32_t *pressure_raw, float *pressure_pa);
542
558uint8_t bme688_read_temperature(bme688_handle_t *handle, bme688_section_t section, uint32_t *temperature_raw, float *temperature_c);
559
575uint8_t bme688_read_humidity(bme688_handle_t *handle, bme688_section_t section, uint32_t *humidity_raw, float *humidity_percentage);
576
596uint8_t bme688_read_gas_resistance(bme688_handle_t *handle, bme688_section_t section, uint16_t *adc_raw, uint8_t *adc_range, float *ohms, uint8_t *index);
597
616
627
643
657
671
685
698uint8_t bme688_get_gas_measuring_index(bme688_handle_t *handle, bme688_section_t section, uint8_t *index);
699
713
727
740uint8_t bme688_get_sub_measurement_index(bme688_handle_t *handle, bme688_section_t section, uint8_t *ind);
741
755uint8_t bme688_set_idac_heater(bme688_handle_t *handle, uint8_t index, uint8_t reg);
756
770uint8_t bme688_get_idac_heater(bme688_handle_t *handle, uint8_t index, uint8_t *reg);
771
785uint8_t bme688_set_resistance_heater(bme688_handle_t *handle, uint8_t index, uint8_t reg);
786
800uint8_t bme688_get_resistance_heater(bme688_handle_t *handle, uint8_t index, uint8_t *reg);
801
815uint8_t bme688_set_gas_wait(bme688_handle_t *handle, uint8_t index, uint8_t reg);
816
830uint8_t bme688_get_gas_wait(bme688_handle_t *handle, uint8_t index, uint8_t *reg);
831
843uint8_t bme688_set_gas_wait_shared(bme688_handle_t *handle, uint8_t reg);
844
856uint8_t bme688_get_gas_wait_shared(bme688_handle_t *handle, uint8_t *reg);
857
868uint8_t bme688_soft_reset(bme688_handle_t *handle);
869
882
895
908
921
934
947
960
973
985uint8_t bme688_set_mode(bme688_handle_t *handle, bme688_mode_t mode);
986
998uint8_t bme688_get_mode(bme688_handle_t *handle, bme688_mode_t *mode);
999
1011uint8_t bme688_set_filter(bme688_handle_t *handle, bme688_filter_t filter);
1012
1024uint8_t bme688_get_filter(bme688_handle_t *handle, bme688_filter_t *filter);
1025
1038
1051
1063uint8_t bme688_set_heater_off(bme688_handle_t *handle, bme688_bool_t enable);
1064
1076uint8_t bme688_get_heater_off(bme688_handle_t *handle, bme688_bool_t *enable);
1077
1089uint8_t bme688_set_run_gas(bme688_handle_t *handle, bme688_bool_t enable);
1090
1102uint8_t bme688_get_run_gas(bme688_handle_t *handle, bme688_bool_t *enable);
1103
1116
1129
1141uint8_t bme688_resistance_heater_convert_to_register(bme688_handle_t *handle, float degree_celsius, uint8_t *reg);
1142
1154uint8_t bme688_idac_heater_convert_to_register(bme688_handle_t *handle, float ma, uint8_t *reg);
1155
1167uint8_t bme688_idac_heater_convert_to_data(bme688_handle_t *handle, uint8_t reg, float *ma);
1168
1181uint8_t bme688_gas_wait_convert_to_register(bme688_handle_t *handle, uint16_t ms, uint8_t *reg);
1182
1195uint8_t bme688_gas_wait_shared_convert_to_register(bme688_handle_t *handle, float m, uint8_t *reg);
1196
1200
1207
1221uint8_t bme688_set_reg(bme688_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len);
1222
1236uint8_t bme688_get_reg(bme688_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len);
1237
1241
1245
1246#ifdef __cplusplus
1247}
1248#endif
1249
1250#endif
uint8_t bme688_set_filter(bme688_handle_t *handle, bme688_filter_t filter)
set filter
uint8_t bme688_get_temperature_oversampling(bme688_handle_t *handle, bme688_oversampling_t *oversampling)
get temperature oversampling
uint8_t bme688_set_interface(bme688_handle_t *handle, bme688_interface_t interface)
set the interface
uint8_t bme688_soft_reset(bme688_handle_t *handle)
soft reset
bme688_mode_t
bme688 mode enumeration definition
uint8_t bme688_get_mode(bme688_handle_t *handle, bme688_mode_t *mode)
get mode
uint8_t bme688_get_humidity_oversampling(bme688_handle_t *handle, bme688_oversampling_t *oversampling)
get humidity oversampling
bme688_address_t
bme688 address enumeration definition
uint8_t bme688_set_addr_pin(bme688_handle_t *handle, bme688_address_t addr_pin)
set the iic address pin
uint8_t bme688_read_gas_resistance(bme688_handle_t *handle, bme688_section_t section, uint16_t *adc_raw, uint8_t *adc_range, float *ohms, uint8_t *index)
read the gas resistance
uint8_t bme688_get_measuring_status(bme688_handle_t *handle, bme688_section_t section, bme688_bool_t *enable)
get measuring status
uint8_t bme688_get_spi_wire_3_data_interrupt(bme688_handle_t *handle, bme688_bool_t *enable)
get spi wire3 data interrupt status
uint8_t bme688_gas_wait_shared_convert_to_register(bme688_handle_t *handle, float m, uint8_t *reg)
convert the gas wait shared to the register raw data
uint8_t bme688_set_heater_profile(bme688_handle_t *handle, bme688_heater_profile_t profile)
set heater profile
uint8_t bme688_get_run_gas(bme688_handle_t *handle, bme688_bool_t *enable)
get run gas status
uint8_t bme688_get_resistance_heater(bme688_handle_t *handle, uint8_t index, uint8_t *reg)
get resistance heater
uint8_t bme688_read_temperature_pressure_humidity(bme688_handle_t *handle, bme688_section_t section, uint32_t *temperature_raw, float *temperature_c, uint32_t *pressure_raw, float *pressure_pa, uint32_t *humidity_raw, float *humidity_percentage)
read the temperature pressure and humidity data
uint8_t bme688_read(bme688_handle_t *handle, bme688_section_t section, uint32_t *temperature_raw, float *temperature_c, uint32_t *pressure_raw, float *pressure_pa, uint32_t *humidity_raw, float *humidity_percentage, uint16_t *adc_raw, uint8_t *adc_range, float *ohms, uint8_t *index)
read the temperature pressure humidity and gas resistance
bme688_heater_profile_t
bme688 heater profile enumeration definition
uint8_t bme688_idac_heater_convert_to_register(bme688_handle_t *handle, float ma, uint8_t *reg)
convert the idac heater to the register raw data
uint8_t bme688_get_gas_measuring_status(bme688_handle_t *handle, bme688_section_t section, bme688_bool_t *enable)
get gas measuring status
uint8_t bme688_set_temperature_oversampling(bme688_handle_t *handle, bme688_oversampling_t oversampling)
set temperature oversampling
uint8_t bme688_set_mode(bme688_handle_t *handle, bme688_mode_t mode)
set mode
uint8_t bme688_get_heater_stability_status(bme688_handle_t *handle, bme688_section_t section, bme688_bool_t *enable)
get heater stability status
uint8_t bme688_parallel_config(bme688_handle_t *handle, bme688_parallel_config_t *config)
parallel config
uint8_t bme688_set_run_gas(bme688_handle_t *handle, bme688_bool_t enable)
enable or disable run gas
uint8_t bme688_get_gas_valid_status(bme688_handle_t *handle, bme688_section_t section, bme688_bool_t *enable)
get gas valid status
uint8_t bme688_get_gas_measuring_index(bme688_handle_t *handle, bme688_section_t section, uint8_t *index)
get gas measuring index
uint8_t bme688_get_heater_off(bme688_handle_t *handle, bme688_bool_t *enable)
get heater off status
uint8_t bme688_set_spi_wire(bme688_handle_t *handle, bme688_spi_wire_t spi)
set spi wire
uint8_t bme688_get_filter(bme688_handle_t *handle, bme688_filter_t *filter)
get filter
bme688_status_t
bme688 status enumeration definition
uint8_t bme688_get_heater_profile(bme688_handle_t *handle, bme688_heater_profile_t *profile)
get heater profile
uint8_t bme688_set_idac_heater(bme688_handle_t *handle, uint8_t index, uint8_t reg)
set idac heater
bme688_filter_t
bme688 filter enumeration definition
uint8_t bme688_init(bme688_handle_t *handle)
initialize the chip
uint8_t bme688_info(bme688_info_t *info)
get chip's information
uint8_t bme688_get_idac_heater(bme688_handle_t *handle, uint8_t index, uint8_t *reg)
get idac heater
uint8_t bme688_get_interface(bme688_handle_t *handle, bme688_interface_t *interface)
get the interface
uint8_t bme688_read_temperature(bme688_handle_t *handle, bme688_section_t section, uint32_t *temperature_raw, float *temperature_c)
read the temperature data
uint8_t bme688_set_spi_wire_3_data_interrupt(bme688_handle_t *handle, bme688_bool_t enable)
enable or disable spi wire3 data interrupt
uint8_t bme688_gas_wait_convert_to_register(bme688_handle_t *handle, uint16_t ms, uint8_t *reg)
convert the gas wait to the register raw data
struct bme688_info_s bme688_info_t
bme688 information structure definition
uint8_t bme688_set_gas_wait(bme688_handle_t *handle, uint8_t index, uint8_t reg)
set gas wait
uint8_t bme688_resistance_heater_convert_to_register(bme688_handle_t *handle, float degree_celsius, uint8_t *reg)
convert the resistance heater to the register raw data
uint8_t bme688_get_gas_wait_shared(bme688_handle_t *handle, uint8_t *reg)
get gas wait shared
uint8_t bme688_deinit(bme688_handle_t *handle)
close the chip
uint8_t bme688_set_resistance_heater(bme688_handle_t *handle, uint8_t index, uint8_t reg)
set resistance heater
uint8_t bme688_get_new_data_status(bme688_handle_t *handle, bme688_section_t section, bme688_bool_t *enable)
get new data status
bme688_section_t
bme688 section enumeration definition
uint8_t bme688_get_gas_wait(bme688_handle_t *handle, uint8_t index, uint8_t *reg)
get gas wait
uint8_t bme688_idac_heater_convert_to_data(bme688_handle_t *handle, uint8_t reg, float *ma)
convert the register raw data to idac heater
uint8_t bme688_read_humidity(bme688_handle_t *handle, bme688_section_t section, uint32_t *humidity_raw, float *humidity_percentage)
read the humidity data
uint8_t bme688_get_addr_pin(bme688_handle_t *handle, bme688_address_t *addr_pin)
get the iic address pin
uint8_t bme688_read_pressure(bme688_handle_t *handle, bme688_section_t section, uint32_t *pressure_raw, float *pressure_pa)
read the pressure data
uint8_t bme688_set_heater_off(bme688_handle_t *handle, bme688_bool_t enable)
enable or disable heater off
bme688_bool_t
bme688 bool enumeration definition
uint8_t bme688_parallel_progress(bme688_handle_t *handle)
parallel progress
uint8_t bme688_parallel_reset(bme688_handle_t *handle)
parallel reset
uint8_t bme688_get_pressure_oversampling(bme688_handle_t *handle, bme688_oversampling_t *oversampling)
get pressure oversampling
bme688_interface_t
bme688 interface enumeration definition
bme688_oversampling_t
bme688 oversampling enumeration definition
uint8_t bme688_set_gas_wait_shared(bme688_handle_t *handle, uint8_t reg)
set gas wait shared
struct bme688_parallel_data_s bme688_parallel_data_t
bme688 parallel data structure definition
uint8_t bme688_set_humidity_oversampling(bme688_handle_t *handle, bme688_oversampling_t oversampling)
set humidity oversampling
uint8_t bme688_set_pressure_oversampling(bme688_handle_t *handle, bme688_oversampling_t oversampling)
set pressure oversampling
struct bme688_parallel_config_s bme688_parallel_config_t
bme688 parallel config structure definition
uint8_t bme688_get_sub_measurement_index(bme688_handle_t *handle, bme688_section_t section, uint8_t *ind)
get sub measurement index
bme688_spi_wire_t
bme688 spi wire enumeration definition
uint8_t bme688_get_spi_wire(bme688_handle_t *handle, bme688_spi_wire_t *spi)
get spi wire
struct bme688_handle_s bme688_handle_t
bme688 handle structure definition
@ BME688_MODE_FORCED
@ BME688_MODE_SLEEP
@ BME688_MODE_PARALLEL
@ BME688_ADDRESS_ADO_HIGH
@ BME688_ADDRESS_ADO_LOW
@ BME688_HEATER_PROFILE_FORCED_STEP_8_PARALLEL_STEP_0_7
@ BME688_HEATER_PROFILE_FORCED_STEP_2_PARALLEL_STEP_0_1
@ BME688_HEATER_PROFILE_FORCED_STEP_1_PARALLEL_STEP_0
@ BME688_HEATER_PROFILE_FORCED_STEP_6_PARALLEL_STEP_0_5
@ BME688_HEATER_PROFILE_FORCED_STEP_4_PARALLEL_STEP_0_3
@ BME688_HEATER_PROFILE_FORCED_STEP_7_PARALLEL_STEP_0_6
@ BME688_HEATER_PROFILE_FORCED_STEP_3_PARALLEL_STEP_0_2
@ BME688_HEATER_PROFILE_FORCED_NO_STEP_PARALLEL_STEP_0_9
@ BME688_HEATER_PROFILE_FORCED_STEP_5_PARALLEL_STEP_0_4
@ BME688_HEATER_PROFILE_FORCED_STEP_9_PARALLEL_STEP_0_8
@ BME688_HEATER_PROFILE_FORCED_STEP_0_PARALLEL_NO_STEP
@ BME688_STATUS_ALL_DATA
@ BME688_STATUS_CHANNEL_DATA
@ BME688_STATUS_SEQUENCE_LOST
@ BME688_FILTER_COEFF_31
@ BME688_FILTER_COEFF_15
@ BME688_FILTER_COEFF_127
@ BME688_FILTER_COEFF_7
@ BME688_FILTER_COEFF_63
@ BME688_FILTER_COEFF_1
@ BME688_FILTER_OFF
@ BME688_FILTER_COEFF_3
@ BME688_SECTION_1
@ BME688_SECTION_2
@ BME688_SECTION_0
@ BME688_BOOL_TRUE
@ BME688_BOOL_FALSE
@ BME688_INTERFACE_IIC
@ BME688_INTERFACE_SPI
@ BME688_OVERSAMPLING_x2
@ BME688_OVERSAMPLING_x4
@ BME688_OVERSAMPLING_x8
@ BME688_OVERSAMPLING_x1
@ BME688_OVERSAMPLING_x16
@ BME688_OVERSAMPLING_SKIP
@ BME688_SPI_WIRE_4
@ BME688_SPI_WIRE_3
uint8_t bme688_get_reg(bme688_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
get the chip register
uint8_t bme688_set_reg(bme688_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
set the chip register
bme688 handle structure definition
uint8_t parallel_sequence_trigger[3]
uint8_t(* spi_init)(void)
void(* receive_callback)(uint8_t status, bme688_parallel_data_t *data, uint8_t len)
void(* delay_ms)(uint32_t ms)
uint8_t(* spi_read)(uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* spi_write)(uint8_t reg, uint8_t *buf, uint16_t len)
bme688_parallel_data_t parallel_data[10]
uint8_t parallel_data_len
void(* debug_print)(const char *const fmt,...)
uint8_t parallel_sequence_number[3]
uint8_t(* iic_init)(void)
uint8_t(* spi_deinit)(void)
uint16_t parallel_data_flag
uint8_t(* iic_write)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_read)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_deinit)(void)
bme688 information structure definition
float supply_voltage_max_v
uint32_t driver_version
char manufacturer_name[32]
float supply_voltage_min_v
char chip_name[32]
bme688 parallel config structure definition
const float * heater_temp_prof
const uint8_t * heater_dur_prof
bme688 parallel data structure definition