airquality11  2.1.0.0
airquality11.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef AIRQUALITY11_H
29 #define AIRQUALITY11_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_i2c_master.h"
48 #include "drv_spi_master.h"
49 #include "spi_specifics.h"
50 
71 #define AIRQUALITY11_REG_PART_ID 0x00
72 #define AIRQUALITY11_REG_OPMODE 0x10
73 #define AIRQUALITY11_REG_CONFIG 0x11
74 #define AIRQUALITY11_REG_COMMAND 0x12
75 #define AIRQUALITY11_REG_TEMP_IN 0x13
76 #define AIRQUALITY11_REG_RH_IN 0x15
77 #define AIRQUALITY11_REG_DEVICE_STATUS 0x20
78 #define AIRQUALITY11_REG_DATA_AQI_UBA 0x21
79 #define AIRQUALITY11_REG_DATA_ETVOC 0x22
80 #define AIRQUALITY11_REG_DATA_ECO2 0x24
81 #define AIRQUALITY11_REG_DATA_AQI_S 0x26
82 #define AIRQUALITY11_REG_DATA_T 0x30
83 #define AIRQUALITY11_REG_DATA_RH 0x32
84 #define AIRQUALITY11_REG_DATA_MISR 0x38
85 #define AIRQUALITY11_REG_GPR_WRITE 0x40
86 #define AIRQUALITY11_REG_GPR_READ 0x48
87 
88  // airquality11_reg
90 
105 #define AIRQUALITY11_TEMP_MIN -40.0f
106 #define AIRQUALITY11_TEMP_MAX 80.0f
107 #define AIRQUALITY11_TEMP_CALC_KC 273.15f
108 #define AIRQUALITY11_TEMP_CALC_MLT 64.0f
109 #define AIRQUALITY11_HUM_MIN 5.0f
110 #define AIRQUALITY11_HUM_MAX 95.0f
111 #define AIRQUALITY11_HUM_CALC_MLT 512.0f
112 
117 #define AIRQUALITY11_AQI_UBA_EXELLENT 1
118 #define AIRQUALITY11_AQI_UBA_GOOD 2
119 #define AIRQUALITY11_AQI_UBA_MODERATE 3
120 #define AIRQUALITY11_AQI_UBA_POOR 4
121 #define AIRQUALITY11_AQI_UBA_UNHEALTHY 5
122 
127 #define AIRQUALITY11_AQI_UBA_BITMASK 0x07
128 
133 #define AIRQUALITY11_PART_ID 0x0161u
134 
140 #define AIRQUALITY11_DEVICE_ADDRESS_0 0x52
141 #define AIRQUALITY11_DEVICE_ADDRESS_1 0x53
142 
151 #define AIRQUALITY11_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
152 #define AIRQUALITY11_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
153  // airquality11_set
155 
170 #define AIRQUALITY11_MAP_MIKROBUS( cfg, mikrobus ) \
171  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
172  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
173  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
174  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
175  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
176  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
177  cfg.en = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
178  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
179  // airquality11_map // airquality11
182 
187 typedef enum
188 {
193 
198 struct airquality11_s;
199 typedef err_t ( *airquality11_master_io_t )( struct airquality11_s*, uint8_t, uint8_t*, uint8_t );
205 typedef struct airquality11_s
206 {
207  digital_out_t en;
209  digital_in_t int_pin;
211  i2c_master_t i2c;
212  spi_master_t spi;
214  uint8_t slave_address;
215  pin_name_t chip_select;
221  float temperature;
222  float humidity;
225 
230 typedef struct
231 {
232  pin_name_t scl;
233  pin_name_t sda;
234  pin_name_t miso;
235  pin_name_t mosi;
236  pin_name_t sck;
237  pin_name_t cs;
238  pin_name_t en;
239  pin_name_t int_pin;
241  uint32_t i2c_speed;
242  uint8_t i2c_address;
244  uint32_t spi_speed;
245  spi_master_mode_t spi_mode;
246  spi_master_chip_select_polarity_t cs_polarity;
251 
256 typedef enum
257 {
259  AIRQUALITY11_ERROR = -1
260 
262 
267 typedef enum
268 {
274  AIRQUALITY11_RESET = 0xF0
277 
282 typedef enum
283 {
289 
306 
322 
337 
351 
366 err_t airquality11_generic_write ( airquality11_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
367 
382 err_t airquality11_generic_read ( airquality11_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
383 
398 err_t airquality11_write_word ( airquality11_t *ctx, uint8_t reg, uint16_t data_in );
399 
414 err_t airquality11_read_word ( airquality11_t *ctx, uint8_t reg, uint16_t *data_out );
415 
429 err_t airquality11_get_device_id ( airquality11_t *ctx, uint16_t *device_id );
430 
446 
460 err_t airquality11_set_int_config ( airquality11_t *ctx, uint8_t int_cfg );
461 
477 
492 err_t airquality11_set_measure_c ( airquality11_t *ctx, float temperature, float humidity );
493 
507 err_t airquality11_get_status ( airquality11_t *ctx, uint8_t *status );
508 
522 err_t airquality11_get_aqi_uba ( airquality11_t *ctx, uint8_t *aqi_uba );
523 
537 err_t airquality11_get_tvoc ( airquality11_t *ctx, uint16_t *tvoc_ppb );
538 
552 err_t airquality11_get_co2 ( airquality11_t *ctx, uint16_t *co2_ppm );
553 
567 err_t airquality11_get_aqi_s ( airquality11_t *ctx, uint16_t *aqi_s );
568 
583 err_t airquality11_get_measure_c ( airquality11_t *ctx, float *temperature, float *humidity );
584 
598 err_t airquality11_write_gpr_reg ( airquality11_t *ctx, uint8_t *data_in );
599 
613 err_t airquality11_read_gpr_reg ( airquality11_t *ctx, uint8_t *data_out );
614 
627 
628 #ifdef __cplusplus
629 }
630 #endif
631 #endif // AIRQUALITY11_H
632  // airquality11
634 
635 // ------------------------------------------------------------------------ END
airquality11_set_measure_c
err_t airquality11_set_measure_c(airquality11_t *ctx, float temperature, float humidity)
Air Quality 11 set measure conditions function.
airquality11_write_word
err_t airquality11_write_word(airquality11_t *ctx, uint8_t reg, uint16_t data_in)
Air Quality 11 word data writing function.
airquality11_cfg_t::miso
pin_name_t miso
Definition: airquality11.h:234
airquality11_get_tvoc
err_t airquality11_get_tvoc(airquality11_t *ctx, uint16_t *tvoc_ppb)
Air Quality 11 get TVOC function.
AIRQUALITY11_CMD_GET_APPVER
@ AIRQUALITY11_CMD_GET_APPVER
Definition: airquality11.h:285
airquality11_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: airquality11.h:245
airquality11_s::write_f
airquality11_master_io_t write_f
Definition: airquality11.h:218
airquality11_get_co2
err_t airquality11_get_co2(airquality11_t *ctx, uint16_t *co2_ppm)
Air Quality 11 get CO2 function.
spi_specifics.h
This file contains SPI specific macros, functions, etc.
airquality11_t
struct airquality11_s airquality11_t
Air Quality 11 Click context object.
AIRQUALITY11_DEEP_SLEEP
@ AIRQUALITY11_DEEP_SLEEP
Definition: airquality11.h:269
airquality11_s::drv_sel
airquality11_drv_t drv_sel
Definition: airquality11.h:216
AIRQUALITY11_ULTRA_LOW_POWER
@ AIRQUALITY11_ULTRA_LOW_POWER
Definition: airquality11.h:273
AIRQUALITY11_LOW_POWER
@ AIRQUALITY11_LOW_POWER
Definition: airquality11.h:272
airquality11_get_status
err_t airquality11_get_status(airquality11_t *ctx, uint8_t *status)
Air Quality 11 get status function.
airquality11_get_aqi_uba
err_t airquality11_get_aqi_uba(airquality11_t *ctx, uint8_t *aqi_uba)
Air Quality 11 get AQI-UBA function.
airquality11_drv_interface_sel
void airquality11_drv_interface_sel(airquality11_cfg_t *cfg, airquality11_drv_t drv_sel)
Air Quality 11 driver interface setup function.
airquality11_cfg_t::en
pin_name_t en
Definition: airquality11.h:238
AIRQUALITY11_CMD_NOP
@ AIRQUALITY11_CMD_NOP
Definition: airquality11.h:284
airquality11_return_value_t
airquality11_return_value_t
Air Quality 11 Click return value data.
Definition: airquality11.h:257
airquality11_s::en
digital_out_t en
Definition: airquality11.h:207
airquality11_get_measure_c
err_t airquality11_get_measure_c(airquality11_t *ctx, float *temperature, float *humidity)
Air Quality 11 get measure conditions function.
airquality11_s::slave_address
uint8_t slave_address
Definition: airquality11.h:214
airquality11_cfg_setup
void airquality11_cfg_setup(airquality11_cfg_t *cfg)
Air Quality 11 configuration object setup function.
AIRQUALITY11_DRV_SEL_I2C
@ AIRQUALITY11_DRV_SEL_I2C
Definition: airquality11.h:190
airquality11_cfg_t::mosi
pin_name_t mosi
Definition: airquality11.h:235
airquality11_cfg_t::i2c_address
uint8_t i2c_address
Definition: airquality11.h:242
airquality11_s::spi
spi_master_t spi
Definition: airquality11.h:212
airquality11_drv_t
airquality11_drv_t
Air Quality 11 Click driver selector.
Definition: airquality11.h:188
airquality11_get_device_id
err_t airquality11_get_device_id(airquality11_t *ctx, uint16_t *device_id)
Air Quality 11 get device ID function.
airquality11_cfg_t
Air Quality 11 Click configuration object.
Definition: airquality11.h:231
airquality11_get_aqi_s
err_t airquality11_get_aqi_s(airquality11_t *ctx, uint16_t *aqi_s)
Air Quality 11 get AQI-S function.
airquality11_s::int_pin
digital_in_t int_pin
Definition: airquality11.h:209
AIRQUALITY11_STANDARD
@ AIRQUALITY11_STANDARD
Definition: airquality11.h:271
airquality11_set_op_mode
err_t airquality11_set_op_mode(airquality11_t *ctx, airquality11_op_mode_t op_mode)
Air Quality 11 set operating mode function.
airquality11_cfg_t::int_pin
pin_name_t int_pin
Definition: airquality11.h:239
airquality11_default_cfg
err_t airquality11_default_cfg(airquality11_t *ctx)
Air Quality 11 default configuration function.
airquality11_cfg_t::sda
pin_name_t sda
Definition: airquality11.h:233
airquality11_cfg_t::sck
pin_name_t sck
Definition: airquality11.h:236
airquality11_cfg_t::spi_speed
uint32_t spi_speed
Definition: airquality11.h:244
airquality11_read_gpr_reg
err_t airquality11_read_gpr_reg(airquality11_t *ctx, uint8_t *data_out)
Air Quality 11 GPR data reading function.
airquality11_cfg_t::cs
pin_name_t cs
Definition: airquality11.h:237
airquality11_generic_write
err_t airquality11_generic_write(airquality11_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Air Quality 11 data writing function.
airquality11_set_cmd
err_t airquality11_set_cmd(airquality11_t *ctx, airquality11_cmd_t cmd)
Air Quality 11 set command function.
airquality11_s::read_f
airquality11_master_io_t read_f
Definition: airquality11.h:219
airquality11_s::chip_select
pin_name_t chip_select
Definition: airquality11.h:215
airquality11_cmd_t
airquality11_cmd_t
Air Quality 11 Click command value data.
Definition: airquality11.h:283
airquality11_write_gpr_reg
err_t airquality11_write_gpr_reg(airquality11_t *ctx, uint8_t *data_in)
Air Quality 11 GPR data writing function.
AIRQUALITY11_CMD_CLRGPR
@ AIRQUALITY11_CMD_CLRGPR
Definition: airquality11.h:286
airquality11_generic_read
err_t airquality11_generic_read(airquality11_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Air Quality 11 data reading function.
airquality11_master_io_t
err_t(* airquality11_master_io_t)(struct airquality11_s *, uint8_t, uint8_t *, uint8_t)
Definition: airquality11.h:199
airquality11_read_word
err_t airquality11_read_word(airquality11_t *ctx, uint8_t reg, uint16_t *data_out)
Air Quality 11 word data reading function.
airquality11_op_mode_t
airquality11_op_mode_t
Air Quality 11 Click operating mode value data.
Definition: airquality11.h:268
AIRQUALITY11_IDLE
@ AIRQUALITY11_IDLE
Definition: airquality11.h:270
airquality11_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: airquality11.h:241
airquality11_cfg_t::drv_sel
airquality11_drv_t drv_sel
Definition: airquality11.h:248
airquality11_cfg_t::scl
pin_name_t scl
Definition: airquality11.h:232
airquality11_get_interrupt
uint8_t airquality11_get_interrupt(airquality11_t *ctx)
Rotary O 2 get interrupt function.
AIRQUALITY11_DRV_SEL_SPI
@ AIRQUALITY11_DRV_SEL_SPI
Definition: airquality11.h:189
airquality11_init
err_t airquality11_init(airquality11_t *ctx, airquality11_cfg_t *cfg)
Air Quality 11 initialization function.
AIRQUALITY11_ERROR
@ AIRQUALITY11_ERROR
Definition: airquality11.h:259
airquality11_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: airquality11.h:246
airquality11_set_int_config
err_t airquality11_set_int_config(airquality11_t *ctx, uint8_t int_cfg)
Air Quality 11 set configures function.
airquality11_s::temperature
float temperature
Definition: airquality11.h:221
AIRQUALITY11_OK
@ AIRQUALITY11_OK
Definition: airquality11.h:258
airquality11_s::i2c
i2c_master_t i2c
Definition: airquality11.h:211
AIRQUALITY11_RESET
@ AIRQUALITY11_RESET
Definition: airquality11.h:274
airquality11_s::humidity
float humidity
Definition: airquality11.h:222
airquality11_s
Air Quality 11 Click context object.
Definition: airquality11.h:206