oximeter5 2.0.0.0
oximeter5.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 OXIMETER5_H
29#define OXIMETER5_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_in.h"
50#include "drv_i2c_master.h"
51
52
73#define OXIMETER5_REG_INTR_STATUS_1 0x00
74#define OXIMETER5_REG_INTR_STATUS_2 0x01
75#define OXIMETER5_REG_INTR_ENABLE_1 0x02
76#define OXIMETER5_REG_INTR_ENABLE_2 0x03
77#define OXIMETER5_REG_FIFO_WR_PTR 0x04
78#define OXIMETER5_REG_OVF_COUNTER 0x05
79#define OXIMETER5_REG_FIFO_RD_PTR 0x06
80#define OXIMETER5_REG_FIFO_DATA 0x07
81#define OXIMETER5_REG_FIFO_CONFIG 0x08
82#define OXIMETER5_REG_MODE_CONFIG 0x09
83#define OXIMETER5_REG_SPO2_CONFIG 0x0A
84#define OXIMETER5_REG_LED1_PA 0x0C
85#define OXIMETER5_REG_LED2_PA 0x0D
86#define OXIMETER5_REG_MULTI_LED_CTRL1 0x11
87#define OXIMETER5_REG_MULTI_LED_CTRL2 0x12
88#define OXIMETER5_REG_TEMP_INTR 0x1F
89#define OXIMETER5_REG_TEMP_FRAC 0x20
90#define OXIMETER5_REG_TEMP_CONFIG 0x21
91#define OXIMETER5_REG_PROX_INT_THRESH 0x30
92#define OXIMETER5_REG_REV_ID 0xFE
93#define OXIMETER5_REG_PART_ID 0xFF
94
95 // oximeter5_reg
96
111// OXIMETER5_REG_INTR_ENABLE_1
112#define OXIMETER5_SET_INTR_EN_1_FULL_EN 0x80
113#define OXIMETER5_SET_INTR_EN_1_PPG_RDY_EN 0x40
114#define OXIMETER5_SET_INTR_EN_1_ALC_OVF_EN 0x20
115
116// OXIMETER5_REG_INTR_ENABLE_2
117#define OXIMETER5_SET_INTR_EN_2_TEMP_EN 0x80
118#define OXIMETER5_SET_INTR_EN_2_TEMP_DIS 0x00
119
120// OXIMETER5_REG_FIFO_CONFIG
121#define OXIMETER5_SET_FIFO_PTR_RESET 0x00
122#define OXIMETER5_SET_FIFO_COUNTER_RESET 0x00
123
124// OXIMETER5_REG_FIFO_CONFIG
125#define OXIMETER5_SET_FIFO_CFG_SMP_AVE_BIT_MASK 0xC0
126#define OXIMETER5_SET_FIFO_CFG_SMP_AVE_1 0x00
127#define OXIMETER5_SET_FIFO_CFG_SMP_AVE_2 0x20
128#define OXIMETER5_SET_FIFO_CFG_SMP_AVE_3 0x40
129#define OXIMETER5_SET_FIFO_CFG_SMP_AVE_8 0x60
130#define OXIMETER5_SET_FIFO_CFG_SMP_AVE_16 0x80
131#define OXIMETER5_SET_FIFO_CFG_SMP_AVE_32 0xC0
132
133#define OXIMETER5_SET_FIFO_CFG_FIFO_RL_BIT_MASK 0x10
134#define OXIMETER5_SET_FIFO_CFG_FIFO_RL_EN 0x10
135
136#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_BIT_MASK 0x0F
137#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_0 0x00
138#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_1 0x01
139#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_2 0x02
140#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_3 0x03
141#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_4 0x04
142#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_5 0x05
143#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_6 0x06
144#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_7 0x07
145#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_8 0x08
146#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_9 0x09
147#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_10 0x0A
148#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_11 0x0B
149#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_12 0x0C
150#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_13 0x0D
151#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_14 0x0E
152#define OXIMETER5_SET_FIFO_CFG_DATA_SAMP_15 0x0F
153
154#define OXIMETER5_SET_CFG_MODE_BIT_MASK 0x07
155#define OXIMETER5_SW_RESET 0x40
156#define OXIMETER5_SET_CFG_MODE_HEART_RATE 0x02
157#define OXIMETER5_SET_CFG_MODE_SpO2 0x03
158#define OXIMETER5_SET_CFG_MODE_MULTI_LED 0x07
159
160#define OXIMETER5_SET_SPO2_CFG_ADC_RGE_BIT_MASK 0x60
161#define OXIMETER5_SET_SPO2_CFG_ADC_RGE_2048 0x00
162#define OXIMETER5_SET_SPO2_CFG_ADC_RGE_4096 0x20
163#define OXIMETER5_SET_SPO2_CFG_ADC_RGE_8192 0x40
164#define OXIMETER5_SET_SPO2_CFG_ADC_RGE_16384 0x60
165
166#define OXIMETER5_SET_SPO2_CFG_SR_SEC_BIT_MASK 0x1C
167#define OXIMETER5_SET_SPO2_CFG_SR_SEC_50 0x00
168#define OXIMETER5_SET_SPO2_CFG_SR_SEC_100 0x04
169#define OXIMETER5_SET_SPO2_CFG_SR_SEC_200 0x08
170#define OXIMETER5_SET_SPO2_CFG_SR_SEC_400 0x0C
171#define OXIMETER5_SET_SPO2_CFG_SR_SEC_800 0x10
172#define OXIMETER5_SET_SPO2_CFG_SR_SEC_1000 0x12
173#define OXIMETER5_SET_SPO2_CFG_SR_SEC_1600 0x14
174#define OXIMETER5_SET_SPO2_CFG_SR_SEC_3200 0x1C
175
176#define OXIMETER5_SET_SPO2_CFG_LED_PW_BIT_MASK 0x03
177#define OXIMETER5_SET_SPO2_CFG_LED_PW_15_bit 0x00
178#define OXIMETER5_SET_SPO2_CFG_LED_PW_16_bit 0x01
179#define OXIMETER5_SET_SPO2_CFG_LED_PW_17_bit 0x02
180#define OXIMETER5_SET_SPO2_CFG_LED_PW_18_bit 0x03
181
182#define OXIMETER5_SET_LED_PULSE_AMPL_7_2_mA 0x24
183
184#define OXIMETER5_SET_CFG_TEMP_DISABLE 0x00
185#define OXIMETER5_SET_CFG_TEMP_ENABLE 0x01
186
187#define MAX_BRIGHTNESS 255
188#define OXIMETER5_PN_SPO2_ERROR_DATA 255
189#define OXIMETER5_HEART_RATE_ERROR_DATA -999
190
191#define OXIMETER5_INTERRUPT_INACTIVE 0x00
192#define OXIMETER5_INTERRUPT_ACTIVE 0x01
193
199#define OXIMETER5_SET_DEV_ADDR 0x57
200
201 // oximeter5_set
202
217#define OXIMETER5_MAP_MIKROBUS( cfg, mikrobus ) \
218 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
219 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
220 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
221
222 // oximeter5_map
223 // oximeter5
224
229typedef struct
230{
231 // Input pins
232 digital_in_t int_pin;
234 // Modules
235 i2c_master_t i2c;
237 // I2C slave address
241
246typedef struct
247{
248 pin_name_t scl;
249 pin_name_t sda;
251 pin_name_t int_pin;
253 uint32_t i2c_speed;
254 uint8_t i2c_address;
257
268
269
286
302
317
333err_t oximeter5_generic_write ( oximeter5_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );
334
350err_t oximeter5_generic_read ( oximeter5_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
351
367
383
399err_t oximeter5_read_temperature ( oximeter5_t *ctx, float *temperature );
400
416err_t oximeter5_set_fifo_wr_pointer ( oximeter5_t *ctx, uint8_t fifo_wr_p );
417
433err_t oximeter5_set_fifo_rd_pointer ( oximeter5_t *ctx, uint8_t fifo_rd_p );
434
452err_t oximeter5_set_fifo_cfg ( oximeter5_t *ctx, uint8_t smp_ave, uint8_t fifo_ro_en, uint8_t fifo_a_full );
453
469err_t oximeter5_set_mode_cfg ( oximeter5_t *ctx, uint8_t mode );
470
488err_t oximeter5_set_spo2_cfg ( oximeter5_t *ctx, uint8_t spo2_adc_rge, uint8_t spo2_sr, uint8_t led_pw );
489
507err_t oximeter5_read_sensor_data ( oximeter5_t *ctx, uint32_t *ir, uint32_t *red );
508
530err_t oximeter5_get_oxygen_saturation ( uint32_t *pun_ir_buffer, int32_t n_ir_buffer_length, uint32_t *pun_red_buffer, uint8_t *pn_spo2 );
531
549err_t oximeter5_get_heart_rate ( uint32_t *pun_ir_buffer, int32_t n_ir_buffer_length, uint32_t *pun_red_buffer, int32_t *pn_heart_rate );
550
551#ifdef __cplusplus
552}
553#endif
554#endif // OXIMETER5_H
555
556 // oximeter5
557
558// ------------------------------------------------------------------------ END
err_t oximeter5_set_fifo_cfg(oximeter5_t *ctx, uint8_t smp_ave, uint8_t fifo_ro_en, uint8_t fifo_a_full)
Oximeter 5 set FIFO config function.
uint8_t oximeter5_check_interrupt(oximeter5_t *ctx)
Oximeter 5 check interrupt function.
err_t oximeter5_sw_reset(oximeter5_t *ctx)
Oximeter 5 soft reset function.
err_t oximeter5_default_cfg(oximeter5_t *ctx)
Oximeter 5 default configuration function.
err_t oximeter5_set_fifo_rd_pointer(oximeter5_t *ctx, uint8_t fifo_rd_p)
Oximeter 5 set FIFO read pointer function.
err_t oximeter5_set_mode_cfg(oximeter5_t *ctx, uint8_t mode)
Oximeter 5 set mode config function.
err_t oximeter5_set_spo2_cfg(oximeter5_t *ctx, uint8_t spo2_adc_rge, uint8_t spo2_sr, uint8_t led_pw)
Oximeter 5 set SpO2 config function.
err_t oximeter5_generic_write(oximeter5_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len)
Oximeter 5 I2C writing function.
err_t oximeter5_read_sensor_data(oximeter5_t *ctx, uint32_t *ir, uint32_t *red)
Oximeter 5 get sensor data function.
err_t oximeter5_read_temperature(oximeter5_t *ctx, float *temperature)
Oximeter 5 read temperature function.
err_t oximeter5_get_heart_rate(uint32_t *pun_ir_buffer, int32_t n_ir_buffer_length, uint32_t *pun_red_buffer, int32_t *pn_heart_rate)
Oximeter 5 get heart rate function.
err_t oximeter5_get_oxygen_saturation(uint32_t *pun_ir_buffer, int32_t n_ir_buffer_length, uint32_t *pun_red_buffer, uint8_t *pn_spo2)
Oximeter 5 get oxygen saturation function.
err_t oximeter5_generic_read(oximeter5_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
Oximeter 5 I2C reading function.
err_t oximeter5_set_fifo_wr_pointer(oximeter5_t *ctx, uint8_t fifo_wr_p)
Oximeter 5 set FIFO write pointer function.
err_t oximeter5_init(oximeter5_t *ctx, oximeter5_cfg_t *cfg)
Oximeter 5 initialization function.
void oximeter5_cfg_setup(oximeter5_cfg_t *cfg)
Oximeter 5 configuration object setup function.
oximeter5_return_value_t
Oximeter 5 Click return value data.
Definition oximeter5.h:263
@ OXIMETER5_OK
Definition oximeter5.h:264
@ OXIMETER5_ERROR
Definition oximeter5.h:265
Oximeter 5 Click configuration object.
Definition oximeter5.h:247
uint32_t i2c_speed
Definition oximeter5.h:253
pin_name_t scl
Definition oximeter5.h:248
pin_name_t int_pin
Definition oximeter5.h:251
pin_name_t sda
Definition oximeter5.h:249
uint8_t i2c_address
Definition oximeter5.h:254
Oximeter 5 Click context object.
Definition oximeter5.h:230
digital_in_t int_pin
Definition oximeter5.h:232
i2c_master_t i2c
Definition oximeter5.h:235
uint8_t slave_address
Definition oximeter5.h:238