Library for MAX30101, read/write functions for registers implemented.

Dependents:   test_MAX30101 testSensor

Committer:
Rhyme
Date:
Mon Mar 27 07:10:39 2017 +0000
Revision:
4:c6761ad52524
Parent:
3:d28dcc8fe74d
Child:
6:8fbe6e6eeff1
Descriptions added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 4:c6761ad52524 1 #ifndef _MAX30101_H_
Rhyme 4:c6761ad52524 2 #define _MAX30101_H_
Rhyme 0:4ad9373787e8 3 /**
Rhyme 0:4ad9373787e8 4 * MAX30101
Rhyme 0:4ad9373787e8 5 * High-Sensitivity Pulse Oximeter and
Rhyme 0:4ad9373787e8 6 * Heart-Rate Sensor for Wearable Health
Rhyme 0:4ad9373787e8 7 */
Rhyme 0:4ad9373787e8 8
Rhyme 0:4ad9373787e8 9 class MAX30101
Rhyme 0:4ad9373787e8 10 {
Rhyme 0:4ad9373787e8 11 public:
Rhyme 0:4ad9373787e8 12 /**
Rhyme 0:4ad9373787e8 13 * MAX30101 constructor
Rhyme 0:4ad9373787e8 14 *
Rhyme 0:4ad9373787e8 15 * @param sda SDA pin
Rhyme 0:4ad9373787e8 16 * @param scl SCL pin
Rhyme 0:4ad9373787e8 17 * @param addr 7bit address of the I2C peripheral
Rhyme 0:4ad9373787e8 18 */
Rhyme 0:4ad9373787e8 19 MAX30101(PinName sda, PinName scl, int addr) ;
Rhyme 0:4ad9373787e8 20
Rhyme 4:c6761ad52524 21 /**
Rhyme 4:c6761ad52524 22 * MAX30101 destructor
Rhyme 4:c6761ad52524 23 */
Rhyme 0:4ad9373787e8 24 ~MAX30101() ;
Rhyme 3:d28dcc8fe74d 25
Rhyme 3:d28dcc8fe74d 26 /**
Rhyme 3:d28dcc8fe74d 27 * Get part id
Rhyme 3:d28dcc8fe74d 28 * @returns PART_ID
Rhyme 3:d28dcc8fe74d 29 */
Rhyme 1:fc677d82d0f1 30 uint8_t getID(void) ;
Rhyme 3:d28dcc8fe74d 31
Rhyme 3:d28dcc8fe74d 32 /**
Rhyme 3:d28dcc8fe74d 33 * Get revision id
Rhyme 3:d28dcc8fe74d 34 * @returns REV_ID
Rhyme 3:d28dcc8fe74d 35 */
Rhyme 1:fc677d82d0f1 36 uint8_t getRev(void) ;
Rhyme 4:c6761ad52524 37
Rhyme 4:c6761ad52524 38 /**
Rhyme 4:c6761ad52524 39 * Get interrupt status
Rhyme 4:c6761ad52524 40 * @returns interrupt Status 1 as MSB and interrupt Status 2 as LSB
Rhyme 4:c6761ad52524 41 */
Rhyme 1:fc677d82d0f1 42 uint16_t getIntStatus(void) ;
Rhyme 4:c6761ad52524 43
Rhyme 4:c6761ad52524 44 /**
Rhyme 4:c6761ad52524 45 * Get interrupt enable
Rhyme 4:c6761ad52524 46 * @returns interrupt Enable 1 as MSB and interrupt Status 2 as LSB
Rhyme 4:c6761ad52524 47 */
Rhyme 2:c465a8d44b9a 48 uint16_t getIntEnable(void) ;
Rhyme 4:c6761ad52524 49
Rhyme 4:c6761ad52524 50 /**
Rhyme 4:c6761ad52524 51 * Set interrupt enable
Rhyme 4:c6761ad52524 52 * @param mask uint16_t MSB for Enable 1 and LSB for Enable 2
Rhyme 4:c6761ad52524 53 */
Rhyme 1:fc677d82d0f1 54 void setIntEnable(uint16_t mask) ;
Rhyme 4:c6761ad52524 55
Rhyme 4:c6761ad52524 56 /**
Rhyme 4:c6761ad52524 57 * Get FIFO Write Pointer
Rhyme 4:c6761ad52524 58 * @returns FIFO_WR_PTR
Rhyme 4:c6761ad52524 59 */
Rhyme 1:fc677d82d0f1 60 uint8_t getFIFO_WR_PTR(void) ;
Rhyme 4:c6761ad52524 61
Rhyme 4:c6761ad52524 62 /**
Rhyme 4:c6761ad52524 63 * Set FIFO Write Pointer
Rhyme 4:c6761ad52524 64 * @param data uint8_t FIFO_WR_PTR[4:0]
Rhyme 4:c6761ad52524 65 */
Rhyme 1:fc677d82d0f1 66 void setFIFO_WR_PTR(uint8_t data) ;
Rhyme 4:c6761ad52524 67
Rhyme 4:c6761ad52524 68 /**
Rhyme 4:c6761ad52524 69 * Get FIFO Overflow Counter
Rhyme 4:c6761ad52524 70 * @returns OVF_COUNTER
Rhyme 4:c6761ad52524 71 */
Rhyme 1:fc677d82d0f1 72 uint8_t getOVF_COUNTER(void) ;
Rhyme 4:c6761ad52524 73
Rhyme 4:c6761ad52524 74 /**
Rhyme 4:c6761ad52524 75 * Set FIFO Overflow Counter
Rhyme 4:c6761ad52524 76 * @param data uint8_t OVF_COUNTER[4:0]
Rhyme 4:c6761ad52524 77 */
Rhyme 1:fc677d82d0f1 78 void setOVF_COUNTER(uint8_t data) ;
Rhyme 4:c6761ad52524 79
Rhyme 4:c6761ad52524 80 /**
Rhyme 4:c6761ad52524 81 * Get FIFO Read Pointer
Rhyme 4:c6761ad52524 82 * @returns FIFO_RD_PTR
Rhyme 4:c6761ad52524 83 */
Rhyme 1:fc677d82d0f1 84 uint8_t getFIFO_RD_PTR(void) ;
Rhyme 4:c6761ad52524 85
Rhyme 4:c6761ad52524 86 /**
Rhyme 4:c6761ad52524 87 * Set FIFO Read Pointer
Rhyme 4:c6761ad52524 88 * @param data uint8_t FIFO_RD_PTR[4:0]
Rhyme 4:c6761ad52524 89 */
Rhyme 1:fc677d82d0f1 90 void setFIFO_RD_PTR(uint8_t data) ;
Rhyme 4:c6761ad52524 91
Rhyme 4:c6761ad52524 92 /**
Rhyme 4:c6761ad52524 93 * Get FIFO Data
Rhyme 4:c6761ad52524 94 * @returns FIFO_DATA
Rhyme 4:c6761ad52524 95 */
Rhyme 1:fc677d82d0f1 96 uint8_t getFIFO_DATA(void) ;
Rhyme 4:c6761ad52524 97
Rhyme 4:c6761ad52524 98 /**
Rhyme 4:c6761ad52524 99 * Set FIFO Data
Rhyme 4:c6761ad52524 100 * @param FIFO_DATA[7:0]
Rhyme 4:c6761ad52524 101 */
Rhyme 1:fc677d82d0f1 102 void setFIFO_DATA(uint8_t data) ;
Rhyme 4:c6761ad52524 103
Rhyme 4:c6761ad52524 104 /**
Rhyme 4:c6761ad52524 105 * Get FIFO Confuguraion
Rhyme 4:c6761ad52524 106 * @returns FIFO_CONFIG
Rhyme 4:c6761ad52524 107 */
Rhyme 1:fc677d82d0f1 108 uint8_t getFIFO_CONFIG(void) ;
Rhyme 4:c6761ad52524 109
Rhyme 4:c6761ad52524 110 /**
Rhyme 4:c6761ad52524 111 * Set FIFO Configuration
Rhyme 4:c6761ad52524 112 * @param data uint8_t
Rhyme 4:c6761ad52524 113 * @note bit[7:5] -> SMP_AVE[2:0]
Rhyme 4:c6761ad52524 114 * @note bit[4] -> FIFO_ROLLOVER_EN
Rhyme 4:c6761ad52524 115 * @note bit[3:0] -> FIFO_A_FULL[3:0]
Rhyme 4:c6761ad52524 116 */
Rhyme 1:fc677d82d0f1 117 void setFIFO_CONFIG(uint8_t data) ;
Rhyme 4:c6761ad52524 118
Rhyme 4:c6761ad52524 119 /**
Rhyme 4:c6761ad52524 120 * Get MODE Configuration
Rhyme 4:c6761ad52524 121 * @returns MODE_CONFIG
Rhyme 4:c6761ad52524 122 */
Rhyme 1:fc677d82d0f1 123 uint8_t getMODE_CONFIG(void) ;
Rhyme 4:c6761ad52524 124
Rhyme 4:c6761ad52524 125 /**
Rhyme 4:c6761ad52524 126 * Set MODE Configuration
Rhyme 4:c6761ad52524 127 * @param data uint8_t
Rhyme 4:c6761ad52524 128 * @note bit[7] Shutdown Control (SHDN)
Rhyme 4:c6761ad52524 129 * @note bit[6] Reset Control (RESET)
Rhyme 4:c6761ad52524 130 * @note bit[5:3] (reserved)
Rhyme 4:c6761ad52524 131 * @note bit[2:0] Mode Control (MODE)
Rhyme 4:c6761ad52524 132 */
Rhyme 1:fc677d82d0f1 133 void setMODE_CONFIG(uint8_t data) ;
Rhyme 4:c6761ad52524 134
Rhyme 4:c6761ad52524 135 /**
Rhyme 4:c6761ad52524 136 * Get SpO2 Configuration
Rhyme 4:c6761ad52524 137 * @returns SPO2_CONFIG
Rhyme 4:c6761ad52524 138 */
Rhyme 1:fc677d82d0f1 139 uint8_t getSPO2_CONFIG(void) ;
Rhyme 4:c6761ad52524 140
Rhyme 4:c6761ad52524 141 /**
Rhyme 4:c6761ad52524 142 * Set SpO2 Configuration
Rhyme 4:c6761ad52524 143 * @param data uint8_t
Rhyme 4:c6761ad52524 144 * @note bit[7] (reserved)
Rhyme 4:c6761ad52524 145 * @note bit[6:5] SpO2 ADC Range Control (SPO2_ADC_RGE[1:0])
Rhyme 4:c6761ad52524 146 * @note bit[4:2] SpO2 Sample Rate Control (SPO2_SR[2:0])
Rhyme 4:c6761ad52524 147 * @note bit[1:0] LED Pulse Width Control (LED_PW[1:0])
Rhyme 4:c6761ad52524 148 */
Rhyme 1:fc677d82d0f1 149 void setSPO2_CONFIG(uint8_t data) ;
Rhyme 4:c6761ad52524 150
Rhyme 4:c6761ad52524 151 /**
Rhyme 4:c6761ad52524 152 * Get LED1 Pulse Amplitude
Rhyme 4:c6761ad52524 153 * @returns LED1_PA
Rhyme 4:c6761ad52524 154 */
Rhyme 1:fc677d82d0f1 155 uint8_t getLED1_PA(void) ;
Rhyme 4:c6761ad52524 156
Rhyme 4:c6761ad52524 157 /**
Rhyme 4:c6761ad52524 158 * Set LED1 Pulse Amplitude
Rhyme 4:c6761ad52524 159 * @param data uint8_t LED1_PA[7:0]
Rhyme 4:c6761ad52524 160 */
Rhyme 1:fc677d82d0f1 161 void setLED1_PA(uint8_t data) ;
Rhyme 4:c6761ad52524 162
Rhyme 4:c6761ad52524 163 /**
Rhyme 4:c6761ad52524 164 * Get LED2 Pulse Amplitude
Rhyme 4:c6761ad52524 165 * @returns LED2_PA
Rhyme 4:c6761ad52524 166 */
Rhyme 1:fc677d82d0f1 167 uint8_t getLED2_PA(void) ;
Rhyme 4:c6761ad52524 168
Rhyme 4:c6761ad52524 169 /**
Rhyme 4:c6761ad52524 170 * Set LED2 Pulse Amplitude
Rhyme 4:c6761ad52524 171 * @param data uint8_t LED2_PA[7:0]
Rhyme 4:c6761ad52524 172 */
Rhyme 1:fc677d82d0f1 173 void setLED2_PA(uint8_t data) ;
Rhyme 4:c6761ad52524 174
Rhyme 4:c6761ad52524 175 /**
Rhyme 4:c6761ad52524 176 * Get LED3 Pulse Amplitude
Rhyme 4:c6761ad52524 177 * @returns LED3_PA
Rhyme 4:c6761ad52524 178 */
Rhyme 1:fc677d82d0f1 179 uint8_t getLED3_PA(void) ;
Rhyme 4:c6761ad52524 180
Rhyme 4:c6761ad52524 181 /**
Rhyme 4:c6761ad52524 182 * Set LED3 Pulse Amplitude
Rhyme 4:c6761ad52524 183 * @param data uint8_t LED3_PA[7:0]
Rhyme 4:c6761ad52524 184 */
Rhyme 1:fc677d82d0f1 185 void setLED3_PA(uint8_t data) ;
Rhyme 4:c6761ad52524 186
Rhyme 4:c6761ad52524 187 /**
Rhyme 4:c6761ad52524 188 * Get Proximity Mode LED Pulse Amplitude
Rhyme 4:c6761ad52524 189 * @returns PILOT_PA
Rhyme 4:c6761ad52524 190 */
Rhyme 1:fc677d82d0f1 191 uint8_t getPILOT_PA(void) ;
Rhyme 4:c6761ad52524 192
Rhyme 4:c6761ad52524 193 /**
Rhyme 4:c6761ad52524 194 * Set Proximity Mode LED Pulse Amplitude
Rhyme 4:c6761ad52524 195 * @param data uint8_t PILOT_PA[7:0]
Rhyme 4:c6761ad52524 196 */
Rhyme 1:fc677d82d0f1 197 void setPILOT_PA(uint8_t data) ;
Rhyme 4:c6761ad52524 198
Rhyme 4:c6761ad52524 199 /**
Rhyme 4:c6761ad52524 200 * Get Multi-LED Mode Control Registers
Rhyme 4:c6761ad52524 201 * @returns SLOT2, SLOT1, SLOT4, SLOT3 combined as uint16_t
Rhyme 4:c6761ad52524 202 */
Rhyme 1:fc677d82d0f1 203 uint16_t getSLOT(void) ;
Rhyme 4:c6761ad52524 204
Rhyme 4:c6761ad52524 205 /**
Rhyme 4:c6761ad52524 206 * Set Multi-LED Mode Control Registers
Rhyme 4:c6761ad52524 207 * @param data uint16_t
Rhyme 4:c6761ad52524 208 * @note bit[15] (reserved)
Rhyme 4:c6761ad52524 209 * @note bit[14:12] SLOT2[2:0]
Rhyme 4:c6761ad52524 210 * @note bit[11] (reserved)
Rhyme 4:c6761ad52524 211 * @note bit[10:8] SLOT1[2:0]
Rhyme 4:c6761ad52524 212 * @note bit[7] (reserved)
Rhyme 4:c6761ad52524 213 * @note bit[6:4] SLOT4[2:0]
Rhyme 4:c6761ad52524 214 * @note bit[3] (reserved)
Rhyme 4:c6761ad52524 215 * @note bit[2:0] SLOT3[2:0]
Rhyme 4:c6761ad52524 216 */
Rhyme 1:fc677d82d0f1 217 void setSLOT(uint16_t data) ;
Rhyme 4:c6761ad52524 218
Rhyme 4:c6761ad52524 219 /**
Rhyme 4:c6761ad52524 220 * Get Temperature Data (Integer part)
Rhyme 4:c6761ad52524 221 * @returns TINT
Rhyme 4:c6761ad52524 222 */
Rhyme 1:fc677d82d0f1 223 uint8_t getTEMP_INT(void) ;
Rhyme 4:c6761ad52524 224
Rhyme 4:c6761ad52524 225 /**
Rhyme 4:c6761ad52524 226 * Get Temperature Data (Fraction part)
Rhyme 4:c6761ad52524 227 * @returns TFRAC
Rhyme 4:c6761ad52524 228 */
Rhyme 2:c465a8d44b9a 229 uint8_t getTEMP_FRAC(void) ;
Rhyme 4:c6761ad52524 230
Rhyme 4:c6761ad52524 231 /**
Rhyme 4:c6761ad52524 232 * Get Die Temperature Configure
Rhyme 4:c6761ad52524 233 * @returns TEMP_EN
Rhyme 4:c6761ad52524 234 */
Rhyme 4:c6761ad52524 235 uint8_t getTEMP_EN(void) ;
Rhyme 4:c6761ad52524 236
Rhyme 4:c6761ad52524 237 /**
Rhyme 4:c6761ad52524 238 * Get Temperature
Rhyme 4:c6761ad52524 239 * @returns temperature as a float
Rhyme 4:c6761ad52524 240 */
Rhyme 2:c465a8d44b9a 241 float getTEMP(void) ;
Rhyme 4:c6761ad52524 242
Rhyme 4:c6761ad52524 243 /**
Rhyme 4:c6761ad52524 244 * Get Proximity Mode Interrupt Threshold
Rhyme 4:c6761ad52524 245 * @returns PROX_INT_THR
Rhyme 4:c6761ad52524 246 */
Rhyme 1:fc677d82d0f1 247 uint8_t getPROX_INT_THR(void) ;
Rhyme 4:c6761ad52524 248
Rhyme 4:c6761ad52524 249 /**
Rhyme 4:c6761ad52524 250 * Set Proximity Mode Interrupt Threshold
Rhyme 4:c6761ad52524 251 * @param data uint8_t PROX_INT_THRESH[7:0]
Rhyme 4:c6761ad52524 252 */
Rhyme 1:fc677d82d0f1 253 void setPROX_INT_THR(uint8_t data) ;
Rhyme 4:c6761ad52524 254
Rhyme 4:c6761ad52524 255 /**
Rhyme 4:c6761ad52524 256 * Clear FIFO
Rhyme 4:c6761ad52524 257 */
Rhyme 2:c465a8d44b9a 258 void clearFIFO(void) ;
Rhyme 4:c6761ad52524 259
Rhyme 4:c6761ad52524 260 /**
Rhyme 4:c6761ad52524 261 * Read FIFO
Rhyme 4:c6761ad52524 262 * @returns FIFO data as uint32_t
Rhyme 4:c6761ad52524 263 * @note FIFO data is always a 3-bytes data
Rhyme 4:c6761ad52524 264 * @note byte1[1:0] : FIFO_DATA[17]-FIFO_DATA[16]
Rhyme 4:c6761ad52524 265 * @note byte2[7:0] : FIFO_DATA[15]-FIFO_DATA[8]
Rhyme 4:c6761ad52524 266 * @note byte3[7:0] : FIFO_DATA[7]-FIFO_DATA[0]
Rhyme 4:c6761ad52524 267 * @note The data is left aligned, so FIFO_DATA[17]
Rhyme 4:c6761ad52524 268 * @note is always MSB, although the data length
Rhyme 4:c6761ad52524 269 * @note can be 18-bit ~ 15-bit * FIFO data is always a 3-bytes data
Rhyme 4:c6761ad52524 270 * @note byte1[1:0] : FIFO_DATA[17]-FIFO_DATA[16]
Rhyme 4:c6761ad52524 271 * @note byte2[7:0] : FIFO_DATA[15]-FIFO_DATA[8]
Rhyme 4:c6761ad52524 272 * @note byte3[7:0] : FIFO_DATA[7]-FIFO_DATA[0]
Rhyme 4:c6761ad52524 273 * @note The data is left aligned, so FIFO_DATA[17]
Rhyme 4:c6761ad52524 274 * @note is always MSB, although the data length
Rhyme 4:c6761ad52524 275 * @note can be 18-bit ~ 15-bit
Rhyme 4:c6761ad52524 276 */
Rhyme 2:c465a8d44b9a 277 uint32_t readFIFO(void) ;
Rhyme 4:c6761ad52524 278
Rhyme 4:c6761ad52524 279 /**
Rhyme 4:c6761ad52524 280 * Reset
Rhyme 4:c6761ad52524 281 */
Rhyme 2:c465a8d44b9a 282 void reset(void) ;
Rhyme 0:4ad9373787e8 283
Rhyme 0:4ad9373787e8 284 /*
Rhyme 0:4ad9373787e8 285 * some member functions here (yet to be written)
Rhyme 0:4ad9373787e8 286 */
Rhyme 0:4ad9373787e8 287
Rhyme 0:4ad9373787e8 288 private:
Rhyme 0:4ad9373787e8 289 I2C m_i2c;
Rhyme 0:4ad9373787e8 290 int m_addr;
Rhyme 0:4ad9373787e8 291 void readRegs(int addr, uint8_t *data, int len) ;
Rhyme 0:4ad9373787e8 292 void writeRegs(uint8_t *data, int len) ;
Rhyme 0:4ad9373787e8 293 } ;
Rhyme 2:c465a8d44b9a 294
Rhyme 2:c465a8d44b9a 295 /* bits of Interrupt Status register */
Rhyme 2:c465a8d44b9a 296 /* In this class Interrupt Status 1 and
Rhyme 2:c465a8d44b9a 297 * Interrupt Status 2 are combined to be a uint16_t
Rhyme 2:c465a8d44b9a 298 */
Rhyme 2:c465a8d44b9a 299 #define INT_ST_A_FULL 0x8000 /* FIFO Almost Full Flag */
Rhyme 2:c465a8d44b9a 300 #define INT_ST_PPG_RGY 0x4000 /* New FIFO Data Ready */
Rhyme 2:c465a8d44b9a 301 #define INT_ST_ALC_OVF 0x2000 /* Ambient Light Cancellation Overflow */
Rhyme 2:c465a8d44b9a 302 #define INT_ST_PROX_INT 0x1000 /* Proximity Threshold Triggered */
Rhyme 2:c465a8d44b9a 303 #define INT_ST_PWR_RDY 0x0100 /* Power Ready Flag */
Rhyme 2:c465a8d44b9a 304 #define INT_ST_DIE_TEMP_RDY 0x0002 /* Internal Temperature Ready Flag */
Rhyme 2:c465a8d44b9a 305 /* bits of Interrupt Enable register */
Rhyme 2:c465a8d44b9a 306 #define INT_EN_A_FULL 0x8000 /* FIFO Almost Full Flag */
Rhyme 2:c465a8d44b9a 307 #define INT_EN_PPG_RGY 0x4000 /* New FIFO Data Ready */
Rhyme 2:c465a8d44b9a 308 #define INT_EN_ALC_OVF 0x2000 /* Ambient Light Cancellation Overflow */
Rhyme 2:c465a8d44b9a 309 #define INT_EN_PROX_INT 0x1000 /* Proximity Threshold Triggered */
Rhyme 2:c465a8d44b9a 310 #define INT_EN_DIE_TEMP_RDY 0x0002 /* Internal Temperature Ready Flag */
Rhyme 2:c465a8d44b9a 311 /* Mode configuration bits */
Rhyme 2:c465a8d44b9a 312 #define MODE_HR 0x02 /* Heart Rate mode */
Rhyme 2:c465a8d44b9a 313 #define MODE_SPO2 0x03 /* SpO2 mode */
Rhyme 2:c465a8d44b9a 314 #define MODE_MULTI_LED 0x07 /* Multi-LED mode */
Rhyme 2:c465a8d44b9a 315 #define MODE_RESET 0x40 /* Reset Control, this bit is auto clear */
Rhyme 2:c465a8d44b9a 316 #define MODE_SHDN 0x80 /* Shutdown Control */
Rhyme 2:c465a8d44b9a 317
Rhyme 2:c465a8d44b9a 318
Rhyme 0:4ad9373787e8 319 #endif /* _MAX30101_H_ */