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

Dependents:   test_MAX30101 testSensor

Committer:
Rhyme
Date:
Tue Dec 29 06:25:58 2015 +0000
Revision:
0:4ad9373787e8
Child:
1:fc677d82d0f1
First commit, register definitions, read ID and Rev implemented

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:4ad9373787e8 1 /**
Rhyme 0:4ad9373787e8 2 * MAX30101
Rhyme 0:4ad9373787e8 3 * High-Sensitivity Pulse Oximeter and
Rhyme 0:4ad9373787e8 4 * Heart-Rate Sensor for Wearable Health
Rhyme 0:4ad9373787e8 5 */
Rhyme 0:4ad9373787e8 6 #include "mbed.h"
Rhyme 0:4ad9373787e8 7 #include "MAX30101.h"
Rhyme 0:4ad9373787e8 8
Rhyme 0:4ad9373787e8 9 /* Status */
Rhyme 0:4ad9373787e8 10 #define REG_INT_MSB 0x00 /* Interrupt Status 1 */
Rhyme 0:4ad9373787e8 11 #define REG_INT_LSB 0x01 /* Interrupt Status 2 */
Rhyme 0:4ad9373787e8 12 #define REG_INT_ENB_MSB 0x02 /* Interrupt Enable 1 */
Rhyme 0:4ad9373787e8 13 #define REG_INT_ENB_LSB 0x03 /* Interrupt Enable 2 */
Rhyme 0:4ad9373787e8 14 /* FIFO */
Rhyme 0:4ad9373787e8 15 #define REG_FIFO_WR_PTR 0x04 /* FIFO Write Pointer */
Rhyme 0:4ad9373787e8 16 #define REG_OVF_COUNTER 0x05 /* Overflow Counter */
Rhyme 0:4ad9373787e8 17 #define REG_FIFO_RD_PTR 0x06 /* FIFO Read Pointer */
Rhyme 0:4ad9373787e8 18 #define REG_FIFO_DATA 0x07 /* FIFO Data Register */
Rhyme 0:4ad9373787e8 19 /* Configuration */
Rhyme 0:4ad9373787e8 20 #define REG_FIFO_CONFIG 0x08 /* FIFO Configuration */
Rhyme 0:4ad9373787e8 21 #define REG_MODE_CONFIG 0x09 /* Mode Configuration */
Rhyme 0:4ad9373787e8 22 #define REG_SPO2_CONFIG 0x0A /* SpO2 Configuration */
Rhyme 0:4ad9373787e8 23 /* reserved 0x0B */
Rhyme 0:4ad9373787e8 24 #define REG_LED1_PA 0x0C /* LED Pulse Amplitude 1 */
Rhyme 0:4ad9373787e8 25 #define REG_LED2_PA 0x0D /* LED Pulse Amplitude 2 */
Rhyme 0:4ad9373787e8 26 #define REG_LED3_PA 0x0E /* LED Pulse Amplitude 3 */
Rhyme 0:4ad9373787e8 27 /* reserved 0x0F */
Rhyme 0:4ad9373787e8 28 #define REG_PILOT_PA 0x10 /* Proximity LED Pulse Amplitude */
Rhyme 0:4ad9373787e8 29 #define REG_SLOT_MSB 0x11 /* Multi-LED Mode Control Registers 2, 1 */
Rhyme 0:4ad9373787e8 30 #define REG_SLOT_LSB 0x12 /* Multi-LED Mode Control Registers 4, 3 */
Rhyme 0:4ad9373787e8 31 /* DIE Temperature */
Rhyme 0:4ad9373787e8 32 #define REG_TEMP_INT 0x1F /* Die Temperature Integer */
Rhyme 0:4ad9373787e8 33 #define REG_TEMP_FRAC 0x20 /* Die Temperature Fraction */
Rhyme 0:4ad9373787e8 34 #define REG_TEMP_EN 0x21 /* Die Temperature Config */
Rhyme 0:4ad9373787e8 35 /* Proximity Function */
Rhyme 0:4ad9373787e8 36 #define REG_PROX_INT_THS 0x30 /* Proximity Interrupt Threshold */
Rhyme 0:4ad9373787e8 37 /* Part ID */
Rhyme 0:4ad9373787e8 38 #define REG_REV_ID 0xFE /* Revision ID */
Rhyme 0:4ad9373787e8 39 #define REG_PART_ID 0xFF /* Part ID: 0x15 */
Rhyme 0:4ad9373787e8 40
Rhyme 0:4ad9373787e8 41 MAX30101::MAX30101(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) {
Rhyme 0:4ad9373787e8 42 // activate the peripheral
Rhyme 0:4ad9373787e8 43 }
Rhyme 0:4ad9373787e8 44
Rhyme 0:4ad9373787e8 45 MAX30101::~MAX30101() { }
Rhyme 0:4ad9373787e8 46
Rhyme 0:4ad9373787e8 47 void MAX30101::readRegs(int addr, uint8_t * data, int len) {
Rhyme 0:4ad9373787e8 48 char t[1] = {addr} ;
Rhyme 0:4ad9373787e8 49 m_i2c.write(m_addr, t, 1, true) ;
Rhyme 0:4ad9373787e8 50 m_i2c.read(m_addr, (char*)data, len) ;
Rhyme 0:4ad9373787e8 51 }
Rhyme 0:4ad9373787e8 52
Rhyme 0:4ad9373787e8 53 void MAX30101::writeRegs(uint8_t * data, int len) {
Rhyme 0:4ad9373787e8 54 m_i2c.write(m_addr, (char *)data, len) ;
Rhyme 0:4ad9373787e8 55 }
Rhyme 0:4ad9373787e8 56
Rhyme 0:4ad9373787e8 57 uint8_t MAX30101::getID(void)
Rhyme 0:4ad9373787e8 58 {
Rhyme 0:4ad9373787e8 59 uint8_t id ;
Rhyme 0:4ad9373787e8 60 readRegs(REG_PART_ID, &id, 1) ;
Rhyme 0:4ad9373787e8 61 return( id ) ;
Rhyme 0:4ad9373787e8 62 }
Rhyme 0:4ad9373787e8 63
Rhyme 0:4ad9373787e8 64 uint8_t MAX30101::getRev(void)
Rhyme 0:4ad9373787e8 65 {
Rhyme 0:4ad9373787e8 66 uint8_t rev ;
Rhyme 0:4ad9373787e8 67 readRegs(REG_REV_ID, &rev, 1) ;
Rhyme 0:4ad9373787e8 68 return( rev ) ;
Rhyme 0:4ad9373787e8 69 }