smoke2 2.0.0.0
smoke2.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 SMOKE2_H
29#define SMOKE2_H
30
31#ifdef __cplusplus
32extern "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 SMOKE2_REG_STATUS 0x00
76#define SMOKE2_REG_INT_MASK 0x01
77#define SMOKE2_REG_GPIO_DRV 0x02
78#define SMOKE2_REG_BG_STATUS 0x04
79#define SMOKE2_REG_FIFO_THR 0x06
80#define SMOKE2_REG_DEVID 0x08
81#define SMOKE2_REG_I2CS_ID 0x09
82#define SMOKE2_REG_CLK_RATIO 0x0A
83#define SMOKE2_REG_GPIO_CTRL 0x0B
84#define SMOKE2_REG_SLAVE_ADDR_KEY 0x0D
85#define SMOKE2_REG_SW_RESET 0x0F
86#define SMOKE2_REG_MODE 0x10
87#define SMOKE2_REG_SLOT_EN 0x11
88#define SMOKE2_REG_FSAMPLE 0x12
89#define SMOKE2_REG_PD_LED_SELECT 0x14
90#define SMOKE2_REG_NUM_AVG 0x15
91#define SMOKE2_REG_BIG_MEAS_A 0x16
92#define SMOKE2_REG_INT_SEQ_A 0x17
93#define SMOKE2_REG_SLOTA_CH1_OFFSET 0x18
94#define SMOKE2_REG_SLOTA_CH2_OFFSET 0x19
95#define SMOKE2_REG_SLOTA_CH3_OFFSET 0x1A
96#define SMOKE2_REG_SLOTA_CH4_OFFSET 0x1B
97#define SMOKE2_REG_BIG_MEAS_B 0x1C
98#define SMOKE2_REG_INT_SEQ_B 0x1D
99#define SMOKE2_REG_SLOTB_CH1_OFFSET 0x1E
100#define SMOKE2_REG_SLOTB_CH2_OFFSET 0x1F
101#define SMOKE2_REG_SLOTB_CH3_OFFSET 0x20
102#define SMOKE2_REG_SLOTB_CH4_OFFSET 0x21
103#define SMOKE2_REG_ILED3_COARSE 0x22
104#define SMOKE2_REG_ILED1_COARSE 0x23
105#define SMOKE2_REG_ILED2_COARSE 0x24
106#define SMOKE2_REG_ILED_FINE 0x25
107#define SMOKE2_REG_SLOTA_LED_PULSE 0x30
108#define SMOKE2_REG_SLOTA_NUM_PULSES 0x31
109#define SMOKE2_REG_LED_DISABLE 0x34
110#define SMOKE2_REG_SLOTB_LED_PULSE 0x35
111#define SMOKE2_REG_SLOTB_NUM_PULSES 0x36
112#define SMOKE2_REG_ALT_PWR_DN 0x37
113#define SMOKE2_REG_EXT_SYNC_STARTUP 0x38
114#define SMOKE2_REG_SLOTA_AFE_WINDOW 0x39
115#define SMOKE2_REG_SLOTB_AFE_WINDOW 0x3B
116#define SMOKE2_REG_AFE_PWR_CFG1 0x3C
117#define SMOKE2_REG_SLOTA_FLOAT_LED 0x3E
118#define SMOKE2_REG_SLOTB_FLOAT_LED 0x3F
119#define SMOKE2_REG_SLOTA_TIA_CFG 0x42
120#define SMOKE2_REG_SLOTA_AFE_CFG 0x43
121#define SMOKE2_REG_SLOTB_TIA_CFG 0x44
122#define SMOKE2_REG_SLOTB_AFE_CFG 0x45
123#define SMOKE2_REG_SAMPLE_CLK 0x4B
124#define SMOKE2_REG_CLK32M_ADJUST 0x4D
125#define SMOKE2_REG_EXT_SYNC_SEL 0x4F
126#define SMOKE2_REG_CLK32M_CAL_EN 0x50
127#define SMOKE2_REG_AFE_PWR_CFG2 0x54
128#define SMOKE2_REG_TIA_INDEP_GAIN 0x55
129#define SMOKE2_REG_MATH 0x58
130#define SMOKE2_REG_FLT_CONFIG_B 0x59
131#define SMOKE2_REG_FLT_LED_FIRE 0x5A
132#define SMOKE2_REG_FLT_CONFIG_A 0x5E
133#define SMOKE2_REG_DATA_ACCESS_CTL 0x5F
134#define SMOKE2_REG_FIFO_ACCESS 0x60
135#define SMOKE2_REG_SLOTA_CH1 0x64
136#define SMOKE2_REG_SLOTA_CH2 0x65
137#define SMOKE2_REG_SLOTA_CH3 0x66
138#define SMOKE2_REG_SLOTA_CH4 0x67
139#define SMOKE2_REG_SLOTB_CH1 0x68
140#define SMOKE2_REG_SLOTB_CH2 0x69
141#define SMOKE2_REG_SLOTB_CH3 0x6A
142#define SMOKE2_REG_SLOTB_CH4 0x6B
143#define SMOKE2_REG_A_CH1_LOW 0x70
144#define SMOKE2_REG_A_CH2_LOW 0x71
145#define SMOKE2_REG_A_CH3_LOW 0x72
146#define SMOKE2_REG_A_CH4_LOW 0x73
147#define SMOKE2_REG_A_CH1_HIGH 0x74
148#define SMOKE2_REG_A_CH2_HIGH 0x75
149#define SMOKE2_REG_A_CH3_HIGH 0x76
150#define SMOKE2_REG_A_CH4_HIGH 0x77
151#define SMOKE2_REG_B_CH1_LOW 0x78
152#define SMOKE2_REG_B_CH2_LOW 0x79
153#define SMOKE2_REG_B_CH3_LOW 0x7A
154#define SMOKE2_REG_B_CH4_LOW 0x7B
155#define SMOKE2_REG_B_CH1_HIGH 0x7C
156#define SMOKE2_REG_B_CH2_HIGH 0x7D
157#define SMOKE2_REG_B_CH3_HIGH 0x7E
158#define SMOKE2_REG_B_CH4_HIGH 0x7F
159
160 // smoke2_reg
161
176#define SMOKE2_SLOT_A 0
177#define SMOKE2_SLOT_B 4
178
183#define SMOKE2_CHN_1 0
184#define SMOKE2_CHN_2 1
185#define SMOKE2_CHN_3 2
186#define SMOKE2_CHN_4 3
187
192#define SMOKE2_MODE_IDLE 0
193#define SMOKE2_MODE_PROGRAM 1
194#define SMOKE2_MODE_NORMAL 2
195
200#define SMOKE2_SMOKE_DETECTED 0xCC
201#define SMOKE2_SMOKE_NOT_DETECTED 0xDD
202
207#define SMOKE2_READ_CMD 0
208#define SMOKE2_WRITE_CMD 1
209
215#define SMOKE2_SET_DEV_ADDR 0x64
216
225#define SMOKE2_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
226#define SMOKE2_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
227
228 // smoke2_set
229
244#define SMOKE2_MAP_MIKROBUS( cfg, mikrobus ) \
245 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
246 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
247 cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
248 cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
249 cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
250 cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
251 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
252
253 // smoke2_map
254 // smoke2
255
266
271typedef err_t ( *smoke2_master_io_t )( struct smoke2_s*, uint8_t, uint8_t*, uint8_t );
296
301typedef struct
302{
303 pin_name_t scl;
304 pin_name_t sda;
305 pin_name_t miso;
306 pin_name_t mosi;
307 pin_name_t sck;
308 pin_name_t cs;
309 pin_name_t int_pin;
311 uint32_t i2c_speed;
312 uint8_t i2c_address;
314 uint32_t spi_speed;
315 spi_master_mode_t spi_mode;
316 spi_master_chip_select_polarity_t cs_polarity;
321
326typedef enum
327{
329 SMOKE2_ERROR = -1
330
332
349
365
380err_t smoke2_init ( smoke2_t *ctx, smoke2_cfg_t *cfg );
381
393
409err_t smoke2_generic_write ( smoke2_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
410
426err_t smoke2_generic_read ( smoke2_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
427
438
450void smoke2_write_data( smoke2_t *ctx, uint8_t reg, uint16_t tx_data );
451
462uint16_t smoke2_read_data( smoke2_t *ctx, uint8_t reg );
463
476void smoke2_set_bit ( smoke2_t *ctx, uint8_t reg, uint8_t bit_num , uint8_t val );
477
489uint8_t smoke2_get_bit ( smoke2_t *ctx, uint8_t reg, uint8_t bit_num );
490
501void smoke2_set_mode ( smoke2_t *ctx, uint8_t mode );
502
515void smoke2_get_int ( smoke2_t *ctx, uint8_t *fifo, uint8_t *slot_a, uint8_t *slot_b );
516
528uint16_t smoke2_read_sens_data ( smoke2_t *ctx, uint8_t slot, uint8_t chn );
529
540
551uint16_t smoke2_smoke_calibration ( smoke2_t *ctx, uint16_t threshold );
552
563
564#ifdef __cplusplus
565}
566#endif
567#endif // SMOKE2_H
568
569 // smoke2
570
571// ------------------------------------------------------------------------ END
void smoke2_soft_reset(smoke2_t *ctx)
Smoke 2 reseting device function.
uint8_t smoke2_get_bit(smoke2_t *ctx, uint8_t reg, uint8_t bit_num)
Smoke 2 generic function for reading bit state.
void smoke2_set_mode(smoke2_t *ctx, uint8_t mode)
Smoke 2 setting mode function.
uint16_t smoke2_read_data(smoke2_t *ctx, uint8_t reg)
Smoke 2 generic function for reading data from registar.
void smoke2_write_data(smoke2_t *ctx, uint8_t reg, uint16_t tx_data)
Smoke 2 generic function for writing data to register function.
void smoke2_cfg_setup(smoke2_cfg_t *cfg)
Smoke 2 configuration object setup function.
void smoke2_get_int(smoke2_t *ctx, uint8_t *fifo, uint8_t *slot_a, uint8_t *slot_b)
Smoke 2 get mode function.
void smoke2_set_bit(smoke2_t *ctx, uint8_t reg, uint8_t bit_num, uint8_t val)
Smoke 2 generic function for writing bit state.
void smoke2_drv_interface_selection(smoke2_cfg_t *cfg, smoke2_drv_t drv_sel)
Smoke 2 driver interface setup function.
err_t smoke2_init(smoke2_t *ctx, smoke2_cfg_t *cfg)
Smoke 2 initialization function.
uint8_t smoke2_check_smoke(smoke2_t *ctx)
Smoke 2 checking smoke detection function.
uint16_t smoke2_smoke_calibration(smoke2_t *ctx, uint16_t threshold)
Smoke 2 calibrating data and setting threshold function.
uint8_t smoke2_get_int_pin(smoke2_t *ctx)
Smoke 2 get state of int pin function.
err_t smoke2_generic_write(smoke2_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Smoke 2 data writing function.
uint16_t smoke2_read_sens_data(smoke2_t *ctx, uint8_t slot, uint8_t chn)
Smoke 2 reading bit state function.
void smoke2_default_cfg(smoke2_t *ctx)
Smoke 2 default configuration function.
err_t smoke2_generic_read(smoke2_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Smoke 2 data reading function.
smoke2_return_value_t
Smoke 2 Click return value data.
Definition smoke2.h:327
@ SMOKE2_ERROR
Definition smoke2.h:329
@ SMOKE2_OK
Definition smoke2.h:328
smoke2_drv_t
Smoke 2 Click driver selector.
Definition smoke2.h:261
@ SMOKE2_DRV_SEL_SPI
Definition smoke2.h:262
@ SMOKE2_DRV_SEL_I2C
Definition smoke2.h:263
struct smoke2_s smoke2_t
Smoke 2 Click context object.
err_t(* smoke2_master_io_t)(struct smoke2_s *, uint8_t, uint8_t *, uint8_t)
Smoke 2 Click driver interface.
Definition smoke2.h:271
This file contains SPI specific macros, functions, etc.
Smoke 2 Click configuration object.
Definition smoke2.h:302
smoke2_drv_t drv_sel
Definition smoke2.h:318
uint32_t i2c_speed
Definition smoke2.h:311
spi_master_chip_select_polarity_t cs_polarity
Definition smoke2.h:316
pin_name_t sck
Definition smoke2.h:307
spi_master_mode_t spi_mode
Definition smoke2.h:315
pin_name_t mosi
Definition smoke2.h:306
uint32_t spi_speed
Definition smoke2.h:314
pin_name_t scl
Definition smoke2.h:303
pin_name_t int_pin
Definition smoke2.h:309
pin_name_t miso
Definition smoke2.h:305
pin_name_t sda
Definition smoke2.h:304
pin_name_t cs
Definition smoke2.h:308
uint8_t i2c_address
Definition smoke2.h:312
Smoke 2 Click context object.
Definition smoke2.h:278
spi_master_t spi
Definition smoke2.h:282
uint8_t enabled_slot
Definition smoke2.h:293
smoke2_drv_t drv_sel
Definition smoke2.h:286
digital_in_t int_pin
Definition smoke2.h:279
i2c_master_t i2c
Definition smoke2.h:281
smoke2_master_io_t read_f
Definition smoke2.h:289
uint16_t calibration_value
Definition smoke2.h:291
smoke2_master_io_t write_f
Definition smoke2.h:288
uint8_t slave_address
Definition smoke2.h:284
uint16_t threshold_value
Definition smoke2.h:292
pin_name_t chip_select
Definition smoke2.h:285