Lucas Lim / Mbed 2 deprecated HSP_Temperature_Barometer_CS3237

Dependencies:   mbed

Committer:
lucaslwl
Date:
Mon Aug 26 08:11:41 2019 +0000
Revision:
22:5c07298d3383
add library folder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lucaslwl 22:5c07298d3383 1 ///*******************************************************************************
lucaslwl 22:5c07298d3383 2 // * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
lucaslwl 22:5c07298d3383 3 // *
lucaslwl 22:5c07298d3383 4 // * Permission is hereby granted, free of charge, to any person obtaining a
lucaslwl 22:5c07298d3383 5 // * copy of this software and associated documentation files (the "Software"),
lucaslwl 22:5c07298d3383 6 // * to deal in the Software without restriction, including without limitation
lucaslwl 22:5c07298d3383 7 // * the rights to use, copy, modify, merge, publish, distribute, sublicense,
lucaslwl 22:5c07298d3383 8 // * and/or sell copies of the Software, and to permit persons to whom the
lucaslwl 22:5c07298d3383 9 // * Software is furnished to do so, subject to the following conditions:
lucaslwl 22:5c07298d3383 10 // *
lucaslwl 22:5c07298d3383 11 // * The above copyright notice and this permission notice shall be included
lucaslwl 22:5c07298d3383 12 // * in all copies or substantial portions of the Software.
lucaslwl 22:5c07298d3383 13 // *
lucaslwl 22:5c07298d3383 14 // * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
lucaslwl 22:5c07298d3383 15 // * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
lucaslwl 22:5c07298d3383 16 // * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
lucaslwl 22:5c07298d3383 17 // * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
lucaslwl 22:5c07298d3383 18 // * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
lucaslwl 22:5c07298d3383 19 // * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
lucaslwl 22:5c07298d3383 20 // * OTHER DEALINGS IN THE SOFTWARE.
lucaslwl 22:5c07298d3383 21 // *
lucaslwl 22:5c07298d3383 22 // * Except as contained in this notice, the name of Maxim Integrated
lucaslwl 22:5c07298d3383 23 // * Products, Inc. shall not be used except as stated in the Maxim Integrated
lucaslwl 22:5c07298d3383 24 // * Products, Inc. Branding Policy.
lucaslwl 22:5c07298d3383 25 // *
lucaslwl 22:5c07298d3383 26 // * The mere transfer of this software does not imply any licenses
lucaslwl 22:5c07298d3383 27 // * of trade secrets, proprietary technology, copyrights, patents,
lucaslwl 22:5c07298d3383 28 // * trademarks, maskwork rights, or any other form of intellectual
lucaslwl 22:5c07298d3383 29 // * property whatsoever. Maxim Integrated Products, Inc. retains all
lucaslwl 22:5c07298d3383 30 // * ownership rights.
lucaslwl 22:5c07298d3383 31 // *******************************************************************************
lucaslwl 22:5c07298d3383 32 // */
lucaslwl 22:5c07298d3383 33 //
lucaslwl 22:5c07298d3383 34 //#include "mbed.h"
lucaslwl 22:5c07298d3383 35 //#include "MAX30001.h"
lucaslwl 22:5c07298d3383 36 //#include "pwrseq_regs.h"
lucaslwl 22:5c07298d3383 37 //
lucaslwl 22:5c07298d3383 38 //MAX30001 *MAX30001::instance = NULL;
lucaslwl 22:5c07298d3383 39 //
lucaslwl 22:5c07298d3383 40 ////******************************************************************************
lucaslwl 22:5c07298d3383 41 //MAX30001::MAX30001(PinName mosi, PinName miso, PinName sclk, PinName cs) {
lucaslwl 22:5c07298d3383 42 // spi = new SPI(mosi, miso, sclk, cs);
lucaslwl 22:5c07298d3383 43 // spi->frequency(3000000);
lucaslwl 22:5c07298d3383 44 // spi_owner = true;
lucaslwl 22:5c07298d3383 45 // functionpointer.attach(&spiHandler);
lucaslwl 22:5c07298d3383 46 // onDataAvailableCallback = NULL;
lucaslwl 22:5c07298d3383 47 // xferFlag = 0;
lucaslwl 22:5c07298d3383 48 // instance = this;
lucaslwl 22:5c07298d3383 49 //}
lucaslwl 22:5c07298d3383 50 //
lucaslwl 22:5c07298d3383 51 ////******************************************************************************
lucaslwl 22:5c07298d3383 52 //MAX30001::MAX30001(SPI *_spi) {
lucaslwl 22:5c07298d3383 53 // spi = _spi;
lucaslwl 22:5c07298d3383 54 // spi->frequency(3000000);
lucaslwl 22:5c07298d3383 55 // spi_owner = false;
lucaslwl 22:5c07298d3383 56 // functionpointer.attach(&spiHandler);
lucaslwl 22:5c07298d3383 57 // onDataAvailableCallback = NULL;
lucaslwl 22:5c07298d3383 58 // xferFlag = 0;
lucaslwl 22:5c07298d3383 59 // instance = this;
lucaslwl 22:5c07298d3383 60 //}
lucaslwl 22:5c07298d3383 61 //
lucaslwl 22:5c07298d3383 62 ////******************************************************************************
lucaslwl 22:5c07298d3383 63 //MAX30001::~MAX30001(void) {
lucaslwl 22:5c07298d3383 64 // if (spi_owner) {
lucaslwl 22:5c07298d3383 65 // delete spi;
lucaslwl 22:5c07298d3383 66 // }
lucaslwl 22:5c07298d3383 67 //}
lucaslwl 22:5c07298d3383 68 //
lucaslwl 22:5c07298d3383 69 ////******************************************************************************
lucaslwl 22:5c07298d3383 70 //void MAX30001::FCLK_MaximOnly(void){
lucaslwl 22:5c07298d3383 71 //
lucaslwl 22:5c07298d3383 72 // // Use RTC crystal clock for MAX30001 FCLK
lucaslwl 22:5c07298d3383 73 ///*
lucaslwl 22:5c07298d3383 74 // mxc_pwrseq_reg0_t pwr_reg0;
lucaslwl 22:5c07298d3383 75 // mxc_pwrseq_reg4_t pwr_reg4;
lucaslwl 22:5c07298d3383 76 //
lucaslwl 22:5c07298d3383 77 // // Set the port pin connected to the MAX30001 FCLK pin as an output
lucaslwl 22:5c07298d3383 78 // GPIO_SetOutMode(MAX30001_INT_PORT_FCLK, MAX30001_INT_PIN_FCLK, MXC_E_GPIO_OUT_MODE_NORMAL);
lucaslwl 22:5c07298d3383 79 //
lucaslwl 22:5c07298d3383 80 // // Enable Real Time Clock in Run and Sleep modes
lucaslwl 22:5c07298d3383 81 // pwr_reg0 = MXC_PWRSEQ->reg0_f;
lucaslwl 22:5c07298d3383 82 // pwr_reg0.pwr_rtcen_run = 1;
lucaslwl 22:5c07298d3383 83 // pwr_reg0.pwr_rtcen_slp = 1;
lucaslwl 22:5c07298d3383 84 // MXC_PWRSEQ->reg0_f = pwr_reg0;
lucaslwl 22:5c07298d3383 85 //
lucaslwl 22:5c07298d3383 86 // // Enable the RTC clock output path on P1.7
lucaslwl 22:5c07298d3383 87 // pwr_reg4 = MXC_PWRSEQ->reg4_f;
lucaslwl 22:5c07298d3383 88 // pwr_reg4.pwr_pseq_32k_en = 1;
lucaslwl 22:5c07298d3383 89 // MXC_PWRSEQ->reg4_f = pwr_reg4;
lucaslwl 22:5c07298d3383 90 //*/
lucaslwl 22:5c07298d3383 91 //
lucaslwl 22:5c07298d3383 92 // #define PORT_FCLK 1
lucaslwl 22:5c07298d3383 93 // #define PIN_FCLK 7
lucaslwl 22:5c07298d3383 94 //
lucaslwl 22:5c07298d3383 95 // // Set the Port pin connected to the MAX30001 FCLK pin as an output
lucaslwl 22:5c07298d3383 96 // uint32_t temp = MXC_GPIO->out_mode[PORT_FCLK]; // Port 1
lucaslwl 22:5c07298d3383 97 //
lucaslwl 22:5c07298d3383 98 // // temp = (temp & ~(0xF << (pin * 4))) | (val << (pin * 4));
lucaslwl 22:5c07298d3383 99 // /* pin 7 */ /* NORMAL MODE */
lucaslwl 22:5c07298d3383 100 // temp = (temp & ~(0xF << (PIN_FCLK * 4))) | (MXC_V_GPIO_OUT_MODE_NORMAL << (PIN_FCLK * 4));
lucaslwl 22:5c07298d3383 101 //
lucaslwl 22:5c07298d3383 102 //
lucaslwl 22:5c07298d3383 103 //// temp = (temp & ~(0xF << (7 * 4))) | (5 << (7 * 4));
lucaslwl 22:5c07298d3383 104 //
lucaslwl 22:5c07298d3383 105 // MXC_GPIO->out_mode[PORT_FCLK] = temp;
lucaslwl 22:5c07298d3383 106 //
lucaslwl 22:5c07298d3383 107 //
lucaslwl 22:5c07298d3383 108 // // Enable Real Time Clock in Run and Sleep Modes
lucaslwl 22:5c07298d3383 109 // MXC_PWRSEQ->reg0 = MXC_PWRSEQ->reg0 | MXC_F_PWRSEQ_REG0_PWR_RTCEN_RUN | MXC_F_PWRSEQ_REG0_PWR_RTCEN_SLP;
lucaslwl 22:5c07298d3383 110 //
lucaslwl 22:5c07298d3383 111 // // Enable the RTC clock output path on P1.7
lucaslwl 22:5c07298d3383 112 // MXC_PWRSEQ->reg4 = MXC_PWRSEQ->reg4 | MXC_F_PWRSEQ_REG4_PWR_PSEQ_32K_EN;
lucaslwl 22:5c07298d3383 113 //
lucaslwl 22:5c07298d3383 114 //}
lucaslwl 22:5c07298d3383 115 //
lucaslwl 22:5c07298d3383 116 //
lucaslwl 22:5c07298d3383 117 ////******************************************************************************
lucaslwl 22:5c07298d3383 118 //int MAX30001::Rbias_FMSTR_Init(uint8_t En_rbias, uint8_t Rbiasv,
lucaslwl 22:5c07298d3383 119 // uint8_t Rbiasp, uint8_t Rbiasn,
lucaslwl 22:5c07298d3383 120 // uint8_t Fmstr) {
lucaslwl 22:5c07298d3383 121 //
lucaslwl 22:5c07298d3383 122 // max30001_cnfg_gen_t cnfg_gen;
lucaslwl 22:5c07298d3383 123 //
lucaslwl 22:5c07298d3383 124 // if (reg_read(CNFG_GEN, &cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 125 // return -1;
lucaslwl 22:5c07298d3383 126 // }
lucaslwl 22:5c07298d3383 127 //
lucaslwl 22:5c07298d3383 128 // cnfg_gen.bit.en_rbias = En_rbias;
lucaslwl 22:5c07298d3383 129 // cnfg_gen.bit.rbiasv = Rbiasv;
lucaslwl 22:5c07298d3383 130 // cnfg_gen.bit.rbiasp = Rbiasp;
lucaslwl 22:5c07298d3383 131 // cnfg_gen.bit.rbiasn = Rbiasn;
lucaslwl 22:5c07298d3383 132 // cnfg_gen.bit.fmstr = Fmstr;
lucaslwl 22:5c07298d3383 133 //
lucaslwl 22:5c07298d3383 134 // if (reg_write(CNFG_GEN, cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 135 // return -1;
lucaslwl 22:5c07298d3383 136 // }
lucaslwl 22:5c07298d3383 137 // return 0;
lucaslwl 22:5c07298d3383 138 //}
lucaslwl 22:5c07298d3383 139 //
lucaslwl 22:5c07298d3383 140 ////******************************************************************************
lucaslwl 22:5c07298d3383 141 //int MAX30001::CAL_InitStart(uint8_t En_Vcal, uint8_t Vmode,
lucaslwl 22:5c07298d3383 142 // uint8_t Vmag, uint8_t Fcal, uint16_t Thigh,
lucaslwl 22:5c07298d3383 143 // uint8_t Fifty) {
lucaslwl 22:5c07298d3383 144 //
lucaslwl 22:5c07298d3383 145 // max30001_cnfg_cal_t cnfg_cal;
lucaslwl 22:5c07298d3383 146 //
lucaslwl 22:5c07298d3383 147 // ///< CNFG_CAL
lucaslwl 22:5c07298d3383 148 // if (reg_read(CNFG_CAL, &cnfg_cal.all) == -1) {
lucaslwl 22:5c07298d3383 149 // return -1;
lucaslwl 22:5c07298d3383 150 // }
lucaslwl 22:5c07298d3383 151 //
lucaslwl 22:5c07298d3383 152 // cnfg_cal.bit.vmode = Vmode;
lucaslwl 22:5c07298d3383 153 // cnfg_cal.bit.vmag = Vmag;
lucaslwl 22:5c07298d3383 154 // cnfg_cal.bit.fcal = Fcal;
lucaslwl 22:5c07298d3383 155 // cnfg_cal.bit.thigh = Thigh;
lucaslwl 22:5c07298d3383 156 // cnfg_cal.bit.fifty = Fifty;
lucaslwl 22:5c07298d3383 157 //
lucaslwl 22:5c07298d3383 158 // if (reg_write(CNFG_CAL, cnfg_cal.all) == -1) {
lucaslwl 22:5c07298d3383 159 // return -1;
lucaslwl 22:5c07298d3383 160 // }
lucaslwl 22:5c07298d3383 161 //
lucaslwl 22:5c07298d3383 162 // /// @brief RTOS uses a 32768HZ clock. 32768ticks represents 1secs. 1sec/10 =
lucaslwl 22:5c07298d3383 163 // /// 100msecs.
lucaslwl 22:5c07298d3383 164 // wait(1.0 / 10.0);
lucaslwl 22:5c07298d3383 165 //
lucaslwl 22:5c07298d3383 166 // if (reg_read(CNFG_CAL, &cnfg_cal.all) == -1) {
lucaslwl 22:5c07298d3383 167 // return -1;
lucaslwl 22:5c07298d3383 168 // }
lucaslwl 22:5c07298d3383 169 //
lucaslwl 22:5c07298d3383 170 // cnfg_cal.bit.en_vcal = En_Vcal;
lucaslwl 22:5c07298d3383 171 //
lucaslwl 22:5c07298d3383 172 // if (reg_write(CNFG_CAL, cnfg_cal.all) == -1) {
lucaslwl 22:5c07298d3383 173 // return -1;
lucaslwl 22:5c07298d3383 174 // }
lucaslwl 22:5c07298d3383 175 //
lucaslwl 22:5c07298d3383 176 // /// @brief RTOS uses a 32768HZ clock. 32768ticks represents 1secs. 1sec/10 =
lucaslwl 22:5c07298d3383 177 // /// 100msecs.
lucaslwl 22:5c07298d3383 178 // wait(1.0 / 10.0);
lucaslwl 22:5c07298d3383 179 //
lucaslwl 22:5c07298d3383 180 // return 0;
lucaslwl 22:5c07298d3383 181 //}
lucaslwl 22:5c07298d3383 182 //
lucaslwl 22:5c07298d3383 183 ////******************************************************************************
lucaslwl 22:5c07298d3383 184 //int MAX30001::CAL_Stop(void) {
lucaslwl 22:5c07298d3383 185 //
lucaslwl 22:5c07298d3383 186 // max30001_cnfg_cal_t cnfg_cal;
lucaslwl 22:5c07298d3383 187 //
lucaslwl 22:5c07298d3383 188 // if (reg_read(CNFG_CAL, &cnfg_cal.all) == -1) {
lucaslwl 22:5c07298d3383 189 // return -1;
lucaslwl 22:5c07298d3383 190 // }
lucaslwl 22:5c07298d3383 191 //
lucaslwl 22:5c07298d3383 192 // cnfg_cal.bit.en_vcal = 0; // Disable VCAL, all other settings are left unaffected
lucaslwl 22:5c07298d3383 193 //
lucaslwl 22:5c07298d3383 194 // if (reg_write(CNFG_CAL, cnfg_cal.all) == -1) {
lucaslwl 22:5c07298d3383 195 // return -1;
lucaslwl 22:5c07298d3383 196 // }
lucaslwl 22:5c07298d3383 197 //
lucaslwl 22:5c07298d3383 198 // return 0;
lucaslwl 22:5c07298d3383 199 //}
lucaslwl 22:5c07298d3383 200 ////******************************************************************************
lucaslwl 22:5c07298d3383 201 //int MAX30001::INT_assignment(max30001_intrpt_Location_t en_enint_loc, max30001_intrpt_Location_t en_eovf_loc, max30001_intrpt_Location_t en_fstint_loc,
lucaslwl 22:5c07298d3383 202 // max30001_intrpt_Location_t en_dcloffint_loc, max30001_intrpt_Location_t en_bint_loc, max30001_intrpt_Location_t en_bovf_loc,
lucaslwl 22:5c07298d3383 203 // max30001_intrpt_Location_t en_bover_loc, max30001_intrpt_Location_t en_bundr_loc, max30001_intrpt_Location_t en_bcgmon_loc,
lucaslwl 22:5c07298d3383 204 // max30001_intrpt_Location_t en_pint_loc, max30001_intrpt_Location_t en_povf_loc, max30001_intrpt_Location_t en_pedge_loc,
lucaslwl 22:5c07298d3383 205 // max30001_intrpt_Location_t en_lonint_loc, max30001_intrpt_Location_t en_rrint_loc, max30001_intrpt_Location_t en_samp_loc,
lucaslwl 22:5c07298d3383 206 // max30001_intrpt_type_t intb_Type, max30001_intrpt_type_t int2b_Type)
lucaslwl 22:5c07298d3383 207 //
lucaslwl 22:5c07298d3383 208 //
lucaslwl 22:5c07298d3383 209 //{
lucaslwl 22:5c07298d3383 210 //
lucaslwl 22:5c07298d3383 211 // max30001_en_int_t en_int;
lucaslwl 22:5c07298d3383 212 // max30001_en_int2_t en_int2;
lucaslwl 22:5c07298d3383 213 //
lucaslwl 22:5c07298d3383 214 // ///< INT1
lucaslwl 22:5c07298d3383 215 //
lucaslwl 22:5c07298d3383 216 // if (reg_read(EN_INT, &en_int.all) == -1) {
lucaslwl 22:5c07298d3383 217 // return -1;
lucaslwl 22:5c07298d3383 218 // }
lucaslwl 22:5c07298d3383 219 //
lucaslwl 22:5c07298d3383 220 // // max30001_en_int2.bit.en_pint = 0b1; // Keep this off...
lucaslwl 22:5c07298d3383 221 //
lucaslwl 22:5c07298d3383 222 // en_int.bit.en_eint = 0b1 & en_enint_loc;
lucaslwl 22:5c07298d3383 223 // en_int.bit.en_eovf = 0b1 & en_eovf_loc;
lucaslwl 22:5c07298d3383 224 // en_int.bit.en_fstint = 0b1 & en_fstint_loc;
lucaslwl 22:5c07298d3383 225 //
lucaslwl 22:5c07298d3383 226 // en_int.bit.en_dcloffint = 0b1 & en_dcloffint_loc;
lucaslwl 22:5c07298d3383 227 // en_int.bit.en_bint = 0b1 & en_bint_loc;
lucaslwl 22:5c07298d3383 228 // en_int.bit.en_bovf = 0b1 & en_bovf_loc;
lucaslwl 22:5c07298d3383 229 //
lucaslwl 22:5c07298d3383 230 // en_int.bit.en_bover = 0b1 & en_bover_loc;
lucaslwl 22:5c07298d3383 231 // en_int.bit.en_bundr = 0b1 & en_bundr_loc;
lucaslwl 22:5c07298d3383 232 // en_int.bit.en_bcgmon = 0b1 & en_bcgmon_loc;
lucaslwl 22:5c07298d3383 233 //
lucaslwl 22:5c07298d3383 234 // en_int.bit.en_pint = 0b1 & en_pint_loc;
lucaslwl 22:5c07298d3383 235 // en_int.bit.en_povf = 0b1 & en_povf_loc;
lucaslwl 22:5c07298d3383 236 // en_int.bit.en_pedge = 0b1 & en_pedge_loc;
lucaslwl 22:5c07298d3383 237 //
lucaslwl 22:5c07298d3383 238 // en_int.bit.en_lonint = 0b1 & en_lonint_loc;
lucaslwl 22:5c07298d3383 239 // en_int.bit.en_rrint = 0b1 & en_rrint_loc;
lucaslwl 22:5c07298d3383 240 // en_int.bit.en_samp = 0b1 & en_samp_loc;
lucaslwl 22:5c07298d3383 241 //
lucaslwl 22:5c07298d3383 242 // en_int.bit.intb_type = int2b_Type;
lucaslwl 22:5c07298d3383 243 //
lucaslwl 22:5c07298d3383 244 // if (reg_write(EN_INT, en_int.all) == -1) {
lucaslwl 22:5c07298d3383 245 // return -1;
lucaslwl 22:5c07298d3383 246 // }
lucaslwl 22:5c07298d3383 247 //
lucaslwl 22:5c07298d3383 248 // ///< INT2
lucaslwl 22:5c07298d3383 249 //
lucaslwl 22:5c07298d3383 250 // if (reg_read(EN_INT2, &en_int2.all) == -1) {
lucaslwl 22:5c07298d3383 251 // return -1;
lucaslwl 22:5c07298d3383 252 // }
lucaslwl 22:5c07298d3383 253 //
lucaslwl 22:5c07298d3383 254 // en_int2.bit.en_eint = 0b1 & (en_enint_loc >> 1);
lucaslwl 22:5c07298d3383 255 // en_int2.bit.en_eovf = 0b1 & (en_eovf_loc >> 1);
lucaslwl 22:5c07298d3383 256 // en_int2.bit.en_fstint = 0b1 & (en_fstint_loc >> 1);
lucaslwl 22:5c07298d3383 257 //
lucaslwl 22:5c07298d3383 258 // en_int2.bit.en_dcloffint = 0b1 & (en_dcloffint_loc >> 1);
lucaslwl 22:5c07298d3383 259 // en_int2.bit.en_bint = 0b1 & (en_bint_loc >> 1);
lucaslwl 22:5c07298d3383 260 // en_int2.bit.en_bovf = 0b1 & (en_bovf_loc >> 1);
lucaslwl 22:5c07298d3383 261 //
lucaslwl 22:5c07298d3383 262 // en_int2.bit.en_bover = 0b1 & (en_bover_loc >> 1);
lucaslwl 22:5c07298d3383 263 // en_int2.bit.en_bundr = 0b1 & (en_bundr_loc >> 1);
lucaslwl 22:5c07298d3383 264 // en_int2.bit.en_bcgmon = 0b1 & (en_bcgmon_loc >> 1);
lucaslwl 22:5c07298d3383 265 //
lucaslwl 22:5c07298d3383 266 // en_int2.bit.en_pint = 0b1 & (en_pint_loc >> 1);
lucaslwl 22:5c07298d3383 267 // en_int2.bit.en_povf = 0b1 & (en_povf_loc >> 1);
lucaslwl 22:5c07298d3383 268 // en_int2.bit.en_pedge = 0b1 & (en_pedge_loc >> 1);
lucaslwl 22:5c07298d3383 269 //
lucaslwl 22:5c07298d3383 270 // en_int2.bit.en_lonint = 0b1 & (en_lonint_loc >> 1);
lucaslwl 22:5c07298d3383 271 // en_int2.bit.en_rrint = 0b1 & (en_rrint_loc >> 1);
lucaslwl 22:5c07298d3383 272 // en_int2.bit.en_samp = 0b1 & (en_samp_loc >> 1);
lucaslwl 22:5c07298d3383 273 //
lucaslwl 22:5c07298d3383 274 // en_int2.bit.intb_type = intb_Type;
lucaslwl 22:5c07298d3383 275 //
lucaslwl 22:5c07298d3383 276 // if (reg_write(EN_INT2, en_int2.all) == -1) {
lucaslwl 22:5c07298d3383 277 // return -1;
lucaslwl 22:5c07298d3383 278 // }
lucaslwl 22:5c07298d3383 279 //
lucaslwl 22:5c07298d3383 280 // return 0;
lucaslwl 22:5c07298d3383 281 //}
lucaslwl 22:5c07298d3383 282 //
lucaslwl 22:5c07298d3383 283 ////******************************************************************************
lucaslwl 22:5c07298d3383 284 //int MAX30001::ECG_InitStart(uint8_t En_ecg, uint8_t Openp,
lucaslwl 22:5c07298d3383 285 // uint8_t Openn, uint8_t Pol,
lucaslwl 22:5c07298d3383 286 // uint8_t Calp_sel, uint8_t Caln_sel,
lucaslwl 22:5c07298d3383 287 // uint8_t E_fit, uint8_t Rate, uint8_t Gain,
lucaslwl 22:5c07298d3383 288 // uint8_t Dhpf, uint8_t Dlpf) {
lucaslwl 22:5c07298d3383 289 //
lucaslwl 22:5c07298d3383 290 // max30001_cnfg_emux_t cnfg_emux;
lucaslwl 22:5c07298d3383 291 // max30001_cnfg_gen_t cnfg_gen;
lucaslwl 22:5c07298d3383 292 // max30001_status_t status;
lucaslwl 22:5c07298d3383 293 // max30001_mngr_int_t mngr_int;
lucaslwl 22:5c07298d3383 294 // max30001_cnfg_ecg_t cnfg_ecg;
lucaslwl 22:5c07298d3383 295 //
lucaslwl 22:5c07298d3383 296 // ///< CNFG_EMUX
lucaslwl 22:5c07298d3383 297 //
lucaslwl 22:5c07298d3383 298 // if (reg_read(CNFG_EMUX, &cnfg_emux.all) == -1) {
lucaslwl 22:5c07298d3383 299 // return -1;
lucaslwl 22:5c07298d3383 300 // }
lucaslwl 22:5c07298d3383 301 //
lucaslwl 22:5c07298d3383 302 // cnfg_emux.bit.openp = Openp;
lucaslwl 22:5c07298d3383 303 // cnfg_emux.bit.openn = Openn;
lucaslwl 22:5c07298d3383 304 // cnfg_emux.bit.pol = Pol;
lucaslwl 22:5c07298d3383 305 // cnfg_emux.bit.calp_sel = Calp_sel;
lucaslwl 22:5c07298d3383 306 // cnfg_emux.bit.caln_sel = Caln_sel;
lucaslwl 22:5c07298d3383 307 //
lucaslwl 22:5c07298d3383 308 // if (reg_write(CNFG_EMUX, cnfg_emux.all) == -1) {
lucaslwl 22:5c07298d3383 309 // return -1;
lucaslwl 22:5c07298d3383 310 // }
lucaslwl 22:5c07298d3383 311 //
lucaslwl 22:5c07298d3383 312 // /**** ENABLE CHANNELS ****/
lucaslwl 22:5c07298d3383 313 // ///< CNFG_GEN
lucaslwl 22:5c07298d3383 314 //
lucaslwl 22:5c07298d3383 315 // if (reg_read(CNFG_GEN, &cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 316 // return -1;
lucaslwl 22:5c07298d3383 317 // }
lucaslwl 22:5c07298d3383 318 //
lucaslwl 22:5c07298d3383 319 // cnfg_gen.bit.en_ecg = En_ecg; // 0b1
lucaslwl 22:5c07298d3383 320 //
lucaslwl 22:5c07298d3383 321 // ///< fmstr is default
lucaslwl 22:5c07298d3383 322 //
lucaslwl 22:5c07298d3383 323 // if (reg_write(CNFG_GEN, cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 324 // return -1;
lucaslwl 22:5c07298d3383 325 // }
lucaslwl 22:5c07298d3383 326 //
lucaslwl 22:5c07298d3383 327 // ///< Wait for PLL Lock & References to settle down
lucaslwl 22:5c07298d3383 328 //
lucaslwl 22:5c07298d3383 329 // max30001_timeout = 0;
lucaslwl 22:5c07298d3383 330 //
lucaslwl 22:5c07298d3383 331 // do {
lucaslwl 22:5c07298d3383 332 // if (reg_read(STATUS, &status.all) == -1) {// Wait and spin for PLL to lock...
lucaslwl 22:5c07298d3383 333 //
lucaslwl 22:5c07298d3383 334 // return -1;
lucaslwl 22:5c07298d3383 335 // }
lucaslwl 22:5c07298d3383 336 // } while (status.bit.pllint == 1 && max30001_timeout++ <= 1000);
lucaslwl 22:5c07298d3383 337 //
lucaslwl 22:5c07298d3383 338 // ///< MNGR_INT
lucaslwl 22:5c07298d3383 339 //
lucaslwl 22:5c07298d3383 340 // if (reg_read(MNGR_INT, &mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 341 // return -1;
lucaslwl 22:5c07298d3383 342 // }
lucaslwl 22:5c07298d3383 343 //
lucaslwl 22:5c07298d3383 344 // mngr_int.bit.e_fit = E_fit; // 31
lucaslwl 22:5c07298d3383 345 //
lucaslwl 22:5c07298d3383 346 // if (reg_write(MNGR_INT, mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 347 // return -1;
lucaslwl 22:5c07298d3383 348 // }
lucaslwl 22:5c07298d3383 349 //
lucaslwl 22:5c07298d3383 350 // ///< CNFG_ECG
lucaslwl 22:5c07298d3383 351 //
lucaslwl 22:5c07298d3383 352 // if (reg_read(CNFG_ECG, &cnfg_ecg.all) == -1) {
lucaslwl 22:5c07298d3383 353 // return -1;
lucaslwl 22:5c07298d3383 354 // }
lucaslwl 22:5c07298d3383 355 //
lucaslwl 22:5c07298d3383 356 // cnfg_ecg.bit.rate = Rate;
lucaslwl 22:5c07298d3383 357 // cnfg_ecg.bit.gain = Gain;
lucaslwl 22:5c07298d3383 358 // cnfg_ecg.bit.dhpf = Dhpf;
lucaslwl 22:5c07298d3383 359 // cnfg_ecg.bit.dlpf = Dlpf;
lucaslwl 22:5c07298d3383 360 //
lucaslwl 22:5c07298d3383 361 // if (reg_write(CNFG_ECG, cnfg_ecg.all) == -1) {
lucaslwl 22:5c07298d3383 362 // return -1;
lucaslwl 22:5c07298d3383 363 // }
lucaslwl 22:5c07298d3383 364 //
lucaslwl 22:5c07298d3383 365 // return 0;
lucaslwl 22:5c07298d3383 366 //}
lucaslwl 22:5c07298d3383 367 //
lucaslwl 22:5c07298d3383 368 ////******************************************************************************
lucaslwl 22:5c07298d3383 369 //int MAX30001::ECGFast_Init(uint8_t Clr_Fast, uint8_t Fast, uint8_t Fast_Th) {
lucaslwl 22:5c07298d3383 370 //
lucaslwl 22:5c07298d3383 371 // max30001_mngr_int_t mngr_int;
lucaslwl 22:5c07298d3383 372 // max30001_mngr_dyn_t mngr_dyn;
lucaslwl 22:5c07298d3383 373 //
lucaslwl 22:5c07298d3383 374 // if (reg_read(MNGR_INT, &mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 375 // return -1;
lucaslwl 22:5c07298d3383 376 // }
lucaslwl 22:5c07298d3383 377 //
lucaslwl 22:5c07298d3383 378 // mngr_int.bit.clr_fast = Clr_Fast;
lucaslwl 22:5c07298d3383 379 //
lucaslwl 22:5c07298d3383 380 // if (reg_write(MNGR_INT, mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 381 // return -1;
lucaslwl 22:5c07298d3383 382 // }
lucaslwl 22:5c07298d3383 383 //
lucaslwl 22:5c07298d3383 384 // if (reg_read(MNGR_DYN, &mngr_dyn.all) == -1) {
lucaslwl 22:5c07298d3383 385 // return -1;
lucaslwl 22:5c07298d3383 386 // }
lucaslwl 22:5c07298d3383 387 //
lucaslwl 22:5c07298d3383 388 // mngr_dyn.bit.fast = Fast;
lucaslwl 22:5c07298d3383 389 // mngr_dyn.bit.fast_th = Fast_Th;
lucaslwl 22:5c07298d3383 390 //
lucaslwl 22:5c07298d3383 391 // if (reg_write(MNGR_INT, mngr_dyn.all) == -1) {
lucaslwl 22:5c07298d3383 392 // return -1;
lucaslwl 22:5c07298d3383 393 // }
lucaslwl 22:5c07298d3383 394 //
lucaslwl 22:5c07298d3383 395 // return 0;
lucaslwl 22:5c07298d3383 396 //}
lucaslwl 22:5c07298d3383 397 //
lucaslwl 22:5c07298d3383 398 ////******************************************************************************
lucaslwl 22:5c07298d3383 399 //int MAX30001::Stop_ECG(void) {
lucaslwl 22:5c07298d3383 400 //
lucaslwl 22:5c07298d3383 401 // max30001_cnfg_gen_t cnfg_gen;
lucaslwl 22:5c07298d3383 402 //
lucaslwl 22:5c07298d3383 403 // if (reg_read(CNFG_GEN, &cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 404 // return -1;
lucaslwl 22:5c07298d3383 405 // }
lucaslwl 22:5c07298d3383 406 //
lucaslwl 22:5c07298d3383 407 // cnfg_gen.bit.en_ecg = 0; ///< Stop ECG
lucaslwl 22:5c07298d3383 408 //
lucaslwl 22:5c07298d3383 409 // ///< fmstr is default
lucaslwl 22:5c07298d3383 410 //
lucaslwl 22:5c07298d3383 411 // if (reg_write(CNFG_GEN, cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 412 // return -1;
lucaslwl 22:5c07298d3383 413 // }
lucaslwl 22:5c07298d3383 414 //
lucaslwl 22:5c07298d3383 415 // return 0;
lucaslwl 22:5c07298d3383 416 //}
lucaslwl 22:5c07298d3383 417 //
lucaslwl 22:5c07298d3383 418 ////******************************************************************************
lucaslwl 22:5c07298d3383 419 //int MAX30001::PACE_InitStart(uint8_t En_pace, uint8_t Clr_pedge,
lucaslwl 22:5c07298d3383 420 // uint8_t Pol, uint8_t Gn_diff_off,
lucaslwl 22:5c07298d3383 421 // uint8_t Gain, uint8_t Aout_lbw,
lucaslwl 22:5c07298d3383 422 // uint8_t Aout, uint8_t Dacp,
lucaslwl 22:5c07298d3383 423 // uint8_t Dacn) {
lucaslwl 22:5c07298d3383 424 //
lucaslwl 22:5c07298d3383 425 // /**** SET MASTER FREQUENCY, ENABLE CHANNELS ****/
lucaslwl 22:5c07298d3383 426 //
lucaslwl 22:5c07298d3383 427 // max30001_cnfg_gen_t cnfg_gen;
lucaslwl 22:5c07298d3383 428 // max30001_status_t status;
lucaslwl 22:5c07298d3383 429 // max30001_mngr_int_t mngr_int;
lucaslwl 22:5c07298d3383 430 // max30001_cnfg_pace_t cnfg_pace;
lucaslwl 22:5c07298d3383 431 //
lucaslwl 22:5c07298d3383 432 // ///< CNFG_GEN
lucaslwl 22:5c07298d3383 433 //
lucaslwl 22:5c07298d3383 434 // if (reg_read(CNFG_GEN, &cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 435 // return -1;
lucaslwl 22:5c07298d3383 436 // }
lucaslwl 22:5c07298d3383 437 //
lucaslwl 22:5c07298d3383 438 // cnfg_gen.bit.en_pace = En_pace; // 0b1;
lucaslwl 22:5c07298d3383 439 //
lucaslwl 22:5c07298d3383 440 // if (reg_write(CNFG_GEN, cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 441 // return -1;
lucaslwl 22:5c07298d3383 442 // }
lucaslwl 22:5c07298d3383 443 //
lucaslwl 22:5c07298d3383 444 // /**** Wait for PLL Lock & References to settle down ****/
lucaslwl 22:5c07298d3383 445 // max30001_timeout = 0;
lucaslwl 22:5c07298d3383 446 //
lucaslwl 22:5c07298d3383 447 // do {
lucaslwl 22:5c07298d3383 448 // if (reg_read(STATUS, &status.all) ==
lucaslwl 22:5c07298d3383 449 // -1) // Wait and spin for PLL to lock...
lucaslwl 22:5c07298d3383 450 // {
lucaslwl 22:5c07298d3383 451 // return -1;
lucaslwl 22:5c07298d3383 452 // }
lucaslwl 22:5c07298d3383 453 //
lucaslwl 22:5c07298d3383 454 // } while (status.bit.pllint == 1 && max30001_timeout++ <= 1000);
lucaslwl 22:5c07298d3383 455 //
lucaslwl 22:5c07298d3383 456 // ///< MNGR_INT
lucaslwl 22:5c07298d3383 457 //
lucaslwl 22:5c07298d3383 458 // if (reg_read(MNGR_INT, &mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 459 // return -1;
lucaslwl 22:5c07298d3383 460 // }
lucaslwl 22:5c07298d3383 461 //
lucaslwl 22:5c07298d3383 462 // mngr_int.bit.clr_pedge = Clr_pedge; // 0b0;
lucaslwl 22:5c07298d3383 463 //
lucaslwl 22:5c07298d3383 464 // if (reg_write(MNGR_INT, mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 465 // return -1;
lucaslwl 22:5c07298d3383 466 // }
lucaslwl 22:5c07298d3383 467 //
lucaslwl 22:5c07298d3383 468 // ///< CNFG_PACE
lucaslwl 22:5c07298d3383 469 //
lucaslwl 22:5c07298d3383 470 // reg_read(CNFG_PACE, &cnfg_pace.all);
lucaslwl 22:5c07298d3383 471 //
lucaslwl 22:5c07298d3383 472 // cnfg_pace.bit.pol = Pol;
lucaslwl 22:5c07298d3383 473 // cnfg_pace.bit.gn_diff_off = Gn_diff_off;
lucaslwl 22:5c07298d3383 474 // cnfg_pace.bit.gain = Gain;
lucaslwl 22:5c07298d3383 475 // cnfg_pace.bit.aout_lbw = Aout_lbw;
lucaslwl 22:5c07298d3383 476 // cnfg_pace.bit.aout = Aout;
lucaslwl 22:5c07298d3383 477 // cnfg_pace.bit.dacp = Dacp;
lucaslwl 22:5c07298d3383 478 // cnfg_pace.bit.dacn = Dacn;
lucaslwl 22:5c07298d3383 479 //
lucaslwl 22:5c07298d3383 480 // reg_write(CNFG_PACE, cnfg_pace.all);
lucaslwl 22:5c07298d3383 481 //
lucaslwl 22:5c07298d3383 482 // return 0;
lucaslwl 22:5c07298d3383 483 //}
lucaslwl 22:5c07298d3383 484 //
lucaslwl 22:5c07298d3383 485 ////******************************************************************************
lucaslwl 22:5c07298d3383 486 //int MAX30001::Stop_PACE(void) {
lucaslwl 22:5c07298d3383 487 //
lucaslwl 22:5c07298d3383 488 // max30001_cnfg_gen_t cnfg_gen;
lucaslwl 22:5c07298d3383 489 //
lucaslwl 22:5c07298d3383 490 // if (reg_read(CNFG_GEN, &cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 491 // return -1;
lucaslwl 22:5c07298d3383 492 // }
lucaslwl 22:5c07298d3383 493 //
lucaslwl 22:5c07298d3383 494 // cnfg_gen.bit.en_pace = 0; ///< Stop PACE
lucaslwl 22:5c07298d3383 495 //
lucaslwl 22:5c07298d3383 496 // if (reg_write(CNFG_GEN, cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 497 // return -1;
lucaslwl 22:5c07298d3383 498 // }
lucaslwl 22:5c07298d3383 499 //
lucaslwl 22:5c07298d3383 500 // return 0;
lucaslwl 22:5c07298d3383 501 //}
lucaslwl 22:5c07298d3383 502 //
lucaslwl 22:5c07298d3383 503 ////******************************************************************************
lucaslwl 22:5c07298d3383 504 //int MAX30001::BIOZ_InitStart(
lucaslwl 22:5c07298d3383 505 // uint8_t En_bioz, uint8_t Openp, uint8_t Openn, uint8_t Calp_sel,
lucaslwl 22:5c07298d3383 506 // uint8_t Caln_sel, uint8_t CG_mode, uint8_t B_fit, uint8_t Rate,
lucaslwl 22:5c07298d3383 507 // uint8_t Ahpf, uint8_t Ext_rbias, uint8_t Gain, uint8_t Dhpf, uint8_t Dlpf,
lucaslwl 22:5c07298d3383 508 // uint8_t Fcgen, uint8_t Cgmon, uint8_t Cgmag, uint8_t Phoff) {
lucaslwl 22:5c07298d3383 509 //
lucaslwl 22:5c07298d3383 510 // max30001_cnfg_bmux_t cnfg_bmux;
lucaslwl 22:5c07298d3383 511 // max30001_cnfg_gen_t cnfg_gen;
lucaslwl 22:5c07298d3383 512 // max30001_status_t status;
lucaslwl 22:5c07298d3383 513 // max30001_mngr_int_t mngr_int;
lucaslwl 22:5c07298d3383 514 // max30001_cnfg_bioz_t cnfg_bioz;
lucaslwl 22:5c07298d3383 515 //
lucaslwl 22:5c07298d3383 516 //
lucaslwl 22:5c07298d3383 517 // // CNFG_BMUX
lucaslwl 22:5c07298d3383 518 //
lucaslwl 22:5c07298d3383 519 // if (reg_read(CNFG_BMUX, &cnfg_bmux.all) == -1) {
lucaslwl 22:5c07298d3383 520 // return -1;
lucaslwl 22:5c07298d3383 521 // }
lucaslwl 22:5c07298d3383 522 //
lucaslwl 22:5c07298d3383 523 // cnfg_bmux.bit.openp = Openp;
lucaslwl 22:5c07298d3383 524 // cnfg_bmux.bit.openn = Openn;
lucaslwl 22:5c07298d3383 525 // cnfg_bmux.bit.calp_sel = Calp_sel;
lucaslwl 22:5c07298d3383 526 // cnfg_bmux.bit.caln_sel = Caln_sel;
lucaslwl 22:5c07298d3383 527 // cnfg_bmux.bit.cg_mode = CG_mode;
lucaslwl 22:5c07298d3383 528 //
lucaslwl 22:5c07298d3383 529 // if (reg_write(CNFG_BMUX, cnfg_bmux.all) == -1) {
lucaslwl 22:5c07298d3383 530 // return -1;
lucaslwl 22:5c07298d3383 531 // }
lucaslwl 22:5c07298d3383 532 //
lucaslwl 22:5c07298d3383 533 // /**** SET MASTER FREQUENCY, ENABLE CHANNELS ****/
lucaslwl 22:5c07298d3383 534 //
lucaslwl 22:5c07298d3383 535 // ///< CNFG_GEN
lucaslwl 22:5c07298d3383 536 //
lucaslwl 22:5c07298d3383 537 // if (reg_read(CNFG_GEN, &cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 538 // return -1;
lucaslwl 22:5c07298d3383 539 // }
lucaslwl 22:5c07298d3383 540 //
lucaslwl 22:5c07298d3383 541 // cnfg_gen.bit.en_bioz = En_bioz;
lucaslwl 22:5c07298d3383 542 //
lucaslwl 22:5c07298d3383 543 // ///< fmstr is default
lucaslwl 22:5c07298d3383 544 //
lucaslwl 22:5c07298d3383 545 // if (reg_write(CNFG_GEN, cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 546 // return -1;
lucaslwl 22:5c07298d3383 547 // }
lucaslwl 22:5c07298d3383 548 //
lucaslwl 22:5c07298d3383 549 // /**** Wait for PLL Lock & References to settle down ****/
lucaslwl 22:5c07298d3383 550 //
lucaslwl 22:5c07298d3383 551 // max30001_timeout = 0;
lucaslwl 22:5c07298d3383 552 //
lucaslwl 22:5c07298d3383 553 // do {
lucaslwl 22:5c07298d3383 554 // if (reg_read(STATUS, &status.all) == -1) { // Wait and spin for PLL to lock...
lucaslwl 22:5c07298d3383 555 // return -1;
lucaslwl 22:5c07298d3383 556 // }
lucaslwl 22:5c07298d3383 557 //
lucaslwl 22:5c07298d3383 558 // } while (status.bit.pllint == 1 && max30001_timeout++ <= 1000);
lucaslwl 22:5c07298d3383 559 //
lucaslwl 22:5c07298d3383 560 // /**** Start of CNFG_BIOZ ****/
lucaslwl 22:5c07298d3383 561 //
lucaslwl 22:5c07298d3383 562 // ///< MNGR_INT
lucaslwl 22:5c07298d3383 563 //
lucaslwl 22:5c07298d3383 564 // if (reg_read(MNGR_INT, &mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 565 // return -1;
lucaslwl 22:5c07298d3383 566 // }
lucaslwl 22:5c07298d3383 567 //
lucaslwl 22:5c07298d3383 568 // mngr_int.bit.b_fit = B_fit; //;
lucaslwl 22:5c07298d3383 569 //
lucaslwl 22:5c07298d3383 570 // if (reg_write(MNGR_INT, mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 571 // return -1;
lucaslwl 22:5c07298d3383 572 // }
lucaslwl 22:5c07298d3383 573 //
lucaslwl 22:5c07298d3383 574 // ///< CNFG_BIOZ
lucaslwl 22:5c07298d3383 575 //
lucaslwl 22:5c07298d3383 576 // if (reg_read(CNFG_BIOZ, &cnfg_bioz.all) == -1) {
lucaslwl 22:5c07298d3383 577 // return -1;
lucaslwl 22:5c07298d3383 578 // }
lucaslwl 22:5c07298d3383 579 //
lucaslwl 22:5c07298d3383 580 // cnfg_bioz.bit.rate = Rate;
lucaslwl 22:5c07298d3383 581 // cnfg_bioz.bit.ahpf = Ahpf;
lucaslwl 22:5c07298d3383 582 // cnfg_bioz.bit.ext_rbias = Ext_rbias;
lucaslwl 22:5c07298d3383 583 // cnfg_bioz.bit.gain = Gain;
lucaslwl 22:5c07298d3383 584 // cnfg_bioz.bit.dhpf = Dhpf;
lucaslwl 22:5c07298d3383 585 // cnfg_bioz.bit.dlpf = Dlpf;
lucaslwl 22:5c07298d3383 586 // cnfg_bioz.bit.fcgen = Fcgen;
lucaslwl 22:5c07298d3383 587 // cnfg_bioz.bit.cgmon = Cgmon;
lucaslwl 22:5c07298d3383 588 // cnfg_bioz.bit.cgmag = Cgmag;
lucaslwl 22:5c07298d3383 589 // cnfg_bioz.bit.phoff = Phoff;
lucaslwl 22:5c07298d3383 590 //
lucaslwl 22:5c07298d3383 591 // if (reg_write(CNFG_BIOZ, cnfg_bioz.all) == -1) {
lucaslwl 22:5c07298d3383 592 // return -1;
lucaslwl 22:5c07298d3383 593 // }
lucaslwl 22:5c07298d3383 594 //
lucaslwl 22:5c07298d3383 595 // return 0;
lucaslwl 22:5c07298d3383 596 //}
lucaslwl 22:5c07298d3383 597 //
lucaslwl 22:5c07298d3383 598 ////******************************************************************************
lucaslwl 22:5c07298d3383 599 //int MAX30001::Stop_BIOZ(void) {
lucaslwl 22:5c07298d3383 600 //
lucaslwl 22:5c07298d3383 601 // max30001_cnfg_gen_t cnfg_gen;
lucaslwl 22:5c07298d3383 602 //
lucaslwl 22:5c07298d3383 603 // ///< CNFG_GEN
lucaslwl 22:5c07298d3383 604 //
lucaslwl 22:5c07298d3383 605 // if (reg_read(CNFG_GEN, &cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 606 // return -1;
lucaslwl 22:5c07298d3383 607 // }
lucaslwl 22:5c07298d3383 608 //
lucaslwl 22:5c07298d3383 609 // cnfg_gen.bit.en_bioz = 0; // Stop BIOZ
lucaslwl 22:5c07298d3383 610 //
lucaslwl 22:5c07298d3383 611 // if (reg_write(CNFG_GEN, cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 612 // return -1;
lucaslwl 22:5c07298d3383 613 // }
lucaslwl 22:5c07298d3383 614 //
lucaslwl 22:5c07298d3383 615 // return 0;
lucaslwl 22:5c07298d3383 616 //}
lucaslwl 22:5c07298d3383 617 //
lucaslwl 22:5c07298d3383 618 ////******************************************************************************
lucaslwl 22:5c07298d3383 619 //int MAX30001::BIOZ_InitBist(uint8_t En_bist, uint8_t Rnom,
lucaslwl 22:5c07298d3383 620 // uint8_t Rmod, uint8_t Fbist) {
lucaslwl 22:5c07298d3383 621 //
lucaslwl 22:5c07298d3383 622 // max30001_cnfg_bmux_t cnfg_bmux;
lucaslwl 22:5c07298d3383 623 //
lucaslwl 22:5c07298d3383 624 // ///< CNFG_BMUX
lucaslwl 22:5c07298d3383 625 //
lucaslwl 22:5c07298d3383 626 // if (reg_read(CNFG_BMUX, &cnfg_bmux.all) == -1) {
lucaslwl 22:5c07298d3383 627 // return -1;
lucaslwl 22:5c07298d3383 628 // }
lucaslwl 22:5c07298d3383 629 //
lucaslwl 22:5c07298d3383 630 // cnfg_bmux.bit.en_bist = En_bist;
lucaslwl 22:5c07298d3383 631 // cnfg_bmux.bit.rnom = Rnom;
lucaslwl 22:5c07298d3383 632 // cnfg_bmux.bit.rmod = Rmod;
lucaslwl 22:5c07298d3383 633 // cnfg_bmux.bit.fbist = Fbist;
lucaslwl 22:5c07298d3383 634 //
lucaslwl 22:5c07298d3383 635 // if (reg_write(CNFG_BMUX, cnfg_bmux.all) == -1) {
lucaslwl 22:5c07298d3383 636 // return -1;
lucaslwl 22:5c07298d3383 637 // }
lucaslwl 22:5c07298d3383 638 //
lucaslwl 22:5c07298d3383 639 // return 0;
lucaslwl 22:5c07298d3383 640 //}
lucaslwl 22:5c07298d3383 641 ////******************************************************************************
lucaslwl 22:5c07298d3383 642 //int MAX30001::RtoR_InitStart(uint8_t En_rtor, uint8_t Wndw,
lucaslwl 22:5c07298d3383 643 // uint8_t Gain, uint8_t Pavg, uint8_t Ptsf,
lucaslwl 22:5c07298d3383 644 // uint8_t Hoff, uint8_t Ravg, uint8_t Rhsf,
lucaslwl 22:5c07298d3383 645 // uint8_t Clr_rrint) {
lucaslwl 22:5c07298d3383 646 //
lucaslwl 22:5c07298d3383 647 // max30001_mngr_int_t mngr_int;
lucaslwl 22:5c07298d3383 648 // max30001_cnfg_rtor1_t cnfg_rtor1;
lucaslwl 22:5c07298d3383 649 // max30001_cnfg_rtor2_t cnfg_rtor2;
lucaslwl 22:5c07298d3383 650 //
lucaslwl 22:5c07298d3383 651 // ///< MNGR_INT
lucaslwl 22:5c07298d3383 652 // if (reg_read(MNGR_INT, &mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 653 // return -1;
lucaslwl 22:5c07298d3383 654 // }
lucaslwl 22:5c07298d3383 655 //
lucaslwl 22:5c07298d3383 656 // mngr_int.bit.clr_rrint = Clr_rrint;
lucaslwl 22:5c07298d3383 657 // ///< 0b01 & 0b00 are for interrupt mode...
lucaslwl 22:5c07298d3383 658 // ///< 0b10 is for monitoring mode... it just overwrites the data...
lucaslwl 22:5c07298d3383 659 //
lucaslwl 22:5c07298d3383 660 // if (reg_write(MNGR_INT, mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 661 // return -1;
lucaslwl 22:5c07298d3383 662 // }
lucaslwl 22:5c07298d3383 663 //
lucaslwl 22:5c07298d3383 664 // ///< RTOR1
lucaslwl 22:5c07298d3383 665 // if (reg_read(CNFG_RTOR1, &cnfg_rtor1.all) == -1) {
lucaslwl 22:5c07298d3383 666 // return -1;
lucaslwl 22:5c07298d3383 667 // }
lucaslwl 22:5c07298d3383 668 //
lucaslwl 22:5c07298d3383 669 // cnfg_rtor1.bit.wndw = Wndw;
lucaslwl 22:5c07298d3383 670 // cnfg_rtor1.bit.gain = Gain;
lucaslwl 22:5c07298d3383 671 // cnfg_rtor1.bit.en_rtor = En_rtor;
lucaslwl 22:5c07298d3383 672 // cnfg_rtor1.bit.pavg = Pavg;
lucaslwl 22:5c07298d3383 673 // cnfg_rtor1.bit.ptsf = Ptsf;
lucaslwl 22:5c07298d3383 674 //
lucaslwl 22:5c07298d3383 675 // if (reg_write(CNFG_RTOR1, cnfg_rtor1.all) == -1) {
lucaslwl 22:5c07298d3383 676 // return -1;
lucaslwl 22:5c07298d3383 677 // }
lucaslwl 22:5c07298d3383 678 //
lucaslwl 22:5c07298d3383 679 // ///< RTOR2
lucaslwl 22:5c07298d3383 680 // if (reg_read(CNFG_RTOR2, &cnfg_rtor2.all) == -1) {
lucaslwl 22:5c07298d3383 681 // return -1;
lucaslwl 22:5c07298d3383 682 // }
lucaslwl 22:5c07298d3383 683 // cnfg_rtor2.bit.hoff = Hoff;
lucaslwl 22:5c07298d3383 684 // cnfg_rtor2.bit.ravg = Ravg;
lucaslwl 22:5c07298d3383 685 // cnfg_rtor2.bit.rhsf = Rhsf;
lucaslwl 22:5c07298d3383 686 //
lucaslwl 22:5c07298d3383 687 // if (reg_write(CNFG_RTOR2, cnfg_rtor2.all) == -1) {
lucaslwl 22:5c07298d3383 688 // return -1;
lucaslwl 22:5c07298d3383 689 // }
lucaslwl 22:5c07298d3383 690 //
lucaslwl 22:5c07298d3383 691 // return 0;
lucaslwl 22:5c07298d3383 692 //}
lucaslwl 22:5c07298d3383 693 //
lucaslwl 22:5c07298d3383 694 ////******************************************************************************
lucaslwl 22:5c07298d3383 695 //int MAX30001::Stop_RtoR(void) {
lucaslwl 22:5c07298d3383 696 //
lucaslwl 22:5c07298d3383 697 // max30001_cnfg_rtor1_t cnfg_rtor1;
lucaslwl 22:5c07298d3383 698 //
lucaslwl 22:5c07298d3383 699 // if (reg_read(CNFG_RTOR1, &cnfg_rtor1.all) == -1) {
lucaslwl 22:5c07298d3383 700 // return -1;
lucaslwl 22:5c07298d3383 701 // }
lucaslwl 22:5c07298d3383 702 //
lucaslwl 22:5c07298d3383 703 // cnfg_rtor1.bit.en_rtor = 0; ///< Stop RtoR
lucaslwl 22:5c07298d3383 704 //
lucaslwl 22:5c07298d3383 705 // if (reg_write(CNFG_RTOR1, cnfg_rtor1.all) == -1) {
lucaslwl 22:5c07298d3383 706 // return -1;
lucaslwl 22:5c07298d3383 707 // }
lucaslwl 22:5c07298d3383 708 //
lucaslwl 22:5c07298d3383 709 // return 0;
lucaslwl 22:5c07298d3383 710 //}
lucaslwl 22:5c07298d3383 711 //
lucaslwl 22:5c07298d3383 712 ////******************************************************************************
lucaslwl 22:5c07298d3383 713 //int MAX30001::PLL_lock(void) {
lucaslwl 22:5c07298d3383 714 // ///< Spin to see PLLint become zero to indicate a lock.
lucaslwl 22:5c07298d3383 715 //
lucaslwl 22:5c07298d3383 716 // max30001_status_t status;
lucaslwl 22:5c07298d3383 717 //
lucaslwl 22:5c07298d3383 718 // max30001_timeout = 0;
lucaslwl 22:5c07298d3383 719 //
lucaslwl 22:5c07298d3383 720 // do {
lucaslwl 22:5c07298d3383 721 // if (reg_read(STATUS, &status.all) == -1) { ///< Wait and spin for PLL to lock...
lucaslwl 22:5c07298d3383 722 //
lucaslwl 22:5c07298d3383 723 // return -1;
lucaslwl 22:5c07298d3383 724 // }
lucaslwl 22:5c07298d3383 725 //
lucaslwl 22:5c07298d3383 726 // } while (status.bit.pllint == 1 && max30001_timeout++ <= 1000);
lucaslwl 22:5c07298d3383 727 //
lucaslwl 22:5c07298d3383 728 // return 0;
lucaslwl 22:5c07298d3383 729 //}
lucaslwl 22:5c07298d3383 730 //
lucaslwl 22:5c07298d3383 731 ////******************************************************************************
lucaslwl 22:5c07298d3383 732 //int MAX30001::sw_rst(void) {
lucaslwl 22:5c07298d3383 733 // ///< SW reset for the MAX30001 chip
lucaslwl 22:5c07298d3383 734 //
lucaslwl 22:5c07298d3383 735 // if (reg_write(SW_RST, 0x000000) == -1) {
lucaslwl 22:5c07298d3383 736 // return -1;
lucaslwl 22:5c07298d3383 737 // }
lucaslwl 22:5c07298d3383 738 //
lucaslwl 22:5c07298d3383 739 // return 0;
lucaslwl 22:5c07298d3383 740 //}
lucaslwl 22:5c07298d3383 741 //
lucaslwl 22:5c07298d3383 742 ////******************************************************************************
lucaslwl 22:5c07298d3383 743 //int MAX30001::synch(void) { ///< For synchronization
lucaslwl 22:5c07298d3383 744 // if (reg_write(SYNCH, 0x000000) == -1) {
lucaslwl 22:5c07298d3383 745 // return -1;
lucaslwl 22:5c07298d3383 746 // }
lucaslwl 22:5c07298d3383 747 // return 0;
lucaslwl 22:5c07298d3383 748 //}
lucaslwl 22:5c07298d3383 749 //
lucaslwl 22:5c07298d3383 750 ////******************************************************************************
lucaslwl 22:5c07298d3383 751 //int MAX30001::fifo_rst(void) { ///< Resets the FIFO
lucaslwl 22:5c07298d3383 752 // if (reg_write(FIFO_RST, 0x000000) == -1) {
lucaslwl 22:5c07298d3383 753 // return -1;
lucaslwl 22:5c07298d3383 754 // }
lucaslwl 22:5c07298d3383 755 // return 0;
lucaslwl 22:5c07298d3383 756 //}
lucaslwl 22:5c07298d3383 757 //
lucaslwl 22:5c07298d3383 758 ////******************************************************************************
lucaslwl 22:5c07298d3383 759 //int MAX30001::reg_write(MAX30001_REG_map_t addr, uint32_t data) {
lucaslwl 22:5c07298d3383 760 //
lucaslwl 22:5c07298d3383 761 // uint8_t result[4];
lucaslwl 22:5c07298d3383 762 // uint8_t data_array[4];
lucaslwl 22:5c07298d3383 763 // int32_t success = 0;
lucaslwl 22:5c07298d3383 764 //
lucaslwl 22:5c07298d3383 765 // data_array[0] = (addr << 1) & 0xff;
lucaslwl 22:5c07298d3383 766 //
lucaslwl 22:5c07298d3383 767 // data_array[3] = data & 0xff;
lucaslwl 22:5c07298d3383 768 // data_array[2] = (data >> 8) & 0xff;
lucaslwl 22:5c07298d3383 769 // data_array[1] = (data >> 16) & 0xff;
lucaslwl 22:5c07298d3383 770 //
lucaslwl 22:5c07298d3383 771 // success = SPI_Transmit(&data_array[0], 4, &result[0], 4);
lucaslwl 22:5c07298d3383 772 //
lucaslwl 22:5c07298d3383 773 // if (success != 0) {
lucaslwl 22:5c07298d3383 774 // return -1;
lucaslwl 22:5c07298d3383 775 // } else {
lucaslwl 22:5c07298d3383 776 // return 0;
lucaslwl 22:5c07298d3383 777 // }
lucaslwl 22:5c07298d3383 778 //}
lucaslwl 22:5c07298d3383 779 //
lucaslwl 22:5c07298d3383 780 ////******************************************************************************
lucaslwl 22:5c07298d3383 781 //int MAX30001::reg_read(MAX30001_REG_map_t addr,
lucaslwl 22:5c07298d3383 782 // uint32_t *return_data) {
lucaslwl 22:5c07298d3383 783 // uint8_t result[4];
lucaslwl 22:5c07298d3383 784 // uint8_t data_array[1];
lucaslwl 22:5c07298d3383 785 // int32_t success = 0;
lucaslwl 22:5c07298d3383 786 //
lucaslwl 22:5c07298d3383 787 // data_array[0] = ((addr << 1) & 0xff) | 1; // For Read, Or with 1
lucaslwl 22:5c07298d3383 788 // success = SPI_Transmit(&data_array[0], 1, &result[0], 4);
lucaslwl 22:5c07298d3383 789 // *return_data = /*result[0] + */ (uint32_t)(result[1] << 16) +
lucaslwl 22:5c07298d3383 790 // (result[2] << 8) + result[3];
lucaslwl 22:5c07298d3383 791 // if (success != 0) {
lucaslwl 22:5c07298d3383 792 // return -1;
lucaslwl 22:5c07298d3383 793 // } else {
lucaslwl 22:5c07298d3383 794 // return 0;
lucaslwl 22:5c07298d3383 795 // }
lucaslwl 22:5c07298d3383 796 //}
lucaslwl 22:5c07298d3383 797 //
lucaslwl 22:5c07298d3383 798 ////******************************************************************************
lucaslwl 22:5c07298d3383 799 //int MAX30001::Enable_DcLeadOFF_Init(int8_t En_dcloff, int8_t Ipol,
lucaslwl 22:5c07298d3383 800 // int8_t Imag, int8_t Vth) {
lucaslwl 22:5c07298d3383 801 // ///< the leads are not touching the body
lucaslwl 22:5c07298d3383 802 //
lucaslwl 22:5c07298d3383 803 // max30001_cnfg_gen_t cnfg_gen;
lucaslwl 22:5c07298d3383 804 //
lucaslwl 22:5c07298d3383 805 // ///< CNFG_EMUX, Set ECGP and ECGN for external hook up...
lucaslwl 22:5c07298d3383 806 //
lucaslwl 22:5c07298d3383 807 // if (reg_read(CNFG_GEN, &cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 808 // return -1;
lucaslwl 22:5c07298d3383 809 // }
lucaslwl 22:5c07298d3383 810 //
lucaslwl 22:5c07298d3383 811 // cnfg_gen.bit.en_dcloff = En_dcloff;
lucaslwl 22:5c07298d3383 812 // cnfg_gen.bit.ipol = Ipol;
lucaslwl 22:5c07298d3383 813 // cnfg_gen.bit.imag = Imag;
lucaslwl 22:5c07298d3383 814 // cnfg_gen.bit.vth = Vth;
lucaslwl 22:5c07298d3383 815 //
lucaslwl 22:5c07298d3383 816 // if (reg_write(CNFG_GEN, cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 817 // return -1;
lucaslwl 22:5c07298d3383 818 // }
lucaslwl 22:5c07298d3383 819 //
lucaslwl 22:5c07298d3383 820 // return 0;
lucaslwl 22:5c07298d3383 821 //}
lucaslwl 22:5c07298d3383 822 //
lucaslwl 22:5c07298d3383 823 ////******************************************************************************
lucaslwl 22:5c07298d3383 824 //int MAX30001::Disable_DcLeadOFF(void) {
lucaslwl 22:5c07298d3383 825 //
lucaslwl 22:5c07298d3383 826 // max30001_cnfg_gen_t cnfg_gen;
lucaslwl 22:5c07298d3383 827 //
lucaslwl 22:5c07298d3383 828 // ///< CNFG_GEN
lucaslwl 22:5c07298d3383 829 // if (reg_read(CNFG_GEN, &cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 830 // return -1;
lucaslwl 22:5c07298d3383 831 // }
lucaslwl 22:5c07298d3383 832 //
lucaslwl 22:5c07298d3383 833 // cnfg_gen.bit.en_dcloff = 0; // Turned off the dc lead off.
lucaslwl 22:5c07298d3383 834 //
lucaslwl 22:5c07298d3383 835 // if (reg_write(CNFG_GEN, cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 836 // return -1;
lucaslwl 22:5c07298d3383 837 // }
lucaslwl 22:5c07298d3383 838 //
lucaslwl 22:5c07298d3383 839 // return 0;
lucaslwl 22:5c07298d3383 840 //}
lucaslwl 22:5c07298d3383 841 //
lucaslwl 22:5c07298d3383 842 ////******************************************************************************
lucaslwl 22:5c07298d3383 843 //int MAX30001::BIOZ_Enable_ACLeadOFF_Init(uint8_t En_bloff, uint8_t Bloff_hi_it,
lucaslwl 22:5c07298d3383 844 // uint8_t Bloff_lo_it) {
lucaslwl 22:5c07298d3383 845 //
lucaslwl 22:5c07298d3383 846 // max30001_cnfg_gen_t cnfg_gen;
lucaslwl 22:5c07298d3383 847 // max30001_mngr_dyn_t mngr_dyn;
lucaslwl 22:5c07298d3383 848 //
lucaslwl 22:5c07298d3383 849 // ///< CNFG_GEN
lucaslwl 22:5c07298d3383 850 // if (reg_read(CNFG_GEN, &cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 851 // return -1;
lucaslwl 22:5c07298d3383 852 // }
lucaslwl 22:5c07298d3383 853 //
lucaslwl 22:5c07298d3383 854 // cnfg_gen.bit.en_bloff = En_bloff;
lucaslwl 22:5c07298d3383 855 //
lucaslwl 22:5c07298d3383 856 // if (reg_write(CNFG_GEN, cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 857 // return -1;
lucaslwl 22:5c07298d3383 858 // }
lucaslwl 22:5c07298d3383 859 //
lucaslwl 22:5c07298d3383 860 // ///< MNGR_DYN
lucaslwl 22:5c07298d3383 861 // if (reg_read(MNGR_DYN, &mngr_dyn.all) == -1) {
lucaslwl 22:5c07298d3383 862 // return -1;
lucaslwl 22:5c07298d3383 863 // }
lucaslwl 22:5c07298d3383 864 //
lucaslwl 22:5c07298d3383 865 // mngr_dyn.bit.bloff_hi_it = Bloff_hi_it;
lucaslwl 22:5c07298d3383 866 // mngr_dyn.bit.bloff_lo_it = Bloff_lo_it;
lucaslwl 22:5c07298d3383 867 //
lucaslwl 22:5c07298d3383 868 // if (reg_write(MNGR_DYN, mngr_dyn.all) == -1) {
lucaslwl 22:5c07298d3383 869 // return -1;
lucaslwl 22:5c07298d3383 870 // }
lucaslwl 22:5c07298d3383 871 //
lucaslwl 22:5c07298d3383 872 // return 0;
lucaslwl 22:5c07298d3383 873 //}
lucaslwl 22:5c07298d3383 874 //
lucaslwl 22:5c07298d3383 875 ////******************************************************************************
lucaslwl 22:5c07298d3383 876 //int MAX30001::BIOZ_Disable_ACleadOFF(void) {
lucaslwl 22:5c07298d3383 877 //
lucaslwl 22:5c07298d3383 878 // max30001_cnfg_gen_t cnfg_gen;
lucaslwl 22:5c07298d3383 879 //
lucaslwl 22:5c07298d3383 880 // ///< CNFG_GEN
lucaslwl 22:5c07298d3383 881 // if (reg_read(CNFG_GEN, &cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 882 // return -1;
lucaslwl 22:5c07298d3383 883 // }
lucaslwl 22:5c07298d3383 884 //
lucaslwl 22:5c07298d3383 885 // cnfg_gen.bit.en_bloff = 0b0; // Turns of the BIOZ AC Lead OFF feature
lucaslwl 22:5c07298d3383 886 //
lucaslwl 22:5c07298d3383 887 // if (reg_write(CNFG_GEN, cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 888 // return -1;
lucaslwl 22:5c07298d3383 889 // }
lucaslwl 22:5c07298d3383 890 //
lucaslwl 22:5c07298d3383 891 // return 0;
lucaslwl 22:5c07298d3383 892 //}
lucaslwl 22:5c07298d3383 893 //
lucaslwl 22:5c07298d3383 894 ////******************************************************************************
lucaslwl 22:5c07298d3383 895 //int MAX30001::BIOZ_Enable_BCGMON(void) {
lucaslwl 22:5c07298d3383 896 //
lucaslwl 22:5c07298d3383 897 // max30001_cnfg_bioz_t cnfg_bioz;
lucaslwl 22:5c07298d3383 898 //
lucaslwl 22:5c07298d3383 899 // ///< CNFG_BIOZ
lucaslwl 22:5c07298d3383 900 // if (reg_read(CNFG_BIOZ, &cnfg_bioz.all) == -1) {
lucaslwl 22:5c07298d3383 901 // return -1;
lucaslwl 22:5c07298d3383 902 // }
lucaslwl 22:5c07298d3383 903 //
lucaslwl 22:5c07298d3383 904 // cnfg_bioz.bit.cgmon = 1;
lucaslwl 22:5c07298d3383 905 //
lucaslwl 22:5c07298d3383 906 // if (reg_write(CNFG_BIOZ, cnfg_bioz.all) == -1) {
lucaslwl 22:5c07298d3383 907 // return -1;
lucaslwl 22:5c07298d3383 908 // }
lucaslwl 22:5c07298d3383 909 //
lucaslwl 22:5c07298d3383 910 // return 0;
lucaslwl 22:5c07298d3383 911 //}
lucaslwl 22:5c07298d3383 912 //
lucaslwl 22:5c07298d3383 913 //
lucaslwl 22:5c07298d3383 914 ////******************************************************************************
lucaslwl 22:5c07298d3383 915 //int MAX30001::Enable_LeadON(int8_t Channel) // Channel: ECG = 0b01, BIOZ = 0b10, Disable = 0b00
lucaslwl 22:5c07298d3383 916 //{
lucaslwl 22:5c07298d3383 917 //
lucaslwl 22:5c07298d3383 918 // max30001_cnfg_gen_t cnfg_gen;
lucaslwl 22:5c07298d3383 919 //
lucaslwl 22:5c07298d3383 920 // ///< CNFG_GEN
lucaslwl 22:5c07298d3383 921 // if (reg_read(CNFG_GEN, &cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 922 // return -1;
lucaslwl 22:5c07298d3383 923 // }
lucaslwl 22:5c07298d3383 924 //
lucaslwl 22:5c07298d3383 925 // cnfg_gen.bit.en_ecg = 0b0;
lucaslwl 22:5c07298d3383 926 // cnfg_gen.bit.en_bioz = 0b0;
lucaslwl 22:5c07298d3383 927 // cnfg_gen.bit.en_pace = 0b0;
lucaslwl 22:5c07298d3383 928 //
lucaslwl 22:5c07298d3383 929 // cnfg_gen.bit.en_ulp_lon = Channel; ///< BIOZ ULP lead on detection...
lucaslwl 22:5c07298d3383 930 //
lucaslwl 22:5c07298d3383 931 // if (reg_write(CNFG_GEN, cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 932 // return -1;
lucaslwl 22:5c07298d3383 933 // }
lucaslwl 22:5c07298d3383 934 //
lucaslwl 22:5c07298d3383 935 // return 0;
lucaslwl 22:5c07298d3383 936 //}
lucaslwl 22:5c07298d3383 937 //
lucaslwl 22:5c07298d3383 938 ////******************************************************************************
lucaslwl 22:5c07298d3383 939 //int MAX30001::Disable_LeadON(void) {
lucaslwl 22:5c07298d3383 940 //
lucaslwl 22:5c07298d3383 941 // max30001_cnfg_gen_t cnfg_gen;
lucaslwl 22:5c07298d3383 942 // ///< CNFG_GEN
lucaslwl 22:5c07298d3383 943 // if (reg_read(CNFG_GEN, &cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 944 // return -1;
lucaslwl 22:5c07298d3383 945 // }
lucaslwl 22:5c07298d3383 946 //
lucaslwl 22:5c07298d3383 947 // cnfg_gen.bit.en_ulp_lon = 0b0;
lucaslwl 22:5c07298d3383 948 //
lucaslwl 22:5c07298d3383 949 // if (reg_write(CNFG_GEN, cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 950 // return -1;
lucaslwl 22:5c07298d3383 951 // }
lucaslwl 22:5c07298d3383 952 //
lucaslwl 22:5c07298d3383 953 // return 0;
lucaslwl 22:5c07298d3383 954 //}
lucaslwl 22:5c07298d3383 955 //
lucaslwl 22:5c07298d3383 956 ////******************************************************************************
lucaslwl 22:5c07298d3383 957 //#define LEADOFF_SERVICE_TIME 0x2000 ///< 0x1000 = 1 second
lucaslwl 22:5c07298d3383 958 //#define LEADOFF_NUMSTATES 2
lucaslwl 22:5c07298d3383 959 //uint32_t leadoffState = 0;
lucaslwl 22:5c07298d3383 960 //uint32_t max30001_LeadOffoldTime = 0;
lucaslwl 22:5c07298d3383 961 //void MAX30001::ServiceLeadoff(uint32_t currentTime) {
lucaslwl 22:5c07298d3383 962 //
lucaslwl 22:5c07298d3383 963 // uint32_t delta_Time;
lucaslwl 22:5c07298d3383 964 //
lucaslwl 22:5c07298d3383 965 // delta_Time = currentTime - max30001_LeadOffoldTime;
lucaslwl 22:5c07298d3383 966 //
lucaslwl 22:5c07298d3383 967 // if (delta_Time > LEADOFF_SERVICE_TIME) {
lucaslwl 22:5c07298d3383 968 // switch (leadoffState) {
lucaslwl 22:5c07298d3383 969 // case 0: ///< switch to ECG DC Lead OFF
lucaslwl 22:5c07298d3383 970 // Enable_DcLeadOFF_Init(0b01, 0b0, 0b001, 0b00);
lucaslwl 22:5c07298d3383 971 // break;
lucaslwl 22:5c07298d3383 972 //
lucaslwl 22:5c07298d3383 973 // case 1: ///< switch to BIOZ DC Lead OFF
lucaslwl 22:5c07298d3383 974 // Enable_DcLeadOFF_Init(0b10, 0b0, 0b001, 0b00);
lucaslwl 22:5c07298d3383 975 // break;
lucaslwl 22:5c07298d3383 976 // }
lucaslwl 22:5c07298d3383 977 //
lucaslwl 22:5c07298d3383 978 // leadoffState++;
lucaslwl 22:5c07298d3383 979 // leadoffState %= LEADOFF_NUMSTATES;
lucaslwl 22:5c07298d3383 980 //
lucaslwl 22:5c07298d3383 981 // max30001_LeadOffoldTime = currentTime;
lucaslwl 22:5c07298d3383 982 // }
lucaslwl 22:5c07298d3383 983 //}
lucaslwl 22:5c07298d3383 984 ////******************************************************************************
lucaslwl 22:5c07298d3383 985 //#define LEADON_SERVICE_TIME 0x2000 // 0x1000 = 1 second
lucaslwl 22:5c07298d3383 986 //#define LEADON_NUMSTATES 2
lucaslwl 22:5c07298d3383 987 //uint32_t leadOnState = 0;
lucaslwl 22:5c07298d3383 988 //uint32_t max30001_LeadOnoldTime = 0;
lucaslwl 22:5c07298d3383 989 //void MAX30001::ServiceLeadON(uint32_t currentTime) {
lucaslwl 22:5c07298d3383 990 //
lucaslwl 22:5c07298d3383 991 // uint32_t delta_Time;
lucaslwl 22:5c07298d3383 992 //
lucaslwl 22:5c07298d3383 993 // delta_Time = currentTime - max30001_LeadOnoldTime;
lucaslwl 22:5c07298d3383 994 //
lucaslwl 22:5c07298d3383 995 // if (delta_Time > LEADON_SERVICE_TIME) {
lucaslwl 22:5c07298d3383 996 // switch (leadOnState) {
lucaslwl 22:5c07298d3383 997 // case 0: ///< switch to ECG DC Lead ON
lucaslwl 22:5c07298d3383 998 // Enable_LeadON(0b01);
lucaslwl 22:5c07298d3383 999 // break;
lucaslwl 22:5c07298d3383 1000 //
lucaslwl 22:5c07298d3383 1001 // case 1: ///< switch to BIOZ DC Lead ON
lucaslwl 22:5c07298d3383 1002 // Enable_LeadON(0b10);
lucaslwl 22:5c07298d3383 1003 // break;
lucaslwl 22:5c07298d3383 1004 // }
lucaslwl 22:5c07298d3383 1005 //
lucaslwl 22:5c07298d3383 1006 // leadOnState++;
lucaslwl 22:5c07298d3383 1007 // leadOnState %= LEADON_NUMSTATES;
lucaslwl 22:5c07298d3383 1008 //
lucaslwl 22:5c07298d3383 1009 // max30001_LeadOnoldTime = currentTime;
lucaslwl 22:5c07298d3383 1010 // }
lucaslwl 22:5c07298d3383 1011 //}
lucaslwl 22:5c07298d3383 1012 //
lucaslwl 22:5c07298d3383 1013 ////******************************************************************************
lucaslwl 22:5c07298d3383 1014 //int MAX30001::FIFO_LeadONOff_Read(void) {
lucaslwl 22:5c07298d3383 1015 //
lucaslwl 22:5c07298d3383 1016 // uint8_t result[32 * 3]; ///< 32words - 3bytes each
lucaslwl 22:5c07298d3383 1017 // uint8_t data_array[4];
lucaslwl 22:5c07298d3383 1018 // int32_t success = 0;
lucaslwl 22:5c07298d3383 1019 // int i, j;
lucaslwl 22:5c07298d3383 1020 //
lucaslwl 22:5c07298d3383 1021 // uint32_t total_databytes;
lucaslwl 22:5c07298d3383 1022 // uint8_t i_index;
lucaslwl 22:5c07298d3383 1023 // uint8_t data_chunk;
lucaslwl 22:5c07298d3383 1024 // uint8_t loop_logic;
lucaslwl 22:5c07298d3383 1025 //
lucaslwl 22:5c07298d3383 1026 // uint8_t etag, ptag, btag;
lucaslwl 22:5c07298d3383 1027 //
lucaslwl 22:5c07298d3383 1028 // uint8_t adr;
lucaslwl 22:5c07298d3383 1029 //
lucaslwl 22:5c07298d3383 1030 // int8_t ReadAllPaceOnce;
lucaslwl 22:5c07298d3383 1031 //
lucaslwl 22:5c07298d3383 1032 // static uint8_t dcloffint_OneShot = 0;
lucaslwl 22:5c07298d3383 1033 // static uint8_t acloffint_OneShot = 0;
lucaslwl 22:5c07298d3383 1034 // static uint8_t bcgmon_OneShot = 0;
lucaslwl 22:5c07298d3383 1035 // static uint8_t acleadon_OneShot = 0;
lucaslwl 22:5c07298d3383 1036 //
lucaslwl 22:5c07298d3383 1037 // max30001_mngr_int_t mngr_int;
lucaslwl 22:5c07298d3383 1038 // max30001_cnfg_gen_t cnfg_gen;
lucaslwl 22:5c07298d3383 1039 //
lucaslwl 22:5c07298d3383 1040 // int8_t ret_val;
lucaslwl 22:5c07298d3383 1041 //
lucaslwl 22:5c07298d3383 1042 // etag = 0;
lucaslwl 22:5c07298d3383 1043 // if (global_status.bit.eint == 1 || global_status.bit.pint == 1) {
lucaslwl 22:5c07298d3383 1044 // adr = ECG_FIFO_BURST;
lucaslwl 22:5c07298d3383 1045 // data_array[0] = ((adr << 1) & 0xff) | 1;
lucaslwl 22:5c07298d3383 1046 //
lucaslwl 22:5c07298d3383 1047 // ///< The SPI routine only sends out data of 32 bytes in size. Therefore the
lucaslwl 22:5c07298d3383 1048 // ///< data is being read in
lucaslwl 22:5c07298d3383 1049 // ///< smaller chunks in this routine...
lucaslwl 22:5c07298d3383 1050 //
lucaslwl 22:5c07298d3383 1051 // ///< READ mngr_int AND cnfg_gen;
lucaslwl 22:5c07298d3383 1052 //
lucaslwl 22:5c07298d3383 1053 // if (reg_read(MNGR_INT, &mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 1054 // return -1;
lucaslwl 22:5c07298d3383 1055 // }
lucaslwl 22:5c07298d3383 1056 //
lucaslwl 22:5c07298d3383 1057 // if (reg_read(CNFG_GEN, &cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1058 // return -1;
lucaslwl 22:5c07298d3383 1059 // }
lucaslwl 22:5c07298d3383 1060 //
lucaslwl 22:5c07298d3383 1061 // total_databytes = (mngr_int.bit.e_fit + 1) * 3;
lucaslwl 22:5c07298d3383 1062 //
lucaslwl 22:5c07298d3383 1063 // i_index = 0;
lucaslwl 22:5c07298d3383 1064 // loop_logic = 1;
lucaslwl 22:5c07298d3383 1065 //
lucaslwl 22:5c07298d3383 1066 // while (loop_logic) {
lucaslwl 22:5c07298d3383 1067 // if (total_databytes > 30) {
lucaslwl 22:5c07298d3383 1068 // data_chunk = 30;
lucaslwl 22:5c07298d3383 1069 // total_databytes = total_databytes - 30;
lucaslwl 22:5c07298d3383 1070 // } else {
lucaslwl 22:5c07298d3383 1071 // data_chunk = total_databytes;
lucaslwl 22:5c07298d3383 1072 // loop_logic = 0;
lucaslwl 22:5c07298d3383 1073 // }
lucaslwl 22:5c07298d3383 1074 //
lucaslwl 22:5c07298d3383 1075 // ///< The extra 1 byte is for the extra byte that comes out of the SPI
lucaslwl 22:5c07298d3383 1076 // success = SPI_Transmit(&data_array[0], 1, &result[i_index], (data_chunk + 1)); // Make a copy of the FIFO over here...
lucaslwl 22:5c07298d3383 1077 //
lucaslwl 22:5c07298d3383 1078 // if (success != 0) {
lucaslwl 22:5c07298d3383 1079 // return -1;
lucaslwl 22:5c07298d3383 1080 // }
lucaslwl 22:5c07298d3383 1081 //
lucaslwl 22:5c07298d3383 1082 // ///< This is important, because every transaction above creates an empty
lucaslwl 22:5c07298d3383 1083 // ///< redundant data at result[0]
lucaslwl 22:5c07298d3383 1084 // for (j = i_index; j < (data_chunk + i_index); j++) /* get rid of the 1 extra byte by moving the whole array up one */
lucaslwl 22:5c07298d3383 1085 // {
lucaslwl 22:5c07298d3383 1086 // result[j] = result[j + 1];
lucaslwl 22:5c07298d3383 1087 // }
lucaslwl 22:5c07298d3383 1088 //
lucaslwl 22:5c07298d3383 1089 // i_index = i_index + 30; /* point to the next array location to put the data in */
lucaslwl 22:5c07298d3383 1090 // }
lucaslwl 22:5c07298d3383 1091 //
lucaslwl 22:5c07298d3383 1092 // ReadAllPaceOnce = 0;
lucaslwl 22:5c07298d3383 1093 //
lucaslwl 22:5c07298d3383 1094 // ///< Put the content of the FIFO based on the EFIT value, We ignore the
lucaslwl 22:5c07298d3383 1095 // ///< result[0] and start concatenating indexes: 1,2,3 - 4,5,6 - 7,8,9 -
lucaslwl 22:5c07298d3383 1096 // for (i = 0, j = 0; i < mngr_int.bit.e_fit + 1; i++, j = j + 3) ///< index1=23-16 bit, index2=15-8 bit, index3=7-0 bit
lucaslwl 22:5c07298d3383 1097 // {
lucaslwl 22:5c07298d3383 1098 // max30001_ECG_FIFO_buffer[i] = ((uint32_t)result[j] << 16) + (result[j + 1] << 8) + result[j + 2];
lucaslwl 22:5c07298d3383 1099 //
lucaslwl 22:5c07298d3383 1100 // etag = (0b00111000 & result[j + 2]) >> 3;
lucaslwl 22:5c07298d3383 1101 // ptag = 0b00000111 & result[j + 2];
lucaslwl 22:5c07298d3383 1102 //
lucaslwl 22:5c07298d3383 1103 // if (ptag != 0b111 && ReadAllPaceOnce == 0) {
lucaslwl 22:5c07298d3383 1104 //
lucaslwl 22:5c07298d3383 1105 // ReadAllPaceOnce = 1; ///< This will prevent extra read of PACE, once group
lucaslwl 22:5c07298d3383 1106 // ///< 0-5 is read ONCE.
lucaslwl 22:5c07298d3383 1107 //
lucaslwl 22:5c07298d3383 1108 // adr = PACE0_FIFO_BURST;
lucaslwl 22:5c07298d3383 1109 //
lucaslwl 22:5c07298d3383 1110 // data_array[0] = ((adr << 1) & 0xff) | 1; ///< For Read Or with 1
lucaslwl 22:5c07298d3383 1111 //
lucaslwl 22:5c07298d3383 1112 // success = SPI_Transmit(&data_array[0], 1, &result[0], 10);
lucaslwl 22:5c07298d3383 1113 //
lucaslwl 22:5c07298d3383 1114 // max30001_PACE[0] = (uint32_t)(result[1] << 16) + (result[2] << 8) + result[3];
lucaslwl 22:5c07298d3383 1115 // max30001_PACE[1] = (uint32_t)(result[4] << 16) + (result[5] << 8) + result[6];
lucaslwl 22:5c07298d3383 1116 // max30001_PACE[2] = (uint32_t)(result[7] << 16) + (result[8] << 8) + result[9];
lucaslwl 22:5c07298d3383 1117 //
lucaslwl 22:5c07298d3383 1118 // adr = PACE1_FIFO_BURST;
lucaslwl 22:5c07298d3383 1119 //
lucaslwl 22:5c07298d3383 1120 // data_array[0] = ((adr << 1) & 0xff) | 1; ///< For Read Or with 1
lucaslwl 22:5c07298d3383 1121 //
lucaslwl 22:5c07298d3383 1122 // success = SPI_Transmit(&data_array[0], 1, &result[0], 10);
lucaslwl 22:5c07298d3383 1123 //
lucaslwl 22:5c07298d3383 1124 // max30001_PACE[3] = (uint32_t)(result[1] << 16) + (result[2] << 8) + result[3];
lucaslwl 22:5c07298d3383 1125 // max30001_PACE[4] = (uint32_t)(result[4] << 16) + (result[5] << 8) + result[6];
lucaslwl 22:5c07298d3383 1126 // max30001_PACE[5] = (uint32_t)(result[7] << 16) + (result[8] << 8) + result[9];
lucaslwl 22:5c07298d3383 1127 //
lucaslwl 22:5c07298d3383 1128 // adr = PACE2_FIFO_BURST;
lucaslwl 22:5c07298d3383 1129 //
lucaslwl 22:5c07298d3383 1130 // data_array[0] = ((adr << 1) & 0xff) | 1; ///< For Read Or with 1
lucaslwl 22:5c07298d3383 1131 //
lucaslwl 22:5c07298d3383 1132 // success = SPI_Transmit(&data_array[0], 1, &result[0], 10);
lucaslwl 22:5c07298d3383 1133 //
lucaslwl 22:5c07298d3383 1134 // max30001_PACE[6] = (uint32_t)(result[1] << 16) + (result[2] << 8) + result[3];
lucaslwl 22:5c07298d3383 1135 // max30001_PACE[7] = (uint32_t)(result[4] << 16) + (result[5] << 8) + result[6];
lucaslwl 22:5c07298d3383 1136 // max30001_PACE[8] = (uint32_t)(result[7] << 16) + (result[8] << 8) + result[9];
lucaslwl 22:5c07298d3383 1137 //
lucaslwl 22:5c07298d3383 1138 // adr = PACE3_FIFO_BURST;
lucaslwl 22:5c07298d3383 1139 //
lucaslwl 22:5c07298d3383 1140 // data_array[0] = ((adr << 1) & 0xff) | 1; ///< For Read Or with 1
lucaslwl 22:5c07298d3383 1141 //
lucaslwl 22:5c07298d3383 1142 // success = SPI_Transmit(&data_array[0], 1, &result[0], 10);
lucaslwl 22:5c07298d3383 1143 //
lucaslwl 22:5c07298d3383 1144 // max30001_PACE[9] = (uint32_t)(result[1] << 16) + (result[2] << 8) + result[3];
lucaslwl 22:5c07298d3383 1145 // max30001_PACE[10] = (uint32_t)(result[4] << 16) + (result[5] << 8) + result[6];
lucaslwl 22:5c07298d3383 1146 // max30001_PACE[11] = (uint32_t)(result[7] << 16) + (result[8] << 8) + result[9];
lucaslwl 22:5c07298d3383 1147 //
lucaslwl 22:5c07298d3383 1148 // adr = PACE4_FIFO_BURST;
lucaslwl 22:5c07298d3383 1149 //
lucaslwl 22:5c07298d3383 1150 // data_array[0] = ((adr << 1) & 0xff) | 1; ///< For Read Or with 1
lucaslwl 22:5c07298d3383 1151 //
lucaslwl 22:5c07298d3383 1152 // success = SPI_Transmit(&data_array[0], 1, &result[0], 10);
lucaslwl 22:5c07298d3383 1153 //
lucaslwl 22:5c07298d3383 1154 // max30001_PACE[12] = (uint32_t)(result[1] << 16) + (result[2] << 8) + result[3];
lucaslwl 22:5c07298d3383 1155 // max30001_PACE[13] = (uint32_t)(result[4] << 16) + (result[5] << 8) + result[6];
lucaslwl 22:5c07298d3383 1156 // max30001_PACE[14] = (uint32_t)(result[7] << 16) + (result[8] << 8) + result[9];
lucaslwl 22:5c07298d3383 1157 //
lucaslwl 22:5c07298d3383 1158 // adr = PACE5_FIFO_BURST;
lucaslwl 22:5c07298d3383 1159 //
lucaslwl 22:5c07298d3383 1160 // data_array[0] = ((adr << 1) & 0xff) | 1; ///< For Read Or with 1
lucaslwl 22:5c07298d3383 1161 //
lucaslwl 22:5c07298d3383 1162 // success = SPI_Transmit(&data_array[0], 1, &result[0], 10);
lucaslwl 22:5c07298d3383 1163 //
lucaslwl 22:5c07298d3383 1164 // max30001_PACE[15] = (uint32_t)(result[1] << 16) + (result[2] << 8) + result[3];
lucaslwl 22:5c07298d3383 1165 // max30001_PACE[16] = (uint32_t)(result[4] << 16) + (result[5] << 8) + result[6];
lucaslwl 22:5c07298d3383 1166 // max30001_PACE[17] = (uint32_t)(result[7] << 16) + (result[8] << 8) + result[9];
lucaslwl 22:5c07298d3383 1167 //
lucaslwl 22:5c07298d3383 1168 // dataAvailable(MAX30001_DATA_PACE, max30001_PACE, 18); ///< Send out the Pace data once only
lucaslwl 22:5c07298d3383 1169 // }
lucaslwl 22:5c07298d3383 1170 // }
lucaslwl 22:5c07298d3383 1171 //
lucaslwl 22:5c07298d3383 1172 // if (etag != 0b110) {
lucaslwl 22:5c07298d3383 1173 //
lucaslwl 22:5c07298d3383 1174 // dataAvailable(MAX30001_DATA_ECG, max30001_ECG_FIFO_buffer, (mngr_int.bit.e_fit + 1));
lucaslwl 22:5c07298d3383 1175 // }
lucaslwl 22:5c07298d3383 1176 //
lucaslwl 22:5c07298d3383 1177 // } /* End of ECG init */
lucaslwl 22:5c07298d3383 1178 //
lucaslwl 22:5c07298d3383 1179 // /* RtoR */
lucaslwl 22:5c07298d3383 1180 //
lucaslwl 22:5c07298d3383 1181 // if (global_status.bit.rrint == 1) {
lucaslwl 22:5c07298d3383 1182 // if (reg_read(RTOR, &max30001_RtoR_data) == -1) {
lucaslwl 22:5c07298d3383 1183 // return -1;
lucaslwl 22:5c07298d3383 1184 // }
lucaslwl 22:5c07298d3383 1185 //
lucaslwl 22:5c07298d3383 1186 // max30001_RtoR_data = (0x00FFFFFF & max30001_RtoR_data) >> 10;
lucaslwl 22:5c07298d3383 1187 //
lucaslwl 22:5c07298d3383 1188 // hspValMax30001.R2R = (uint16_t)max30001_RtoR_data;
lucaslwl 22:5c07298d3383 1189 // hspValMax30001.fmstr = (uint16_t)cnfg_gen.bit.fmstr;
lucaslwl 22:5c07298d3383 1190 //
lucaslwl 22:5c07298d3383 1191 // dataAvailable(MAX30001_DATA_RTOR, &max30001_RtoR_data, 1);
lucaslwl 22:5c07298d3383 1192 // }
lucaslwl 22:5c07298d3383 1193 //
lucaslwl 22:5c07298d3383 1194 // ///< Handling BIOZ data...
lucaslwl 22:5c07298d3383 1195 //
lucaslwl 22:5c07298d3383 1196 // if (global_status.bit.bint == 1) {
lucaslwl 22:5c07298d3383 1197 // adr = 0x22;
lucaslwl 22:5c07298d3383 1198 // data_array[0] = ((adr << 1) & 0xff) | 1;
lucaslwl 22:5c07298d3383 1199 //
lucaslwl 22:5c07298d3383 1200 // ///< [(BFIT+1)*3byte]+1extra byte due to the addr
lucaslwl 22:5c07298d3383 1201 //
lucaslwl 22:5c07298d3383 1202 // if (SPI_Transmit(&data_array[0], 1, &result[0],((mngr_int.bit.b_fit + 1) * 3) + 1) == -1) { ///< Make a copy of the FIFO over here...
lucaslwl 22:5c07298d3383 1203 // return -1;
lucaslwl 22:5c07298d3383 1204 // }
lucaslwl 22:5c07298d3383 1205 //
lucaslwl 22:5c07298d3383 1206 // btag = 0b00000111 & result[3];
lucaslwl 22:5c07298d3383 1207 //
lucaslwl 22:5c07298d3383 1208 // ///< Put the content of the FIFO based on the BFIT value, We ignore the
lucaslwl 22:5c07298d3383 1209 // ///< result[0] and start concatenating indexes: 1,2,3 - 4,5,6 - 7,8,9 -
lucaslwl 22:5c07298d3383 1210 // for (i = 0, j = 0; i < mngr_int.bit.b_fit + 1; i++, j = j + 3) ///< index1=23-16 bit, index2=15-8 bit, index3=7-0 bit
lucaslwl 22:5c07298d3383 1211 // {
lucaslwl 22:5c07298d3383 1212 // max30001_BIOZ_FIFO_buffer[i] = ((uint32_t)result[j + 1] << 16) + (result[j + 2] << 8) + result[j + 3];
lucaslwl 22:5c07298d3383 1213 // }
lucaslwl 22:5c07298d3383 1214 //
lucaslwl 22:5c07298d3383 1215 // if (btag != 0b110) {
lucaslwl 22:5c07298d3383 1216 // dataAvailable(MAX30001_DATA_BIOZ, max30001_BIOZ_FIFO_buffer, 8);
lucaslwl 22:5c07298d3383 1217 // }
lucaslwl 22:5c07298d3383 1218 // }
lucaslwl 22:5c07298d3383 1219 //
lucaslwl 22:5c07298d3383 1220 // ret_val = 0;
lucaslwl 22:5c07298d3383 1221 //
lucaslwl 22:5c07298d3383 1222 // if (global_status.bit.dcloffint == 1) { ///< ECG/BIOZ Lead Off
lucaslwl 22:5c07298d3383 1223 // dcloffint_OneShot = 1;
lucaslwl 22:5c07298d3383 1224 // max30001_DCLeadOff = 0;
lucaslwl 22:5c07298d3383 1225 // max30001_DCLeadOff = max30001_DCLeadOff | (cnfg_gen.bit.en_dcloff << 8) | (global_status.all & 0x00000F);
lucaslwl 22:5c07298d3383 1226 // dataAvailable(MAX30001_DATA_LEADOFF_DC, &max30001_DCLeadOff, 1);
lucaslwl 22:5c07298d3383 1227 // ///< Do a FIFO Reset
lucaslwl 22:5c07298d3383 1228 // reg_write(FIFO_RST, 0x000000);
lucaslwl 22:5c07298d3383 1229 //
lucaslwl 22:5c07298d3383 1230 // ret_val = 0b100;
lucaslwl 22:5c07298d3383 1231 //
lucaslwl 22:5c07298d3383 1232 // } else if (dcloffint_OneShot == 1 && global_status.bit.dcloffint == 0) { ///< Just send once when it comes out of dc lead off
lucaslwl 22:5c07298d3383 1233 // max30001_DCLeadOff = 0;
lucaslwl 22:5c07298d3383 1234 // max30001_DCLeadOff = max30001_DCLeadOff | (cnfg_gen.bit.en_dcloff << 8) | (global_status.all & 0x00000F);
lucaslwl 22:5c07298d3383 1235 // dataAvailable(MAX30001_DATA_LEADOFF_DC, &max30001_DCLeadOff, 1);
lucaslwl 22:5c07298d3383 1236 // dcloffint_OneShot = 0;
lucaslwl 22:5c07298d3383 1237 // }
lucaslwl 22:5c07298d3383 1238 //
lucaslwl 22:5c07298d3383 1239 // if (global_status.bit.bover == 1 || global_status.bit.bundr == 1) { ///< BIOZ AC Lead Off
lucaslwl 22:5c07298d3383 1240 // acloffint_OneShot = 1;
lucaslwl 22:5c07298d3383 1241 // max30001_ACLeadOff = 0;
lucaslwl 22:5c07298d3383 1242 // max30001_ACLeadOff =
lucaslwl 22:5c07298d3383 1243 // max30001_ACLeadOff | ((global_status.all & 0x030000) >> 16);
lucaslwl 22:5c07298d3383 1244 // dataAvailable(MAX30001_DATA_LEADOFF_AC, &max30001_ACLeadOff, 1);
lucaslwl 22:5c07298d3383 1245 // ///< Do a FIFO Reset
lucaslwl 22:5c07298d3383 1246 // reg_write(FIFO_RST, 0x000000);
lucaslwl 22:5c07298d3383 1247 //
lucaslwl 22:5c07298d3383 1248 // ret_val = 0b1000;
lucaslwl 22:5c07298d3383 1249 // } else if (acloffint_OneShot == 1 && global_status.bit.bover == 0 && global_status.bit.bundr == 0) { ///< Just send once when it comes out of ac lead off
lucaslwl 22:5c07298d3383 1250 // max30001_ACLeadOff = 0;
lucaslwl 22:5c07298d3383 1251 // max30001_ACLeadOff = max30001_ACLeadOff | ((global_status.all & 0x030000) >> 16);
lucaslwl 22:5c07298d3383 1252 // dataAvailable(MAX30001_DATA_LEADOFF_AC, &max30001_ACLeadOff, 1);
lucaslwl 22:5c07298d3383 1253 // acloffint_OneShot = 0;
lucaslwl 22:5c07298d3383 1254 // }
lucaslwl 22:5c07298d3383 1255 //
lucaslwl 22:5c07298d3383 1256 // if (global_status.bit.bcgmon == 1) {///< BIOZ BCGMON check
lucaslwl 22:5c07298d3383 1257 // bcgmon_OneShot = 1;
lucaslwl 22:5c07298d3383 1258 // max30001_bcgmon = 0;
lucaslwl 22:5c07298d3383 1259 // max30001_bcgmon = max30001_bcgmon | ((global_status.all & 0x000030) >> 4);
lucaslwl 22:5c07298d3383 1260 // dataAvailable(MAX30001_DATA_BCGMON, &max30001_bcgmon, 1);
lucaslwl 22:5c07298d3383 1261 // // Do a FIFO Reset
lucaslwl 22:5c07298d3383 1262 // reg_write(FIFO_RST, 0x000000);
lucaslwl 22:5c07298d3383 1263 //
lucaslwl 22:5c07298d3383 1264 // ret_val = 0b10000;
lucaslwl 22:5c07298d3383 1265 // } else if (bcgmon_OneShot == 1 && global_status.bit.bcgmon == 0) {
lucaslwl 22:5c07298d3383 1266 // max30001_bcgmon = 0;
lucaslwl 22:5c07298d3383 1267 // max30001_bcgmon = max30001_bcgmon | ((global_status.all & 0x000030) >> 4);
lucaslwl 22:5c07298d3383 1268 // bcgmon_OneShot = 0;
lucaslwl 22:5c07298d3383 1269 // dataAvailable(MAX30001_DATA_BCGMON, &max30001_bcgmon, 1);
lucaslwl 22:5c07298d3383 1270 // }
lucaslwl 22:5c07298d3383 1271 //
lucaslwl 22:5c07298d3383 1272 // if (global_status.bit.lonint == 1 && acleadon_OneShot == 0) {///< AC LeadON Check, when lead is on
lucaslwl 22:5c07298d3383 1273 // max30001_LeadOn = 0;
lucaslwl 22:5c07298d3383 1274 // reg_read(STATUS, &global_status.all);
lucaslwl 22:5c07298d3383 1275 // max30001_LeadOn =
lucaslwl 22:5c07298d3383 1276 // max30001_LeadOn | (cnfg_gen.bit.en_ulp_lon << 8) |
lucaslwl 22:5c07298d3383 1277 // ((global_status.all & 0x000800) >>
lucaslwl 22:5c07298d3383 1278 // 11); ///< 0b01 will mean ECG Lead On, 0b10 will mean BIOZ Lead On
lucaslwl 22:5c07298d3383 1279 //
lucaslwl 22:5c07298d3383 1280 // // LEAD ON has been detected... Now take actions
lucaslwl 22:5c07298d3383 1281 // acleadon_OneShot = 1;
lucaslwl 22:5c07298d3383 1282 // dataAvailable(MAX30001_DATA_ACLEADON, &max30001_LeadOn, 1); ///< One shot data will be sent...
lucaslwl 22:5c07298d3383 1283 // } else if (global_status.bit.lonint == 0 && acleadon_OneShot == 1) {
lucaslwl 22:5c07298d3383 1284 // max30001_LeadOn = 0;
lucaslwl 22:5c07298d3383 1285 // reg_read(STATUS, &global_status.all);
lucaslwl 22:5c07298d3383 1286 // max30001_LeadOn =
lucaslwl 22:5c07298d3383 1287 // max30001_LeadOn | (cnfg_gen.bit.en_ulp_lon << 8) | ((global_status.all & 0x000800) >> 11); ///< 0b01 will mean ECG Lead On, 0b10 will mean BIOZ Lead On
lucaslwl 22:5c07298d3383 1288 // dataAvailable(MAX30001_DATA_ACLEADON, &max30001_LeadOn, 1); ///< One shot data will be sent...
lucaslwl 22:5c07298d3383 1289 // acleadon_OneShot = 0;
lucaslwl 22:5c07298d3383 1290 // }
lucaslwl 22:5c07298d3383 1291 //
lucaslwl 22:5c07298d3383 1292 // return ret_val;
lucaslwl 22:5c07298d3383 1293 //}
lucaslwl 22:5c07298d3383 1294 //
lucaslwl 22:5c07298d3383 1295 ////******************************************************************************
lucaslwl 22:5c07298d3383 1296 //int MAX30001::int_handler(void) {
lucaslwl 22:5c07298d3383 1297 //
lucaslwl 22:5c07298d3383 1298 // static uint32_t InitReset = 0;
lucaslwl 22:5c07298d3383 1299 //
lucaslwl 22:5c07298d3383 1300 // int8_t return_value;
lucaslwl 22:5c07298d3383 1301 //
lucaslwl 22:5c07298d3383 1302 // reg_read(STATUS, &global_status.all);
lucaslwl 22:5c07298d3383 1303 //
lucaslwl 22:5c07298d3383 1304 // ///< Inital Reset and any FIFO over flow invokes a FIFO reset
lucaslwl 22:5c07298d3383 1305 // if (InitReset == 0 || global_status.bit.eovf == 1 || global_status.bit.bovf == 1 || global_status.bit.povf == 1) {
lucaslwl 22:5c07298d3383 1306 // ///< Do a FIFO Reset
lucaslwl 22:5c07298d3383 1307 // reg_write(FIFO_RST, 0x000000);
lucaslwl 22:5c07298d3383 1308 //
lucaslwl 22:5c07298d3383 1309 // InitReset++;
lucaslwl 22:5c07298d3383 1310 // return 2;
lucaslwl 22:5c07298d3383 1311 // }
lucaslwl 22:5c07298d3383 1312 //
lucaslwl 22:5c07298d3383 1313 // return_value = 0;
lucaslwl 22:5c07298d3383 1314 //
lucaslwl 22:5c07298d3383 1315 // ///< The four data handling goes on over here
lucaslwl 22:5c07298d3383 1316 // if (global_status.bit.eint == 1 || global_status.bit.pint == 1 || global_status.bit.bint == 1 || global_status.bit.rrint == 1) {
lucaslwl 22:5c07298d3383 1317 // return_value = return_value | FIFO_LeadONOff_Read();
lucaslwl 22:5c07298d3383 1318 // }
lucaslwl 22:5c07298d3383 1319 //
lucaslwl 22:5c07298d3383 1320 // ///< ECG/BIOZ DC Lead Off test
lucaslwl 22:5c07298d3383 1321 // if (global_status.bit.dcloffint == 1) {
lucaslwl 22:5c07298d3383 1322 // return_value = return_value | FIFO_LeadONOff_Read();
lucaslwl 22:5c07298d3383 1323 // }
lucaslwl 22:5c07298d3383 1324 //
lucaslwl 22:5c07298d3383 1325 // ///< BIOZ AC Lead Off test
lucaslwl 22:5c07298d3383 1326 // if (global_status.bit.bover == 1 || global_status.bit.bundr == 1) {
lucaslwl 22:5c07298d3383 1327 // return_value = return_value | FIFO_LeadONOff_Read();
lucaslwl 22:5c07298d3383 1328 // }
lucaslwl 22:5c07298d3383 1329 //
lucaslwl 22:5c07298d3383 1330 // ///< BIOZ DRVP/N test using BCGMON.
lucaslwl 22:5c07298d3383 1331 // if (global_status.bit.bcgmon == 1) {
lucaslwl 22:5c07298d3383 1332 // return_value = return_value | FIFO_LeadONOff_Read();
lucaslwl 22:5c07298d3383 1333 // }
lucaslwl 22:5c07298d3383 1334 //
lucaslwl 22:5c07298d3383 1335 // if (global_status.bit.lonint == 1) ///< ECG Lead ON test: i.e. the leads are touching the body...
lucaslwl 22:5c07298d3383 1336 // {
lucaslwl 22:5c07298d3383 1337 //
lucaslwl 22:5c07298d3383 1338 // FIFO_LeadONOff_Read();
lucaslwl 22:5c07298d3383 1339 // }
lucaslwl 22:5c07298d3383 1340 //
lucaslwl 22:5c07298d3383 1341 // return return_value;
lucaslwl 22:5c07298d3383 1342 //}
lucaslwl 22:5c07298d3383 1343 //
lucaslwl 22:5c07298d3383 1344 //
lucaslwl 22:5c07298d3383 1345 //event_callback_t MAX30001::functionpointer;
lucaslwl 22:5c07298d3383 1346 //
lucaslwl 22:5c07298d3383 1347 //
lucaslwl 22:5c07298d3383 1348 //volatile int MAX30001::xferFlag = 0;
lucaslwl 22:5c07298d3383 1349 //
lucaslwl 22:5c07298d3383 1350 //
lucaslwl 22:5c07298d3383 1351 ////******************************************************************************
lucaslwl 22:5c07298d3383 1352 //int MAX30001::SPI_Transmit(const uint8_t *tx_buf, uint32_t tx_size, uint8_t *rx_buf, uint32_t rx_size) {
lucaslwl 22:5c07298d3383 1353 // xferFlag = 0;
lucaslwl 22:5c07298d3383 1354 // unsigned int i;
lucaslwl 22:5c07298d3383 1355 // for (i = 0; i < sizeof(buffer); i++) {
lucaslwl 22:5c07298d3383 1356 // if (i < tx_size) {
lucaslwl 22:5c07298d3383 1357 // buffer[i] = tx_buf[i];
lucaslwl 22:5c07298d3383 1358 // }
lucaslwl 22:5c07298d3383 1359 // else {
lucaslwl 22:5c07298d3383 1360 // buffer[i] = 0xFF;
lucaslwl 22:5c07298d3383 1361 // }
lucaslwl 22:5c07298d3383 1362 // }
lucaslwl 22:5c07298d3383 1363 // spi->transfer<uint8_t>(buffer, (int)rx_size, rx_buf, (int)rx_size, spiHandler);
lucaslwl 22:5c07298d3383 1364 // while (xferFlag == 0);
lucaslwl 22:5c07298d3383 1365 // return 0;
lucaslwl 22:5c07298d3383 1366 //}
lucaslwl 22:5c07298d3383 1367 //
lucaslwl 22:5c07298d3383 1368 ////******************************************************************************
lucaslwl 22:5c07298d3383 1369 //void MAX30001::ReadHeartrateData(max30001_bledata_t *_hspValMax30001) {
lucaslwl 22:5c07298d3383 1370 // _hspValMax30001->R2R = hspValMax30001.R2R;
lucaslwl 22:5c07298d3383 1371 // _hspValMax30001->fmstr = hspValMax30001.fmstr;
lucaslwl 22:5c07298d3383 1372 //}
lucaslwl 22:5c07298d3383 1373 //
lucaslwl 22:5c07298d3383 1374 ////******************************************************************************
lucaslwl 22:5c07298d3383 1375 //void MAX30001::onDataAvailable(PtrFunction _onDataAvailable) {
lucaslwl 22:5c07298d3383 1376 // onDataAvailableCallback = _onDataAvailable;
lucaslwl 22:5c07298d3383 1377 //}
lucaslwl 22:5c07298d3383 1378 //
lucaslwl 22:5c07298d3383 1379 ////******************************************************************************
lucaslwl 22:5c07298d3383 1380 //void MAX30001::dataAvailable(uint32_t id, uint32_t *buffer, uint32_t length) {
lucaslwl 22:5c07298d3383 1381 // if (onDataAvailableCallback != NULL) {
lucaslwl 22:5c07298d3383 1382 // (*onDataAvailableCallback)(id, buffer, length);
lucaslwl 22:5c07298d3383 1383 // }
lucaslwl 22:5c07298d3383 1384 //}
lucaslwl 22:5c07298d3383 1385 //
lucaslwl 22:5c07298d3383 1386 ////******************************************************************************
lucaslwl 22:5c07298d3383 1387 //void MAX30001::spiHandler(int events) {
lucaslwl 22:5c07298d3383 1388 // xferFlag = 1;
lucaslwl 22:5c07298d3383 1389 //}
lucaslwl 22:5c07298d3383 1390 //
lucaslwl 22:5c07298d3383 1391 ////******************************************************************************
lucaslwl 22:5c07298d3383 1392 //static int allowInterrupts = 0;
lucaslwl 22:5c07298d3383 1393 //
lucaslwl 22:5c07298d3383 1394 //void MAX30001::Mid_IntB_Handler(void) {
lucaslwl 22:5c07298d3383 1395 // if (allowInterrupts == 0) {
lucaslwl 22:5c07298d3383 1396 // return;
lucaslwl 22:5c07298d3383 1397 // }
lucaslwl 22:5c07298d3383 1398 // MAX30001::instance->int_handler();
lucaslwl 22:5c07298d3383 1399 //}
lucaslwl 22:5c07298d3383 1400 //
lucaslwl 22:5c07298d3383 1401 //void MAX30001::Mid_Int2B_Handler(void) {
lucaslwl 22:5c07298d3383 1402 // if (allowInterrupts == 0) {
lucaslwl 22:5c07298d3383 1403 // return;
lucaslwl 22:5c07298d3383 1404 // }
lucaslwl 22:5c07298d3383 1405 // MAX30001::instance->int_handler();
lucaslwl 22:5c07298d3383 1406 //}
lucaslwl 22:5c07298d3383 1407 //
lucaslwl 22:5c07298d3383 1408 //void MAX30001::AllowInterrupts(int state) {
lucaslwl 22:5c07298d3383 1409 //allowInterrupts = state;
lucaslwl 22:5c07298d3383 1410 //}
lucaslwl 22:5c07298d3383 1411 //
lucaslwl 22:5c07298d3383 1412
lucaslwl 22:5c07298d3383 1413 #include "mbed.h"
lucaslwl 22:5c07298d3383 1414 #include "MAX30001.h"
lucaslwl 22:5c07298d3383 1415
lucaslwl 22:5c07298d3383 1416 MAX30001 *MAX30001::instance = NULL;
lucaslwl 22:5c07298d3383 1417
lucaslwl 22:5c07298d3383 1418 //******************************************************************************
lucaslwl 22:5c07298d3383 1419 MAX30001::MAX30001(PinName mosi, PinName miso, PinName sclk, PinName cs) {
lucaslwl 22:5c07298d3383 1420 spi = new SPI(mosi, miso, sclk, cs);
lucaslwl 22:5c07298d3383 1421 spi->frequency(3000000);
lucaslwl 22:5c07298d3383 1422 spi_owner = true;
lucaslwl 22:5c07298d3383 1423 functionpointer.attach(&spiHandler);
lucaslwl 22:5c07298d3383 1424 onDataAvailableCallback = NULL;
lucaslwl 22:5c07298d3383 1425 instance = this;
lucaslwl 22:5c07298d3383 1426 }
lucaslwl 22:5c07298d3383 1427
lucaslwl 22:5c07298d3383 1428 //******************************************************************************
lucaslwl 22:5c07298d3383 1429 MAX30001::MAX30001(SPI *_spi) {
lucaslwl 22:5c07298d3383 1430 spi = _spi;
lucaslwl 22:5c07298d3383 1431 spi->frequency(3000000);
lucaslwl 22:5c07298d3383 1432 spi_owner = false;
lucaslwl 22:5c07298d3383 1433 functionpointer.attach(&spiHandler);
lucaslwl 22:5c07298d3383 1434 onDataAvailableCallback = NULL;
lucaslwl 22:5c07298d3383 1435 instance = this;
lucaslwl 22:5c07298d3383 1436 }
lucaslwl 22:5c07298d3383 1437
lucaslwl 22:5c07298d3383 1438 //******************************************************************************
lucaslwl 22:5c07298d3383 1439 MAX30001::~MAX30001(void) {
lucaslwl 22:5c07298d3383 1440 if (spi_owner) {
lucaslwl 22:5c07298d3383 1441 delete spi;
lucaslwl 22:5c07298d3383 1442 }
lucaslwl 22:5c07298d3383 1443 }
lucaslwl 22:5c07298d3383 1444
lucaslwl 22:5c07298d3383 1445 //******************************************************************************
lucaslwl 22:5c07298d3383 1446 int MAX30001::max30001_Rbias_FMSTR_Init(uint8_t En_rbias, uint8_t Rbiasv,
lucaslwl 22:5c07298d3383 1447 uint8_t Rbiasp, uint8_t Rbiasn,
lucaslwl 22:5c07298d3383 1448 uint8_t Fmstr) {
lucaslwl 22:5c07298d3383 1449 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1450 return -1;
lucaslwl 22:5c07298d3383 1451 }
lucaslwl 22:5c07298d3383 1452
lucaslwl 22:5c07298d3383 1453 max30001_cnfg_gen.bit.en_rbias = En_rbias;
lucaslwl 22:5c07298d3383 1454 max30001_cnfg_gen.bit.rbiasv = Rbiasv;
lucaslwl 22:5c07298d3383 1455 max30001_cnfg_gen.bit.rbiasp = Rbiasp;
lucaslwl 22:5c07298d3383 1456 max30001_cnfg_gen.bit.rbiasn = Rbiasn;
lucaslwl 22:5c07298d3383 1457 max30001_cnfg_gen.bit.fmstr = Fmstr;
lucaslwl 22:5c07298d3383 1458
lucaslwl 22:5c07298d3383 1459 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1460 return -1;
lucaslwl 22:5c07298d3383 1461 }
lucaslwl 22:5c07298d3383 1462 return 0;
lucaslwl 22:5c07298d3383 1463 }
lucaslwl 22:5c07298d3383 1464
lucaslwl 22:5c07298d3383 1465 //******************************************************************************
lucaslwl 22:5c07298d3383 1466 int MAX30001::max30001_CAL_InitStart(uint8_t En_Vcal, uint8_t Vmode,
lucaslwl 22:5c07298d3383 1467 uint8_t Vmag, uint8_t Fcal, uint16_t Thigh,
lucaslwl 22:5c07298d3383 1468 uint8_t Fifty) {
lucaslwl 22:5c07298d3383 1469 // CNFG_CAL
lucaslwl 22:5c07298d3383 1470 if (max30001_reg_read(CNFG_CAL, &max30001_cnfg_cal.all) == -1) {
lucaslwl 22:5c07298d3383 1471 return -1;
lucaslwl 22:5c07298d3383 1472 }
lucaslwl 22:5c07298d3383 1473
lucaslwl 22:5c07298d3383 1474 max30001_cnfg_cal.bit.vmode = Vmode;
lucaslwl 22:5c07298d3383 1475 max30001_cnfg_cal.bit.vmag = Vmag;
lucaslwl 22:5c07298d3383 1476 max30001_cnfg_cal.bit.fcal = Fcal;
lucaslwl 22:5c07298d3383 1477 max30001_cnfg_cal.bit.thigh = Thigh;
lucaslwl 22:5c07298d3383 1478 max30001_cnfg_cal.bit.fifty = Fifty;
lucaslwl 22:5c07298d3383 1479
lucaslwl 22:5c07298d3383 1480 if (max30001_reg_write(CNFG_CAL, max30001_cnfg_cal.all) == -1) {
lucaslwl 22:5c07298d3383 1481 return -1;
lucaslwl 22:5c07298d3383 1482 }
lucaslwl 22:5c07298d3383 1483
lucaslwl 22:5c07298d3383 1484 // RTOS uses a 32768HZ clock. 32768ticks represents 1secs. 1sec/10 =
lucaslwl 22:5c07298d3383 1485 // 100msecs.
lucaslwl 22:5c07298d3383 1486 wait(1.0 / 10.0);
lucaslwl 22:5c07298d3383 1487
lucaslwl 22:5c07298d3383 1488 if (max30001_reg_read(CNFG_CAL, &max30001_cnfg_cal.all) == -1) {
lucaslwl 22:5c07298d3383 1489 return -1;
lucaslwl 22:5c07298d3383 1490 }
lucaslwl 22:5c07298d3383 1491
lucaslwl 22:5c07298d3383 1492 max30001_cnfg_cal.bit.en_vcal = En_Vcal;
lucaslwl 22:5c07298d3383 1493
lucaslwl 22:5c07298d3383 1494 if (max30001_reg_write(CNFG_CAL, max30001_cnfg_cal.all) == -1) {
lucaslwl 22:5c07298d3383 1495 return -1;
lucaslwl 22:5c07298d3383 1496 }
lucaslwl 22:5c07298d3383 1497
lucaslwl 22:5c07298d3383 1498 // RTOS uses a 32768HZ clock. 32768ticks represents 1secs. 1sec/10 =
lucaslwl 22:5c07298d3383 1499 // 100msecs.
lucaslwl 22:5c07298d3383 1500 wait(1.0 / 10.0);
lucaslwl 22:5c07298d3383 1501
lucaslwl 22:5c07298d3383 1502 return 0;
lucaslwl 22:5c07298d3383 1503 }
lucaslwl 22:5c07298d3383 1504
lucaslwl 22:5c07298d3383 1505 //******************************************************************************
lucaslwl 22:5c07298d3383 1506 int MAX30001::max30001_CAL_Stop(void) {
lucaslwl 22:5c07298d3383 1507
lucaslwl 22:5c07298d3383 1508 if (max30001_reg_read(CNFG_CAL, &max30001_cnfg_cal.all) == -1) {
lucaslwl 22:5c07298d3383 1509 return -1;
lucaslwl 22:5c07298d3383 1510 }
lucaslwl 22:5c07298d3383 1511
lucaslwl 22:5c07298d3383 1512 max30001_cnfg_cal.bit.en_vcal = 0; // Disable VCAL, all other settings are left unaffected
lucaslwl 22:5c07298d3383 1513
lucaslwl 22:5c07298d3383 1514 if (max30001_reg_write(CNFG_CAL, max30001_cnfg_cal.all) == -1) {
lucaslwl 22:5c07298d3383 1515 return -1;
lucaslwl 22:5c07298d3383 1516 }
lucaslwl 22:5c07298d3383 1517
lucaslwl 22:5c07298d3383 1518 return 0;
lucaslwl 22:5c07298d3383 1519 }
lucaslwl 22:5c07298d3383 1520 //******************************************************************************
lucaslwl 22:5c07298d3383 1521 //******************************************************************************
lucaslwl 22:5c07298d3383 1522 int MAX30001::max30001_INT_assignment(max30001_intrpt_Location_t en_enint_loc, max30001_intrpt_Location_t en_eovf_loc, max30001_intrpt_Location_t en_fstint_loc,
lucaslwl 22:5c07298d3383 1523 max30001_intrpt_Location_t en_dcloffint_loc, max30001_intrpt_Location_t en_bint_loc, max30001_intrpt_Location_t en_bovf_loc,
lucaslwl 22:5c07298d3383 1524 max30001_intrpt_Location_t en_bover_loc, max30001_intrpt_Location_t en_bundr_loc, max30001_intrpt_Location_t en_bcgmon_loc,
lucaslwl 22:5c07298d3383 1525 max30001_intrpt_Location_t en_pint_loc, max30001_intrpt_Location_t en_povf_loc, max30001_intrpt_Location_t en_pedge_loc,
lucaslwl 22:5c07298d3383 1526 max30001_intrpt_Location_t en_lonint_loc, max30001_intrpt_Location_t en_rrint_loc, max30001_intrpt_Location_t en_samp_loc,
lucaslwl 22:5c07298d3383 1527 max30001_intrpt_type_t intb_Type, max30001_intrpt_type_t int2b_Type)
lucaslwl 22:5c07298d3383 1528
lucaslwl 22:5c07298d3383 1529
lucaslwl 22:5c07298d3383 1530 {
lucaslwl 22:5c07298d3383 1531 // INT1
lucaslwl 22:5c07298d3383 1532
lucaslwl 22:5c07298d3383 1533 if (max30001_reg_read(EN_INT, &max30001_en_int.all) == -1) {
lucaslwl 22:5c07298d3383 1534 return -1;
lucaslwl 22:5c07298d3383 1535 }
lucaslwl 22:5c07298d3383 1536
lucaslwl 22:5c07298d3383 1537 // max30001_en_int2.bit.en_pint = 0b1; // Keep this off...
lucaslwl 22:5c07298d3383 1538
lucaslwl 22:5c07298d3383 1539 max30001_en_int.bit.en_eint = 0b1 & en_enint_loc;
lucaslwl 22:5c07298d3383 1540 max30001_en_int.bit.en_eovf = 0b1 & en_eovf_loc;
lucaslwl 22:5c07298d3383 1541 max30001_en_int.bit.en_fstint = 0b1 & en_fstint_loc;
lucaslwl 22:5c07298d3383 1542
lucaslwl 22:5c07298d3383 1543 max30001_en_int.bit.en_dcloffint = 0b1 & en_dcloffint_loc;
lucaslwl 22:5c07298d3383 1544 max30001_en_int.bit.en_bint = 0b1 & en_bint_loc;
lucaslwl 22:5c07298d3383 1545 max30001_en_int.bit.en_bovf = 0b1 & en_bovf_loc;
lucaslwl 22:5c07298d3383 1546
lucaslwl 22:5c07298d3383 1547 max30001_en_int.bit.en_bover = 0b1 & en_bover_loc;
lucaslwl 22:5c07298d3383 1548 max30001_en_int.bit.en_bundr = 0b1 & en_bundr_loc;
lucaslwl 22:5c07298d3383 1549 max30001_en_int.bit.en_bcgmon = 0b1 & en_bcgmon_loc;
lucaslwl 22:5c07298d3383 1550
lucaslwl 22:5c07298d3383 1551 max30001_en_int.bit.en_pint = 0b1 & en_pint_loc;
lucaslwl 22:5c07298d3383 1552 max30001_en_int.bit.en_povf = 0b1 & en_povf_loc;
lucaslwl 22:5c07298d3383 1553 max30001_en_int.bit.en_pedge = 0b1 & en_pedge_loc;
lucaslwl 22:5c07298d3383 1554
lucaslwl 22:5c07298d3383 1555 max30001_en_int.bit.en_lonint = 0b1 & en_lonint_loc;
lucaslwl 22:5c07298d3383 1556 max30001_en_int.bit.en_rrint = 0b1 & en_rrint_loc;
lucaslwl 22:5c07298d3383 1557 max30001_en_int.bit.en_samp = 0b1 & en_samp_loc;
lucaslwl 22:5c07298d3383 1558
lucaslwl 22:5c07298d3383 1559 max30001_en_int.bit.intb_type = int2b_Type;
lucaslwl 22:5c07298d3383 1560
lucaslwl 22:5c07298d3383 1561 if (max30001_reg_write(EN_INT, max30001_en_int.all) == -1) {
lucaslwl 22:5c07298d3383 1562 return -1;
lucaslwl 22:5c07298d3383 1563 }
lucaslwl 22:5c07298d3383 1564
lucaslwl 22:5c07298d3383 1565 // INT2
lucaslwl 22:5c07298d3383 1566
lucaslwl 22:5c07298d3383 1567 if (max30001_reg_read(EN_INT2, &max30001_en_int2.all) == -1) {
lucaslwl 22:5c07298d3383 1568 return -1;
lucaslwl 22:5c07298d3383 1569 }
lucaslwl 22:5c07298d3383 1570
lucaslwl 22:5c07298d3383 1571 max30001_en_int2.bit.en_eint = 0b1 & (en_enint_loc >> 1);
lucaslwl 22:5c07298d3383 1572 max30001_en_int2.bit.en_eovf = 0b1 & (en_eovf_loc >> 1);
lucaslwl 22:5c07298d3383 1573 max30001_en_int2.bit.en_fstint = 0b1 & (en_fstint_loc >> 1);
lucaslwl 22:5c07298d3383 1574
lucaslwl 22:5c07298d3383 1575 max30001_en_int2.bit.en_dcloffint = 0b1 & (en_dcloffint_loc >> 1);
lucaslwl 22:5c07298d3383 1576 max30001_en_int2.bit.en_bint = 0b1 & (en_bint_loc >> 1);
lucaslwl 22:5c07298d3383 1577 max30001_en_int2.bit.en_bovf = 0b1 & (en_bovf_loc >> 1);
lucaslwl 22:5c07298d3383 1578
lucaslwl 22:5c07298d3383 1579 max30001_en_int2.bit.en_bover = 0b1 & (en_bover_loc >> 1);
lucaslwl 22:5c07298d3383 1580 max30001_en_int2.bit.en_bundr = 0b1 & (en_bundr_loc >> 1);
lucaslwl 22:5c07298d3383 1581 max30001_en_int2.bit.en_bcgmon = 0b1 & (en_bcgmon_loc >> 1);
lucaslwl 22:5c07298d3383 1582
lucaslwl 22:5c07298d3383 1583 max30001_en_int2.bit.en_pint = 0b1 & (en_pint_loc >> 1);
lucaslwl 22:5c07298d3383 1584 max30001_en_int2.bit.en_povf = 0b1 & (en_povf_loc >> 1);
lucaslwl 22:5c07298d3383 1585 max30001_en_int2.bit.en_pedge = 0b1 & (en_pedge_loc >> 1);
lucaslwl 22:5c07298d3383 1586
lucaslwl 22:5c07298d3383 1587 max30001_en_int2.bit.en_lonint = 0b1 & (en_lonint_loc >> 1);
lucaslwl 22:5c07298d3383 1588 max30001_en_int2.bit.en_rrint = 0b1 & (en_rrint_loc >> 1);
lucaslwl 22:5c07298d3383 1589 max30001_en_int2.bit.en_samp = 0b1 & (en_samp_loc >> 1);
lucaslwl 22:5c07298d3383 1590
lucaslwl 22:5c07298d3383 1591 max30001_en_int2.bit.intb_type = intb_Type;
lucaslwl 22:5c07298d3383 1592
lucaslwl 22:5c07298d3383 1593 if (max30001_reg_write(EN_INT2, max30001_en_int2.all) == -1) {
lucaslwl 22:5c07298d3383 1594 return -1;
lucaslwl 22:5c07298d3383 1595 }
lucaslwl 22:5c07298d3383 1596
lucaslwl 22:5c07298d3383 1597 return 0;
lucaslwl 22:5c07298d3383 1598 }
lucaslwl 22:5c07298d3383 1599
lucaslwl 22:5c07298d3383 1600 //******************************************************************************
lucaslwl 22:5c07298d3383 1601 int MAX30001::max30001_ECG_InitStart(uint8_t En_ecg, uint8_t Openp,
lucaslwl 22:5c07298d3383 1602 uint8_t Openn, uint8_t Pol,
lucaslwl 22:5c07298d3383 1603 uint8_t Calp_sel, uint8_t Caln_sel,
lucaslwl 22:5c07298d3383 1604 uint8_t E_fit, uint8_t Rate, uint8_t Gain,
lucaslwl 22:5c07298d3383 1605 uint8_t Dhpf, uint8_t Dlpf) {
lucaslwl 22:5c07298d3383 1606
lucaslwl 22:5c07298d3383 1607 // CNFG_EMUX
lucaslwl 22:5c07298d3383 1608
lucaslwl 22:5c07298d3383 1609 if (max30001_reg_read(CNFG_EMUX, &max30001_cnfg_emux.all) == -1) {
lucaslwl 22:5c07298d3383 1610 return -1;
lucaslwl 22:5c07298d3383 1611 }
lucaslwl 22:5c07298d3383 1612
lucaslwl 22:5c07298d3383 1613 max30001_cnfg_emux.bit.openp = Openp;
lucaslwl 22:5c07298d3383 1614 max30001_cnfg_emux.bit.openn = Openn;
lucaslwl 22:5c07298d3383 1615 max30001_cnfg_emux.bit.pol = Pol;
lucaslwl 22:5c07298d3383 1616 max30001_cnfg_emux.bit.calp_sel = Calp_sel;
lucaslwl 22:5c07298d3383 1617 max30001_cnfg_emux.bit.caln_sel = Caln_sel;
lucaslwl 22:5c07298d3383 1618
lucaslwl 22:5c07298d3383 1619 if (max30001_reg_write(CNFG_EMUX, max30001_cnfg_emux.all) == -1) {
lucaslwl 22:5c07298d3383 1620 return -1;
lucaslwl 22:5c07298d3383 1621 }
lucaslwl 22:5c07298d3383 1622
lucaslwl 22:5c07298d3383 1623 /**** ENABLE CHANNELS ****/
lucaslwl 22:5c07298d3383 1624 // CNFG_GEN
lucaslwl 22:5c07298d3383 1625
lucaslwl 22:5c07298d3383 1626 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1627 return -1;
lucaslwl 22:5c07298d3383 1628 }
lucaslwl 22:5c07298d3383 1629
lucaslwl 22:5c07298d3383 1630 max30001_cnfg_gen.bit.en_ecg = En_ecg; // 0b1
lucaslwl 22:5c07298d3383 1631
lucaslwl 22:5c07298d3383 1632 // fmstr is default
lucaslwl 22:5c07298d3383 1633
lucaslwl 22:5c07298d3383 1634 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1635 return -1;
lucaslwl 22:5c07298d3383 1636 }
lucaslwl 22:5c07298d3383 1637
lucaslwl 22:5c07298d3383 1638 /**** Wait for PLL Lock & References to settle down ****/
lucaslwl 22:5c07298d3383 1639
lucaslwl 22:5c07298d3383 1640 max30001_timeout = 0;
lucaslwl 22:5c07298d3383 1641
lucaslwl 22:5c07298d3383 1642 do {
lucaslwl 22:5c07298d3383 1643 if (max30001_reg_read(STATUS, &max30001_status.all) == -1) // Wait and spin for PLL to lock...
lucaslwl 22:5c07298d3383 1644 {
lucaslwl 22:5c07298d3383 1645 return -1;
lucaslwl 22:5c07298d3383 1646 }
lucaslwl 22:5c07298d3383 1647 } while (max30001_status.bit.pllint == 1 && max30001_timeout++ <= 1000);
lucaslwl 22:5c07298d3383 1648
lucaslwl 22:5c07298d3383 1649 // MNGR_INT
lucaslwl 22:5c07298d3383 1650
lucaslwl 22:5c07298d3383 1651 if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 1652 return -1;
lucaslwl 22:5c07298d3383 1653 }
lucaslwl 22:5c07298d3383 1654
lucaslwl 22:5c07298d3383 1655 max30001_mngr_int.bit.e_fit = E_fit; // 31
lucaslwl 22:5c07298d3383 1656
lucaslwl 22:5c07298d3383 1657 if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 1658 return -1;
lucaslwl 22:5c07298d3383 1659 }
lucaslwl 22:5c07298d3383 1660
lucaslwl 22:5c07298d3383 1661 // CNFG_ECG
lucaslwl 22:5c07298d3383 1662
lucaslwl 22:5c07298d3383 1663 if (max30001_reg_read(CNFG_ECG, &max30001_cnfg_ecg.all) == -1) {
lucaslwl 22:5c07298d3383 1664 return -1;
lucaslwl 22:5c07298d3383 1665 }
lucaslwl 22:5c07298d3383 1666
lucaslwl 22:5c07298d3383 1667 max30001_cnfg_ecg.bit.rate = Rate;
lucaslwl 22:5c07298d3383 1668 max30001_cnfg_ecg.bit.gain = Gain;
lucaslwl 22:5c07298d3383 1669 max30001_cnfg_ecg.bit.dhpf = Dhpf;
lucaslwl 22:5c07298d3383 1670 max30001_cnfg_ecg.bit.dlpf = Dlpf;
lucaslwl 22:5c07298d3383 1671
lucaslwl 22:5c07298d3383 1672 if (max30001_reg_write(CNFG_ECG, max30001_cnfg_ecg.all) == -1) {
lucaslwl 22:5c07298d3383 1673 return -1;
lucaslwl 22:5c07298d3383 1674 }
lucaslwl 22:5c07298d3383 1675
lucaslwl 22:5c07298d3383 1676 return 0;
lucaslwl 22:5c07298d3383 1677 }
lucaslwl 22:5c07298d3383 1678
lucaslwl 22:5c07298d3383 1679 //******************************************************************************
lucaslwl 22:5c07298d3383 1680 int MAX30001::max30001_ECGFast_Init(uint8_t Clr_Fast, uint8_t Fast, uint8_t Fast_Th) {
lucaslwl 22:5c07298d3383 1681 if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 1682 return -1;
lucaslwl 22:5c07298d3383 1683 }
lucaslwl 22:5c07298d3383 1684
lucaslwl 22:5c07298d3383 1685 max30001_mngr_int.bit.clr_fast = Clr_Fast;
lucaslwl 22:5c07298d3383 1686
lucaslwl 22:5c07298d3383 1687 if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 1688 return -1;
lucaslwl 22:5c07298d3383 1689 }
lucaslwl 22:5c07298d3383 1690
lucaslwl 22:5c07298d3383 1691 if (max30001_reg_read(MNGR_DYN, &max30001_mngr_dyn.all) == -1) {
lucaslwl 22:5c07298d3383 1692 return -1;
lucaslwl 22:5c07298d3383 1693 }
lucaslwl 22:5c07298d3383 1694
lucaslwl 22:5c07298d3383 1695 max30001_mngr_dyn.bit.fast = Fast;
lucaslwl 22:5c07298d3383 1696 max30001_mngr_dyn.bit.fast_th = Fast_Th;
lucaslwl 22:5c07298d3383 1697
lucaslwl 22:5c07298d3383 1698 if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 1699 return -1;
lucaslwl 22:5c07298d3383 1700 }
lucaslwl 22:5c07298d3383 1701
lucaslwl 22:5c07298d3383 1702 return 0;
lucaslwl 22:5c07298d3383 1703 }
lucaslwl 22:5c07298d3383 1704
lucaslwl 22:5c07298d3383 1705 //******************************************************************************
lucaslwl 22:5c07298d3383 1706 int MAX30001::max30001_Stop_ECG(void) {
lucaslwl 22:5c07298d3383 1707
lucaslwl 22:5c07298d3383 1708 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1709 return -1;
lucaslwl 22:5c07298d3383 1710 }
lucaslwl 22:5c07298d3383 1711
lucaslwl 22:5c07298d3383 1712 max30001_cnfg_gen.bit.en_ecg = 0; // Stop ECG
lucaslwl 22:5c07298d3383 1713
lucaslwl 22:5c07298d3383 1714 // fmstr is default
lucaslwl 22:5c07298d3383 1715
lucaslwl 22:5c07298d3383 1716 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1717 return -1;
lucaslwl 22:5c07298d3383 1718 }
lucaslwl 22:5c07298d3383 1719
lucaslwl 22:5c07298d3383 1720 return 0;
lucaslwl 22:5c07298d3383 1721 }
lucaslwl 22:5c07298d3383 1722
lucaslwl 22:5c07298d3383 1723 //******************************************************************************
lucaslwl 22:5c07298d3383 1724 int MAX30001::max30001_PACE_InitStart(uint8_t En_pace, uint8_t Clr_pedge,
lucaslwl 22:5c07298d3383 1725 uint8_t Pol, uint8_t Gn_diff_off,
lucaslwl 22:5c07298d3383 1726 uint8_t Gain, uint8_t Aout_lbw,
lucaslwl 22:5c07298d3383 1727 uint8_t Aout, uint8_t Dacp,
lucaslwl 22:5c07298d3383 1728 uint8_t Dacn) {
lucaslwl 22:5c07298d3383 1729
lucaslwl 22:5c07298d3383 1730 /**** SET MASTER FREQUENCY, ENABLE CHANNELS ****/
lucaslwl 22:5c07298d3383 1731
lucaslwl 22:5c07298d3383 1732 // CNFG_GEN
lucaslwl 22:5c07298d3383 1733
lucaslwl 22:5c07298d3383 1734 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1735 return -1;
lucaslwl 22:5c07298d3383 1736 }
lucaslwl 22:5c07298d3383 1737
lucaslwl 22:5c07298d3383 1738 max30001_cnfg_gen.bit.en_pace = En_pace; // 0b1;
lucaslwl 22:5c07298d3383 1739
lucaslwl 22:5c07298d3383 1740 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1741 return -1;
lucaslwl 22:5c07298d3383 1742 }
lucaslwl 22:5c07298d3383 1743
lucaslwl 22:5c07298d3383 1744 /**** Wait for PLL Lock & References to settle down ****/
lucaslwl 22:5c07298d3383 1745 max30001_timeout = 0;
lucaslwl 22:5c07298d3383 1746
lucaslwl 22:5c07298d3383 1747 do {
lucaslwl 22:5c07298d3383 1748 if (max30001_reg_read(STATUS, &max30001_status.all) ==
lucaslwl 22:5c07298d3383 1749 -1) // Wait and spin for PLL to lock...
lucaslwl 22:5c07298d3383 1750 {
lucaslwl 22:5c07298d3383 1751 return -1;
lucaslwl 22:5c07298d3383 1752 }
lucaslwl 22:5c07298d3383 1753
lucaslwl 22:5c07298d3383 1754 } while (max30001_status.bit.pllint == 1 && max30001_timeout++ <= 1000);
lucaslwl 22:5c07298d3383 1755
lucaslwl 22:5c07298d3383 1756 // MNGR_INT
lucaslwl 22:5c07298d3383 1757
lucaslwl 22:5c07298d3383 1758 if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 1759 return -1;
lucaslwl 22:5c07298d3383 1760 }
lucaslwl 22:5c07298d3383 1761
lucaslwl 22:5c07298d3383 1762 max30001_mngr_int.bit.clr_pedge = Clr_pedge; // 0b0;
lucaslwl 22:5c07298d3383 1763
lucaslwl 22:5c07298d3383 1764 if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 1765 return -1;
lucaslwl 22:5c07298d3383 1766 }
lucaslwl 22:5c07298d3383 1767
lucaslwl 22:5c07298d3383 1768 /* Put: CNFG_PACE */
lucaslwl 22:5c07298d3383 1769
lucaslwl 22:5c07298d3383 1770 max30001_reg_read(CNFG_PACE, &max30001_cnfg_pace.all);
lucaslwl 22:5c07298d3383 1771
lucaslwl 22:5c07298d3383 1772 max30001_cnfg_pace.bit.pol = Pol;
lucaslwl 22:5c07298d3383 1773 max30001_cnfg_pace.bit.gn_diff_off = Gn_diff_off;
lucaslwl 22:5c07298d3383 1774 max30001_cnfg_pace.bit.gain = Gain;
lucaslwl 22:5c07298d3383 1775 max30001_cnfg_pace.bit.aout_lbw = Aout_lbw;
lucaslwl 22:5c07298d3383 1776 max30001_cnfg_pace.bit.aout = Aout;
lucaslwl 22:5c07298d3383 1777 max30001_cnfg_pace.bit.dacp = Dacp;
lucaslwl 22:5c07298d3383 1778 max30001_cnfg_pace.bit.dacn = Dacn;
lucaslwl 22:5c07298d3383 1779
lucaslwl 22:5c07298d3383 1780 max30001_reg_write(CNFG_PACE, max30001_cnfg_pace.all);
lucaslwl 22:5c07298d3383 1781
lucaslwl 22:5c07298d3383 1782 return 0;
lucaslwl 22:5c07298d3383 1783 }
lucaslwl 22:5c07298d3383 1784 //******************************************************************************
lucaslwl 22:5c07298d3383 1785 int MAX30001::max30001_Stop_PACE(void) {
lucaslwl 22:5c07298d3383 1786
lucaslwl 22:5c07298d3383 1787 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1788 return -1;
lucaslwl 22:5c07298d3383 1789 }
lucaslwl 22:5c07298d3383 1790
lucaslwl 22:5c07298d3383 1791 max30001_cnfg_gen.bit.en_pace = 0; // Stop PACE
lucaslwl 22:5c07298d3383 1792
lucaslwl 22:5c07298d3383 1793 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1794 return -1;
lucaslwl 22:5c07298d3383 1795 }
lucaslwl 22:5c07298d3383 1796
lucaslwl 22:5c07298d3383 1797 return 0;
lucaslwl 22:5c07298d3383 1798 }
lucaslwl 22:5c07298d3383 1799
lucaslwl 22:5c07298d3383 1800 //******************************************************************************
lucaslwl 22:5c07298d3383 1801 int MAX30001::max30001_BIOZ_InitStart(
lucaslwl 22:5c07298d3383 1802 uint8_t En_bioz, uint8_t Openp, uint8_t Openn, uint8_t Calp_sel,
lucaslwl 22:5c07298d3383 1803 uint8_t Caln_sel, uint8_t CG_mode, uint8_t B_fit, uint8_t Rate,
lucaslwl 22:5c07298d3383 1804 uint8_t Ahpf, uint8_t Ext_rbias, uint8_t Gain, uint8_t Dhpf, uint8_t Dlpf,
lucaslwl 22:5c07298d3383 1805 uint8_t Fcgen, uint8_t Cgmon, uint8_t Cgmag, uint8_t Phoff) {
lucaslwl 22:5c07298d3383 1806
lucaslwl 22:5c07298d3383 1807 // CNFG_BMUX
lucaslwl 22:5c07298d3383 1808
lucaslwl 22:5c07298d3383 1809 if (max30001_reg_read(CNFG_BMUX, &max30001_cnfg_bmux.all) == -1) {
lucaslwl 22:5c07298d3383 1810 return -1;
lucaslwl 22:5c07298d3383 1811 }
lucaslwl 22:5c07298d3383 1812
lucaslwl 22:5c07298d3383 1813 max30001_cnfg_bmux.bit.openp = Openp; // 0b1;
lucaslwl 22:5c07298d3383 1814 max30001_cnfg_bmux.bit.openn = Openn; // 0b1;
lucaslwl 22:5c07298d3383 1815 max30001_cnfg_bmux.bit.calp_sel = Calp_sel; // 0b10;
lucaslwl 22:5c07298d3383 1816 max30001_cnfg_bmux.bit.caln_sel = Caln_sel; // 0b11;
lucaslwl 22:5c07298d3383 1817 max30001_cnfg_bmux.bit.cg_mode = CG_mode; // 0b00;
lucaslwl 22:5c07298d3383 1818
lucaslwl 22:5c07298d3383 1819 if (max30001_reg_write(CNFG_BMUX, max30001_cnfg_bmux.all) == -1) {
lucaslwl 22:5c07298d3383 1820 return -1;
lucaslwl 22:5c07298d3383 1821 }
lucaslwl 22:5c07298d3383 1822
lucaslwl 22:5c07298d3383 1823 /**** SET MASTER FREQUENCY, ENABLE CHANNELS ****/
lucaslwl 22:5c07298d3383 1824
lucaslwl 22:5c07298d3383 1825 // CNFG_GEN
lucaslwl 22:5c07298d3383 1826
lucaslwl 22:5c07298d3383 1827 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1828 return -1;
lucaslwl 22:5c07298d3383 1829 }
lucaslwl 22:5c07298d3383 1830
lucaslwl 22:5c07298d3383 1831 max30001_cnfg_gen.bit.en_bioz = En_bioz;
lucaslwl 22:5c07298d3383 1832
lucaslwl 22:5c07298d3383 1833 // fmstr is default
lucaslwl 22:5c07298d3383 1834
lucaslwl 22:5c07298d3383 1835 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1836 return -1;
lucaslwl 22:5c07298d3383 1837 }
lucaslwl 22:5c07298d3383 1838
lucaslwl 22:5c07298d3383 1839 /**** Wait for PLL Lock & References to settle down ****/
lucaslwl 22:5c07298d3383 1840
lucaslwl 22:5c07298d3383 1841 max30001_timeout = 0;
lucaslwl 22:5c07298d3383 1842
lucaslwl 22:5c07298d3383 1843 do {
lucaslwl 22:5c07298d3383 1844 if (max30001_reg_read(STATUS, &max30001_status.all) ==
lucaslwl 22:5c07298d3383 1845 -1) // Wait and spin for PLL to lock...
lucaslwl 22:5c07298d3383 1846 {
lucaslwl 22:5c07298d3383 1847 return -1;
lucaslwl 22:5c07298d3383 1848 }
lucaslwl 22:5c07298d3383 1849
lucaslwl 22:5c07298d3383 1850 } while (max30001_status.bit.pllint == 1 && max30001_timeout++ <= 1000);
lucaslwl 22:5c07298d3383 1851
lucaslwl 22:5c07298d3383 1852 /**** Start of CNFG_BIOZ ****/
lucaslwl 22:5c07298d3383 1853
lucaslwl 22:5c07298d3383 1854 // MNGR_INT
lucaslwl 22:5c07298d3383 1855
lucaslwl 22:5c07298d3383 1856 if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 1857 return -1;
lucaslwl 22:5c07298d3383 1858 }
lucaslwl 22:5c07298d3383 1859
lucaslwl 22:5c07298d3383 1860 max30001_mngr_int.bit.b_fit = B_fit; //;
lucaslwl 22:5c07298d3383 1861
lucaslwl 22:5c07298d3383 1862 if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 1863 return -1;
lucaslwl 22:5c07298d3383 1864 }
lucaslwl 22:5c07298d3383 1865
lucaslwl 22:5c07298d3383 1866 // CNFG_BIOZ
lucaslwl 22:5c07298d3383 1867
lucaslwl 22:5c07298d3383 1868 if (max30001_reg_read(CNFG_BIOZ, &max30001_cnfg_bioz.all) == -1) {
lucaslwl 22:5c07298d3383 1869 return -1;
lucaslwl 22:5c07298d3383 1870 }
lucaslwl 22:5c07298d3383 1871
lucaslwl 22:5c07298d3383 1872 max30001_cnfg_bioz.bit.rate = Rate;
lucaslwl 22:5c07298d3383 1873 max30001_cnfg_bioz.bit.ahpf = Ahpf;
lucaslwl 22:5c07298d3383 1874 max30001_cnfg_bioz.bit.ext_rbias = Ext_rbias;
lucaslwl 22:5c07298d3383 1875 max30001_cnfg_bioz.bit.gain = Gain;
lucaslwl 22:5c07298d3383 1876 max30001_cnfg_bioz.bit.dhpf = Dhpf;
lucaslwl 22:5c07298d3383 1877 max30001_cnfg_bioz.bit.dlpf = Dlpf;
lucaslwl 22:5c07298d3383 1878 max30001_cnfg_bioz.bit.fcgen = Fcgen;
lucaslwl 22:5c07298d3383 1879 max30001_cnfg_bioz.bit.cgmon = Cgmon;
lucaslwl 22:5c07298d3383 1880 max30001_cnfg_bioz.bit.cgmag = Cgmag;
lucaslwl 22:5c07298d3383 1881 max30001_cnfg_bioz.bit.phoff = Phoff;
lucaslwl 22:5c07298d3383 1882
lucaslwl 22:5c07298d3383 1883 if (max30001_reg_write(CNFG_BIOZ, max30001_cnfg_bioz.all) == -1) {
lucaslwl 22:5c07298d3383 1884 return -1;
lucaslwl 22:5c07298d3383 1885 }
lucaslwl 22:5c07298d3383 1886
lucaslwl 22:5c07298d3383 1887 return 0;
lucaslwl 22:5c07298d3383 1888 }
lucaslwl 22:5c07298d3383 1889
lucaslwl 22:5c07298d3383 1890 //******************************************************************************
lucaslwl 22:5c07298d3383 1891 int MAX30001::max30001_Stop_BIOZ(void) {
lucaslwl 22:5c07298d3383 1892
lucaslwl 22:5c07298d3383 1893 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1894 return -1;
lucaslwl 22:5c07298d3383 1895 }
lucaslwl 22:5c07298d3383 1896
lucaslwl 22:5c07298d3383 1897 max30001_cnfg_gen.bit.en_bioz = 0; // Stop BIOZ
lucaslwl 22:5c07298d3383 1898
lucaslwl 22:5c07298d3383 1899 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 1900 return -1;
lucaslwl 22:5c07298d3383 1901 }
lucaslwl 22:5c07298d3383 1902
lucaslwl 22:5c07298d3383 1903 return 0;
lucaslwl 22:5c07298d3383 1904 }
lucaslwl 22:5c07298d3383 1905
lucaslwl 22:5c07298d3383 1906 //******************************************************************************
lucaslwl 22:5c07298d3383 1907 int MAX30001::max30001_BIOZ_InitBist(uint8_t En_bist, uint8_t Rnom,
lucaslwl 22:5c07298d3383 1908 uint8_t Rmod, uint8_t Fbist) {
lucaslwl 22:5c07298d3383 1909
lucaslwl 22:5c07298d3383 1910 // CNFG_BMUX
lucaslwl 22:5c07298d3383 1911
lucaslwl 22:5c07298d3383 1912 if (max30001_reg_read(CNFG_BMUX, &max30001_cnfg_bmux.all) == -1) {
lucaslwl 22:5c07298d3383 1913 return -1;
lucaslwl 22:5c07298d3383 1914 }
lucaslwl 22:5c07298d3383 1915
lucaslwl 22:5c07298d3383 1916 max30001_cnfg_bmux.bit.en_bist = En_bist;
lucaslwl 22:5c07298d3383 1917 max30001_cnfg_bmux.bit.rnom = Rnom;
lucaslwl 22:5c07298d3383 1918 max30001_cnfg_bmux.bit.rmod = Rmod;
lucaslwl 22:5c07298d3383 1919 max30001_cnfg_bmux.bit.fbist = Fbist;
lucaslwl 22:5c07298d3383 1920
lucaslwl 22:5c07298d3383 1921 if (max30001_reg_write(CNFG_BMUX, max30001_cnfg_bmux.all) == -1) {
lucaslwl 22:5c07298d3383 1922 return -1;
lucaslwl 22:5c07298d3383 1923 }
lucaslwl 22:5c07298d3383 1924
lucaslwl 22:5c07298d3383 1925 return 0;
lucaslwl 22:5c07298d3383 1926 }
lucaslwl 22:5c07298d3383 1927 //******************************************************************************
lucaslwl 22:5c07298d3383 1928 int MAX30001::max30001_RtoR_InitStart(uint8_t En_rtor, uint8_t Wndw,
lucaslwl 22:5c07298d3383 1929 uint8_t Gain, uint8_t Pavg, uint8_t Ptsf,
lucaslwl 22:5c07298d3383 1930 uint8_t Hoff, uint8_t Ravg, uint8_t Rhsf,
lucaslwl 22:5c07298d3383 1931 uint8_t Clr_rrint) {
lucaslwl 22:5c07298d3383 1932
lucaslwl 22:5c07298d3383 1933 // MNGR_INT
lucaslwl 22:5c07298d3383 1934
lucaslwl 22:5c07298d3383 1935 if (max30001_reg_read(MNGR_INT, &max30001_mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 1936 return -1;
lucaslwl 22:5c07298d3383 1937 }
lucaslwl 22:5c07298d3383 1938
lucaslwl 22:5c07298d3383 1939 max30001_mngr_int.bit.clr_rrint =
lucaslwl 22:5c07298d3383 1940 Clr_rrint; // 0b01 & 0b00 are for interrupt mode...
lucaslwl 22:5c07298d3383 1941 // 0b10 is for monitoring mode... it just overwrites the data...
lucaslwl 22:5c07298d3383 1942
lucaslwl 22:5c07298d3383 1943 if (max30001_reg_write(MNGR_INT, max30001_mngr_int.all) == -1) {
lucaslwl 22:5c07298d3383 1944 return -1;
lucaslwl 22:5c07298d3383 1945 }
lucaslwl 22:5c07298d3383 1946
lucaslwl 22:5c07298d3383 1947 // RTOR1
lucaslwl 22:5c07298d3383 1948 if (max30001_reg_read(CNFG_RTOR1, &max30001_cnfg_rtor1.all) == -1) {
lucaslwl 22:5c07298d3383 1949 return -1;
lucaslwl 22:5c07298d3383 1950 }
lucaslwl 22:5c07298d3383 1951
lucaslwl 22:5c07298d3383 1952 max30001_cnfg_rtor1.bit.wndw = Wndw;
lucaslwl 22:5c07298d3383 1953 max30001_cnfg_rtor1.bit.gain = Gain;
lucaslwl 22:5c07298d3383 1954 max30001_cnfg_rtor1.bit.en_rtor = En_rtor;
lucaslwl 22:5c07298d3383 1955 max30001_cnfg_rtor1.bit.pavg = Pavg;
lucaslwl 22:5c07298d3383 1956 max30001_cnfg_rtor1.bit.ptsf = Ptsf;
lucaslwl 22:5c07298d3383 1957
lucaslwl 22:5c07298d3383 1958 if (max30001_reg_write(CNFG_RTOR1, max30001_cnfg_rtor1.all) == -1) {
lucaslwl 22:5c07298d3383 1959 return -1;
lucaslwl 22:5c07298d3383 1960 }
lucaslwl 22:5c07298d3383 1961 // RTOR2
lucaslwl 22:5c07298d3383 1962
lucaslwl 22:5c07298d3383 1963 if (max30001_reg_read(CNFG_RTOR2, &max30001_cnfg_rtor2.all) == -1) {
lucaslwl 22:5c07298d3383 1964 return -1;
lucaslwl 22:5c07298d3383 1965 }
lucaslwl 22:5c07298d3383 1966 max30001_cnfg_rtor2.bit.hoff = Hoff;
lucaslwl 22:5c07298d3383 1967 max30001_cnfg_rtor2.bit.ravg = Ravg;
lucaslwl 22:5c07298d3383 1968 max30001_cnfg_rtor2.bit.rhsf = Rhsf;
lucaslwl 22:5c07298d3383 1969
lucaslwl 22:5c07298d3383 1970 if (max30001_reg_write(CNFG_RTOR2, max30001_cnfg_rtor2.all) == -1) {
lucaslwl 22:5c07298d3383 1971 return -1;
lucaslwl 22:5c07298d3383 1972 }
lucaslwl 22:5c07298d3383 1973
lucaslwl 22:5c07298d3383 1974 return 0;
lucaslwl 22:5c07298d3383 1975 }
lucaslwl 22:5c07298d3383 1976
lucaslwl 22:5c07298d3383 1977 //******************************************************************************
lucaslwl 22:5c07298d3383 1978 int MAX30001::max30001_Stop_RtoR(void) {
lucaslwl 22:5c07298d3383 1979
lucaslwl 22:5c07298d3383 1980 if (max30001_reg_read(CNFG_RTOR1, &max30001_cnfg_rtor1.all) == -1) {
lucaslwl 22:5c07298d3383 1981 return -1;
lucaslwl 22:5c07298d3383 1982 }
lucaslwl 22:5c07298d3383 1983
lucaslwl 22:5c07298d3383 1984 max30001_cnfg_rtor1.bit.en_rtor = 0; // Stop RtoR
lucaslwl 22:5c07298d3383 1985
lucaslwl 22:5c07298d3383 1986 if (max30001_reg_write(CNFG_RTOR1, max30001_cnfg_rtor1.all) == -1) {
lucaslwl 22:5c07298d3383 1987 return -1;
lucaslwl 22:5c07298d3383 1988 }
lucaslwl 22:5c07298d3383 1989
lucaslwl 22:5c07298d3383 1990 return 0;
lucaslwl 22:5c07298d3383 1991 }
lucaslwl 22:5c07298d3383 1992
lucaslwl 22:5c07298d3383 1993 //******************************************************************************
lucaslwl 22:5c07298d3383 1994 int MAX30001::max30001_PLL_lock(void) {
lucaslwl 22:5c07298d3383 1995 // Spin to see PLLint become zero to indicate a lock.
lucaslwl 22:5c07298d3383 1996
lucaslwl 22:5c07298d3383 1997 max30001_timeout = 0;
lucaslwl 22:5c07298d3383 1998
lucaslwl 22:5c07298d3383 1999 do {
lucaslwl 22:5c07298d3383 2000 if (max30001_reg_read(STATUS, &max30001_status.all) ==
lucaslwl 22:5c07298d3383 2001 -1) // Wait and spin for PLL to lock...
lucaslwl 22:5c07298d3383 2002 {
lucaslwl 22:5c07298d3383 2003 return -1;
lucaslwl 22:5c07298d3383 2004 }
lucaslwl 22:5c07298d3383 2005
lucaslwl 22:5c07298d3383 2006 } while (max30001_status.bit.pllint == 1 && max30001_timeout++ <= 1000);
lucaslwl 22:5c07298d3383 2007
lucaslwl 22:5c07298d3383 2008 return 0;
lucaslwl 22:5c07298d3383 2009 }
lucaslwl 22:5c07298d3383 2010
lucaslwl 22:5c07298d3383 2011 //******************************************************************************
lucaslwl 22:5c07298d3383 2012 int MAX30001::max30001_sw_rst(void) {
lucaslwl 22:5c07298d3383 2013 // SW reset for the MAX30001 chip
lucaslwl 22:5c07298d3383 2014
lucaslwl 22:5c07298d3383 2015 if (max30001_reg_write(SW_RST, 0x000000) == -1) {
lucaslwl 22:5c07298d3383 2016 return -1;
lucaslwl 22:5c07298d3383 2017 }
lucaslwl 22:5c07298d3383 2018
lucaslwl 22:5c07298d3383 2019 return 0;
lucaslwl 22:5c07298d3383 2020 }
lucaslwl 22:5c07298d3383 2021
lucaslwl 22:5c07298d3383 2022 //******************************************************************************
lucaslwl 22:5c07298d3383 2023 int MAX30001::max30001_synch(void) { // For synchronization
lucaslwl 22:5c07298d3383 2024 if (max30001_reg_write(SYNCH, 0x000000) == -1) {
lucaslwl 22:5c07298d3383 2025 return -1;
lucaslwl 22:5c07298d3383 2026 }
lucaslwl 22:5c07298d3383 2027 return 0;
lucaslwl 22:5c07298d3383 2028 }
lucaslwl 22:5c07298d3383 2029
lucaslwl 22:5c07298d3383 2030 //******************************************************************************
lucaslwl 22:5c07298d3383 2031 int MAX30001::max300001_fifo_rst(void) { // Resets the FIFO
lucaslwl 22:5c07298d3383 2032 if (max30001_reg_write(FIFO_RST, 0x000000) == -1) {
lucaslwl 22:5c07298d3383 2033 return -1;
lucaslwl 22:5c07298d3383 2034 }
lucaslwl 22:5c07298d3383 2035 return 0;
lucaslwl 22:5c07298d3383 2036 }
lucaslwl 22:5c07298d3383 2037
lucaslwl 22:5c07298d3383 2038 //******************************************************************************
lucaslwl 22:5c07298d3383 2039 // int MAX30001::max30001_reg_write(uint8_t addr, uint32_t data)
lucaslwl 22:5c07298d3383 2040 int MAX30001::max30001_reg_write(MAX30001_REG_map_t addr, uint32_t data) {
lucaslwl 22:5c07298d3383 2041
lucaslwl 22:5c07298d3383 2042 uint8_t result[4];
lucaslwl 22:5c07298d3383 2043 uint8_t data_array[4];
lucaslwl 22:5c07298d3383 2044 int32_t success = 0;
lucaslwl 22:5c07298d3383 2045
lucaslwl 22:5c07298d3383 2046 data_array[0] = (addr << 1) & 0xff;
lucaslwl 22:5c07298d3383 2047
lucaslwl 22:5c07298d3383 2048 data_array[3] = data & 0xff;
lucaslwl 22:5c07298d3383 2049 data_array[2] = (data >> 8) & 0xff;
lucaslwl 22:5c07298d3383 2050 data_array[1] = (data >> 16) & 0xff;
lucaslwl 22:5c07298d3383 2051
lucaslwl 22:5c07298d3383 2052 success = SPI_Transmit(&data_array[0], 4, &result[0], 4);
lucaslwl 22:5c07298d3383 2053
lucaslwl 22:5c07298d3383 2054 if (success != 0) {
lucaslwl 22:5c07298d3383 2055 return -1;
lucaslwl 22:5c07298d3383 2056 } else {
lucaslwl 22:5c07298d3383 2057 return 0;
lucaslwl 22:5c07298d3383 2058 }
lucaslwl 22:5c07298d3383 2059 }
lucaslwl 22:5c07298d3383 2060
lucaslwl 22:5c07298d3383 2061 //******************************************************************************
lucaslwl 22:5c07298d3383 2062 // int MAX30001::max30001_reg_read(uint8_t addr, uint32_t *return_data)
lucaslwl 22:5c07298d3383 2063 int MAX30001::max30001_reg_read(MAX30001_REG_map_t addr,
lucaslwl 22:5c07298d3383 2064 uint32_t *return_data) {
lucaslwl 22:5c07298d3383 2065 uint8_t result[4];
lucaslwl 22:5c07298d3383 2066 uint8_t data_array[1];
lucaslwl 22:5c07298d3383 2067 int32_t success = 0;
lucaslwl 22:5c07298d3383 2068
lucaslwl 22:5c07298d3383 2069 data_array[0] = ((addr << 1) & 0xff) | 1; // For Read, Or with 1
lucaslwl 22:5c07298d3383 2070 success = SPI_Transmit(&data_array[0], 1, &result[0], 4);
lucaslwl 22:5c07298d3383 2071 *return_data = /*result[0] + */ (uint32_t)(result[1] << 16) +
lucaslwl 22:5c07298d3383 2072 (result[2] << 8) + result[3];
lucaslwl 22:5c07298d3383 2073 if (success != 0) {
lucaslwl 22:5c07298d3383 2074 return -1;
lucaslwl 22:5c07298d3383 2075 } else {
lucaslwl 22:5c07298d3383 2076 return 0;
lucaslwl 22:5c07298d3383 2077 }
lucaslwl 22:5c07298d3383 2078 }
lucaslwl 22:5c07298d3383 2079
lucaslwl 22:5c07298d3383 2080 //******************************************************************************
lucaslwl 22:5c07298d3383 2081 int MAX30001::max30001_Enable_DcLeadOFF_Init(int8_t En_dcloff, int8_t Ipol,
lucaslwl 22:5c07298d3383 2082 int8_t Imag, int8_t Vth) {
lucaslwl 22:5c07298d3383 2083 // the leads are not touching the body
lucaslwl 22:5c07298d3383 2084
lucaslwl 22:5c07298d3383 2085 // CNFG_EMUX, Set ECGP and ECGN for external hook up...
lucaslwl 22:5c07298d3383 2086
lucaslwl 22:5c07298d3383 2087 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 2088 return -1;
lucaslwl 22:5c07298d3383 2089 }
lucaslwl 22:5c07298d3383 2090
lucaslwl 22:5c07298d3383 2091 max30001_cnfg_gen.bit.en_dcloff = En_dcloff;
lucaslwl 22:5c07298d3383 2092 max30001_cnfg_gen.bit.ipol = Ipol;
lucaslwl 22:5c07298d3383 2093 max30001_cnfg_gen.bit.imag = Imag;
lucaslwl 22:5c07298d3383 2094 max30001_cnfg_gen.bit.vth = Vth;
lucaslwl 22:5c07298d3383 2095
lucaslwl 22:5c07298d3383 2096 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 2097 return -1;
lucaslwl 22:5c07298d3383 2098 }
lucaslwl 22:5c07298d3383 2099
lucaslwl 22:5c07298d3383 2100 return 0;
lucaslwl 22:5c07298d3383 2101 }
lucaslwl 22:5c07298d3383 2102
lucaslwl 22:5c07298d3383 2103 //******************************************************************************
lucaslwl 22:5c07298d3383 2104 int MAX30001::max30001_Disable_DcLeadOFF(void) {
lucaslwl 22:5c07298d3383 2105 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 2106 return -1;
lucaslwl 22:5c07298d3383 2107 }
lucaslwl 22:5c07298d3383 2108
lucaslwl 22:5c07298d3383 2109 max30001_cnfg_gen.bit.en_dcloff = 0; // Turned off the dc lead off.
lucaslwl 22:5c07298d3383 2110
lucaslwl 22:5c07298d3383 2111 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 2112 return -1;
lucaslwl 22:5c07298d3383 2113 }
lucaslwl 22:5c07298d3383 2114
lucaslwl 22:5c07298d3383 2115 return 0;
lucaslwl 22:5c07298d3383 2116 }
lucaslwl 22:5c07298d3383 2117
lucaslwl 22:5c07298d3383 2118 //******************************************************************************
lucaslwl 22:5c07298d3383 2119 int MAX30001::max30001_BIOZ_Enable_ACLeadOFF_Init(uint8_t En_bloff,
lucaslwl 22:5c07298d3383 2120 uint8_t Bloff_hi_it,
lucaslwl 22:5c07298d3383 2121 uint8_t Bloff_lo_it) {
lucaslwl 22:5c07298d3383 2122
lucaslwl 22:5c07298d3383 2123 // CNFG_GEN
lucaslwl 22:5c07298d3383 2124 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 2125 return -1;
lucaslwl 22:5c07298d3383 2126 }
lucaslwl 22:5c07298d3383 2127
lucaslwl 22:5c07298d3383 2128 max30001_cnfg_gen.bit.en_bloff = En_bloff;
lucaslwl 22:5c07298d3383 2129
lucaslwl 22:5c07298d3383 2130 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 2131 return -1;
lucaslwl 22:5c07298d3383 2132 }
lucaslwl 22:5c07298d3383 2133
lucaslwl 22:5c07298d3383 2134 // MNGR_DYN
lucaslwl 22:5c07298d3383 2135 if (max30001_reg_read(MNGR_DYN, &max30001_mngr_dyn.all) == -1) {
lucaslwl 22:5c07298d3383 2136 return -1;
lucaslwl 22:5c07298d3383 2137 }
lucaslwl 22:5c07298d3383 2138
lucaslwl 22:5c07298d3383 2139 max30001_mngr_dyn.bit.bloff_hi_it = Bloff_hi_it;
lucaslwl 22:5c07298d3383 2140 max30001_mngr_dyn.bit.bloff_lo_it = Bloff_lo_it;
lucaslwl 22:5c07298d3383 2141
lucaslwl 22:5c07298d3383 2142 if (max30001_reg_write(MNGR_DYN, max30001_mngr_dyn.all) == -1) {
lucaslwl 22:5c07298d3383 2143 return -1;
lucaslwl 22:5c07298d3383 2144 }
lucaslwl 22:5c07298d3383 2145
lucaslwl 22:5c07298d3383 2146 return 0;
lucaslwl 22:5c07298d3383 2147 }
lucaslwl 22:5c07298d3383 2148
lucaslwl 22:5c07298d3383 2149 //******************************************************************************
lucaslwl 22:5c07298d3383 2150 int MAX30001::max30001_BIOZ_Disable_ACleadOFF(void) {
lucaslwl 22:5c07298d3383 2151 // CNFG_GEN
lucaslwl 22:5c07298d3383 2152 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 2153 return -1;
lucaslwl 22:5c07298d3383 2154 }
lucaslwl 22:5c07298d3383 2155
lucaslwl 22:5c07298d3383 2156 max30001_cnfg_gen.bit.en_bloff = 0b0; // Turns of the BIOZ AC Lead OFF feature
lucaslwl 22:5c07298d3383 2157
lucaslwl 22:5c07298d3383 2158 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 2159 return -1;
lucaslwl 22:5c07298d3383 2160 }
lucaslwl 22:5c07298d3383 2161
lucaslwl 22:5c07298d3383 2162 return 0;
lucaslwl 22:5c07298d3383 2163 }
lucaslwl 22:5c07298d3383 2164
lucaslwl 22:5c07298d3383 2165 //******************************************************************************
lucaslwl 22:5c07298d3383 2166 int MAX30001::max30001_BIOZ_Enable_BCGMON(void) {
lucaslwl 22:5c07298d3383 2167 // CNFG_BIOZ
lucaslwl 22:5c07298d3383 2168 if (max30001_reg_read(CNFG_BIOZ, &max30001_cnfg_bioz.all) == -1) {
lucaslwl 22:5c07298d3383 2169 return -1;
lucaslwl 22:5c07298d3383 2170 }
lucaslwl 22:5c07298d3383 2171
lucaslwl 22:5c07298d3383 2172 max30001_cnfg_bioz.bit.cgmon = 1;
lucaslwl 22:5c07298d3383 2173
lucaslwl 22:5c07298d3383 2174 if (max30001_reg_write(CNFG_BIOZ, max30001_cnfg_bioz.all) == -1) {
lucaslwl 22:5c07298d3383 2175 return -1;
lucaslwl 22:5c07298d3383 2176 }
lucaslwl 22:5c07298d3383 2177
lucaslwl 22:5c07298d3383 2178 max30001_reg_read(CNFG_BIOZ, &max30001_cnfg_bioz.all);
lucaslwl 22:5c07298d3383 2179
lucaslwl 22:5c07298d3383 2180 return 0;
lucaslwl 22:5c07298d3383 2181 }
lucaslwl 22:5c07298d3383 2182
lucaslwl 22:5c07298d3383 2183 #if 1
lucaslwl 22:5c07298d3383 2184 //******************************************************************************
lucaslwl 22:5c07298d3383 2185 int MAX30001::max30001_Enable_LeadON(int8_t Channel) // Channel: ECG = 0b01, BIOZ = 0b10, Disable = 0b00
lucaslwl 22:5c07298d3383 2186 {
lucaslwl 22:5c07298d3383 2187
lucaslwl 22:5c07298d3383 2188 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 2189 return -1;
lucaslwl 22:5c07298d3383 2190 }
lucaslwl 22:5c07298d3383 2191
lucaslwl 22:5c07298d3383 2192 max30001_cnfg_gen.bit.en_ecg = 0b0;
lucaslwl 22:5c07298d3383 2193 max30001_cnfg_gen.bit.en_bioz = 0b0;
lucaslwl 22:5c07298d3383 2194 max30001_cnfg_gen.bit.en_pace = 0b0;
lucaslwl 22:5c07298d3383 2195
lucaslwl 22:5c07298d3383 2196 max30001_cnfg_gen.bit.en_ulp_lon = Channel; // BIOZ ULP lead on detection...
lucaslwl 22:5c07298d3383 2197
lucaslwl 22:5c07298d3383 2198 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 2199 return -1;
lucaslwl 22:5c07298d3383 2200 }
lucaslwl 22:5c07298d3383 2201
lucaslwl 22:5c07298d3383 2202 max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all);
lucaslwl 22:5c07298d3383 2203
lucaslwl 22:5c07298d3383 2204 max30001_reg_read(STATUS, &max30001_status.all);
lucaslwl 22:5c07298d3383 2205
lucaslwl 22:5c07298d3383 2206 return 0;
lucaslwl 22:5c07298d3383 2207 }
lucaslwl 22:5c07298d3383 2208 //******************************************************************************
lucaslwl 22:5c07298d3383 2209 int MAX30001::max30001_Disable_LeadON(void) {
lucaslwl 22:5c07298d3383 2210
lucaslwl 22:5c07298d3383 2211 if (max30001_reg_read(CNFG_GEN, &max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 2212 return -1;
lucaslwl 22:5c07298d3383 2213 }
lucaslwl 22:5c07298d3383 2214
lucaslwl 22:5c07298d3383 2215 max30001_cnfg_gen.bit.en_ulp_lon = 0b0;
lucaslwl 22:5c07298d3383 2216
lucaslwl 22:5c07298d3383 2217 if (max30001_reg_write(CNFG_GEN, max30001_cnfg_gen.all) == -1) {
lucaslwl 22:5c07298d3383 2218 return -1;
lucaslwl 22:5c07298d3383 2219 }
lucaslwl 22:5c07298d3383 2220
lucaslwl 22:5c07298d3383 2221 return 0;
lucaslwl 22:5c07298d3383 2222 }
lucaslwl 22:5c07298d3383 2223 #endif
lucaslwl 22:5c07298d3383 2224 //******************************************************************************
lucaslwl 22:5c07298d3383 2225 #define LEADOFF_SERVICE_TIME 0x2000 // 0x1000 = 1 second
lucaslwl 22:5c07298d3383 2226 #define LEADOFF_NUMSTATES 2
lucaslwl 22:5c07298d3383 2227 uint32_t leadoffState = 0;
lucaslwl 22:5c07298d3383 2228 uint32_t max30001_LeadOffoldTime = 0;
lucaslwl 22:5c07298d3383 2229 void MAX30001::max30001_ServiceLeadoff(uint32_t currentTime) {
lucaslwl 22:5c07298d3383 2230
lucaslwl 22:5c07298d3383 2231 uint32_t delta_Time;
lucaslwl 22:5c07298d3383 2232
lucaslwl 22:5c07298d3383 2233 delta_Time = currentTime - max30001_LeadOffoldTime;
lucaslwl 22:5c07298d3383 2234
lucaslwl 22:5c07298d3383 2235 if (delta_Time > LEADOFF_SERVICE_TIME) {
lucaslwl 22:5c07298d3383 2236 switch (leadoffState) {
lucaslwl 22:5c07298d3383 2237 case 0: /* switch to ECG DC Lead OFF */
lucaslwl 22:5c07298d3383 2238 max30001_Enable_DcLeadOFF_Init(0b01, 0b0, 0b001, 0b00);
lucaslwl 22:5c07298d3383 2239 break;
lucaslwl 22:5c07298d3383 2240
lucaslwl 22:5c07298d3383 2241 case 1: /* switch to BIOZ DC Lead OFF */
lucaslwl 22:5c07298d3383 2242 max30001_Enable_DcLeadOFF_Init(0b10, 0b0, 0b001, 0b00);
lucaslwl 22:5c07298d3383 2243 break;
lucaslwl 22:5c07298d3383 2244 }
lucaslwl 22:5c07298d3383 2245
lucaslwl 22:5c07298d3383 2246 leadoffState++;
lucaslwl 22:5c07298d3383 2247 leadoffState %= LEADOFF_NUMSTATES;
lucaslwl 22:5c07298d3383 2248
lucaslwl 22:5c07298d3383 2249 max30001_LeadOffoldTime = currentTime;
lucaslwl 22:5c07298d3383 2250 }
lucaslwl 22:5c07298d3383 2251 }
lucaslwl 22:5c07298d3383 2252 //******************************************************************************
lucaslwl 22:5c07298d3383 2253 #define LEADON_SERVICE_TIME 0x2000 // 0x1000 = 1 second
lucaslwl 22:5c07298d3383 2254 #define LEADON_NUMSTATES 2
lucaslwl 22:5c07298d3383 2255 uint32_t leadOnState = 0;
lucaslwl 22:5c07298d3383 2256 uint32_t max30001_LeadOnoldTime = 0;
lucaslwl 22:5c07298d3383 2257 void MAX30001::max30001_ServiceLeadON(uint32_t currentTime) {
lucaslwl 22:5c07298d3383 2258
lucaslwl 22:5c07298d3383 2259 uint32_t delta_Time;
lucaslwl 22:5c07298d3383 2260
lucaslwl 22:5c07298d3383 2261 delta_Time = currentTime - max30001_LeadOnoldTime;
lucaslwl 22:5c07298d3383 2262
lucaslwl 22:5c07298d3383 2263 if (delta_Time > LEADON_SERVICE_TIME) {
lucaslwl 22:5c07298d3383 2264 switch (leadOnState) {
lucaslwl 22:5c07298d3383 2265 case 0: /* switch to ECG DC Lead ON */
lucaslwl 22:5c07298d3383 2266 max30001_Enable_LeadON(0b01);
lucaslwl 22:5c07298d3383 2267 break;
lucaslwl 22:5c07298d3383 2268
lucaslwl 22:5c07298d3383 2269 case 1: /* switch to BIOZ DC Lead ON */
lucaslwl 22:5c07298d3383 2270 max30001_Enable_LeadON(0b10);
lucaslwl 22:5c07298d3383 2271 break;
lucaslwl 22:5c07298d3383 2272 }
lucaslwl 22:5c07298d3383 2273
lucaslwl 22:5c07298d3383 2274 leadOnState++;
lucaslwl 22:5c07298d3383 2275 leadOnState %= LEADON_NUMSTATES;
lucaslwl 22:5c07298d3383 2276
lucaslwl 22:5c07298d3383 2277 max30001_LeadOnoldTime = currentTime;
lucaslwl 22:5c07298d3383 2278 }
lucaslwl 22:5c07298d3383 2279 }
lucaslwl 22:5c07298d3383 2280
lucaslwl 22:5c07298d3383 2281 //******************************************************************************
lucaslwl 22:5c07298d3383 2282 int MAX30001::max30001_FIFO_LeadONOff_Read(void) {
lucaslwl 22:5c07298d3383 2283
lucaslwl 22:5c07298d3383 2284 uint8_t result[32 * 3]; // 32words - 3bytes each
lucaslwl 22:5c07298d3383 2285
lucaslwl 22:5c07298d3383 2286 uint8_t data_array[4];
lucaslwl 22:5c07298d3383 2287 int32_t success = 0;
lucaslwl 22:5c07298d3383 2288 int i, j;
lucaslwl 22:5c07298d3383 2289
lucaslwl 22:5c07298d3383 2290 uint32_t total_databytes;
lucaslwl 22:5c07298d3383 2291 uint8_t i_index;
lucaslwl 22:5c07298d3383 2292 uint8_t data_chunk;
lucaslwl 22:5c07298d3383 2293 uint8_t loop_logic;
lucaslwl 22:5c07298d3383 2294
lucaslwl 22:5c07298d3383 2295 uint8_t etag, ptag, btag;
lucaslwl 22:5c07298d3383 2296
lucaslwl 22:5c07298d3383 2297 uint8_t adr;
lucaslwl 22:5c07298d3383 2298
lucaslwl 22:5c07298d3383 2299 int8_t ReadAllPaceOnce;
lucaslwl 22:5c07298d3383 2300
lucaslwl 22:5c07298d3383 2301 static uint8_t dcloffint_OneShot = 0;
lucaslwl 22:5c07298d3383 2302 static uint8_t acloffint_OneShot = 0;
lucaslwl 22:5c07298d3383 2303 static uint8_t bcgmon_OneShot = 0;
lucaslwl 22:5c07298d3383 2304 static uint8_t acleadon_OneShot = 0;
lucaslwl 22:5c07298d3383 2305
lucaslwl 22:5c07298d3383 2306 int8_t ret_val;
lucaslwl 22:5c07298d3383 2307
lucaslwl 22:5c07298d3383 2308 if (max30001_status.bit.eint == 1 || max30001_status.bit.pint == 1) {
lucaslwl 22:5c07298d3383 2309 adr = ECG_FIFO_BURST;
lucaslwl 22:5c07298d3383 2310 data_array[0] = ((adr << 1) & 0xff) | 1;
lucaslwl 22:5c07298d3383 2311
lucaslwl 22:5c07298d3383 2312 // The SPI routine only sends out data of 32 bytes in size. Therefore the
lucaslwl 22:5c07298d3383 2313 // data is being read in
lucaslwl 22:5c07298d3383 2314 // smaller chunks in this routine...
lucaslwl 22:5c07298d3383 2315
lucaslwl 22:5c07298d3383 2316 total_databytes = (max30001_mngr_int.bit.e_fit + 1) * 3;
lucaslwl 22:5c07298d3383 2317
lucaslwl 22:5c07298d3383 2318 i_index = 0;
lucaslwl 22:5c07298d3383 2319 loop_logic = 1;
lucaslwl 22:5c07298d3383 2320
lucaslwl 22:5c07298d3383 2321 while (loop_logic) {
lucaslwl 22:5c07298d3383 2322 if (total_databytes > 30) {
lucaslwl 22:5c07298d3383 2323 data_chunk = 30;
lucaslwl 22:5c07298d3383 2324 total_databytes = total_databytes - 30;
lucaslwl 22:5c07298d3383 2325 } else {
lucaslwl 22:5c07298d3383 2326 data_chunk = total_databytes;
lucaslwl 22:5c07298d3383 2327 loop_logic = 0;
lucaslwl 22:5c07298d3383 2328 }
lucaslwl 22:5c07298d3383 2329
lucaslwl 22:5c07298d3383 2330 /* The extra 1 byte is for the extra byte that comes out of the SPI */
lucaslwl 22:5c07298d3383 2331 success = SPI_Transmit(&data_array[0], 1, &result[i_index], (data_chunk + 1)); // Make a copy of the FIFO over here...
lucaslwl 22:5c07298d3383 2332
lucaslwl 22:5c07298d3383 2333 if (success != 0) {
lucaslwl 22:5c07298d3383 2334 return -1;
lucaslwl 22:5c07298d3383 2335 }
lucaslwl 22:5c07298d3383 2336
lucaslwl 22:5c07298d3383 2337 /* This is important, because every transaction above creates an empty
lucaslwl 22:5c07298d3383 2338 * redundant data at result[0] */
lucaslwl 22:5c07298d3383 2339 for (j = i_index; j < (data_chunk + i_index); j++) /* get rid of the 1 extra byte by moving the whole array up one */
lucaslwl 22:5c07298d3383 2340 {
lucaslwl 22:5c07298d3383 2341 result[j] = result[j + 1];
lucaslwl 22:5c07298d3383 2342 }
lucaslwl 22:5c07298d3383 2343
lucaslwl 22:5c07298d3383 2344 i_index = i_index + 30; /* point to the next array location to put the data in */
lucaslwl 22:5c07298d3383 2345 }
lucaslwl 22:5c07298d3383 2346
lucaslwl 22:5c07298d3383 2347 ReadAllPaceOnce = 0;
lucaslwl 22:5c07298d3383 2348
lucaslwl 22:5c07298d3383 2349 /* Put the content of the FIFO based on the EFIT value, We ignore the
lucaslwl 22:5c07298d3383 2350 * result[0] and start concatenating indexes: 1,2,3 - 4,5,6 - 7,8,9 - */
lucaslwl 22:5c07298d3383 2351 for (i = 0, j = 0; i < max30001_mngr_int.bit.e_fit + 1; i++, j = j + 3) // index1=23-16 bit, index2=15-8 bit, index3=7-0 bit
lucaslwl 22:5c07298d3383 2352 {
lucaslwl 22:5c07298d3383 2353 max30001_ECG_FIFO_buffer[i] = ((uint32_t)result[j] << 16) + (result[j + 1] << 8) + result[j + 2];
lucaslwl 22:5c07298d3383 2354
lucaslwl 22:5c07298d3383 2355 etag = (0b00111000 & result[j + 2]) >> 3;
lucaslwl 22:5c07298d3383 2356 ptag = 0b00000111 & result[j + 2];
lucaslwl 22:5c07298d3383 2357
lucaslwl 22:5c07298d3383 2358 if (ptag != 0b111 && ReadAllPaceOnce == 0) {
lucaslwl 22:5c07298d3383 2359
lucaslwl 22:5c07298d3383 2360 ReadAllPaceOnce = 1; // This will prevent extra read of PACE, once group
lucaslwl 22:5c07298d3383 2361 // 0-5 is read ONCE.
lucaslwl 22:5c07298d3383 2362
lucaslwl 22:5c07298d3383 2363 adr = PACE0_FIFO_BURST;
lucaslwl 22:5c07298d3383 2364
lucaslwl 22:5c07298d3383 2365 data_array[0] = ((adr << 1) & 0xff) | 1; // For Read Or with 1
lucaslwl 22:5c07298d3383 2366
lucaslwl 22:5c07298d3383 2367 success = SPI_Transmit(&data_array[0], 1, &result[0], 10);
lucaslwl 22:5c07298d3383 2368
lucaslwl 22:5c07298d3383 2369 max30001_PACE[0] = (uint32_t)(result[1] << 16) + (result[2] << 8) + result[3];
lucaslwl 22:5c07298d3383 2370 max30001_PACE[1] = (uint32_t)(result[4] << 16) + (result[5] << 8) + result[6];
lucaslwl 22:5c07298d3383 2371 max30001_PACE[2] = (uint32_t)(result[7] << 16) + (result[8] << 8) + result[9];
lucaslwl 22:5c07298d3383 2372
lucaslwl 22:5c07298d3383 2373 adr = PACE1_FIFO_BURST;
lucaslwl 22:5c07298d3383 2374
lucaslwl 22:5c07298d3383 2375 data_array[0] = ((adr << 1) & 0xff) | 1; // For Read Or with 1
lucaslwl 22:5c07298d3383 2376
lucaslwl 22:5c07298d3383 2377 success = SPI_Transmit(&data_array[0], 1, &result[0], 10);
lucaslwl 22:5c07298d3383 2378
lucaslwl 22:5c07298d3383 2379 max30001_PACE[3] = (uint32_t)(result[1] << 16) + (result[2] << 8) + result[3];
lucaslwl 22:5c07298d3383 2380 max30001_PACE[4] = (uint32_t)(result[4] << 16) + (result[5] << 8) + result[6];
lucaslwl 22:5c07298d3383 2381 max30001_PACE[5] = (uint32_t)(result[7] << 16) + (result[8] << 8) + result[9];
lucaslwl 22:5c07298d3383 2382
lucaslwl 22:5c07298d3383 2383 adr = PACE2_FIFO_BURST;
lucaslwl 22:5c07298d3383 2384
lucaslwl 22:5c07298d3383 2385 data_array[0] = ((adr << 1) & 0xff) | 1; // For Read Or with 1
lucaslwl 22:5c07298d3383 2386
lucaslwl 22:5c07298d3383 2387 success = SPI_Transmit(&data_array[0], 1, &result[0], 10);
lucaslwl 22:5c07298d3383 2388
lucaslwl 22:5c07298d3383 2389 max30001_PACE[6] = (uint32_t)(result[1] << 16) + (result[2] << 8) + result[3];
lucaslwl 22:5c07298d3383 2390 max30001_PACE[7] = (uint32_t)(result[4] << 16) + (result[5] << 8) + result[6];
lucaslwl 22:5c07298d3383 2391 max30001_PACE[8] = (uint32_t)(result[7] << 16) + (result[8] << 8) + result[9];
lucaslwl 22:5c07298d3383 2392
lucaslwl 22:5c07298d3383 2393 adr = PACE3_FIFO_BURST;
lucaslwl 22:5c07298d3383 2394
lucaslwl 22:5c07298d3383 2395 data_array[0] = ((adr << 1) & 0xff) | 1; // For Read Or with 1
lucaslwl 22:5c07298d3383 2396
lucaslwl 22:5c07298d3383 2397 success = SPI_Transmit(&data_array[0], 1, &result[0], 10);
lucaslwl 22:5c07298d3383 2398
lucaslwl 22:5c07298d3383 2399 max30001_PACE[9] = (uint32_t)(result[1] << 16) + (result[2] << 8) + result[3];
lucaslwl 22:5c07298d3383 2400 max30001_PACE[10] = (uint32_t)(result[4] << 16) + (result[5] << 8) + result[6];
lucaslwl 22:5c07298d3383 2401 max30001_PACE[11] = (uint32_t)(result[7] << 16) + (result[8] << 8) + result[9];
lucaslwl 22:5c07298d3383 2402
lucaslwl 22:5c07298d3383 2403 adr = PACE4_FIFO_BURST;
lucaslwl 22:5c07298d3383 2404
lucaslwl 22:5c07298d3383 2405 data_array[0] = ((adr << 1) & 0xff) | 1; // For Read Or with 1
lucaslwl 22:5c07298d3383 2406
lucaslwl 22:5c07298d3383 2407 success = SPI_Transmit(&data_array[0], 1, &result[0], 10);
lucaslwl 22:5c07298d3383 2408
lucaslwl 22:5c07298d3383 2409 max30001_PACE[12] = (uint32_t)(result[1] << 16) + (result[2] << 8) + result[3];
lucaslwl 22:5c07298d3383 2410 max30001_PACE[13] = (uint32_t)(result[4] << 16) + (result[5] << 8) + result[6];
lucaslwl 22:5c07298d3383 2411 max30001_PACE[14] = (uint32_t)(result[7] << 16) + (result[8] << 8) + result[9];
lucaslwl 22:5c07298d3383 2412
lucaslwl 22:5c07298d3383 2413 adr = PACE5_FIFO_BURST;
lucaslwl 22:5c07298d3383 2414
lucaslwl 22:5c07298d3383 2415 data_array[0] = ((adr << 1) & 0xff) | 1; // For Read Or with 1
lucaslwl 22:5c07298d3383 2416
lucaslwl 22:5c07298d3383 2417 success = SPI_Transmit(&data_array[0], 1, &result[0], 10);
lucaslwl 22:5c07298d3383 2418
lucaslwl 22:5c07298d3383 2419 max30001_PACE[15] = (uint32_t)(result[1] << 16) + (result[2] << 8) + result[3];
lucaslwl 22:5c07298d3383 2420 max30001_PACE[16] = (uint32_t)(result[4] << 16) + (result[5] << 8) + result[6];
lucaslwl 22:5c07298d3383 2421 max30001_PACE[17] = (uint32_t)(result[7] << 16) + (result[8] << 8) + result[9];
lucaslwl 22:5c07298d3383 2422
lucaslwl 22:5c07298d3383 2423 dataAvailable(MAX30001_DATA_PACE, max30001_PACE, 18); // Send out the Pace data once only
lucaslwl 22:5c07298d3383 2424 }
lucaslwl 22:5c07298d3383 2425 }
lucaslwl 22:5c07298d3383 2426
lucaslwl 22:5c07298d3383 2427 if (etag != 0b110) {
lucaslwl 22:5c07298d3383 2428
lucaslwl 22:5c07298d3383 2429 dataAvailable(MAX30001_DATA_ECG, max30001_ECG_FIFO_buffer, (max30001_mngr_int.bit.e_fit + 1));
lucaslwl 22:5c07298d3383 2430 }
lucaslwl 22:5c07298d3383 2431
lucaslwl 22:5c07298d3383 2432 } /* End of ECG init */
lucaslwl 22:5c07298d3383 2433
lucaslwl 22:5c07298d3383 2434 /* RtoR */
lucaslwl 22:5c07298d3383 2435
lucaslwl 22:5c07298d3383 2436 if (max30001_status.bit.rrint == 1) {
lucaslwl 22:5c07298d3383 2437 if (max30001_reg_read(RTOR, &max30001_RtoR_data) == -1) {
lucaslwl 22:5c07298d3383 2438 return -1;
lucaslwl 22:5c07298d3383 2439 }
lucaslwl 22:5c07298d3383 2440
lucaslwl 22:5c07298d3383 2441 max30001_RtoR_data = (0x00FFFFFF & max30001_RtoR_data) >> 10;
lucaslwl 22:5c07298d3383 2442
lucaslwl 22:5c07298d3383 2443 hspValMax30001.R2R = (uint16_t)max30001_RtoR_data;
lucaslwl 22:5c07298d3383 2444 hspValMax30001.fmstr = (uint16_t)max30001_cnfg_gen.bit.fmstr;
lucaslwl 22:5c07298d3383 2445
lucaslwl 22:5c07298d3383 2446 dataAvailable(MAX30001_DATA_RTOR, &max30001_RtoR_data, 1);
lucaslwl 22:5c07298d3383 2447 }
lucaslwl 22:5c07298d3383 2448
lucaslwl 22:5c07298d3383 2449 // Handling BIOZ data...
lucaslwl 22:5c07298d3383 2450
lucaslwl 22:5c07298d3383 2451 if (max30001_status.bit.bint == 1) {
lucaslwl 22:5c07298d3383 2452 adr = 0x22;
lucaslwl 22:5c07298d3383 2453 data_array[0] = ((adr << 1) & 0xff) | 1;
lucaslwl 22:5c07298d3383 2454
lucaslwl 22:5c07298d3383 2455 /* [(BFIT+1)*3byte]+1extra byte due to the addr */
lucaslwl 22:5c07298d3383 2456
lucaslwl 22:5c07298d3383 2457 if (SPI_Transmit(&data_array[0], 1, &result[0],((max30001_mngr_int.bit.b_fit + 1) * 3) + 1) == -1) // Make a copy of the FIFO over here...
lucaslwl 22:5c07298d3383 2458
lucaslwl 22:5c07298d3383 2459 {
lucaslwl 22:5c07298d3383 2460 return -1;
lucaslwl 22:5c07298d3383 2461 }
lucaslwl 22:5c07298d3383 2462
lucaslwl 22:5c07298d3383 2463 btag = 0b00000111 & result[3];
lucaslwl 22:5c07298d3383 2464
lucaslwl 22:5c07298d3383 2465 /* Put the content of the FIFO based on the BFIT value, We ignore the
lucaslwl 22:5c07298d3383 2466 * result[0] and start concatenating indexes: 1,2,3 - 4,5,6 - 7,8,9 - */
lucaslwl 22:5c07298d3383 2467 for (i = 0, j = 0; i < max30001_mngr_int.bit.b_fit + 1; i++, j = j + 3) // index1=23-16 bit, index2=15-8 bit, index3=7-0 bit
lucaslwl 22:5c07298d3383 2468 {
lucaslwl 22:5c07298d3383 2469 max30001_BIOZ_FIFO_buffer[i] = ((uint32_t)result[j + 1] << 16) + (result[j + 2] << 8) + result[j + 3];
lucaslwl 22:5c07298d3383 2470 }
lucaslwl 22:5c07298d3383 2471
lucaslwl 22:5c07298d3383 2472 if (btag != 0b110) {
lucaslwl 22:5c07298d3383 2473 dataAvailable(MAX30001_DATA_BIOZ, max30001_BIOZ_FIFO_buffer, 8);
lucaslwl 22:5c07298d3383 2474 }
lucaslwl 22:5c07298d3383 2475 }
lucaslwl 22:5c07298d3383 2476
lucaslwl 22:5c07298d3383 2477 ret_val = 0;
lucaslwl 22:5c07298d3383 2478
lucaslwl 22:5c07298d3383 2479 if (max30001_status.bit.dcloffint == 1) // ECG/BIOZ Lead Off
lucaslwl 22:5c07298d3383 2480 {
lucaslwl 22:5c07298d3383 2481 dcloffint_OneShot = 1;
lucaslwl 22:5c07298d3383 2482 max30001_DCLeadOff = 0;
lucaslwl 22:5c07298d3383 2483 max30001_DCLeadOff = max30001_DCLeadOff | (max30001_cnfg_gen.bit.en_dcloff << 8) | (max30001_status.all & 0x00000F);
lucaslwl 22:5c07298d3383 2484 dataAvailable(MAX30001_DATA_LEADOFF_DC, &max30001_DCLeadOff, 1);
lucaslwl 22:5c07298d3383 2485 // Do a FIFO Reset
lucaslwl 22:5c07298d3383 2486 max30001_reg_write(FIFO_RST, 0x000000);
lucaslwl 22:5c07298d3383 2487
lucaslwl 22:5c07298d3383 2488 ret_val = 0b100;
lucaslwl 22:5c07298d3383 2489
lucaslwl 22:5c07298d3383 2490 } else if (dcloffint_OneShot == 1 && max30001_status.bit.dcloffint == 0) // Just send once when it comes out of dc lead off
lucaslwl 22:5c07298d3383 2491 {
lucaslwl 22:5c07298d3383 2492 max30001_DCLeadOff = 0;
lucaslwl 22:5c07298d3383 2493 max30001_DCLeadOff = max30001_DCLeadOff | (max30001_cnfg_gen.bit.en_dcloff << 8) | (max30001_status.all & 0x00000F);
lucaslwl 22:5c07298d3383 2494 dataAvailable(MAX30001_DATA_LEADOFF_DC, &max30001_DCLeadOff, 1);
lucaslwl 22:5c07298d3383 2495 dcloffint_OneShot = 0;
lucaslwl 22:5c07298d3383 2496 }
lucaslwl 22:5c07298d3383 2497
lucaslwl 22:5c07298d3383 2498 if (max30001_status.bit.bover == 1 || max30001_status.bit.bundr == 1) // BIOZ AC Lead Off
lucaslwl 22:5c07298d3383 2499 {
lucaslwl 22:5c07298d3383 2500 acloffint_OneShot = 1;
lucaslwl 22:5c07298d3383 2501 max30001_ACLeadOff = 0;
lucaslwl 22:5c07298d3383 2502 max30001_ACLeadOff =
lucaslwl 22:5c07298d3383 2503 max30001_ACLeadOff | ((max30001_status.all & 0x030000) >> 16);
lucaslwl 22:5c07298d3383 2504 dataAvailable(MAX30001_DATA_LEADOFF_AC, &max30001_ACLeadOff, 1);
lucaslwl 22:5c07298d3383 2505 // Do a FIFO Reset
lucaslwl 22:5c07298d3383 2506 max30001_reg_write(FIFO_RST, 0x000000);
lucaslwl 22:5c07298d3383 2507
lucaslwl 22:5c07298d3383 2508 ret_val = 0b1000;
lucaslwl 22:5c07298d3383 2509 } else if (acloffint_OneShot == 1 && max30001_status.bit.bover == 0 && max30001_status.bit.bundr == 0) // Just send once when it comes out of ac lead off
lucaslwl 22:5c07298d3383 2510 {
lucaslwl 22:5c07298d3383 2511 max30001_ACLeadOff = 0;
lucaslwl 22:5c07298d3383 2512 max30001_ACLeadOff = max30001_ACLeadOff | ((max30001_status.all & 0x030000) >> 16);
lucaslwl 22:5c07298d3383 2513 dataAvailable(MAX30001_DATA_LEADOFF_AC, &max30001_ACLeadOff, 1);
lucaslwl 22:5c07298d3383 2514 acloffint_OneShot = 0;
lucaslwl 22:5c07298d3383 2515 }
lucaslwl 22:5c07298d3383 2516
lucaslwl 22:5c07298d3383 2517 if (max30001_status.bit.bcgmon == 1) // BIOZ BCGMON check
lucaslwl 22:5c07298d3383 2518 {
lucaslwl 22:5c07298d3383 2519 bcgmon_OneShot = 1;
lucaslwl 22:5c07298d3383 2520 max30001_bcgmon = 0;
lucaslwl 22:5c07298d3383 2521 max30001_bcgmon = max30001_bcgmon | ((max30001_status.all & 0x000030) >> 4);
lucaslwl 22:5c07298d3383 2522 dataAvailable(MAX30001_DATA_BCGMON, &max30001_bcgmon, 1);
lucaslwl 22:5c07298d3383 2523 // Do a FIFO Reset
lucaslwl 22:5c07298d3383 2524 max30001_reg_write(FIFO_RST, 0x000000);
lucaslwl 22:5c07298d3383 2525
lucaslwl 22:5c07298d3383 2526 ret_val = 0b10000;
lucaslwl 22:5c07298d3383 2527 } else if (bcgmon_OneShot == 1 && max30001_status.bit.bcgmon == 0) {
lucaslwl 22:5c07298d3383 2528 max30001_bcgmon = 0;
lucaslwl 22:5c07298d3383 2529 max30001_bcgmon = max30001_bcgmon | ((max30001_status.all & 0x000030) >> 4);
lucaslwl 22:5c07298d3383 2530 bcgmon_OneShot = 0;
lucaslwl 22:5c07298d3383 2531 dataAvailable(MAX30001_DATA_BCGMON, &max30001_bcgmon, 1);
lucaslwl 22:5c07298d3383 2532 }
lucaslwl 22:5c07298d3383 2533
lucaslwl 22:5c07298d3383 2534 #if 0
lucaslwl 22:5c07298d3383 2535 if(max30001_status.bit.lonint == 1) // AC LeadON Check
lucaslwl 22:5c07298d3383 2536 {
lucaslwl 22:5c07298d3383 2537 max30001_LeadOn = 0;
lucaslwl 22:5c07298d3383 2538 max30001_reg_read(STATUS,&max30001_status.all); // Reading is important
lucaslwl 22:5c07298d3383 2539 max30001_LeadOn = max30001_LeadOn | (max30001_cnfg_gen.bit.en_ulp_lon << 8) | ((max30001_status.all & 0x000800) >> 11); // 0b01 will mean ECG Lead On, 0b10 will mean BIOZ Lead On
lucaslwl 22:5c07298d3383 2540 // LEAD ON has been detected... Now take actions
lucaslwl 22:5c07298d3383 2541 }
lucaslwl 22:5c07298d3383 2542 #endif
lucaslwl 22:5c07298d3383 2543
lucaslwl 22:5c07298d3383 2544 if (max30001_status.bit.lonint == 1 &&
lucaslwl 22:5c07298d3383 2545 acleadon_OneShot == 0) // AC LeadON Check, when lead is on
lucaslwl 22:5c07298d3383 2546 {
lucaslwl 22:5c07298d3383 2547 max30001_LeadOn = 0;
lucaslwl 22:5c07298d3383 2548 max30001_reg_read(STATUS, &max30001_status.all); // Reading is important
lucaslwl 22:5c07298d3383 2549 max30001_LeadOn =
lucaslwl 22:5c07298d3383 2550 max30001_LeadOn | (max30001_cnfg_gen.bit.en_ulp_lon << 8) |
lucaslwl 22:5c07298d3383 2551 ((max30001_status.all & 0x000800) >>
lucaslwl 22:5c07298d3383 2552 11); // 0b01 will mean ECG Lead On, 0b10 will mean BIOZ Lead On
lucaslwl 22:5c07298d3383 2553
lucaslwl 22:5c07298d3383 2554 // LEAD ON has been detected... Now take actions
lucaslwl 22:5c07298d3383 2555 acleadon_OneShot = 1;
lucaslwl 22:5c07298d3383 2556 dataAvailable(MAX30001_DATA_ACLEADON, &max30001_LeadOn, 1); // One shot data will be sent...
lucaslwl 22:5c07298d3383 2557 } else if (max30001_status.bit.lonint == 0 && acleadon_OneShot == 1) {
lucaslwl 22:5c07298d3383 2558 max30001_LeadOn = 0;
lucaslwl 22:5c07298d3383 2559 max30001_reg_read(STATUS, &max30001_status.all);
lucaslwl 22:5c07298d3383 2560 max30001_LeadOn =
lucaslwl 22:5c07298d3383 2561 max30001_LeadOn | (max30001_cnfg_gen.bit.en_ulp_lon << 8) | ((max30001_status.all & 0x000800) >> 11); // 0b01 will mean ECG Lead On, 0b10 will mean BIOZ Lead On
lucaslwl 22:5c07298d3383 2562 dataAvailable(MAX30001_DATA_ACLEADON, &max30001_LeadOn, 1); // One shot data will be sent...
lucaslwl 22:5c07298d3383 2563 acleadon_OneShot = 0;
lucaslwl 22:5c07298d3383 2564 }
lucaslwl 22:5c07298d3383 2565
lucaslwl 22:5c07298d3383 2566 return ret_val;
lucaslwl 22:5c07298d3383 2567 }
lucaslwl 22:5c07298d3383 2568
lucaslwl 22:5c07298d3383 2569 //******************************************************************************
lucaslwl 22:5c07298d3383 2570
lucaslwl 22:5c07298d3383 2571 int MAX30001::max30001_int_handler(void) {
lucaslwl 22:5c07298d3383 2572
lucaslwl 22:5c07298d3383 2573 static uint32_t InitReset = 0;
lucaslwl 22:5c07298d3383 2574
lucaslwl 22:5c07298d3383 2575 int8_t return_value;
lucaslwl 22:5c07298d3383 2576
lucaslwl 22:5c07298d3383 2577 max30001_reg_read(STATUS, &max30001_status.all);
lucaslwl 22:5c07298d3383 2578
lucaslwl 22:5c07298d3383 2579 // Inital Reset and any FIFO over flow invokes a FIFO reset
lucaslwl 22:5c07298d3383 2580 if (InitReset == 0 || max30001_status.bit.eovf == 1 || max30001_status.bit.bovf == 1 || max30001_status.bit.povf == 1) {
lucaslwl 22:5c07298d3383 2581 // Do a FIFO Reset
lucaslwl 22:5c07298d3383 2582 max30001_reg_write(FIFO_RST, 0x000000);
lucaslwl 22:5c07298d3383 2583
lucaslwl 22:5c07298d3383 2584 InitReset++;
lucaslwl 22:5c07298d3383 2585 return 2;
lucaslwl 22:5c07298d3383 2586 }
lucaslwl 22:5c07298d3383 2587
lucaslwl 22:5c07298d3383 2588 return_value = 0;
lucaslwl 22:5c07298d3383 2589
lucaslwl 22:5c07298d3383 2590 // The four data handling goes on over here
lucaslwl 22:5c07298d3383 2591 if (max30001_status.bit.eint == 1 || max30001_status.bit.pint == 1 || max30001_status.bit.bint == 1 || max30001_status.bit.rrint == 1) {
lucaslwl 22:5c07298d3383 2592 return_value = return_value | max30001_FIFO_LeadONOff_Read();
lucaslwl 22:5c07298d3383 2593 }
lucaslwl 22:5c07298d3383 2594
lucaslwl 22:5c07298d3383 2595 // ECG/BIOZ DC Lead Off test
lucaslwl 22:5c07298d3383 2596 if (max30001_status.bit.dcloffint == 1) {
lucaslwl 22:5c07298d3383 2597 return_value = return_value | max30001_FIFO_LeadONOff_Read();
lucaslwl 22:5c07298d3383 2598 }
lucaslwl 22:5c07298d3383 2599
lucaslwl 22:5c07298d3383 2600 // BIOZ AC Lead Off test
lucaslwl 22:5c07298d3383 2601 if (max30001_status.bit.bover == 1 || max30001_status.bit.bundr == 1) {
lucaslwl 22:5c07298d3383 2602 return_value = return_value | max30001_FIFO_LeadONOff_Read();
lucaslwl 22:5c07298d3383 2603 }
lucaslwl 22:5c07298d3383 2604
lucaslwl 22:5c07298d3383 2605 // BIOZ DRVP/N test using BCGMON.
lucaslwl 22:5c07298d3383 2606 if (max30001_status.bit.bcgmon == 1) {
lucaslwl 22:5c07298d3383 2607 return_value = return_value | max30001_FIFO_LeadONOff_Read();
lucaslwl 22:5c07298d3383 2608 }
lucaslwl 22:5c07298d3383 2609
lucaslwl 22:5c07298d3383 2610 if (max30001_status.bit.lonint == 1) // ECG Lead ON test: i.e. the leads are touching the body...
lucaslwl 22:5c07298d3383 2611 {
lucaslwl 22:5c07298d3383 2612
lucaslwl 22:5c07298d3383 2613 max30001_FIFO_LeadONOff_Read();
lucaslwl 22:5c07298d3383 2614 }
lucaslwl 22:5c07298d3383 2615
lucaslwl 22:5c07298d3383 2616 return return_value;
lucaslwl 22:5c07298d3383 2617 }
lucaslwl 22:5c07298d3383 2618
lucaslwl 22:5c07298d3383 2619 /// function pointer to the async callback
lucaslwl 22:5c07298d3383 2620 static event_callback_t functionpointer;
lucaslwl 22:5c07298d3383 2621 /// flag used to indicate an async xfer has taken place
lucaslwl 22:5c07298d3383 2622 static volatile int xferFlag = 0;
lucaslwl 22:5c07298d3383 2623
lucaslwl 22:5c07298d3383 2624 /**
lucaslwl 22:5c07298d3383 2625 * @brief Callback handler for SPI async events
lucaslwl 22:5c07298d3383 2626 * @param events description of event that occurred
lucaslwl 22:5c07298d3383 2627 */
lucaslwl 22:5c07298d3383 2628 static void spiHandler(int events) { xferFlag = 1; }
lucaslwl 22:5c07298d3383 2629
lucaslwl 22:5c07298d3383 2630 /**
lucaslwl 22:5c07298d3383 2631 * @brief Transmit and recieve QUAD SPI data
lucaslwl 22:5c07298d3383 2632 * @param tx_buf pointer to transmit byte buffer
lucaslwl 22:5c07298d3383 2633 * @param tx_size number of bytes to transmit
lucaslwl 22:5c07298d3383 2634 * @param rx_buf pointer to the recieve buffer
lucaslwl 22:5c07298d3383 2635 * @param rx_size number of bytes to recieve
lucaslwl 22:5c07298d3383 2636 */
lucaslwl 22:5c07298d3383 2637 int MAX30001::SPI_Transmit(const uint8_t *tx_buf, uint32_t tx_size, uint8_t *rx_buf, uint32_t rx_size) {
lucaslwl 22:5c07298d3383 2638 xferFlag = 0;
lucaslwl 22:5c07298d3383 2639 int i;
lucaslwl 22:5c07298d3383 2640 for (i = 0; i < sizeof(buffer); i++) {
lucaslwl 22:5c07298d3383 2641 if (i < tx_size)
lucaslwl 22:5c07298d3383 2642 buffer[i] = tx_buf[i];
lucaslwl 22:5c07298d3383 2643 else
lucaslwl 22:5c07298d3383 2644 buffer[i] = 0xFF;
lucaslwl 22:5c07298d3383 2645 }
lucaslwl 22:5c07298d3383 2646 spi->transfer<uint8_t>(buffer, (int)rx_size, rx_buf, (int)rx_size, spiHandler /* functionpointer */);
lucaslwl 22:5c07298d3383 2647 while (xferFlag == 0);
lucaslwl 22:5c07298d3383 2648 return 0;
lucaslwl 22:5c07298d3383 2649 }
lucaslwl 22:5c07298d3383 2650
lucaslwl 22:5c07298d3383 2651 //******************************************************************************
lucaslwl 22:5c07298d3383 2652 void MAX30001::max30001_ReadHeartrateData(max30001_t *_hspValMax30001) {
lucaslwl 22:5c07298d3383 2653 _hspValMax30001->R2R = hspValMax30001.R2R;
lucaslwl 22:5c07298d3383 2654 _hspValMax30001->fmstr = hspValMax30001.fmstr;
lucaslwl 22:5c07298d3383 2655 }
lucaslwl 22:5c07298d3383 2656
lucaslwl 22:5c07298d3383 2657 //******************************************************************************
lucaslwl 22:5c07298d3383 2658 void MAX30001::onDataAvailable(PtrFunction _onDataAvailable) {
lucaslwl 22:5c07298d3383 2659 onDataAvailableCallback = _onDataAvailable;
lucaslwl 22:5c07298d3383 2660 }
lucaslwl 22:5c07298d3383 2661
lucaslwl 22:5c07298d3383 2662 /**
lucaslwl 22:5c07298d3383 2663 * @brief Used to notify an external function that interrupt data is available
lucaslwl 22:5c07298d3383 2664 * @param id type of data available
lucaslwl 22:5c07298d3383 2665 * @param buffer 32-bit buffer that points to the data
lucaslwl 22:5c07298d3383 2666 * @param length length of 32-bit elements available
lucaslwl 22:5c07298d3383 2667 */
lucaslwl 22:5c07298d3383 2668 void MAX30001::dataAvailable(uint32_t id, uint32_t *buffer, uint32_t length) {
lucaslwl 22:5c07298d3383 2669 if (onDataAvailableCallback != NULL) {
lucaslwl 22:5c07298d3383 2670 (*onDataAvailableCallback)(id, buffer, length);
lucaslwl 22:5c07298d3383 2671 }
lucaslwl 22:5c07298d3383 2672 }
lucaslwl 22:5c07298d3383 2673
lucaslwl 22:5c07298d3383 2674 /**
lucaslwl 22:5c07298d3383 2675 * @brief Callback handler for SPI async events
lucaslwl 22:5c07298d3383 2676 * @param events description of event that occurred
lucaslwl 22:5c07298d3383 2677 */
lucaslwl 22:5c07298d3383 2678 void MAX30001::spiHandler(int events) { xferFlag = 1; }
lucaslwl 22:5c07298d3383 2679
lucaslwl 22:5c07298d3383 2680 //******************************************************************************
lucaslwl 22:5c07298d3383 2681 static int allowInterrupts = 0;
lucaslwl 22:5c07298d3383 2682
lucaslwl 22:5c07298d3383 2683 void MAX30001Mid_IntB_Handler(void) {
lucaslwl 22:5c07298d3383 2684 if (allowInterrupts == 0) return;
lucaslwl 22:5c07298d3383 2685 MAX30001::instance->max30001_int_handler();
lucaslwl 22:5c07298d3383 2686 }
lucaslwl 22:5c07298d3383 2687
lucaslwl 22:5c07298d3383 2688 void MAX30001Mid_Int2B_Handler(void) {
lucaslwl 22:5c07298d3383 2689 if (allowInterrupts == 0) return;
lucaslwl 22:5c07298d3383 2690 MAX30001::instance->max30001_int_handler();
lucaslwl 22:5c07298d3383 2691 }
lucaslwl 22:5c07298d3383 2692
lucaslwl 22:5c07298d3383 2693 void MAX30001_AllowInterrupts(int state) {
lucaslwl 22:5c07298d3383 2694 allowInterrupts = state;
lucaslwl 22:5c07298d3383 2695 }