Host software for the MAXREFDES220 Heart Rate Monitor Smart Sensor. Hosted on the MAX32630FTHR.

Dependencies:   max32630fthr USBDevice

Fork of MAXREFDES220_HEART_RATE_MONITOR by Maxim Integrated

Finger Heart Rate Monitor and SpO2 Monitor

The MAXREFDES220 Smart Sensor FeatherWing board is a integrated solution for providing finger-based heart rate measurements and SpO2 (blood oxygen saturation). This evaluation board interfaces to the host computer using the I2C interface. Heart rate outpu is available in beats per minute (BPM) and SpO2 is reported in percentages.; the PPG (photoplethysmography) raw data is also available. The board has an MAX30101 chip which is a low power heart rate monitor with adjustable sample rates and adjustable LED currents. The low cost MAX32664 microcontroller is pre-flashed with C code for finger-based pulse rate and SpO2 monitoring. Bootloader software is included to allow for future algorithms or updates to the algorithm from Maxim Integrated.

Ordering information will be available soon.

Note: SpO2 values are not calibrated. Calibration should be performed using the final end product.

Warning

The MAXREFDES220 source code listed is dated and only compatible with the 1.2.8a.msbl. The latest sample host source code is available on the MAX32664 website.

MAXREFDES220 FeatherWing Pinout Connections

/media/uploads/phonemacro/maxrefdes220_pinouts_heart_rate_monitor.jpg

