Host software for the MAXREFDES220 Heart Rate Monitor Smart Sensor. Hosted on the MAX32630FTHR.
Dependencies: max32630fthr USBDevice
Fork of MAXREFDES220_HEART_RATE_MONITOR by
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
Drivers/MaximSensor/MaximSensor.h@8:0f55f59ca341, 2018-07-02 (annotated)
- Committer:
- keremsahin
- Date:
- Mon Jul 02 21:07:27 2018 +0000
- Revision:
- 8:0f55f59ca341
- Parent:
- 0:da5f5b56060a
MAX30001/MAX30205/MAX8614X driver updates; EcgComm/TempComm/MAX30101Comm updates; Bootloader updates; EventStats/LEDStatus updates
Who changed what in which revision?
User | Revision | Line number | New 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_ */ |