heartrate  2.0.0.0
heartrate.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 HEARTRATE_H
36 #define HEARTRATE_H
37 
38 #include "drv_digital_out.h"
39 #include "drv_digital_in.h"
40 #include "drv_i2c_master.h"
41 
42 
43 // -------------------------------------------------------------- PUBLIC MACROS
53 #define HEARTRATE_MAP_MIKROBUS( cfg, mikrobus ) \
54  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
55  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
56  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
57 
63 #define HEARTRATE_RETVAL uint8_t
64 
65 #define HEARTRATE_OK 0x00
66 #define HEARTRATE_INIT_ERROR 0xFF
67 
73 #define SLAVE_ADDRESS 0x57
74 
80 #define HEARTRATE_INT_STATUS 0x00
81 #define HEARTRATE_INT_ENABLE 0x01
82 #define HEARTRATE_FIFO_WRITE_PTR 0x02
83 #define HEARTRATE_OVER_FLOW_CNT 0x03
84 #define HEARTRATE_FIFO_READ_PTR 0x04
85 #define HEARTRATE_FIFO_DATA_REG 0x05
86 #define HEARTRATE_MODE_CONFIG 0x06
87 #define HEARTRATE_SPO2_CONFIG 0x07
88 #define HEARTRATE_LED_CONFIG 0x09
89 #define HEARTRATE_TEMP_INTEGER 0x16
90 #define HEARTRATE_TEMP_FRACTION 0x17
91 #define HEARTRATE_REVISION_ID 0xFE
92 #define HEARTRATE_PART_ID 0xFF
93 
99 #define HEARTRATE_TEMP_EN 0x08
100 #define HEARTRATE_HR_ONLY 0x02
101 #define HEARTRATE_SPO2_EN 0x03
102 
108 #define HEARTRATE_SPO2_HI_RES_EN 0x40
109 
115  #define HEARTRATE_ENA_A_FULL 0x80
116  #define HEARTRATE_ENA_TEP_RDY 0x40
117  #define HEARTRATE_ENA_HR_RDY 0x20
118  #define HEARTRATE_ENA_SO2_RDY 0x10
119 
125 #define HEARTRATE_PWR_RDY 0x01
126 
132 #define HEARTRATE_SAMPLES_50 0x00
133 #define HEARTRATE_SAMPLES_100 0x04
134 #define HEARTRATE_SAMPLES_167 0x08
135 #define HEARTRATE_SAMPLES_200 0x0C
136 #define HEARTRATE_SAMPLES_400 0x10
137 #define HEARTRATE_SAMPLES_600 0x14
138 #define HEARTRATE_SAMPLES_800 0x18
139 #define HEARTRATE_SAMPLES_1000 0x1C
140 
146 #define HEARTRATE_PULSE_WIDTH_200 0x00 // 13-bit ADC resolution
147 #define HEARTRATE_PULSE_WIDTH_400 0x01 // 14-bit ADC resolution
148 #define HEARTRATE_PULSE_WIDTH_800 0x02 // 15-bit ADC resolution
149 #define HEARTRATE_PULSE_WIDTH_1600 0x03 // 16-bit ADC resolution
150 
156 #define HEARTRATE_IR_CURRENT_0 0x00 // 0.0 mA
157 #define HEARTRATE_IR_CURRENT_44 0x01 // 4.4 mA
158 #define HEARTRATE_IR_CURRENT_76 0x02 // 7.6 mA
159 #define HEARTRATE_IR_CURRENT_110 0x03 // 11.0 mA
160 #define HEARTRATE_IR_CURRENT_142 0x04 // 14.2 mA
161 #define HEARTRATE_IR_CURRENT_174 0x05 // 17.4 mA
162 #define HEARTRATE_IR_CURRENT_208 0x06 // 20.8 mA
163 #define HEARTRATE_IR_CURRENT_240 0x07 // 24.0 mA
164 #define HEARTRATE_IR_CURRENT_271 0x08 // 27.1 mA
165 #define HEARTRATE_IR_CURRENT_306 0x09 // 30.6 mA
166 #define HEARTRATE_IR_CURRENT_338 0x0A // 33.8 mA
167 #define HEARTRATE_IR_CURRENT_370 0x0B // 37.0 mA
168 #define HEARTRATE_IR_CURRENT_402 0x0C // 40.2 mA
169 #define HEARTRATE_IR_CURRENT_436 0x0D // 43.6 mA
170 #define HEARTRATE_IR_CURRENT_468 0x0E // 46.8 mA
171 #define HEARTRATE_IR_CURRENT_500 0x0F // 50.0 mA
172 
173 #define HEARTRATE_RED_CURRENT_0 0x00 // 0.0 mA
174 #define HEARTRATE_RED_CURRENT_44 0x10 // 4.4 mA
175 #define HEARTRATE_RED_CURRENT_76 0x20 // 7.6 mA
176 #define HEARTRATE_RED_CURRENT_110 0x30 // 11.0 mA
177 #define HEARTRATE_RED_CURRENT_142 0x40 // 14.2 mA
178 #define HEARTRATE_RED_CURRENT_174 0x50 // 17.4 mA
179 #define HEARTRATE_RED_CURRENT_208 0x60 // 20.8 mA
180 #define HEARTRATE_RED_CURRENT_240 0x70 // 24.0 mA
181 #define HEARTRATE_RED_CURRENT_271 0x80 // 27.1 mA
182 #define HEARTRATE_RED_CURRENT_306 0x90 // 30.6 mA
183 #define HEARTRATE_RED_CURRENT_338 0xA0 // 33.8 mA
184 #define HEARTRATE_RED_CURRENT_370 0xB0 // 37.0 mA
185 #define HEARTRATE_RED_CURRENT_402 0xC0 // 40.2 mA
186 #define HEARTRATE_RED_CURRENT_436 0xD0 // 43.6 mA
187 #define HEARTRATE_RED_CURRENT_468 0xE0 // 46.8 mA
188 #define HEARTRATE_RED_CURRENT_500 0xF0 // 50.0 mA
189  // End group macro
191 // --------------------------------------------------------------- PUBLIC TYPES
200 typedef struct
201 {
202  // Input pins
203 
204  digital_in_t int_pin;
205 
206  // Modules
207 
208  i2c_master_t i2c;
209 
210  // ctx variable
211 
212  uint8_t slave_address;
213 
214 } heartrate_t;
215 
219 typedef struct
220 {
221  // Communication gpio pins
222 
223  pin_name_t scl;
224  pin_name_t sda;
225 
226  // Additional gpio pins
227 
228  pin_name_t int_pin;
229 
230  // static variable
231 
232  uint32_t i2c_speed;
233  uint8_t i2c_address;
234 
236  // End types group
238 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
239 
245 #ifdef __cplusplus
246 extern "C"{
247 #endif
248 
258 
268 
276 void heartrate_default_cfg ( heartrate_t *ctx );
277 
285 uint8_t heartrate_get_revision_id ( heartrate_t *ctx );
286 
294 uint8_t heartrate_get_part_id ( heartrate_t *ctx );
295 
303 uint8_t heartrate_get_config ( heartrate_t *ctx );
304 
312 uint8_t heartrate_get_status ( heartrate_t *ctx );
313 
322 void heartrate_set_config ( heartrate_t *ctx, uint8_t cfg );
323 
332 void heartrate_set_interrupt ( heartrate_t *ctx, uint8_t intrpts );
333 
345 uint8_t heartrate_read_ir_red ( heartrate_t *ctx, uint16_t *ir_buff, uint16_t *red_buff );
346 
355 void heartrate_read_temp ( heartrate_t *ctx, uint16_t *temp_value );
356 
366 uint8_t heartrate_data_ready ( heartrate_t *ctx );
367 
378 void heartrate_generic_write ( heartrate_t *ctx, uint8_t reg, uint16_t len, uint8_t *data_buf );
379 
391 void heartrate_generic_read ( heartrate_t *ctx, uint8_t reg, uint16_t len, uint8_t *data_buf );
392 
403 void hr_shut_down ( heartrate_t *ctx, bool enable );
404 
412 void hr_reset ( heartrate_t *ctx );
413 
423 void hr_temp_enable ( heartrate_t *ctx, bool enable );
424 
435 uint8_t hr_set_mode ( heartrate_t *ctx, uint8_t mode );
436 
445 void hr_spo2_high_res_enable ( heartrate_t *ctx, bool enable );
446 
456 uint8_t hr_spo2_set_sample_rate ( heartrate_t *ctx, uint8_t sample_rate );
457 
468 uint8_t hr_set_led_pulse_width ( heartrate_t *ctx, uint8_t _value );
469 
480 uint8_t hr_set_red_current_level ( heartrate_t *ctx, uint8_t level );
481 
492 uint8_t hr_set_ir_current_level ( heartrate_t *ctx, uint8_t level );
493 
502 void hr_fifo_almost_full_int_enable ( heartrate_t *ctx, bool enable );
503 
512 void hr_temp_ready_int_enable ( heartrate_t *ctx, bool enable );
513 
522 void hr_heartrate_data_ready_int_enable ( heartrate_t *ctx, bool enable );
523 
532 void hr_heartrate_spo2_data_ready_int_enable ( heartrate_t *ctx, bool enable );
533 
546 uint8_t hr_read_diodes ( heartrate_t *ctx, uint16_t* ir_buff, uint16_t* red_buff );
547 
558 uint8_t hr_get_status ( heartrate_t *ctx );
559 
560 #ifdef __cplusplus
561 }
562 #endif
563 #endif // _HEARTRATE_H_
564  // End public_function group
567 
568 // ------------------------------------------------------------------------- END
heartrate_get_part_id
uint8_t heartrate_get_part_id(heartrate_t *ctx)
Function for getting part ID.
heartrate_default_cfg
void heartrate_default_cfg(heartrate_t *ctx)
Click Default Configuration function.
heartrate_read_temp
void heartrate_read_temp(heartrate_t *ctx, uint16_t *temp_value)
Function for reading temperature.
hr_read_diodes
uint8_t hr_read_diodes(heartrate_t *ctx, uint16_t *ir_buff, uint16_t *red_buff)
Function for reading the ADC values of the IR and RED LEDs from the FIFO buffer.
hr_temp_ready_int_enable
void hr_temp_ready_int_enable(heartrate_t *ctx, bool enable)
Function to enable/disable the temperature data ready interrupt.
hr_set_mode
uint8_t hr_set_mode(heartrate_t *ctx, uint8_t mode)
Set mode function.
heartrate_read_ir_red
uint8_t heartrate_read_ir_red(heartrate_t *ctx, uint16_t *ir_buff, uint16_t *red_buff)
Function for reading IR and RED values.
heartrate_cfg_t::int_pin
pin_name_t int_pin
Definition: heartrate.h:228
hr_spo2_high_res_enable
void hr_spo2_high_res_enable(heartrate_t *ctx, bool enable)
Function for setting the SpO2 ADC resolution.
heartrate_generic_write
void heartrate_generic_write(heartrate_t *ctx, uint8_t reg, uint16_t len, uint8_t *data_buf)
Generic write function.
hr_heartrate_data_ready_int_enable
void hr_heartrate_data_ready_int_enable(heartrate_t *ctx, bool enable)
Function to enable/disable heart rate data ready interrupt.
heartrate_init
HEARTRATE_RETVAL heartrate_init(heartrate_t *ctx, heartrate_cfg_t *cfg)
Initialization function.
HEARTRATE_RETVAL
#define HEARTRATE_RETVAL
Definition: heartrate.h:63
hr_get_status
uint8_t hr_get_status(heartrate_t *ctx)
Function for getting the value read from the interrupt status register.
hr_fifo_almost_full_int_enable
void hr_fifo_almost_full_int_enable(heartrate_t *ctx, bool enable)
Function to enable/disable the FIFO almost full interrupt.
hr_set_led_pulse_width
uint8_t hr_set_led_pulse_width(heartrate_t *ctx, uint8_t _value)
Function for setting LED pulse width.
heartrate_cfg_t::i2c_address
uint8_t i2c_address
Definition: heartrate.h:233
hr_shut_down
void hr_shut_down(heartrate_t *ctx, bool enable)
Shut down function.
heartrate_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: heartrate.h:232
heartrate_t::slave_address
uint8_t slave_address
Definition: heartrate.h:212
heartrate_generic_read
void heartrate_generic_read(heartrate_t *ctx, uint8_t reg, uint16_t len, uint8_t *data_buf)
Generic read function.
hr_heartrate_spo2_data_ready_int_enable
void hr_heartrate_spo2_data_ready_int_enable(heartrate_t *ctx, bool enable)
Function to enable/disable the SpO2 data ready.
heartrate_get_revision_id
uint8_t heartrate_get_revision_id(heartrate_t *ctx)
Function for getting revision ID.
heartrate_set_interrupt
void heartrate_set_interrupt(heartrate_t *ctx, uint8_t intrpts)
Function for setting interrupt for heartrate click.
hr_reset
void hr_reset(heartrate_t *ctx)
Reset function.
heartrate_t::i2c
i2c_master_t i2c
Definition: heartrate.h:208
heartrate_cfg_t::scl
pin_name_t scl
Definition: heartrate.h:223
heartrate_cfg_t
Click configuration structure definition.
Definition: heartrate.h:219
heartrate_cfg_t::sda
pin_name_t sda
Definition: heartrate.h:224
heartrate_set_config
void heartrate_set_config(heartrate_t *ctx, uint8_t cfg)
Function for configuration heartrate chip.
hr_spo2_set_sample_rate
uint8_t hr_spo2_set_sample_rate(heartrate_t *ctx, uint8_t sample_rate)
Function for setting.
heartrate_t
Click ctx object definition.
Definition: heartrate.h:200
hr_temp_enable
void hr_temp_enable(heartrate_t *ctx, bool enable)
Single temperature reading function.
heartrate_t::int_pin
digital_in_t int_pin
Definition: heartrate.h:204
heartrate_get_config
uint8_t heartrate_get_config(heartrate_t *ctx)
Function for getting configuration of the chip.
heartrate_get_status
uint8_t heartrate_get_status(heartrate_t *ctx)
Function for getting status of heartrate click.
hr_set_ir_current_level
uint8_t hr_set_ir_current_level(heartrate_t *ctx, uint8_t level)
Function for setting.
heartrate_cfg_setup
void heartrate_cfg_setup(heartrate_cfg_t *cfg)
Config Object Initialization function.
hr_set_red_current_level
uint8_t hr_set_red_current_level(heartrate_t *ctx, uint8_t level)
Function for setting Red LED.
heartrate_data_ready
uint8_t heartrate_data_ready(heartrate_t *ctx)
Function checking if the data is ready for reading.