Committer:
phonemacro
Date:
Fri Feb 05 01:59:25 2021 +0000
Revision:
14:3fdc09d9017b
Parent:
8:0f55f59ca341
Remove code for EventStats irq_evt - it no longer compiles on mBed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Shaun Kelsey 0:da5f5b56060a 1 /*******************************************************************************
Shaun Kelsey 0:da5f5b56060a 2 * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
Shaun Kelsey 0:da5f5b56060a 3 *
Shaun Kelsey 0:da5f5b56060a 4 * Permission is hereby granted, free of charge, to any person obtaining a
Shaun Kelsey 0:da5f5b56060a 5 * copy of this software and associated documentation files (the "Software"),
Shaun Kelsey 0:da5f5b56060a 6 * to deal in the Software without restriction, including without limitation
Shaun Kelsey 0:da5f5b56060a 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
Shaun Kelsey 0:da5f5b56060a 8 * and/or sell copies of the Software, and to permit persons to whom the
Shaun Kelsey 0:da5f5b56060a 9 * Software is furnished to do so, subject to the following conditions:
Shaun Kelsey 0:da5f5b56060a 10 *
Shaun Kelsey 0:da5f5b56060a 11 * The above copyright notice and this permission notice shall be included
Shaun Kelsey 0:da5f5b56060a 12 * in all copies or substantial portions of the Software.
Shaun Kelsey 0:da5f5b56060a 13 *
Shaun Kelsey 0:da5f5b56060a 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Shaun Kelsey 0:da5f5b56060a 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Shaun Kelsey 0:da5f5b56060a 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Shaun Kelsey 0:da5f5b56060a 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
Shaun Kelsey 0:da5f5b56060a 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Shaun Kelsey 0:da5f5b56060a 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
Shaun Kelsey 0:da5f5b56060a 20 * OTHER DEALINGS IN THE SOFTWARE.
Shaun Kelsey 0:da5f5b56060a 21 *
Shaun Kelsey 0:da5f5b56060a 22 * Except as contained in this notice, the name of Maxim Integrated
Shaun Kelsey 0:da5f5b56060a 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
Shaun Kelsey 0:da5f5b56060a 24 * Products, Inc. Branding Policy.
Shaun Kelsey 0:da5f5b56060a 25 *
Shaun Kelsey 0:da5f5b56060a 26 * The mere transfer of this software does not imply any licenses
Shaun Kelsey 0:da5f5b56060a 27 * of trade secrets, proprietary technology, copyrights, patents,
Shaun Kelsey 0:da5f5b56060a 28 * trademarks, maskwork rights, or any other form of intellectual
Shaun Kelsey 0:da5f5b56060a 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
Shaun Kelsey 0:da5f5b56060a 30 * ownership rights.
Shaun Kelsey 0:da5f5b56060a 31 *******************************************************************************
Shaun Kelsey 0:da5f5b56060a 32 */
Shaun Kelsey 0:da5f5b56060a 33
Shaun Kelsey 0:da5f5b56060a 34 #ifndef _MAXIMSENSOR_H_
Shaun Kelsey 0:da5f5b56060a 35 #define _MAXIMSENSOR_H_
Shaun Kelsey 0:da5f5b56060a 36 #include "mbed.h"
Shaun Kelsey 0:da5f5b56060a 37 #include <list>
Shaun Kelsey 0:da5f5b56060a 38
Shaun Kelsey 0:da5f5b56060a 39
Shaun Kelsey 0:da5f5b56060a 40 typedef struct {
Shaun Kelsey 0:da5f5b56060a 41 uint8_t addr;
Shaun Kelsey 0:da5f5b56060a 42 uint32_t val;
Shaun Kelsey 0:da5f5b56060a 43 } addr_val_pair;
Shaun Kelsey 0:da5f5b56060a 44
Shaun Kelsey 0:da5f5b56060a 45
Shaun Kelsey 0:da5f5b56060a 46 /**
Shaun Kelsey 0:da5f5b56060a 47 * @brief MaximSensor is Maxim Sensor base class.
Shaun Kelsey 0:da5f5b56060a 48 * @details MaximSensor includes base functions for to create new
Shaun Kelsey 0:da5f5b56060a 49 * sensor classes. All sensor classes should implement this class.
Shaun Kelsey 0:da5f5b56060a 50 */
Shaun Kelsey 0:da5f5b56060a 51 class MaximSensor
Shaun Kelsey 0:da5f5b56060a 52 {
Shaun Kelsey 0:da5f5b56060a 53 public:
Shaun Kelsey 0:da5f5b56060a 54 /* PUBLIC FUNCTION DECLARATIONS */
Shaun Kelsey 0:da5f5b56060a 55 /**
Shaun Kelsey 0:da5f5b56060a 56 * @brief Reads from register.
Shaun Kelsey 0:da5f5b56060a 57 * @details Reads specific Maxim Sensor register via SPI bus.
Shaun Kelsey 0:da5f5b56060a 58 *
Shaun Kelsey 0:da5f5b56060a 59 * @param[in] reg Beginning address of a register to be read.
Shaun Kelsey 0:da5f5b56060a 60 * @param[out] data Buffer space to save result value.
Shaun Kelsey 0:da5f5b56060a 61 * @param[in] len Number of consecutive bytes to be read.
Shaun Kelsey 0:da5f5b56060a 62 *
Shaun Kelsey 0:da5f5b56060a 63 * @returns 0 on success, negative error code on failure.
Shaun Kelsey 0:da5f5b56060a 64 */
Shaun Kelsey 0:da5f5b56060a 65 virtual int readRegister(uint8_t reg, uint8_t *data, int len);
Shaun Kelsey 0:da5f5b56060a 66
Shaun Kelsey 0:da5f5b56060a 67 /**
Shaun Kelsey 0:da5f5b56060a 68 * @brief Writes data to Maxim Sensor register.
Shaun Kelsey 0:da5f5b56060a 69 * @details Writes data to specific Maxim Sensor register via SPI bus.
Shaun Kelsey 0:da5f5b56060a 70 *
Shaun Kelsey 0:da5f5b56060a 71 * @param[in] reg Address of a register to be wrote.
Shaun Kelsey 0:da5f5b56060a 72 * @param[in] data Data to write on register.
Shaun Kelsey 0:da5f5b56060a 73 *
Shaun Kelsey 0:da5f5b56060a 74 * @returns 0 on success, negative error code on failure.
Shaun Kelsey 0:da5f5b56060a 75 */
Shaun Kelsey 0:da5f5b56060a 76 virtual int writeRegister(uint8_t reg, const uint8_t data);
Shaun Kelsey 0:da5f5b56060a 77
Shaun Kelsey 0:da5f5b56060a 78 /**
Shaun Kelsey 0:da5f5b56060a 79 * @brief Get Maxim Sensor part and revision info.
Shaun Kelsey 0:da5f5b56060a 80 * @details Reads Maxim Sensor part and revision info from device.
Shaun Kelsey 0:da5f5b56060a 81 *
Shaun Kelsey 0:da5f5b56060a 82 * @param[in] reg Beginning address of a register to be read.
Shaun Kelsey 0:da5f5b56060a 83 * @param[out] data Buffer space to save result value.
Shaun Kelsey 0:da5f5b56060a 84 * @param[in] len Number of consecutive bytes to be read.
Shaun Kelsey 0:da5f5b56060a 85 *
Shaun Kelsey 0:da5f5b56060a 86 * @returns 0 on success, negative error code on failure.
Shaun Kelsey 0:da5f5b56060a 87 */
Shaun Kelsey 0:da5f5b56060a 88 virtual int get_part_info(uint8_t *part_id, uint8_t *rev_id);
Shaun Kelsey 0:da5f5b56060a 89
Shaun Kelsey 0:da5f5b56060a 90 /**
Shaun Kelsey 0:da5f5b56060a 91 * @brief Enables Maxim Sensor.
Shaun Kelsey 0:da5f5b56060a 92 * @details Enable IRQ, enable LEDs, enable AGC
Shaun Kelsey 0:da5f5b56060a 93 *
Shaun Kelsey 0:da5f5b56060a 94 * @param[in] enable Any value to enable, 0 to disable.
Shaun Kelsey 0:da5f5b56060a 95 *
Shaun Kelsey 0:da5f5b56060a 96 * @returns 0 on success, negative error code on failure.
Shaun Kelsey 0:da5f5b56060a 97 */
Shaun Kelsey 0:da5f5b56060a 98 virtual int sensor_enable(int enable);
Shaun Kelsey 0:da5f5b56060a 99
Shaun Kelsey 0:da5f5b56060a 100 /**
Shaun Kelsey 0:da5f5b56060a 101 * @brief Enables AGC.
Shaun Kelsey 0:da5f5b56060a 102 * @details Enable Maxim Sensor automatic gain controller.
Shaun Kelsey 0:da5f5b56060a 103 * AGC automatically adjusts sampling rates and LED currents to save energy.
Shaun Kelsey 0:da5f5b56060a 104 *
Shaun Kelsey 0:da5f5b56060a 105 * @param[in] agc_enable Any value to enable, 0 to disable.
Shaun Kelsey 0:da5f5b56060a 106 *
Shaun Kelsey 0:da5f5b56060a 107 * @returns 0 on success, negative error code on failure.
Shaun Kelsey 0:da5f5b56060a 108 */
Shaun Kelsey 0:da5f5b56060a 109 virtual int agc_enable(int agc_enable);
Shaun Kelsey 0:da5f5b56060a 110
Shaun Kelsey 0:da5f5b56060a 111 /**
Shaun Kelsey 0:da5f5b56060a 112 * @brief Get sensor part name.
Shaun Kelsey 0:da5f5b56060a 113 *
Shaun Kelsey 0:da5f5b56060a 114 * @returns Sensor part name string.
Shaun Kelsey 0:da5f5b56060a 115 */
Shaun Kelsey 0:da5f5b56060a 116 virtual const char *get_sensor_part_name();
Shaun Kelsey 0:da5f5b56060a 117
Shaun Kelsey 0:da5f5b56060a 118 /**
keremsahin 8:0f55f59ca341 119 * @brief Get sensor algorithm version.
keremsahin 8:0f55f59ca341 120 *
keremsahin 8:0f55f59ca341 121 * @returns Sensor algorithm version string.
keremsahin 8:0f55f59ca341 122 */
keremsahin 8:0f55f59ca341 123 virtual const char *get_sensor_algo_ver();
keremsahin 8:0f55f59ca341 124
keremsahin 8:0f55f59ca341 125 /**
Shaun Kelsey 0:da5f5b56060a 126 * @brief Get sensor name.
Shaun Kelsey 0:da5f5b56060a 127 *
Shaun Kelsey 0:da5f5b56060a 128 * @returns Sensor name string.
Shaun Kelsey 0:da5f5b56060a 129 */
Shaun Kelsey 0:da5f5b56060a 130 virtual const char *get_sensor_name();
Shaun Kelsey 0:da5f5b56060a 131
Shaun Kelsey 0:da5f5b56060a 132 /**
Shaun Kelsey 0:da5f5b56060a 133 * @brief Dump Maxim Sensor registers.
Shaun Kelsey 0:da5f5b56060a 134 * @details Print all Maxim Sensor register addresses and containing values.
Shaun Kelsey 0:da5f5b56060a 135 *
Shaun Kelsey 0:da5f5b56060a 136 * @param[in] reg_values Pointer to array of 256 addr_val_pairs
Shaun Kelsey 0:da5f5b56060a 137 * @returns 0 on success, negative error code on failure.
Shaun Kelsey 0:da5f5b56060a 138 */
Shaun Kelsey 0:da5f5b56060a 139 virtual int dump_registers(addr_val_pair *reg_values)=0;
Shaun Kelsey 0:da5f5b56060a 140
Shaun Kelsey 0:da5f5b56060a 141 // *********************** Maxim Sensor ECG Max30001 related functions ***********************
Shaun Kelsey 0:da5f5b56060a 142 virtual int MS_Max30001_ECG_InitStart(uint8_t En_ecg, uint8_t Openp, uint8_t Openn,
Shaun Kelsey 0:da5f5b56060a 143 uint8_t Pol, uint8_t Calp_sel, uint8_t Caln_sel,
Shaun Kelsey 0:da5f5b56060a 144 uint8_t E_fit, uint8_t Rate, uint8_t Gain,
Shaun Kelsey 0:da5f5b56060a 145 uint8_t Dhpf, uint8_t Dlpf);
Shaun Kelsey 0:da5f5b56060a 146
Shaun Kelsey 0:da5f5b56060a 147 virtual int MS_Max30001_ECG_Stop();
Shaun Kelsey 0:da5f5b56060a 148
Shaun Kelsey 0:da5f5b56060a 149 // ECG Max30001 RtoR Initialization Function
Shaun Kelsey 0:da5f5b56060a 150 virtual int MS_Max30001_RtoR_InitStart(uint8_t En_rtor, uint8_t Wndw, uint8_t Gain,
Shaun Kelsey 0:da5f5b56060a 151 uint8_t Pavg, uint8_t Ptsf, uint8_t Hoff,
Shaun Kelsey 0:da5f5b56060a 152 uint8_t Ravg, uint8_t Rhsf, uint8_t Clr_rrint);
Shaun Kelsey 0:da5f5b56060a 153
Shaun Kelsey 0:da5f5b56060a 154 virtual int MS_Max30001_RtoR_Stop();
Shaun Kelsey 0:da5f5b56060a 155
Shaun Kelsey 0:da5f5b56060a 156 // Max30001 Interrupt Assignment Function
Shaun Kelsey 0:da5f5b56060a 157 virtual int MS_max30001_INT_assignment(uint8_t en_enint_loc, uint8_t en_eovf_loc, uint8_t en_fstint_loc,
Shaun Kelsey 0:da5f5b56060a 158 uint8_t en_dcloffint_loc, uint8_t en_bint_loc, uint8_t en_bovf_loc,
Shaun Kelsey 0:da5f5b56060a 159 uint8_t en_bover_loc, uint8_t en_bundr_loc, uint8_t en_bcgmon_loc,
Shaun Kelsey 0:da5f5b56060a 160 uint8_t en_pint_loc, uint8_t en_povf_loc, uint8_t en_pedge_loc,
Shaun Kelsey 0:da5f5b56060a 161 uint8_t en_lonint_loc, uint8_t en_rrint_loc, uint8_t en_samp_loc,
Shaun Kelsey 0:da5f5b56060a 162 uint8_t intb_Type, uint8_t int2b_Type);
Shaun Kelsey 0:da5f5b56060a 163
Shaun Kelsey 0:da5f5b56060a 164 virtual int MS_max30001readRegister(uint8_t addr, uint32_t *return_data);
Shaun Kelsey 0:da5f5b56060a 165
Shaun Kelsey 0:da5f5b56060a 166 virtual int MS_max30001writeRegister(uint8_t addr, uint32_t data);
Shaun Kelsey 0:da5f5b56060a 167
Shaun Kelsey 0:da5f5b56060a 168 virtual int MS_max30001sync();
Shaun Kelsey 0:da5f5b56060a 169
Shaun Kelsey 0:da5f5b56060a 170 // *********************** end of Maxim Sensor ECG Max30001 related functions ****************
Shaun Kelsey 0:da5f5b56060a 171
Shaun Kelsey 0:da5f5b56060a 172
Shaun Kelsey 0:da5f5b56060a 173
Shaun Kelsey 0:da5f5b56060a 174 // *********************** Max30205 related functions ***********************
Shaun Kelsey 0:da5f5b56060a 175
Shaun Kelsey 0:da5f5b56060a 176
Shaun Kelsey 0:da5f5b56060a 177 // *********************** end of Max30205 related functions ****************
Shaun Kelsey 0:da5f5b56060a 178
Shaun Kelsey 0:da5f5b56060a 179
Shaun Kelsey 0:da5f5b56060a 180 };
Shaun Kelsey 0:da5f5b56060a 181
Shaun Kelsey 0:da5f5b56060a 182 #endif /* _MAXIMSENSOR_H_ */