example

Committer:
zinnetyazicii53
Date:
Wed Aug 07 10:07:36 2019 +0000
Revision:
0:6474dd4a09da
commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zinnetyazicii53 0:6474dd4a09da 1
zinnetyazicii53 0:6474dd4a09da 2 #ifndef _MAX30105_H_
zinnetyazicii53 0:6474dd4a09da 3 #define _MAX30105_H_
zinnetyazicii53 0:6474dd4a09da 4
zinnetyazicii53 0:6474dd4a09da 5 #include "mbed.h"
zinnetyazicii53 0:6474dd4a09da 6
zinnetyazicii53 0:6474dd4a09da 7
zinnetyazicii53 0:6474dd4a09da 8 #define MAX30105_ADDRESS 0x57 //7-bit I2C Address //87 //1010111
zinnetyazicii53 0:6474dd4a09da 9
zinnetyazicii53 0:6474dd4a09da 10 //#define MAX30105_I2C_ADDR 0xAE << 1 //8-BİT //174//10101110 //
zinnetyazicii53 0:6474dd4a09da 11
zinnetyazicii53 0:6474dd4a09da 12 //Note that MAX30102 has the same I2C address and Part ID
zinnetyazicii53 0:6474dd4a09da 13
zinnetyazicii53 0:6474dd4a09da 14
zinnetyazicii53 0:6474dd4a09da 15 #define MAX30105_NO_ERROR 0
zinnetyazicii53 0:6474dd4a09da 16 #define MAX30105_ERROR -1
zinnetyazicii53 0:6474dd4a09da 17 #define MAX30105_TEMP_ERROR -999.0
zinnetyazicii53 0:6474dd4a09da 18
zinnetyazicii53 0:6474dd4a09da 19 //#define I2C_SPEED_STANDARD 100000
zinnetyazicii53 0:6474dd4a09da 20 //#define I2C_SPEED_FAST 400000
zinnetyazicii53 0:6474dd4a09da 21
zinnetyazicii53 0:6474dd4a09da 22 #define I2C_BUFFER_LENGTH 32
zinnetyazicii53 0:6474dd4a09da 23
zinnetyazicii53 0:6474dd4a09da 24 #define BUFFER_LENGTH 32
zinnetyazicii53 0:6474dd4a09da 25 #define TWI_BUFFER_LENGTH 32
zinnetyazicii53 0:6474dd4a09da 26
zinnetyazicii53 0:6474dd4a09da 27
zinnetyazicii53 0:6474dd4a09da 28
zinnetyazicii53 0:6474dd4a09da 29 class MAX30105 {
zinnetyazicii53 0:6474dd4a09da 30 public:
zinnetyazicii53 0:6474dd4a09da 31 //*****************************************************************************
zinnetyazicii53 0:6474dd4a09da 32 size_t requestFrom(uint8_t address, size_t size, bool sendStop);
zinnetyazicii53 0:6474dd4a09da 33 uint8_t status();
zinnetyazicii53 0:6474dd4a09da 34 uint8_t requestFrom(uint8_t, uint8_t);
zinnetyazicii53 0:6474dd4a09da 35 uint8_t requestFrom(uint8_t, uint8_t, uint8_t);
zinnetyazicii53 0:6474dd4a09da 36 uint8_t requestFrom(int, int);
zinnetyazicii53 0:6474dd4a09da 37 uint8_t requestFrom(int, int, int);
zinnetyazicii53 0:6474dd4a09da 38 uint8_t twi_readFrom(unsigned char address, unsigned char * buf, unsigned int len, unsigned char sendStop);
zinnetyazicii53 0:6474dd4a09da 39
zinnetyazicii53 0:6474dd4a09da 40 //*****************************************************************************
zinnetyazicii53 0:6474dd4a09da 41 MAX30105();
zinnetyazicii53 0:6474dd4a09da 42 MAX30105(I2C &i2c);
zinnetyazicii53 0:6474dd4a09da 43
zinnetyazicii53 0:6474dd4a09da 44
zinnetyazicii53 0:6474dd4a09da 45 //boolean begin(TwoWire &wirePort = Wire, uint32_t i2cSpeed = I2C_SPEED_STANDARD, uint8_t i2caddr = MAX30105_ADDRESS);
zinnetyazicii53 0:6474dd4a09da 46
zinnetyazicii53 0:6474dd4a09da 47 uint32_t getRed(void); //Returns immediate red value
zinnetyazicii53 0:6474dd4a09da 48 uint32_t getIR(void); //Returns immediate IR value
zinnetyazicii53 0:6474dd4a09da 49 uint32_t getGreen(void); //Returns immediate green value
zinnetyazicii53 0:6474dd4a09da 50 bool safeCheck(uint8_t maxTimeToCheck); //Given a max amount of time, check for new data
zinnetyazicii53 0:6474dd4a09da 51
zinnetyazicii53 0:6474dd4a09da 52 // Configuration
zinnetyazicii53 0:6474dd4a09da 53 void softReset();
zinnetyazicii53 0:6474dd4a09da 54 void shutDown();
zinnetyazicii53 0:6474dd4a09da 55 void wakeUp();
zinnetyazicii53 0:6474dd4a09da 56
zinnetyazicii53 0:6474dd4a09da 57 void setLEDMode(uint8_t mode);
zinnetyazicii53 0:6474dd4a09da 58
zinnetyazicii53 0:6474dd4a09da 59 void setADCRange(uint8_t adcRange);
zinnetyazicii53 0:6474dd4a09da 60 void setSampleRate(uint8_t sampleRate);
zinnetyazicii53 0:6474dd4a09da 61 void setPulseWidth(uint8_t pulseWidth);
zinnetyazicii53 0:6474dd4a09da 62
zinnetyazicii53 0:6474dd4a09da 63 void setPulseAmplitudeRed(uint8_t value);
zinnetyazicii53 0:6474dd4a09da 64 void setPulseAmplitudeIR(uint8_t value);
zinnetyazicii53 0:6474dd4a09da 65 void setPulseAmplitudeGreen(uint8_t value);
zinnetyazicii53 0:6474dd4a09da 66 void setPulseAmplitudeProximity(uint8_t value);
zinnetyazicii53 0:6474dd4a09da 67
zinnetyazicii53 0:6474dd4a09da 68 void setProximityThreshold(uint8_t threshMSB);
zinnetyazicii53 0:6474dd4a09da 69
zinnetyazicii53 0:6474dd4a09da 70 //Multi-led configuration mode (page 22)
zinnetyazicii53 0:6474dd4a09da 71 void enableSlot(uint8_t slotNumber, uint8_t device); //Given slot number, assign a device to slot
zinnetyazicii53 0:6474dd4a09da 72 void disableSlots(void);
zinnetyazicii53 0:6474dd4a09da 73
zinnetyazicii53 0:6474dd4a09da 74 // Data Collection
zinnetyazicii53 0:6474dd4a09da 75
zinnetyazicii53 0:6474dd4a09da 76 //Interrupts (page 13, 14)
zinnetyazicii53 0:6474dd4a09da 77 uint8_t getINT1(void); //Returns the main interrupt group
zinnetyazicii53 0:6474dd4a09da 78 uint8_t getINT2(void); //Returns the temp ready interrupt
zinnetyazicii53 0:6474dd4a09da 79 void enableAFULL(void); //Enable/disable individual interrupts
zinnetyazicii53 0:6474dd4a09da 80 void disableAFULL(void);
zinnetyazicii53 0:6474dd4a09da 81 void enableDATARDY(void);
zinnetyazicii53 0:6474dd4a09da 82 void disableDATARDY(void);
zinnetyazicii53 0:6474dd4a09da 83 void enableALCOVF(void);
zinnetyazicii53 0:6474dd4a09da 84 void disableALCOVF(void);
zinnetyazicii53 0:6474dd4a09da 85 void enablePROXINT(void);
zinnetyazicii53 0:6474dd4a09da 86 void disablePROXINT(void);
zinnetyazicii53 0:6474dd4a09da 87 void enableDIETEMPRDY(void);
zinnetyazicii53 0:6474dd4a09da 88 void disableDIETEMPRDY(void);
zinnetyazicii53 0:6474dd4a09da 89
zinnetyazicii53 0:6474dd4a09da 90 //FIFO Configuration (page 18)
zinnetyazicii53 0:6474dd4a09da 91 void setFIFOAverage(uint8_t samples);
zinnetyazicii53 0:6474dd4a09da 92 void enableFIFORollover();
zinnetyazicii53 0:6474dd4a09da 93 void disableFIFORollover();
zinnetyazicii53 0:6474dd4a09da 94 void setFIFOAlmostFull(uint8_t samples);
zinnetyazicii53 0:6474dd4a09da 95
zinnetyazicii53 0:6474dd4a09da 96 //FIFO Reading
zinnetyazicii53 0:6474dd4a09da 97 uint16_t check(void); //Checks for new data and fills FIFO
zinnetyazicii53 0:6474dd4a09da 98 uint8_t available(void); //Tells caller how many new samples are available (head - tail)
zinnetyazicii53 0:6474dd4a09da 99 void nextSample(void); //Advances the tail of the sense array
zinnetyazicii53 0:6474dd4a09da 100 uint32_t getFIFORed(void); //Returns the FIFO sample pointed to by tail
zinnetyazicii53 0:6474dd4a09da 101 uint32_t getFIFOIR(void); //Returns the FIFO sample pointed to by tail
zinnetyazicii53 0:6474dd4a09da 102 uint32_t getFIFOGreen(void); //Returns the FIFO sample pointed to by tail
zinnetyazicii53 0:6474dd4a09da 103
zinnetyazicii53 0:6474dd4a09da 104 uint8_t getWritePointer(void);
zinnetyazicii53 0:6474dd4a09da 105 uint8_t getReadPointer(void);
zinnetyazicii53 0:6474dd4a09da 106 void clearFIFO(void); //Sets the read/write pointers to zero
zinnetyazicii53 0:6474dd4a09da 107
zinnetyazicii53 0:6474dd4a09da 108 //Proximity Mode Interrupt Threshold
zinnetyazicii53 0:6474dd4a09da 109 void setPROXINTTHRESH(uint8_t val);
zinnetyazicii53 0:6474dd4a09da 110
zinnetyazicii53 0:6474dd4a09da 111 // Die Temperature
zinnetyazicii53 0:6474dd4a09da 112 float readTemperature();
zinnetyazicii53 0:6474dd4a09da 113 float readTemperatureF();
zinnetyazicii53 0:6474dd4a09da 114
zinnetyazicii53 0:6474dd4a09da 115 // Detecting ID/Revision
zinnetyazicii53 0:6474dd4a09da 116 uint8_t getRevisionID();
zinnetyazicii53 0:6474dd4a09da 117 uint8_t readPartID();
zinnetyazicii53 0:6474dd4a09da 118
zinnetyazicii53 0:6474dd4a09da 119 // Setup the IC with user selectable settings
zinnetyazicii53 0:6474dd4a09da 120 void setup(uint8_t powerLevel = 0x1F, uint8_t sampleAverage = 4, uint8_t ledMode = 3, int sampleRate = 400, int pulseWidth = 411, int adcRange = 4096);
zinnetyazicii53 0:6474dd4a09da 121
zinnetyazicii53 0:6474dd4a09da 122 // Low-level I2C communication
zinnetyazicii53 0:6474dd4a09da 123 uint8_t readRegister8(uint8_t address, uint8_t reg);
zinnetyazicii53 0:6474dd4a09da 124 void writeRegister8(uint8_t address, uint8_t reg, uint8_t value);
zinnetyazicii53 0:6474dd4a09da 125 int writeRegValue(uint8_t reg, char value);
zinnetyazicii53 0:6474dd4a09da 126 int writeReg(uint8_t reg);
zinnetyazicii53 0:6474dd4a09da 127 int readReg(uint8_t reg, char *value);
zinnetyazicii53 0:6474dd4a09da 128
zinnetyazicii53 0:6474dd4a09da 129 private:
zinnetyazicii53 0:6474dd4a09da 130
zinnetyazicii53 0:6474dd4a09da 131 //*****************************************************************************
zinnetyazicii53 0:6474dd4a09da 132 static uint8_t rxBuffer[];
zinnetyazicii53 0:6474dd4a09da 133 static uint8_t rxBufferIndex;
zinnetyazicii53 0:6474dd4a09da 134 static uint8_t rxBufferLength;
zinnetyazicii53 0:6474dd4a09da 135
zinnetyazicii53 0:6474dd4a09da 136 static uint8_t txAddress;
zinnetyazicii53 0:6474dd4a09da 137 static uint8_t txBuffer[];
zinnetyazicii53 0:6474dd4a09da 138 static uint8_t txBufferIndex;
zinnetyazicii53 0:6474dd4a09da 139 static uint8_t txBufferLength;
zinnetyazicii53 0:6474dd4a09da 140 //*****************************************************************************
zinnetyazicii53 0:6474dd4a09da 141 I2C _i2c; //The generic connection to user's chosen I2C hardware
zinnetyazicii53 0:6474dd4a09da 142 uint8_t _i2caddr;
zinnetyazicii53 0:6474dd4a09da 143
zinnetyazicii53 0:6474dd4a09da 144 //activeLEDs is the number of channels turned on, and can be 1 to 3. 2 is common for Red+IR.
zinnetyazicii53 0:6474dd4a09da 145 uint8_t activeLEDs; //Gets set during setup. Allows check() to calculate how many uint8_ts to read from FIFO
zinnetyazicii53 0:6474dd4a09da 146
zinnetyazicii53 0:6474dd4a09da 147 uint8_t revisionID;
zinnetyazicii53 0:6474dd4a09da 148
zinnetyazicii53 0:6474dd4a09da 149 void readRevisionID();
zinnetyazicii53 0:6474dd4a09da 150
zinnetyazicii53 0:6474dd4a09da 151 void bitMask(uint8_t reg, uint8_t mask, uint8_t thing);
zinnetyazicii53 0:6474dd4a09da 152
zinnetyazicii53 0:6474dd4a09da 153 #define STORAGE_SIZE 4 //Each long is 4 uint8_ts so limit this to fit on your micro
zinnetyazicii53 0:6474dd4a09da 154 typedef struct Record
zinnetyazicii53 0:6474dd4a09da 155 {
zinnetyazicii53 0:6474dd4a09da 156 uint32_t red[STORAGE_SIZE];
zinnetyazicii53 0:6474dd4a09da 157 uint32_t IR[STORAGE_SIZE];
zinnetyazicii53 0:6474dd4a09da 158 uint32_t green[STORAGE_SIZE];
zinnetyazicii53 0:6474dd4a09da 159 uint8_t head;
zinnetyazicii53 0:6474dd4a09da 160 uint8_t tail;
zinnetyazicii53 0:6474dd4a09da 161 } sense_struct; //This is our circular buffer of readings from the sensor
zinnetyazicii53 0:6474dd4a09da 162
zinnetyazicii53 0:6474dd4a09da 163 sense_struct sense;
zinnetyazicii53 0:6474dd4a09da 164
zinnetyazicii53 0:6474dd4a09da 165
zinnetyazicii53 0:6474dd4a09da 166
zinnetyazicii53 0:6474dd4a09da 167 // Status Registers
zinnetyazicii53 0:6474dd4a09da 168 static const uint8_t MAX30105_INTSTAT1 = 0x00;
zinnetyazicii53 0:6474dd4a09da 169 static const uint8_t MAX30105_INTSTAT2 = 0x01;
zinnetyazicii53 0:6474dd4a09da 170 static const uint8_t MAX30105_INTENABLE1 = 0x02;
zinnetyazicii53 0:6474dd4a09da 171 static const uint8_t MAX30105_INTENABLE2 = 0x03;
zinnetyazicii53 0:6474dd4a09da 172
zinnetyazicii53 0:6474dd4a09da 173 // FIFO Registers
zinnetyazicii53 0:6474dd4a09da 174 static const uint8_t MAX30105_FIFOWRITEPTR = 0x04;
zinnetyazicii53 0:6474dd4a09da 175 static const uint8_t MAX30105_FIFOOVERFLOW = 0x05;
zinnetyazicii53 0:6474dd4a09da 176 static const uint8_t MAX30105_FIFOREADPTR = 0x06;
zinnetyazicii53 0:6474dd4a09da 177 static const uint8_t MAX30105_FIFODATA = 0x07;
zinnetyazicii53 0:6474dd4a09da 178
zinnetyazicii53 0:6474dd4a09da 179 // Configuration Registers
zinnetyazicii53 0:6474dd4a09da 180 static const uint8_t MAX30105_FIFOCONFIG = 0x08;
zinnetyazicii53 0:6474dd4a09da 181 static const uint8_t MAX30105_MODECONFIG = 0x09;
zinnetyazicii53 0:6474dd4a09da 182 static const uint8_t MAX30105_PARTICLECONFIG = 0x0A; // Note, sometimes listed as "SPO2" config in datasheet (pg. 11)
zinnetyazicii53 0:6474dd4a09da 183 static const uint8_t MAX30105_LED1_PULSEAMP = 0x0C;
zinnetyazicii53 0:6474dd4a09da 184 static const uint8_t MAX30105_LED2_PULSEAMP = 0x0D;
zinnetyazicii53 0:6474dd4a09da 185 static const uint8_t MAX30105_LED3_PULSEAMP = 0x0E;
zinnetyazicii53 0:6474dd4a09da 186 static const uint8_t MAX30105_LED_PROX_AMP = 0x10;
zinnetyazicii53 0:6474dd4a09da 187 static const uint8_t MAX30105_MULTILEDCONFIG1 = 0x11;
zinnetyazicii53 0:6474dd4a09da 188 static const uint8_t MAX30105_MULTILEDCONFIG2 = 0x12;
zinnetyazicii53 0:6474dd4a09da 189
zinnetyazicii53 0:6474dd4a09da 190 // Die Temperature Registers
zinnetyazicii53 0:6474dd4a09da 191 static const uint8_t MAX30105_DIETEMPINT = 0x1F;
zinnetyazicii53 0:6474dd4a09da 192 static const uint8_t MAX30105_DIETEMPFRAC = 0x20;
zinnetyazicii53 0:6474dd4a09da 193 static const uint8_t MAX30105_DIETEMPCONFIG = 0x21;
zinnetyazicii53 0:6474dd4a09da 194
zinnetyazicii53 0:6474dd4a09da 195 // Proximity Function Registers
zinnetyazicii53 0:6474dd4a09da 196 static const uint8_t MAX30105_PROXINTTHRESH = 0x30;
zinnetyazicii53 0:6474dd4a09da 197
zinnetyazicii53 0:6474dd4a09da 198 // Part ID Registers
zinnetyazicii53 0:6474dd4a09da 199 static const uint8_t MAX30105_REVISIONID = 0xFE;
zinnetyazicii53 0:6474dd4a09da 200 static const uint8_t MAX30105_PARTID = 0xFF; // Should always be 0x15. Identical to MAX30102.
zinnetyazicii53 0:6474dd4a09da 201
zinnetyazicii53 0:6474dd4a09da 202 // MAX30105 Commands
zinnetyazicii53 0:6474dd4a09da 203 // Interrupt configuration (pg 13, 14)
zinnetyazicii53 0:6474dd4a09da 204 static const uint8_t MAX30105_INT_A_FULL_MASK = (uint8_t)~0b10000000;
zinnetyazicii53 0:6474dd4a09da 205 static const uint8_t MAX30105_INT_A_FULL_ENABLE = 0x80;
zinnetyazicii53 0:6474dd4a09da 206 static const uint8_t MAX30105_INT_A_FULL_DISABLE = 0x00;
zinnetyazicii53 0:6474dd4a09da 207
zinnetyazicii53 0:6474dd4a09da 208 static const uint8_t MAX30105_INT_DATA_RDY_MASK = (uint8_t)~0b01000000;
zinnetyazicii53 0:6474dd4a09da 209 static const uint8_t MAX30105_INT_DATA_RDY_ENABLE = 0x40;
zinnetyazicii53 0:6474dd4a09da 210 static const uint8_t MAX30105_INT_DATA_RDY_DISABLE = 0x00;
zinnetyazicii53 0:6474dd4a09da 211
zinnetyazicii53 0:6474dd4a09da 212 static const uint8_t MAX30105_INT_ALC_OVF_MASK = (uint8_t)~0b00100000;
zinnetyazicii53 0:6474dd4a09da 213 static const uint8_t MAX30105_INT_ALC_OVF_ENABLE = 0x20;
zinnetyazicii53 0:6474dd4a09da 214 static const uint8_t MAX30105_INT_ALC_OVF_DISABLE = 0x00;
zinnetyazicii53 0:6474dd4a09da 215
zinnetyazicii53 0:6474dd4a09da 216 static const uint8_t MAX30105_INT_PROX_INT_MASK = (uint8_t)~0b00010000;
zinnetyazicii53 0:6474dd4a09da 217 static const uint8_t MAX30105_INT_PROX_INT_ENABLE = 0x10;
zinnetyazicii53 0:6474dd4a09da 218 static const uint8_t MAX30105_INT_PROX_INT_DISABLE = 0x00;
zinnetyazicii53 0:6474dd4a09da 219
zinnetyazicii53 0:6474dd4a09da 220 static const uint8_t MAX30105_INT_DIE_TEMP_RDY_MASK = (uint8_t)~0b00000010;
zinnetyazicii53 0:6474dd4a09da 221 static const uint8_t MAX30105_INT_DIE_TEMP_RDY_ENABLE = 0x02;
zinnetyazicii53 0:6474dd4a09da 222 static const uint8_t MAX30105_INT_DIE_TEMP_RDY_DISABLE = 0x00;
zinnetyazicii53 0:6474dd4a09da 223
zinnetyazicii53 0:6474dd4a09da 224 static const uint8_t MAX30105_SAMPLEAVG_MASK = (uint8_t)~0b11100000;
zinnetyazicii53 0:6474dd4a09da 225 static const uint8_t MAX30105_SAMPLEAVG_1 = 0x00;
zinnetyazicii53 0:6474dd4a09da 226 static const uint8_t MAX30105_SAMPLEAVG_2 = 0x20;
zinnetyazicii53 0:6474dd4a09da 227 static const uint8_t MAX30105_SAMPLEAVG_4 = 0x40;
zinnetyazicii53 0:6474dd4a09da 228 static const uint8_t MAX30105_SAMPLEAVG_8 = 0x60;
zinnetyazicii53 0:6474dd4a09da 229 static const uint8_t MAX30105_SAMPLEAVG_16 = 0x80;
zinnetyazicii53 0:6474dd4a09da 230 static const uint8_t MAX30105_SAMPLEAVG_32 = 0xA0;
zinnetyazicii53 0:6474dd4a09da 231
zinnetyazicii53 0:6474dd4a09da 232 static const uint8_t MAX30105_ROLLOVER_MASK = 0xEF;
zinnetyazicii53 0:6474dd4a09da 233 static const uint8_t MAX30105_ROLLOVER_ENABLE = 0x10;
zinnetyazicii53 0:6474dd4a09da 234 static const uint8_t MAX30105_ROLLOVER_DISABLE = 0x00;
zinnetyazicii53 0:6474dd4a09da 235
zinnetyazicii53 0:6474dd4a09da 236 static const uint8_t MAX30105_A_FULL_MASK = 0xF0;
zinnetyazicii53 0:6474dd4a09da 237
zinnetyazicii53 0:6474dd4a09da 238 // Mode configuration commands (page 19)
zinnetyazicii53 0:6474dd4a09da 239 static const uint8_t MAX30105_SHUTDOWN_MASK = 0x7F;
zinnetyazicii53 0:6474dd4a09da 240 static const uint8_t MAX30105_SHUTDOWN = 0x80;
zinnetyazicii53 0:6474dd4a09da 241 static const uint8_t MAX30105_WAKEUP = 0x00;
zinnetyazicii53 0:6474dd4a09da 242
zinnetyazicii53 0:6474dd4a09da 243 static const uint8_t MAX30105_RESET_MASK = 0xBF;
zinnetyazicii53 0:6474dd4a09da 244 static const uint8_t MAX30105_RESET = 0x40;
zinnetyazicii53 0:6474dd4a09da 245
zinnetyazicii53 0:6474dd4a09da 246 static const uint8_t MAX30105_MODE_MASK = 0xF8;
zinnetyazicii53 0:6474dd4a09da 247 static const uint8_t MAX30105_MODE_REDONLY = 0x02;
zinnetyazicii53 0:6474dd4a09da 248 static const uint8_t MAX30105_MODE_REDIRONLY = 0x03;
zinnetyazicii53 0:6474dd4a09da 249 static const uint8_t MAX30105_MODE_MULTILED = 0x07;
zinnetyazicii53 0:6474dd4a09da 250
zinnetyazicii53 0:6474dd4a09da 251 // Particle sensing configuration commands (pgs 19-20)
zinnetyazicii53 0:6474dd4a09da 252 static const uint8_t MAX30105_ADCRANGE_MASK = 0x9F;
zinnetyazicii53 0:6474dd4a09da 253 static const uint8_t MAX30105_ADCRANGE_2048 = 0x00;
zinnetyazicii53 0:6474dd4a09da 254 static const uint8_t MAX30105_ADCRANGE_4096 = 0x20;
zinnetyazicii53 0:6474dd4a09da 255 static const uint8_t MAX30105_ADCRANGE_8192 = 0x40;
zinnetyazicii53 0:6474dd4a09da 256 static const uint8_t MAX30105_ADCRANGE_16384 = 0x60;
zinnetyazicii53 0:6474dd4a09da 257
zinnetyazicii53 0:6474dd4a09da 258 static const uint8_t MAX30105_SAMPLERATE_MASK = 0xE3;
zinnetyazicii53 0:6474dd4a09da 259 static const uint8_t MAX30105_SAMPLERATE_50 = 0x00;
zinnetyazicii53 0:6474dd4a09da 260 static const uint8_t MAX30105_SAMPLERATE_100 = 0x04;
zinnetyazicii53 0:6474dd4a09da 261 static const uint8_t MAX30105_SAMPLERATE_200 = 0x08;
zinnetyazicii53 0:6474dd4a09da 262 static const uint8_t MAX30105_SAMPLERATE_400 = 0x0C;
zinnetyazicii53 0:6474dd4a09da 263 static const uint8_t MAX30105_SAMPLERATE_800 = 0x10;
zinnetyazicii53 0:6474dd4a09da 264 static const uint8_t MAX30105_SAMPLERATE_1000 = 0x14;
zinnetyazicii53 0:6474dd4a09da 265 static const uint8_t MAX30105_SAMPLERATE_1600 = 0x18;
zinnetyazicii53 0:6474dd4a09da 266 static const uint8_t MAX30105_SAMPLERATE_3200 = 0x1C;
zinnetyazicii53 0:6474dd4a09da 267
zinnetyazicii53 0:6474dd4a09da 268 static const uint8_t MAX30105_PULSEWIDTH_MASK = 0xFC;
zinnetyazicii53 0:6474dd4a09da 269 static const uint8_t MAX30105_PULSEWIDTH_69 = 0x00;
zinnetyazicii53 0:6474dd4a09da 270 static const uint8_t MAX30105_PULSEWIDTH_118 = 0x01;
zinnetyazicii53 0:6474dd4a09da 271 static const uint8_t MAX30105_PULSEWIDTH_215 = 0x02;
zinnetyazicii53 0:6474dd4a09da 272 static const uint8_t MAX30105_PULSEWIDTH_411 = 0x03;
zinnetyazicii53 0:6474dd4a09da 273
zinnetyazicii53 0:6474dd4a09da 274 //Multi-LED Mode configuration (pg 22)
zinnetyazicii53 0:6474dd4a09da 275 static const uint8_t MAX30105_SLOT1_MASK = 0xF8;
zinnetyazicii53 0:6474dd4a09da 276 static const uint8_t MAX30105_SLOT2_MASK = 0x8F;
zinnetyazicii53 0:6474dd4a09da 277 static const uint8_t MAX30105_SLOT3_MASK = 0xF8;
zinnetyazicii53 0:6474dd4a09da 278 static const uint8_t MAX30105_SLOT4_MASK = 0x8F;
zinnetyazicii53 0:6474dd4a09da 279
zinnetyazicii53 0:6474dd4a09da 280 static const uint8_t SLOT_NONE = 0x00;
zinnetyazicii53 0:6474dd4a09da 281 static const uint8_t SLOT_RED_LED = 0x01;
zinnetyazicii53 0:6474dd4a09da 282 static const uint8_t SLOT_IR_LED = 0x02;
zinnetyazicii53 0:6474dd4a09da 283 static const uint8_t SLOT_GREEN_LED = 0x03;
zinnetyazicii53 0:6474dd4a09da 284 static const uint8_t SLOT_NONE_PILOT = 0x04;
zinnetyazicii53 0:6474dd4a09da 285 static const uint8_t SLOT_RED_PILOT = 0x05;
zinnetyazicii53 0:6474dd4a09da 286 static const uint8_t SLOT_IR_PILOT = 0x06;
zinnetyazicii53 0:6474dd4a09da 287 static const uint8_t SLOT_GREEN_PILOT = 0x07;
zinnetyazicii53 0:6474dd4a09da 288
zinnetyazicii53 0:6474dd4a09da 289 static const uint8_t MAX_30105_EXPECTEDPARTID = 0x15;
zinnetyazicii53 0:6474dd4a09da 290
zinnetyazicii53 0:6474dd4a09da 291 };
zinnetyazicii53 0:6474dd4a09da 292 #endif