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 
39 #ifdef PREINIT_SUPPORTED
40 #include "preinit.h"
41 #endif
42 
43 #ifdef MikroCCoreVersion
44  #if MikroCCoreVersion >= 1
45  #include "delays.h"
46  #endif
47 #endif
48 
49 #include "drv_digital_out.h"
50 #include "drv_digital_in.h"
51 #include "drv_i2c_master.h"
52 #include "drv_spi_master.h"
53 #include "spi_specifics.h"
54 
75 #define AIRQUALITY11_REG_PART_ID 0x00
76 #define AIRQUALITY11_REG_OPMODE 0x10
77 #define AIRQUALITY11_REG_CONFIG 0x11
78 #define AIRQUALITY11_REG_COMMAND 0x12
79 #define AIRQUALITY11_REG_TEMP_IN 0x13
80 #define AIRQUALITY11_REG_RH_IN 0x15
81 #define AIRQUALITY11_REG_DEVICE_STATUS 0x20
82 #define AIRQUALITY11_REG_DATA_AQI_UBA 0x21
83 #define AIRQUALITY11_REG_DATA_ETVOC 0x22
84 #define AIRQUALITY11_REG_DATA_ECO2 0x24
85 #define AIRQUALITY11_REG_DATA_AQI_S 0x26
86 #define AIRQUALITY11_REG_DATA_T 0x30
87 #define AIRQUALITY11_REG_DATA_RH 0x32
88 #define AIRQUALITY11_REG_DATA_MISR 0x38
89 #define AIRQUALITY11_REG_GPR_WRITE 0x40
90 #define AIRQUALITY11_REG_GPR_READ 0x48
91 
92  // airquality11_reg
94 
109 #define AIRQUALITY11_TEMP_MIN -40.0f
110 #define AIRQUALITY11_TEMP_MAX 80.0f
111 #define AIRQUALITY11_TEMP_CALC_KC 273.15f
112 #define AIRQUALITY11_TEMP_CALC_MLT 64.0f
113 #define AIRQUALITY11_HUM_MIN 5.0f
114 #define AIRQUALITY11_HUM_MAX 95.0f
115 #define AIRQUALITY11_HUM_CALC_MLT 512.0f
116 
121 #define AIRQUALITY11_AQI_UBA_EXELLENT 1
122 #define AIRQUALITY11_AQI_UBA_GOOD 2
123 #define AIRQUALITY11_AQI_UBA_MODERATE 3
124 #define AIRQUALITY11_AQI_UBA_POOR 4
125 #define AIRQUALITY11_AQI_UBA_UNHEALTHY 5
126 
131 #define AIRQUALITY11_AQI_UBA_BITMASK 0x07
132 
137 #define AIRQUALITY11_PART_ID 0x0161u
138 
144 #define AIRQUALITY11_DEVICE_ADDRESS_0 0x52
145 #define AIRQUALITY11_DEVICE_ADDRESS_1 0x53
146 
155 #define AIRQUALITY11_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
156 #define AIRQUALITY11_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
157  // airquality11_set
159 
174 #define AIRQUALITY11_MAP_MIKROBUS( cfg, mikrobus ) \
175  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
176  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
177  cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
178  cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
179  cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
180  cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
181  cfg.en = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
182  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
183  // airquality11_map // airquality11
186 
191 typedef enum
192 {
197 
202 struct airquality11_s;
203 typedef err_t ( *airquality11_master_io_t )( struct airquality11_s*, uint8_t, uint8_t*, uint8_t );
209 typedef struct airquality11_s
210 {
211  digital_out_t en;
213  digital_in_t int_pin;
215  i2c_master_t i2c;
216  spi_master_t spi;
218  uint8_t slave_address;
219  pin_name_t chip_select;
225  float temperature;
226  float humidity;
229 
234 typedef struct
235 {
236  pin_name_t scl;
237  pin_name_t sda;
238  pin_name_t miso;
239  pin_name_t mosi;
240  pin_name_t sck;
241  pin_name_t cs;
242  pin_name_t en;
243  pin_name_t int_pin;
245  uint32_t i2c_speed;
246  uint8_t i2c_address;
248  uint32_t spi_speed;
249  spi_master_mode_t spi_mode;
250  spi_master_chip_select_polarity_t cs_polarity;
255 
260 typedef enum
261 {
263  AIRQUALITY11_ERROR = -1
264 
266 
271 typedef enum
272 {
278  AIRQUALITY11_RESET = 0xF0
281 
286 typedef enum
287 {
293 
310 
326 
341 
355 
370 err_t airquality11_generic_write ( airquality11_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
371 
386 err_t airquality11_generic_read ( airquality11_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
387 
402 err_t airquality11_write_word ( airquality11_t *ctx, uint8_t reg, uint16_t data_in );
403 
418 err_t airquality11_read_word ( airquality11_t *ctx, uint8_t reg, uint16_t *data_out );
419 
433 err_t airquality11_get_device_id ( airquality11_t *ctx, uint16_t *device_id );
434 
450 
464 err_t airquality11_set_int_config ( airquality11_t *ctx, uint8_t int_cfg );
465 
481 
496 err_t airquality11_set_measure_c ( airquality11_t *ctx, float temperature, float humidity );
497 
511 err_t airquality11_get_status ( airquality11_t *ctx, uint8_t *status );
512 
526 err_t airquality11_get_aqi_uba ( airquality11_t *ctx, uint8_t *aqi_uba );
527 
541 err_t airquality11_get_tvoc ( airquality11_t *ctx, uint16_t *tvoc_ppb );
542 
556 err_t airquality11_get_co2 ( airquality11_t *ctx, uint16_t *co2_ppm );
557 
571 err_t airquality11_get_aqi_s ( airquality11_t *ctx, uint16_t *aqi_s );
572 
587 err_t airquality11_get_measure_c ( airquality11_t *ctx, float *temperature, float *humidity );
588 
602 err_t airquality11_write_gpr_reg ( airquality11_t *ctx, uint8_t *data_in );
603 
617 err_t airquality11_read_gpr_reg ( airquality11_t *ctx, uint8_t *data_out );
618 
631 
632 #ifdef __cplusplus
633 }
634 #endif
635 #endif // AIRQUALITY11_H
636  // airquality11
638 
639 // ------------------------------------------------------------------------ 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:238
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:289
airquality11_cfg_t::spi_mode
spi_master_mode_t spi_mode
Definition: airquality11.h:249
airquality11_s::write_f
airquality11_master_io_t write_f
Definition: airquality11.h:222
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:273
airquality11_s::drv_sel
airquality11_drv_t drv_sel
Definition: airquality11.h:220
AIRQUALITY11_ULTRA_LOW_POWER
@ AIRQUALITY11_ULTRA_LOW_POWER
Definition: airquality11.h:277
AIRQUALITY11_LOW_POWER
@ AIRQUALITY11_LOW_POWER
Definition: airquality11.h:276
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:242
AIRQUALITY11_CMD_NOP
@ AIRQUALITY11_CMD_NOP
Definition: airquality11.h:288
airquality11_return_value_t
airquality11_return_value_t
Air Quality 11 Click return value data.
Definition: airquality11.h:261
airquality11_s::en
digital_out_t en
Definition: airquality11.h:211
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:218
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:194
airquality11_cfg_t::mosi
pin_name_t mosi
Definition: airquality11.h:239
airquality11_cfg_t::i2c_address
uint8_t i2c_address
Definition: airquality11.h:246
airquality11_s::spi
spi_master_t spi
Definition: airquality11.h:216
airquality11_drv_t
airquality11_drv_t
Air Quality 11 Click driver selector.
Definition: airquality11.h:192
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:235
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:213
AIRQUALITY11_STANDARD
@ AIRQUALITY11_STANDARD
Definition: airquality11.h:275
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:243
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:237
airquality11_cfg_t::sck
pin_name_t sck
Definition: airquality11.h:240
airquality11_cfg_t::spi_speed
uint32_t spi_speed
Definition: airquality11.h:248
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:241
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:223
airquality11_s::chip_select
pin_name_t chip_select
Definition: airquality11.h:219
airquality11_cmd_t
airquality11_cmd_t
Air Quality 11 Click command value data.
Definition: airquality11.h:287
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:290
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:203
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:272
AIRQUALITY11_IDLE
@ AIRQUALITY11_IDLE
Definition: airquality11.h:274
airquality11_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: airquality11.h:245
airquality11_cfg_t::drv_sel
airquality11_drv_t drv_sel
Definition: airquality11.h:252
airquality11_cfg_t::scl
pin_name_t scl
Definition: airquality11.h:236
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:193
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:263
airquality11_cfg_t::cs_polarity
spi_master_chip_select_polarity_t cs_polarity
Definition: airquality11.h:250
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:225
AIRQUALITY11_OK
@ AIRQUALITY11_OK
Definition: airquality11.h:262
airquality11_s::i2c
i2c_master_t i2c
Definition: airquality11.h:215
AIRQUALITY11_RESET
@ AIRQUALITY11_RESET
Definition: airquality11.h:278
airquality11_s::humidity
float humidity
Definition: airquality11.h:226
airquality11_s
Air Quality 11 Click context object.
Definition: airquality11.h:210