LibDriver BME688
Loading...
Searching...
No Matches
driver_bme688_gas.c
Go to the documentation of this file.
1
36
37#include "driver_bme688_gas.h"
38
39static bme688_handle_t gs_handle;
40
51{
52 uint8_t res;
53
54 /* link interface function */
67
68 /* set interface */
69 res = bme688_set_interface(&gs_handle, interface);
70 if (res != 0)
71 {
72 bme688_interface_debug_print("bme688: set interface failed.\n");
73
74 return 1;
75 }
76
77 /* set addr pin */
78 res = bme688_set_addr_pin(&gs_handle, addr_pin);
79 if (res != 0)
80 {
81 bme688_interface_debug_print("bme688: set addr pin failed.\n");
82
83 return 1;
84 }
85
86 /* bme688 init */
87 res = bme688_init(&gs_handle);
88 if (res != 0)
89 {
90 bme688_interface_debug_print("bme688: init failed.\n");
91
92 return 1;
93 }
94
95 /* set default temperature oversampling */
97 if (res != 0)
98 {
99 bme688_interface_debug_print("bme688: set temperature oversampling failed.\n");
100 (void)bme688_deinit(&gs_handle);
101
102 return 1;
103 }
104
105 /* set default pressure oversampling */
107 if (res != 0)
108 {
109 bme688_interface_debug_print("bme688: set pressure oversampling failed.\n");
110 (void)bme688_deinit(&gs_handle);
111
112 return 1;
113 }
114
115 /* set default humidity oversampling */
117 if (res != 0)
118 {
119 bme688_interface_debug_print("bme688: set humidity oversampling failed.\n");
120 (void)bme688_deinit(&gs_handle);
121
122 return 1;
123 }
124
125 /* set default filter */
127 if (res != 0)
128 {
129 bme688_interface_debug_print("bme688: set filter failed.\n");
130 (void)bme688_deinit(&gs_handle);
131
132 return 1;
133 }
134
135 /* set default spi wire */
137 if (res != 0)
138 {
139 bme688_interface_debug_print("bme688: set spi wire failed.\n");
140 (void)bme688_deinit(&gs_handle);
141
142 return 1;
143 }
144
145 /* disable heater off */
146 res = bme688_set_heater_off(&gs_handle, BME688_BOOL_FALSE);
147 if (res != 0)
148 {
149 bme688_interface_debug_print("bme688: set heat off failed.\n");
150 (void)bme688_deinit(&gs_handle);
151
152 return 1;
153 }
154
155 /* enable run gas */
156 res = bme688_set_run_gas(&gs_handle, BME688_BOOL_TRUE);
157 if (res != 0)
158 {
159 bme688_interface_debug_print("bme688: set run gas failed.\n");
160 (void)bme688_deinit(&gs_handle);
161
162 return 1;
163 }
164
165 /* set sleep mode */
166 res = bme688_set_mode(&gs_handle, BME688_MODE_SLEEP);
167 if (res != 0)
168 {
169 bme688_interface_debug_print("bme688: set mode failed.\n");
170 (void)bme688_deinit(&gs_handle);
171
172 return 1;
173 }
174
175 return 0;
176}
177
192uint8_t bme688_gas_read(float degree_celsius, uint16_t gas_wait_ms, uint8_t index,
193 float *temperature, float *pressure, float *humidity_percentage, float *ohms)
194{
195 uint8_t res;
196 uint8_t reg;
197 uint32_t temperature_yaw;
198 uint32_t pressure_yaw;
199 uint32_t humidity_raw;
200 uint16_t adc_raw;
201 uint8_t adc_range;
202 uint8_t index_check;
204
205 /* set convert index */
206 if (index == 0)
207 {
209
210 }
211 else if (index == 1)
212 {
214
215 }
216 else if (index == 2)
217 {
219
220 }
221 else if (index == 3)
222 {
224
225 }
226 else if (index == 4)
227 {
229
230 }
231 else if (index == 5)
232 {
234
235 }
236 else if (index == 6)
237 {
239
240 }
241 else if (index == 7)
242 {
244
245 }
246 else if (index == 8)
247 {
249
250 }
251 else if (index == 9)
252 {
254
255 }
256 else
257 {
258 return 1;
259 }
260
261 /* set degree celsius */
262 res = bme688_resistance_heater_convert_to_register(&gs_handle, degree_celsius, &reg);
263 if (res != 0)
264 {
265 return 1;
266 }
267
268 /* set resistance heater */
269 res = bme688_set_resistance_heater(&gs_handle, index, reg);
270 if (res != 0)
271 {
272 return 1;
273 }
274
275 /* set gas wait */
276 res = bme688_gas_wait_convert_to_register(&gs_handle, gas_wait_ms, &reg);
277 if (res != 0)
278 {
279 return 1;
280 }
281
282 /* set gas wait */
283 res = bme688_set_gas_wait(&gs_handle, index, reg);
284 if (res != 0)
285 {
286 return 1;
287 }
288
289 /* set heater profile */
290 res = bme688_set_heater_profile(&gs_handle, profile);
291 if (res != 0)
292 {
293 return 1;
294 }
295
296 /* read */
297 if (bme688_read(&gs_handle, BME688_SECTION_0, (uint32_t *)&temperature_yaw,
298 temperature, (uint32_t *)&pressure_yaw, pressure,
299 (uint32_t *)&humidity_raw, humidity_percentage,
300 &adc_raw, &adc_range, ohms, &index_check) != 0)
301 {
302 return 1;
303 }
304
305 /* check index */
306 if (index_check != index)
307 {
308 return 1;
309 }
310
311 return 0;
312}
313
321uint8_t bme688_gas_deinit(void)
322{
323 /* close bme688 */
324 if (bme688_deinit(&gs_handle) != 0)
325 {
326 return 1;
327 }
328
329 return 0;
330}
driver bme688 gas header file
uint8_t bme688_set_filter(bme688_handle_t *handle, bme688_filter_t filter)
set filter
uint8_t bme688_set_interface(bme688_handle_t *handle, bme688_interface_t interface)
set the interface
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_set_heater_profile(bme688_handle_t *handle, bme688_heater_profile_t profile)
set heater profile
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_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_set_run_gas(bme688_handle_t *handle, bme688_bool_t enable)
enable or disable run gas
uint8_t bme688_set_spi_wire(bme688_handle_t *handle, bme688_spi_wire_t spi)
set spi wire
uint8_t bme688_init(bme688_handle_t *handle)
initialize the chip
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
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_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_set_heater_off(bme688_handle_t *handle, bme688_bool_t enable)
enable or disable heater off
bme688_interface_t
bme688 interface enumeration 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_handle_s bme688_handle_t
bme688 handle structure definition
@ BME688_MODE_SLEEP
@ 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_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_SECTION_0
@ BME688_BOOL_TRUE
@ BME688_BOOL_FALSE
uint8_t bme688_gas_read(float degree_celsius, uint16_t gas_wait_ms, uint8_t index, float *temperature, float *pressure, float *humidity_percentage, float *ohms)
gas example read
uint8_t bme688_gas_init(bme688_interface_t interface, bme688_address_t addr_pin)
gas example init
#define BME688_GAS_DEFAULT_FILTER
#define BME688_GAS_DEFAULT_TEMPERATURE_OVERSAMPLING
bme688 gas example default definition
#define BME688_GAS_DEFAULT_SPI_WIRE
#define BME688_GAS_DEFAULT_HUMIDITY_OVERSAMPLING
uint8_t bme688_gas_deinit(void)
gas example deinit
#define BME688_GAS_DEFAULT_PRESSURE_OVERSAMPLING
uint8_t bme688_interface_spi_write(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus write
uint8_t bme688_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
void bme688_interface_receive_callback(uint8_t status, bme688_parallel_data_t *data, uint8_t len)
interface receive callback
uint8_t bme688_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
void bme688_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t bme688_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus read
void bme688_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t bme688_interface_spi_deinit(void)
interface spi bus deinit
uint8_t bme688_interface_spi_init(void)
interface spi bus init
uint8_t bme688_interface_iic_deinit(void)
interface iic bus deinit
uint8_t bme688_interface_iic_init(void)
interface iic bus init