heartrate4  2.0.0.0
heartrate4.h
Go to the documentation of this file.
1 /*
2  * MikroSDK - MikroE Software Development Kit
3  * Copyright© 2020 MikroElektronika d.o.o.
4  *
5  * Permission is hereby granted, free of charge, to any person
6  * obtaining a copy of this software and associated documentation
7  * files (the "Software"), to deal in the Software without restriction,
8  * including without limitation the rights to use, copy, modify, merge,
9  * publish, distribute, sublicense, and/or sell copies of the Software,
10  * and to permit persons to whom the Software is furnished to do so,
11  * subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22  * OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
33 // ----------------------------------------------------------------------------
34 
35 #ifndef HEARTRATE4_H
36 #define HEARTRATE4_H
37 
38 #include "mikrosdk_version.h"
39 
40 #ifdef __GNUC__
41 #if mikroSDK_GET_VERSION < 20800ul
42 #include "rcu_delays.h"
43 #else
44 #include "delays.h"
45 #endif
46 #endif
47 
48 #include "drv_digital_out.h"
49 #include "drv_digital_in.h"
50 #include "drv_i2c_master.h"
51 
52 // -------------------------------------------------------------- PUBLIC MACROS
62 #define HEARTRATE4_MAP_MIKROBUS( cfg, mikrobus ) \
63  cfg.scl1 = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
64  cfg.sda1 = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
65  cfg.int1 = MIKROBUS( mikrobus, MIKROBUS_INT )
66 
72 #define HEARTRATE4_RETVAL uint8_t
73 
74 #define HEARTRATE4_OK 0x00
75 #define HEARTRATE4_INIT_ERROR 0xFF
76 
82 #define HEARTRATE4_I2C_ADDRESS 0x57
83 
94 #define HEARTRATE4_INT_STAT1 0x00
95 #define HEARTRATE4_INT_STAT2 0x01
96 #define HEARTRATE4_INT_ENABLE1 0x02
97 #define HEARTRATE4_INT_ENABLE2 0x03
98 
104 #define HEARTRATE4_FIFO_WRITE_PTR 0x04
105 #define HEARTRATE4_FIFO_OVERFLOW 0x05
106 #define HEARTRATE4_FIFO_READ_PTR 0x06
107 #define HEARTRATE4_FIFO_DATA 0x07
108 #define HEARTRATE4_BUFFER_LENGTH 32
109 
115 #define HEARTRATE4_FIFO_CONFIG 0x08
116 #define HEARTRATE4_MODE_CONFIG 0x09
117 #define HEARTRATE4_SPO2_CONFIG 0x0A //SpO2 Configuration
118 #define HEARTRATE4_LED1_PULSE_AMP 0x0C
119 #define HEARTRATE4_LED2_PULSE_AMP 0x0D
120 #define HEARTRATE4_LED3_PULSE_AMP 0x0E
121 #define HEARTRATE4_LED_PROX_AMP 0x10
122 #define HEARTRATE4_MULTI_LED_CONFIG1 0x11
123 #define HEARTRATE4_MULTI_LED_CONFIG2 0x12
124 #define HEARTRATE4_MIN_POWER_LEVEL 0x01
125 #define HEARTRATE4_AVG_POWER_LEVEL 0x1F
126 #define HEARTRATE4_MAX_POWER_LEVEL 0xFF
127 
133 #define HEARTRATE4_DIE_TEMP_INT 0x1F
134 #define HEARTRATE4_DIE_TEMP_FRAC 0x20
135 #define HEARTRATE4_DIE_TEMP_CONFIG 0x21
136 
142 #define HEARTRATE4_PROX_INT_THRESH 0x30
143 
149 #define HEARTRATE4_REVISION_ID 0xFE
150 #define HEARTRATE4_PART_ID 0xFF
151  //End registers addresses group of macro
153 
163 #define HEARTRATE4_INT_A_FULL_MASK (uint8_t)~0b10000000
164 #define HEARTRATE4_INT_A_FULL_ENABLE 0x80
165 #define HEARTRATE4_INT_A_FULL_DISABLE 0x00
166 #define HEARTRATE4_INT_DATA_RDY_MASK (uint8_t)~0b01000000
167 #define HEARTRATE4_INT_DATA_RDY_ENABLE 0x40
168 #define HEARTRATE4_INT_DATA_RDY_DISABLE 0x00
169 #define HEARTRATE4_INT_ALC_OVF_MASK (uint8_t)~0b00100000
170 #define HEARTRATE4_INT_ALC_OVF_ENABLE 0x20
171 #define HEARTRATE4_INT_ALC_OVF_DISABLE 0x00
172 #define HEARTRATE4_INT_PROX_INT_MASK (uint8_t)~0b00010000
173 #define HEARTRATE4_INT_PROX_INT_ENABLE 0x10
174 #define HEARTRATE4_INT_PROX_INT_DISABLE 0x00
175 #define HEARTRATE4_INT_DIE_TEMP_RDY_MASK (uint8_t)~0b00000010
176 #define HEARTRATE4_INT_DIE_TEMP_RDY_ENABLE 0x02
177 #define HEARTRATE4_INT_DIE_TEMP_RDY_DISABLE 0x00
178 
184 #define HEARTRATE4_SAMPLEAVG_MASK (uint8_t)~0b11100000
185 #define HEARTRATE4_SAMPLEAVG_1 0x00
186 #define HEARTRATE4_SAMPLEAVG_2 0x20
187 #define HEARTRATE4_SAMPLEAVG_4 0x40
188 #define HEARTRATE4_SAMPLEAVG_8 0x60
189 #define HEARTRATE4_SAMPLEAVG_16 0x80
190 #define HEARTRATE4_SAMPLEAVG_32 0xA0
191 #define HEARTRATE4_ROLLOVER_MASK 0xEF
192 #define HEARTRATE4_ROLLOVER_ENABLE 0x10
193 #define HEARTRATE4_ROLLOVER_DISABLE 0x00
194 #define HEARTRATE4_A_FULL_MASK 0xF0
195 
201 #define HEARTRATE4_SHUTDOWN_MASK 0x7F
202 #define HEARTRATE4_SHUTDOWN 0x80
203 #define HEARTRATE4_WAKEUP 0x00
204 #define HEARTRATE4_RESET_MASK 0xBF
205 #define HEARTRATE4_RESET 0x40
206 #define HEARTRATE4_MODE_MASK 0xF8
207 #define HEARTRATE4_MODE_REDONLY 0x02 // Heart Rate mode
208 #define HEARTRATE4_MODE_REDIRONLY 0x03 // SpO2 mode
209 #define HEARTRATE4_MODE_MULTILED 0x07 // Multi-LED mode
210 
216 #define HEARTRATE4_ADCRANGE_MASK 0x9F
217 #define HEARTRATE4_ADCRANGE_2048 0x00
218 #define HEARTRATE4_ADCRANGE_4096 0x20
219 #define HEARTRATE4_ADCRANGE_8192 0x40
220 #define HEARTRATE4_ADCRANGE_16384 0x60
221 #define HEARTRATE4_SAMPLERATE_MASK 0xE3
222 #define HEARTRATE4_SAMPLERATE_50 0x00
223 #define HEARTRATE4_SAMPLERATE_100 0x04
224 #define HEARTRATE4_SAMPLERATE_200 0x08
225 #define HEARTRATE4_SAMPLERATE_400 0x0C
226 #define HEARTRATE4_SAMPLERATE_800 0x10
227 #define HEARTRATE4_SAMPLERATE_1000 0x14
228 #define HEARTRATE4_SAMPLERATE_1600 0x18
229 #define HEARTRATE4_SAMPLERATE_3200 0x1C
230 #define HEARTRATE4_PULSEWIDTH_MASK 0xFC
231 #define HEARTRATE4_PULSEWIDTH_69 0x00
232 #define HEARTRATE4_PULSEWIDTH_118 0x01
233 #define HEARTRATE4_PULSEWIDTH_215 0x02
234 #define HEARTRATE4_PULSEWIDTH_411 0x03
235 
241 #define HEARTRATE4_SLOT1_MASK 0xF8
242 #define HEARTRATE4_SLOT2_MASK 0x8F
243 #define HEARTRATE4_SLOT3_MASK 0xF8
244 #define HEARTRATE4_SLOT4_MASK 0x8F
245 #define HEARTRATE4_SLOT_NONE 0x00
246 #define HEARTRATE4_SLOT_RED_LED 0x01
247 #define HEARTRATE4_SLOT_IR_LED 0x02
248 #define HEARTRATE4_SLOT_GREEN_LED 0x03
249 #define HEARTRATE4_SLOT_NONE_PILOT 0x04
250 #define HEARTRATE4_SLOT_RED_PILOT 0x05
251 #define HEARTRATE4_SLOT_IR_PILOT 0x06
252 #define HEARTRATE4_SLOT_GREEN_PILOT 0x07
253  // End command group macro // End group macro
256 // --------------------------------------------------------------- PUBLIC TYPES
265 typedef struct
266 {
267  // Input pins
268 
269  digital_in_t int1;
270 
271  // Modules
272 
273  i2c_master_t i2c;
274 
275  // ctx variable
276 
277  uint8_t slave_address;
278 
279 } heartrate4_t;
280 
284 typedef struct
285 {
286  // Communication gpio pins
287 
288  pin_name_t scl1;
289  pin_name_t sda1;
290 
291  // Additional gpio pins
292 
293  pin_name_t int1;
294 
295  // static variable
296 
297  uint32_t i2c_speed;
298  uint8_t i2c_address;
299 
301 
305 typedef struct
306 {
307  // Structure fields
308 
309  uint8_t avg_samp;
310  uint8_t mode;
311  uint8_t adc_range;
312  uint8_t samp_rate;
313  uint8_t pulse_width;
314  uint8_t led_pow_lvl;
315 
317  // End types group
319 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
320 
326 #ifdef __cplusplus
327 extern "C"{
328 #endif
329 
339 
349 
358 
368 void heartrate4_write_data ( heartrate4_t *ctx, uint8_t wr_addr, uint8_t wr_data );
369 
380 uint8_t heartrate4_read_data ( heartrate4_t *ctx, uint8_t rd_addr );
381 
392 void heartrate4_multi_read ( heartrate4_t *ctx, uint8_t rd_addr, uint8_t *buffer, uint8_t cnt );
393 
404 void heartrate4_set_new_value ( heartrate4_t *ctx, uint8_t reg, uint8_t mask, uint8_t value );
405 
416 uint8_t heartrate4_get_intrrupt ( heartrate4_t *ctx, uint8_t flag );
417 
442 void heartrate4_enable_disable_interrupts ( heartrate4_t *ctx, uint8_t interrupt_flag, uint8_t enable_flag );
443 
465 void heartrate4_setting_function ( heartrate4_t *ctx, uint8_t flag, uint8_t mode );
466 
487 void heartrate4_setting_prox_and_amp ( heartrate4_t *ctx, uint8_t flag, uint8_t write_data );
488 
498 void heartrate4_enable_slot ( heartrate4_t *ctx, uint8_t slot_num, uint8_t dev );
499 
508 
517 
537 void heartrate4_fifo_setting ( heartrate4_t *ctx, uint8_t flag, uint8_t samp_num );
538 
549 
560 
570 
580 
588 
597 
608 
629 uint8_t heartrate4_check_int_pow_and_temp ( heartrate4_t *ctx, uint8_t flag );
630 
641 uint16_t heartrate4_read_fifo_all_samples ( heartrate4_t *ctx, uint8_t *buff );
642 
652 
671 
672 #ifdef __cplusplus
673 }
674 #endif
675 #endif // _HEARTRATE4_H_
676  // End public_function group
679 
680 // ------------------------------------------------------------------------- END
heartrate4_t::i2c
i2c_master_t i2c
Definition: heartrate4.h:273
heartrate4_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: heartrate4.h:297
heartrate4_enable_disable_interrupts
void heartrate4_enable_disable_interrupts(heartrate4_t *ctx, uint8_t interrupt_flag, uint8_t enable_flag)
Enable or disable interrupt function.
heartrate4_set_registers_t
Click registers object definition.
Definition: heartrate4.h:306
heartrate4_setting_function
void heartrate4_setting_function(heartrate4_t *ctx, uint8_t flag, uint8_t mode)
Set corresponding configuration register function.
heartrate4_t
Click ctx object definition.
Definition: heartrate4.h:266
heartrate4_cfg_t::int1
pin_name_t int1
Definition: heartrate4.h:293
heartrate4_read_fifo_all_samples
uint16_t heartrate4_read_fifo_all_samples(heartrate4_t *ctx, uint8_t *buff)
Read all FIFO samples function.
heartrate4_set_registers_t::samp_rate
uint8_t samp_rate
Definition: heartrate4.h:312
heartrate4_check_int_pow_and_temp
uint8_t heartrate4_check_int_pow_and_temp(heartrate4_t *ctx, uint8_t flag)
Check interrupt, power ready or internal temperature ready flag function.
heartrate4_set_registers_t::avg_samp
uint8_t avg_samp
Definition: heartrate4.h:309
heartrate4_t::int1
digital_in_t int1
Definition: heartrate4.h:269
heartrate4_get_write_ptr
uint8_t heartrate4_get_write_ptr(heartrate4_t *ctx)
Read the FIFO Write Pointer function.
heartrate4_read_fifo_oldest_sample
uint32_t heartrate4_read_fifo_oldest_sample(heartrate4_t *ctx)
Read oldest FIFO sample function.
heartrate4_clear_fifo
void heartrate4_clear_fifo(heartrate4_t *ctx)
Clearing FIFO pointers function.
heartrate4_get_intrrupt
uint8_t heartrate4_get_intrrupt(heartrate4_t *ctx, uint8_t flag)
Get desired interrupt function.
heartrate4_read_data
uint8_t heartrate4_read_data(heartrate4_t *ctx, uint8_t rd_addr)
Generic read function.
heartrate4_read_temp_c
float heartrate4_read_temp_c(heartrate4_t *ctx)
Read temperature in Centigrade function.
heartrate4_enable_slot
void heartrate4_enable_slot(heartrate4_t *ctx, uint8_t slot_num, uint8_t dev)
Define slots in MultiLED mode function.
heartrate4_reset
void heartrate4_reset(heartrate4_t *ctx)
Reset device function.
heartrate4_set_registers_t::pulse_width
uint8_t pulse_width
Definition: heartrate4.h:313
heartrate4_get_red_val
uint32_t heartrate4_get_red_val(heartrate4_t *ctx)
Get Red value function.
heartrate4_cfg_t::scl1
pin_name_t scl1
Definition: heartrate4.h:288
heartrate4_read_temp_f
float heartrate4_read_temp_f(heartrate4_t *ctx)
Read temperature in Fahrenheit function.
heartrate4_default_cfg
void heartrate4_default_cfg(heartrate4_t *ctx)
Click Default Configuration function.
heartrate4_cfg_t::i2c_address
uint8_t i2c_address
Definition: heartrate4.h:298
heartrate4_multi_read
void heartrate4_multi_read(heartrate4_t *ctx, uint8_t rd_addr, uint8_t *buffer, uint8_t cnt)
Multi read function.
heartrate4_init
HEARTRATE4_RETVAL heartrate4_init(heartrate4_t *ctx, heartrate4_cfg_t *cfg)
Initialization function.
HEARTRATE4_RETVAL
#define HEARTRATE4_RETVAL
Definition: heartrate4.h:72
heartrate4_cfg_t
Click configuration structure definition.
Definition: heartrate4.h:285
heartrate4_cfg_setup
void heartrate4_cfg_setup(heartrate4_cfg_t *cfg)
Config Object Initialization function.
heartrate4_write_data
void heartrate4_write_data(heartrate4_t *ctx, uint8_t wr_addr, uint8_t wr_data)
Generic write function.
heartrate4_t::slave_address
uint8_t slave_address
Definition: heartrate4.h:277
heartrate4_fifo_setting
void heartrate4_fifo_setting(heartrate4_t *ctx, uint8_t flag, uint8_t samp_num)
Set FIFO configuration register function.
heartrate4_check_int
uint8_t heartrate4_check_int(heartrate4_t *ctx)
Get Interrupt state function.
heartrate4_set_new_value
void heartrate4_set_new_value(heartrate4_t *ctx, uint8_t reg, uint8_t mask, uint8_t value)
Set new value function.
heartrate4_set_registers_t::adc_range
uint8_t adc_range
Definition: heartrate4.h:311
heartrate4_set_registers
void heartrate4_set_registers(heartrate4_t *ctx, heartrate4_set_registers_t *registers)
Set registers values function.
heartrate4_disable_slots
void heartrate4_disable_slots(heartrate4_t *ctx)
Disable slots in MultiLED mode function.
heartrate4_set_registers_t::mode
uint8_t mode
Definition: heartrate4.h:310
heartrate4_setting_prox_and_amp
void heartrate4_setting_prox_and_amp(heartrate4_t *ctx, uint8_t flag, uint8_t write_data)
Set corresponding amplitude or proximity threshold function.
heartrate4_cfg_t::sda1
pin_name_t sda1
Definition: heartrate4.h:289
heartrate4_get_read_ptr
uint8_t heartrate4_get_read_ptr(heartrate4_t *ctx)
Read the FIFO Read Pointer function.
heartrate4_set_registers_t::led_pow_lvl
uint8_t led_pow_lvl
Definition: heartrate4.h:314