LibDriver ENS160
Loading...
Searching...
No Matches
driver_ens160_basic.c
Go to the documentation of this file.
1
36
37#include "driver_ens160_basic.h"
38
39static ens160_handle_t gs_handle;
40
51{
52 uint8_t res;
53
54 /* link interface function */
67
68 /* set the interface */
69 res = ens160_set_interface(&gs_handle, interface);
70 if (res != 0)
71 {
72 ens160_interface_debug_print("ens160: set interface failed.\n");
73
74 return 1;
75 }
76
77 /* set addr pin */
78 res = ens160_set_addr_pin(&gs_handle, addr_pin);
79 if (res != 0)
80 {
81 ens160_interface_debug_print("ens160: set addr pin failed.\n");
82
83 return 1;
84 }
85
86 /* ens160 initialization */
87 res = ens160_init(&gs_handle);
88 if (res != 0)
89 {
90 ens160_interface_debug_print("ens160: init failed.\n");
91
92 return 1;
93 }
94
95 /* soft reset */
96 res = ens160_soft_reset(&gs_handle);
97 if (res != 0)
98 {
99 ens160_interface_debug_print("ens160: soft reset failed.\n");
100 (void)ens160_deinit(&gs_handle);
101
102 return 1;
103 }
104
105 /* disable interrupt */
106 res = ens160_set_interrupt(&gs_handle, ENS160_BOOL_FALSE);
107 if (res != 0)
108 {
109 ens160_interface_debug_print("ens160: set interrupt failed.\n");
110 (void)ens160_deinit(&gs_handle);
111
112 return 1;
113 }
114
115 /* set standard mode */
116 res = ens160_set_mode(&gs_handle, ENS160_MODE_STANDARD);
117 if (res != 0)
118 {
119 ens160_interface_debug_print("ens160: set mode failed.\n");
120 (void)ens160_deinit(&gs_handle);
121
122 return 1;
123 }
124
125 return 0;
126}
127
139uint8_t ens160_basic_read(uint8_t *aqi_uba, uint16_t *tvoc_ppb, uint16_t *eco2_ppm, uint16_t *etoh_ppb)
140{
141 /* read aqi */
142 if (ens160_read_aqi(&gs_handle, aqi_uba) != 0)
143 {
144 return 1;
145 }
146
147 /* read tvoc */
148 if (ens160_read_tvoc(&gs_handle, tvoc_ppb) != 0)
149 {
150 return 1;
151 }
152
153 /* read eco2 */
154 if (ens160_read_eco2(&gs_handle, eco2_ppm) != 0)
155 {
156 return 1;
157 }
158
159 /* read etoh */
160 if (ens160_read_etoh(&gs_handle, etoh_ppb) != 0)
161 {
162 return 1;
163 }
164
165 return 0;
166}
167
176{
177 if (ens160_deinit(&gs_handle) != 0)
178 {
179 return 1;
180 }
181
182 return 0;
183}
184
193uint8_t ens160_basic_read_raw(float resistance_ohm[4])
194{
195 uint8_t res;
196 uint8_t params[8];
197 uint16_t resistance0;
198 uint16_t resistance1;
199 uint16_t resistance2;
200 uint16_t resistance3;
201
202 /* get params output */
203 res = ens160_get_params_output(&gs_handle, params);
204 if (res != 0)
205 {
206 return 1;
207 }
208
209 /* resistance split */
210 res = ens160_resistance_split(&gs_handle, params, &resistance0, &resistance1, &resistance2, &resistance3);
211 if (res != 0)
212 {
213 return 1;
214 }
215
216 /* resistance convert to data */
217 res = ens160_resistance_convert_to_data(&gs_handle, resistance0, &resistance_ohm[0]);
218 if (res != 0)
219 {
220 return 1;
221 }
222
223 /* resistance convert to data */
224 res = ens160_resistance_convert_to_data(&gs_handle, resistance1, &resistance_ohm[1]);
225 if (res != 0)
226 {
227 return 1;
228 }
229
230 res = ens160_resistance_convert_to_data(&gs_handle, resistance2, &resistance_ohm[2]);
231 if (res != 0)
232 {
233 return 1;
234 }
235
236 /* resistance convert to data */
237 res = ens160_resistance_convert_to_data(&gs_handle, resistance3, &resistance_ohm[3]);
238 if (res != 0)
239 {
240 return 1;
241 }
242
243 return 0;
244}
245
255uint8_t ens160_basic_set_compensation(float celsius_deg, float percentage)
256{
257 uint8_t res;
258 uint16_t raw;
259
260 /* temperature convert to register */
261 res = ens160_temperature_convert_to_register(&gs_handle, celsius_deg, &raw);
262 if (res != 0)
263 {
264 return 1;
265 }
266
267 /* set temperature compensation */
268 res = ens160_set_temperature_compensation(&gs_handle, raw);
269 if (res != 0)
270 {
271 return 1;
272 }
273
274 /* humidity convert to register */
275 res = ens160_humidity_convert_to_register(&gs_handle, percentage, &raw);
276 if (res != 0)
277 {
278 return 1;
279 }
280
281 /* set humidity compensation */
282 res = ens160_set_humidity_compensation(&gs_handle, raw);
283 if (res != 0)
284 {
285 return 1;
286 }
287
288 return 0;
289}
290
300uint8_t ens160_basic_get_compensation(float *celsius_deg, float *percentage)
301{
302 uint8_t res;
303 uint16_t raw;
304
305 /* get temperature compensation */
306 res = ens160_get_temperature_compensation(&gs_handle, &raw);
307 if (res != 0)
308 {
309 return 1;
310 }
311
312 /* temperature convert to data */
313 res = ens160_temperature_convert_to_data(&gs_handle, raw, celsius_deg);
314 if (res != 0)
315 {
316 return 1;
317 }
318
319 /* get humidity compensation */
320 res = ens160_get_humidity_compensation(&gs_handle, &raw);
321 if (res != 0)
322 {
323 return 1;
324 }
325
326 /* humidity convert to data */
327 res = ens160_humidity_convert_to_data(&gs_handle, raw, percentage);
328 if (res != 0)
329 {
330 return 1;
331 }
332
333 return 0;
334}
driver ens160 basic header file
ens160_address_t
ens160 address enumeration definition
uint8_t ens160_resistance_convert_to_data(ens160_handle_t *handle, uint16_t reg, float *ohm)
convert the register raw data to the resistance
uint8_t ens160_deinit(ens160_handle_t *handle)
close the chip
uint8_t ens160_set_addr_pin(ens160_handle_t *handle, ens160_address_t addr_pin)
set the iic address pin
uint8_t ens160_read_eco2(ens160_handle_t *handle, uint16_t *eco2_ppm)
read eco2
uint8_t ens160_humidity_convert_to_data(ens160_handle_t *handle, uint16_t reg, float *percentage)
convert the register raw data to the humidity
uint8_t ens160_get_temperature_compensation(ens160_handle_t *handle, uint16_t *raw)
get temperature compensation
uint8_t ens160_temperature_convert_to_register(ens160_handle_t *handle, float celsius_deg, uint16_t *reg)
convert the temperature to the register raw data
uint8_t ens160_get_params_output(ens160_handle_t *handle, uint8_t params[8])
get params output
uint8_t ens160_set_interface(ens160_handle_t *handle, ens160_interface_t interface)
set the chip interface
uint8_t ens160_soft_reset(ens160_handle_t *handle)
soft reset
uint8_t ens160_read_tvoc(ens160_handle_t *handle, uint16_t *tvoc_ppb)
read tvoc
uint8_t ens160_set_mode(ens160_handle_t *handle, ens160_mode_t mode)
set mode
uint8_t ens160_humidity_convert_to_register(ens160_handle_t *handle, float percentage, uint16_t *reg)
convert the humidity to the register raw data
uint8_t ens160_set_humidity_compensation(ens160_handle_t *handle, uint16_t raw)
set humidity compensation
ens160_interface_t
ens160 interface enumeration definition
uint8_t ens160_set_interrupt(ens160_handle_t *handle, ens160_bool_t enable)
enable or disable interrupt
uint8_t ens160_read_aqi(ens160_handle_t *handle, uint8_t *uba)
read aqi
uint8_t ens160_temperature_convert_to_data(ens160_handle_t *handle, uint16_t reg, float *celsius_deg)
convert the register raw data to the temperature
uint8_t ens160_get_humidity_compensation(ens160_handle_t *handle, uint16_t *raw)
get humidity compensation
struct ens160_handle_s ens160_handle_t
ens160 handle structure definition
uint8_t ens160_resistance_split(ens160_handle_t *handle, uint8_t raw[8], uint16_t *resistance0, uint16_t *resistance1, uint16_t *resistance2, uint16_t *resistance3)
resistance split
uint8_t ens160_set_temperature_compensation(ens160_handle_t *handle, uint16_t raw)
set temperature compensation
uint8_t ens160_init(ens160_handle_t *handle)
initialize the chip
uint8_t ens160_read_etoh(ens160_handle_t *handle, uint16_t *etoh_ppb)
read etoh
@ ENS160_MODE_STANDARD
@ ENS160_BOOL_FALSE
uint8_t ens160_basic_read(uint8_t *aqi_uba, uint16_t *tvoc_ppb, uint16_t *eco2_ppm, uint16_t *etoh_ppb)
basic example read
uint8_t ens160_basic_read_raw(float resistance_ohm[4])
basic example read raw
uint8_t ens160_basic_init(ens160_interface_t interface, ens160_address_t addr_pin)
basic example init
uint8_t ens160_basic_get_compensation(float *celsius_deg, float *percentage)
basic example get compensation
uint8_t ens160_basic_set_compensation(float celsius_deg, float percentage)
basic example set compensation
uint8_t ens160_basic_deinit(void)
basic example deinit
uint8_t ens160_interface_iic_init(void)
interface iic bus init
uint8_t ens160_interface_spi_write(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus write
uint8_t ens160_interface_iic_deinit(void)
interface iic bus deinit
void ens160_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t ens160_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
void ens160_interface_receive_callback(uint8_t type, uint16_t *dat)
interface receive callback
void ens160_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t ens160_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t ens160_interface_spi_deinit(void)
interface spi bus deinit
uint8_t ens160_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus read
uint8_t ens160_interface_spi_init(void)
interface spi bus init