LibDriver ENS160
Loading...
Searching...
No Matches
driver_ens160_interrupt.c
Go to the documentation of this file.
1
36
38
39static ens160_handle_t gs_handle;
40
49{
50 if (ens160_irq_handler(&gs_handle) != 0)
51 {
52 return 1;
53 }
54
55 return 0;
56}
57
68uint8_t ens160_interrupt_init(ens160_interface_t interface, ens160_address_t addr_pin, void (*callback)(uint8_t type, uint16_t *dat))
69{
70 uint8_t res;
71
72 /* link interface function */
84 DRIVER_ENS160_LINK_RECEIVE_CALLBACK(&gs_handle, callback);
85
86 /* set the interface */
87 res = ens160_set_interface(&gs_handle, interface);
88 if (res != 0)
89 {
90 ens160_interface_debug_print("ens160: set interface failed.\n");
91
92 return 1;
93 }
94
95 /* set addr pin */
96 res = ens160_set_addr_pin(&gs_handle, addr_pin);
97 if (res != 0)
98 {
99 ens160_interface_debug_print("ens160: set addr pin failed.\n");
100
101 return 1;
102 }
103
104 /* ens160 initialization */
105 res = ens160_init(&gs_handle);
106 if (res != 0)
107 {
108 ens160_interface_debug_print("ens160: init failed.\n");
109
110 return 1;
111 }
112
113 /* soft reset */
114 res = ens160_soft_reset(&gs_handle);
115 if (res != 0)
116 {
117 ens160_interface_debug_print("ens160: soft reset failed.\n");
118 (void)ens160_deinit(&gs_handle);
119
120 return 1;
121 }
122
123 /* set default interrupt pin polarity */
125 if (res != 0)
126 {
127 ens160_interface_debug_print("ens160: set interrupt pin polarity failed.\n");
128 (void)ens160_deinit(&gs_handle);
129
130 return 1;
131 }
132
133 /* set default interrupt pin drive */
135 if (res != 0)
136 {
137 ens160_interface_debug_print("ens160: set interrupt pin drive failed.\n");
138 (void)ens160_deinit(&gs_handle);
139
140 return 1;
141 }
142
143 /* set default general purpose read interrupt pin asserted */
145 if (res != 0)
146 {
147 ens160_interface_debug_print("ens160: set general purpose read interrupt pin asserted failed.\n");
148 (void)ens160_deinit(&gs_handle);
149
150 return 1;
151 }
152
153 /* set default data interrupt pin asserted */
155 if (res != 0)
156 {
157 ens160_interface_debug_print("ens160: set data interrupt pin asserted failed.\n");
158 (void)ens160_deinit(&gs_handle);
159
160 return 1;
161 }
162
163 /* enable interrupt */
164 res = ens160_set_interrupt(&gs_handle, ENS160_BOOL_TRUE);
165 if (res != 0)
166 {
167 ens160_interface_debug_print("ens160: set interrupt failed.\n");
168 (void)ens160_deinit(&gs_handle);
169
170 return 1;
171 }
172
173 /* set standard mode */
174 res = ens160_set_mode(&gs_handle, ENS160_MODE_STANDARD);
175 if (res != 0)
176 {
177 ens160_interface_debug_print("ens160: set mode failed.\n");
178 (void)ens160_deinit(&gs_handle);
179
180 return 1;
181 }
182
183 return 0;
184}
185
197uint8_t ens160_interrupt_read(uint8_t *aqi_uba, uint16_t *tvoc_ppb, uint16_t *eco2_ppm, uint16_t *etoh_ppb)
198{
199 /* read aqi */
200 if (ens160_read_aqi(&gs_handle, aqi_uba) != 0)
201 {
202 return 1;
203 }
204
205 /* read tvoc */
206 if (ens160_read_tvoc(&gs_handle, tvoc_ppb) != 0)
207 {
208 return 1;
209 }
210
211 /* read eco2 */
212 if (ens160_read_eco2(&gs_handle, eco2_ppm) != 0)
213 {
214 return 1;
215 }
216
217 /* read etoh */
218 if (ens160_read_etoh(&gs_handle, etoh_ppb) != 0)
219 {
220 return 1;
221 }
222
223 return 0;
224}
225
234{
235 if (ens160_deinit(&gs_handle) != 0)
236 {
237 return 1;
238 }
239
240 return 0;
241}
242
251uint8_t ens160_interrupt_read_raw(float resistance_ohm[4])
252{
253 uint8_t res;
254 uint8_t params[8];
255 uint16_t resistance0;
256 uint16_t resistance1;
257 uint16_t resistance2;
258 uint16_t resistance3;
259
260 /* get params output */
261 res = ens160_get_params_output(&gs_handle, params);
262 if (res != 0)
263 {
264 return 1;
265 }
266
267 /* resistance split */
268 res = ens160_resistance_split(&gs_handle, params, &resistance0, &resistance1, &resistance2, &resistance3);
269 if (res != 0)
270 {
271 return 1;
272 }
273
274 /* resistance convert to data */
275 res = ens160_resistance_convert_to_data(&gs_handle, resistance0, &resistance_ohm[0]);
276 if (res != 0)
277 {
278 return 1;
279 }
280
281 /* resistance convert to data */
282 res = ens160_resistance_convert_to_data(&gs_handle, resistance1, &resistance_ohm[1]);
283 if (res != 0)
284 {
285 return 1;
286 }
287
288 res = ens160_resistance_convert_to_data(&gs_handle, resistance2, &resistance_ohm[2]);
289 if (res != 0)
290 {
291 return 1;
292 }
293
294 /* resistance convert to data */
295 res = ens160_resistance_convert_to_data(&gs_handle, resistance3, &resistance_ohm[3]);
296 if (res != 0)
297 {
298 return 1;
299 }
300
301 return 0;
302}
303
313uint8_t ens160_interrupt_set_compensation(float celsius_deg, float percentage)
314{
315 uint8_t res;
316 uint16_t raw;
317
318 /* temperature convert to register */
319 res = ens160_temperature_convert_to_register(&gs_handle, celsius_deg, &raw);
320 if (res != 0)
321 {
322 return 1;
323 }
324
325 /* set temperature compensation */
326 res = ens160_set_temperature_compensation(&gs_handle, raw);
327 if (res != 0)
328 {
329 return 1;
330 }
331
332 /* humidity convert to register */
333 res = ens160_humidity_convert_to_register(&gs_handle, percentage, &raw);
334 if (res != 0)
335 {
336 return 1;
337 }
338
339 /* set humidity compensation */
340 res = ens160_set_humidity_compensation(&gs_handle, raw);
341 if (res != 0)
342 {
343 return 1;
344 }
345
346 return 0;
347}
348
358uint8_t ens160_interrupt_get_compensation(float *celsius_deg, float *percentage)
359{
360 uint8_t res;
361 uint16_t raw;
362
363 /* get temperature compensation */
364 res = ens160_get_temperature_compensation(&gs_handle, &raw);
365 if (res != 0)
366 {
367 return 1;
368 }
369
370 /* temperature convert to data */
371 res = ens160_temperature_convert_to_data(&gs_handle, raw, celsius_deg);
372 if (res != 0)
373 {
374 return 1;
375 }
376
377 /* get humidity compensation */
378 res = ens160_get_humidity_compensation(&gs_handle, &raw);
379 if (res != 0)
380 {
381 return 1;
382 }
383
384 /* humidity convert to data */
385 res = ens160_humidity_convert_to_data(&gs_handle, raw, percentage);
386 if (res != 0)
387 {
388 return 1;
389 }
390
391 return 0;
392}
driver ens160 interrupt 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_set_interrupt_pin_drive(ens160_handle_t *handle, ens160_pin_drive_t drive)
set interrupt pin drive
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_interrupt_pin_polarity(ens160_handle_t *handle, ens160_pin_polarity_t polarity)
set interrupt pin polarity
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_set_general_purpose_read_interrupt_pin_asserted(ens160_handle_t *handle, ens160_bool_t enable)
set general purpose read interrupt pin asserted
uint8_t ens160_read_aqi(ens160_handle_t *handle, uint8_t *uba)
read aqi
uint8_t ens160_irq_handler(ens160_handle_t *handle)
irq handler
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_set_data_interrupt_pin_asserted(ens160_handle_t *handle, ens160_bool_t enable)
set data interrupt pin asserted
uint8_t ens160_read_etoh(ens160_handle_t *handle, uint16_t *etoh_ppb)
read etoh
@ ENS160_MODE_STANDARD
@ ENS160_BOOL_TRUE
#define ENS160_INTERRUPT_DEFAULT_GENERAL_PURPOSE_READ_INTERRUPT_PIN_ASSERTED
uint8_t ens160_interrupt_init(ens160_interface_t interface, ens160_address_t addr_pin, void(*callback)(uint8_t type, uint16_t *dat))
interrupt example init
uint8_t ens160_interrupt_irq_handler(void)
interrupt irq
uint8_t ens160_interrupt_set_compensation(float celsius_deg, float percentage)
interrupt example set compensation
uint8_t ens160_interrupt_read(uint8_t *aqi_uba, uint16_t *tvoc_ppb, uint16_t *eco2_ppm, uint16_t *etoh_ppb)
interrupt example read
uint8_t ens160_interrupt_get_compensation(float *celsius_deg, float *percentage)
interrupt example get compensation
uint8_t ens160_interrupt_read_raw(float resistance_ohm[4])
interrupt example read raw
#define ENS160_INTERRUPT_DEFAULT_PIN_DRIVE
#define ENS160_INTERRUPT_DEFAULT_DATA_INTERRUPT_PIN_ASSERTED
uint8_t ens160_interrupt_deinit(void)
interrupt example deinit
#define ENS160_INTERRUPT_DEFAULT_PIN_POLARITY
ens160 interrupt example default definition
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_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