heartrate11  2.0.0.0
heartrate11.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 HEARTRATE11_H
29 #define HEARTRATE11_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_i2c_master.h"
48 
69 #define HEARTRATE11_REG_STATUS_0 0x00
70 #define HEARTRATE11_REG_STATUS_1 0x01
71 #define HEARTRATE11_REG_PS_DATA_0 0x02
72 #define HEARTRATE11_REG_PS_DATA_1 0x03
73 #define HEARTRATE11_REG_LS_CLEAR_DATA_0 0x04
74 #define HEARTRATE11_REG_LS_CLEAR_DATA_1 0x05
75 #define HEARTRATE11_REG_LS_CLEAR_DATA_2 0x06
76 #define HEARTRATE11_REG_LS_GREEN_DATA_0 0x07
77 #define HEARTRATE11_REG_LS_GREEN_DATA_1 0x08
78 #define HEARTRATE11_REG_LS_GREEN_DATA_2 0x09
79 #define HEARTRATE11_REG_LS_BLUE_DATA_0 0x0A
80 #define HEARTRATE11_REG_LS_BLUE_DATA_1 0x0B
81 #define HEARTRATE11_REG_LS_BLUE_DATA_2 0x0C
82 #define HEARTRATE11_REG_LS_RED_DATA_0 0x0D
83 #define HEARTRATE11_REG_LS_RED_DATA_1 0x0E
84 #define HEARTRATE11_REG_LS_RED_DATA_2 0x0F
85 #define HEARTRATE11_REG_COMP_DATA_0 0x10
86 #define HEARTRATE11_REG_COMP_DATA_1 0x11
87 #define HEARTRATE11_REG_COMP_DATA_2 0x12
88 #define HEARTRATE11_REG_MAIN_CTRL_0 0x15
89 #define HEARTRATE11_REG_MAIN_CTRL_1 0x16
90 #define HEARTRATE11_REG_PS_LED_CURR_0 0x17
91 #define HEARTRATE11_REG_PS_LED_CURR_1 0x18
92 #define HEARTRATE11_REG_PS_CAN_PULSES 0x19
93 #define HEARTRATE11_REG_PS_PWIDTH_PERIOD 0x1A
94 #define HEARTRATE11_REG_PS_CAN_DIG_0 0x1B
95 #define HEARTRATE11_REG_PS_CAN_DIG_1 0x1C
96 #define HEARTRATE11_REG_PS_MOV_AVG_HYS 0x1D
97 #define HEARTRATE11_REG_PS_THRES_UP_0 0x1E
98 #define HEARTRATE11_REG_PS_THRES_UP_1 0x1F
99 #define HEARTRATE11_REG_PS_THRES_LOW_0 0x20
100 #define HEARTRATE11_REG_PS_THRES_LOW_1 0x21
101 #define HEARTRATE11_REG_LS_RES_PERIOD 0x22
102 #define HEARTRATE11_REG_LS_GAIN 0x23
103 #define HEARTRATE11_REG_LS_THRES_UP_0 0x24
104 #define HEARTRATE11_REG_LS_THRES_UP_1 0x25
105 #define HEARTRATE11_REG_LS_THRES_UP_2 0x26
106 #define HEARTRATE11_REG_LS_THRES_LOW_0 0x27
107 #define HEARTRATE11_REG_LS_THRES_LOW_1 0x28
108 #define HEARTRATE11_REG_LS_THRES_LOW_2 0x29
109 #define HEARTRATE11_REG_LS_THRES_VAR 0x2A
110 #define HEARTRATE11_REG_INT_CFG_0 0x2B
111 #define HEARTRATE11_REG_INT_CFG_1 0x2C
112 #define HEARTRATE11_REG_INT_PST 0x2D
113 #define HEARTRATE11_REG_PPG_PS_GAIN 0x2E
114 #define HEARTRATE11_REG_PPG_PS_CFG 0x2F
115 #define HEARTRATE11_REG_PPG_IRLED_CURR_0 0x30
116 #define HEARTRATE11_REG_PPG_IRLED_CURR_1 0x31
117 #define HEARTRATE11_REG_PPG_RLED_CURR_0 0x32
118 #define HEARTRATE11_REG_PPG_RLED_CURR_1 0x33
119 #define HEARTRATE11_REG_PPG_CAN_ANA 0x34
120 #define HEARTRATE11_REG_PPG_AVG 0x35
121 #define HEARTRATE11_REG_PPG_PWIDTH_PERIOD 0x36
122 #define HEARTRATE11_REG_FIFO_CFG 0x37
123 #define HEARTRATE11_REG_FIFO_WR_PTR 0x38
124 #define HEARTRATE11_REG_FIFO_RD_PTR 0x39
125 #define HEARTRATE11_REG_FIFO_OVF_CNT 0x3A
126 #define HEARTRATE11_REG_FIFO_DATA 0x3B
127 #define HEARTRATE11_REG_PART_ID 0x3D
128  // heartrate11_reg
130 
145 #define HEARTRATE11_POR_STATUS 0x80
146 #define HEARTRATE11_LS_INT_STATUS 0x02
147 #define HEARTRATE11_LS_NEW_DATA 0x01
148 
153 #define HEARTRATE11_TS_DATA_STATUS 0x80
154 #define HEARTRATE11_FIFO_AFULL_STATUS 0x20
155 #define HEARTRATE11_PPG_DATA_STATUS 0x10
156 #define HEARTRATE11_PS_LOGIC_STATUS 0x04
157 #define HEARTRATE11_PS_INT_STATUS 0x02
158 #define HEARTRATE11_PS_NEW_DATA 0x01
159 
164 #define HEARTRATE11_SW_RESET 0x80
165 #define HEARTRATE11_LS_SAI_ON 0x08
166 #define HEARTRATE11_LS_SAI_OFF 0x00
167 #define HEARTRATE11_ALS_MODE 0x00
168 #define HEARTRATE11_RGB_MODE 0x02
169 #define HEARTRATE11_LS_OFF 0x00
170 #define HEARTRATE11_LS_ON 0x01
171 
176 #define HEARTRATE11_PS_SAI_ON 0x08
177 #define HEARTRATE11_PS_SAI_OFF 0x00
178 #define HEARTRATE11_PS_MODE 0x00
179 #define HEARTRATE11_HR_MODE 0x02
180 #define HEARTRATE11_SPO2_MODE 0x04
181 #define HEARTRATE11_PPG_PS_ON 0x01
182 #define HEARTRATE11_PPG_PS_OFF 0x00
183 
188 #define HEARTRATE11_PS_LED 0
189 #define HEARTRATE11_IR_LED 1
190 #define HEARTRATE11_RED_LED 2
191 #define HEARTRATE11_IR_LED_DEFAULT_CURRENT 50.0
192 #define HEARTRATE11_PS_IR_LED_MAX_CURRENT 250.0
193 #define HEARTRATE11_RED_LED_MAX_CURRENT 125.0
194 #define HEARTRATE11_PS_IR_LED_CURRENT_RES 0x03FF
195 #define HEARTRATE11_RED_LED_CURRENT_RES 0x01FF
196 #define HEARTRATE11_ROUND_TO_NEAREST_INT 0.5
197 
202 #define HEARTRATE11_PS_CAN_ANA_OFF 0x00
203 #define HEARTRATE11_PS_CAN_ANA_ON 0x40
204 #define HEARTRATE11_PS_PULSES( x ) ( ( x ) & ( 0x07 ) ) << 3 ) // Where x = 0..5 and num pulses = 2^x
205 #define HEARTRATE11_PS_CAN_PULSES_RESERVED 0x02
206 
211 #define HEARTRATE11_PS_PWIDTH_26US 0x00
212 #define HEARTRATE11_PS_PWIDTH_42US 0x10
213 #define HEARTRATE11_PS_PWIDTH_71US 0x20
214 #define HEARTRATE11_PS_RATE_3p125MS 0x00
215 #define HEARTRATE11_PS_RATE_6p25MS 0x01
216 #define HEARTRATE11_PS_RATE_12p5MS 0x02
217 #define HEARTRATE11_PS_RATE_25MS 0x03
218 #define HEARTRATE11_PS_RATE_50MS 0x04
219 #define HEARTRATE11_PS_RATE_100MS 0x05
220 #define HEARTRATE11_PS_RATE_200MS 0x06
221 #define HEARTRATE11_PS_RATE_400MS 0x07
222 
227 #define HEARTRATE11_PS_MOV_AVG_ON 0x80
228 #define HEARTRATE11_PS_MOV_AVG_OFF 0x00
229 #define HEARTRATE11_PS_HYS_LEVEL( x ) ( x >> 1 ) // Where x = 0..254
230 
235 #define HEARTRATE11_LS_RES_20BIT_400MS 0x00
236 #define HEARTRATE11_LS_RES_19BIT_200MS 0x10
237 #define HEARTRATE11_LS_RES_18BIT_100MS 0x20
238 #define HEARTRATE11_LS_RES_17BIT_50MS 0x30
239 #define HEARTRATE11_LS_RES_16BIT_25MS 0x40
240 #define HEARTRATE11_LS_RES_13BIT_3p125MS 0x50
241 #define HEARTRATE11_LS_RATE_25MS 0x00
242 #define HEARTRATE11_LS_RATE_50MS 0x01
243 #define HEARTRATE11_LS_RATE_100MS 0x02
244 #define HEARTRATE11_LS_RATE_200MS 0x03
245 #define HEARTRATE11_LS_RATE_500MS 0x04
246 #define HEARTRATE11_LS_RATE_1000MS 0x05
247 #define HEARTRATE11_LS_RATE_2000MS 0x06
248 
253 #define HEARTRATE11_LS_GAIN_1 0x00
254 #define HEARTRATE11_LS_GAIN_3 0x01
255 #define HEARTRATE11_LS_GAIN_6 0x02
256 
261 #define HEARTRATE11_LS_INT_SEL_C 0x00
262 #define HEARTRATE11_LS_INT_SEL_G 0x10
263 #define HEARTRATE11_LS_INT_SEL_R 0x20
264 #define HEARTRATE11_LS_INT_SEL_B 0x30
265 #define HEARTRATE11_LS_THRES_INT_MODE 0x00
266 #define HEARTRATE11_LS_VAR_INT_MODE 0x02
267 #define HEARTRATE11_LS_INT_OFF 0x00
268 #define HEARTRATE11_LS_INT_ON 0x01
269 
274 #define HEARTRATE11_AFULL_INT_OFF 0x00
275 #define HEARTRATE11_AFULL_INT_ON 0x20
276 #define HEARTRATE11_PPG_INT_OFF 0x00
277 #define HEARTRATE11_PPG_INT_ON 0x10
278 #define HEARTRATE11_PS_INT_LOGIC 0x02
279 #define HEARTRATE11_PS_INT_OFF 0x00
280 #define HEARTRATE11_PS_INT_ON 0x01
281 
286 #define HEARTRATE11_LS_PERSIST( x ) ( ( x & 0x0F ) << 4 )
287 #define HEARTRATE11_PS_PERSIST( x ) ( x & 0x0F)
288 
293 #define HEARTRATE11_PPG_PS_GAIN_1 0x00
294 #define HEARTRATE11_PPG_PS_GAIN_1p5 0x10
295 #define HEARTRATE11_PPG_PS_GAIN_2 0x20
296 #define HEARTRATE11_PPG_PS_GAIN_4 0x30
297 #define HEARTRATE11_PPG_PS_GAIN_RESERVED 0x09
298 
303 #define HEARTRATE11_PPG_POW_SAVE_OFF 0x00
304 #define HEARTRATE11_PPG_POW_SAVE_ON 0x40
305 #define HEARTRATE11_LED_FLIP_OFF 0x00
306 #define HEARTRATE11_LED_FLIP_ON 0x08
307 
312 #define HEARTRATE11_PPG_CH1_CAN_ANA_OFF 0x00
313 #define HEARTRATE11_PPG_CH1_CAN_ANA_ON 0x04
314 #define HEARTRATE11_PPG_CH2_CAN_ANA_OFF 0x00
315 #define HEARTRATE11_PPG_CH2_CAN_ANA_ON 0x04
316 
321 #define HEARTRATE11_PPG_AVG_1 0x00
322 #define HEARTRATE11_PPG_AVG_2 0x10
323 #define HEARTRATE11_PPG_AVG_4 0x20
324 #define HEARTRATE11_PPG_AVG_8 0x30
325 #define HEARTRATE11_PPG_AVG_16 0x40
326 #define HEARTRATE11_PPG_AVG_32 0x50
327 #define HEARTRATE11_PPG_AVG_RESERVED 0x0A
328 
333 #define HEARTRATE11_PPG_PWIDTH_130US 0x30
334 #define HEARTRATE11_PPG_PWIDTH_247US 0x40
335 #define HEARTRATE11_PPG_PWIDTH_481US 0x50
336 #define HEARTRATE11_PPG_PWIDTH_949US 0x60
337 #define HEARTRATE11_PPG_RATE_0p3125MS 0x00
338 #define HEARTRATE11_PPG_RATE_0p625MS 0x01
339 #define HEARTRATE11_PPG_RATE_1MS 0x02
340 #define HEARTRATE11_PPG_RATE_1p25MS 0x03
341 #define HEARTRATE11_PPG_RATE_2p5MS 0x04
342 #define HEARTRATE11_PPG_RATE_5MS 0x05
343 #define HEARTRATE11_PPG_RATE_10MS 0x06
344 #define HEARTRATE11_PPG_RATE_20MS 0x07
345 
350 #define HEARTRATE11_FIFO_ROLL_OFF 0x00
351 #define HEARTRATE11_FIFO_ROLL_ON 0x10
352 #define HEARTRATE11_FIFO_AFULL_WARNING( x ) ( x & 0x0F )
353 
358 #define HEARTRATE11_FIFO_INDEX( x ) ( x & 0x1F )
359 
365 #define HEARTRATE11_DEVICE_ADDRESS 0x53
366  // heartrate11_set
368 
383 #define HEARTRATE11_MAP_MIKROBUS( cfg, mikrobus ) \
384  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
385  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
386  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
387  // heartrate11_map // heartrate11
390 
395 typedef struct
396 {
397  // Input pins
398  digital_in_t int_pin;
400  // Modules
401  i2c_master_t i2c;
403  // I2C slave address
404  uint8_t slave_address;
406 } heartrate11_t;
407 
412 typedef struct
413 {
414  pin_name_t scl;
415  pin_name_t sda;
417  pin_name_t int_pin;
419  uint32_t i2c_speed;
420  uint8_t i2c_address;
423 
428 typedef enum
429 {
431  HEARTRATE11_ERROR = -1
432 
434 
451 
466 
480 
495 err_t heartrate11_generic_write ( heartrate11_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
496 
511 err_t heartrate11_generic_read ( heartrate11_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
512 
525 err_t heartrate11_write_register ( heartrate11_t *ctx, uint8_t reg, uint8_t data_in );
526 
539 err_t heartrate11_read_register ( heartrate11_t *ctx, uint8_t reg, uint8_t *data_out );
540 
550 
562 
577 err_t heartrate11_set_led_current ( heartrate11_t *ctx, uint8_t led, float current );
578 
590 err_t heartrate11_read_fifo ( heartrate11_t *ctx, uint32_t *fifo_data );
591 
592 #ifdef __cplusplus
593 }
594 #endif
595 #endif // HEARTRATE11_H
596  // heartrate11
598 
599 // ------------------------------------------------------------------------ END
heartrate11_read_register
err_t heartrate11_read_register(heartrate11_t *ctx, uint8_t reg, uint8_t *data_out)
Heart Rate 11 read register function.
heartrate11_cfg_t::sda
pin_name_t sda
Definition: heartrate11.h:415
heartrate11_t
Heart Rate 11 Click context object.
Definition: heartrate11.h:396
heartrate11_cfg_t
Heart Rate 11 Click configuration object.
Definition: heartrate11.h:413
heartrate11_t::i2c
i2c_master_t i2c
Definition: heartrate11.h:401
heartrate11_set_led_current
err_t heartrate11_set_led_current(heartrate11_t *ctx, uint8_t led, float current)
Heart Rate 11 set led current function.
heartrate11_cfg_t::scl
pin_name_t scl
Definition: heartrate11.h:414
heartrate11_cfg_setup
void heartrate11_cfg_setup(heartrate11_cfg_t *cfg)
Heart Rate 11 configuration object setup function.
heartrate11_return_value_t
heartrate11_return_value_t
Heart Rate 11 Click return value data.
Definition: heartrate11.h:429
heartrate11_cfg_t::i2c_address
uint8_t i2c_address
Definition: heartrate11.h:420
heartrate11_t::int_pin
digital_in_t int_pin
Definition: heartrate11.h:398
heartrate11_write_register
err_t heartrate11_write_register(heartrate11_t *ctx, uint8_t reg, uint8_t data_in)
Heart Rate 11 write register function.
heartrate11_reset_device
err_t heartrate11_reset_device(heartrate11_t *ctx)
Heart Rate 11 reset device function.
heartrate11_init
err_t heartrate11_init(heartrate11_t *ctx, heartrate11_cfg_t *cfg)
Heart Rate 11 initialization function.
heartrate11_read_fifo
err_t heartrate11_read_fifo(heartrate11_t *ctx, uint32_t *fifo_data)
Heart Rate 11 read fifo function.
heartrate11_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: heartrate11.h:419
HEARTRATE11_ERROR
@ HEARTRATE11_ERROR
Definition: heartrate11.h:431
heartrate11_default_cfg
err_t heartrate11_default_cfg(heartrate11_t *ctx)
Heart Rate 11 default configuration function.
heartrate11_get_int_pin
uint8_t heartrate11_get_int_pin(heartrate11_t *ctx)
Heart Rate 11 get int pin function.
HEARTRATE11_OK
@ HEARTRATE11_OK
Definition: heartrate11.h:430
heartrate11_generic_write
err_t heartrate11_generic_write(heartrate11_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Heart Rate 11 I2C writing function.
heartrate11_cfg_t::int_pin
pin_name_t int_pin
Definition: heartrate11.h:417
heartrate11_generic_read
err_t heartrate11_generic_read(heartrate11_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Heart Rate 11 I2C reading function.
heartrate11_t::slave_address
uint8_t slave_address
Definition: heartrate11.h:404