Chanel's edits

Dependencies:   max32630fthr USBDevice

main.cpp

Committer:
saleiferis
Date:
2020-03-02
Revision:
9:171171516ebd
Parent:
8:2005014df05c
Child:
10:28b8729cf5dc

File content as of revision 9:171171516ebd:

#include "mbed.h"
#include "math.h"
#include "max32630fthr.h"
#include "max86150.h"
#include "I2C.h"
#include "ble/BLE.h"
#include "ble/Gap.h"
//#include "ble/services/HeartRateService.h"
#include "ECGService.h"
#include <events/mbed_events.h>
#include "bt32630.h"

//Register definitions
#define MAX86150_Addr 0xBC //updated per I2Cscanner, 8 bit version of 7 bit code 0x5E
#define InterruptStatusReg1 0x00 //Interrupt status byte 0 (read both bytes 0x00 and 0x01 when checking int status)
#define InterruptStatusReg2 0x01
#define InterruptEnableReg1 0x02 //Interrupt enable byte 0
#define InterruptEnableReg2 0x03
#define FIFOWritePointerReg 0x04
#define OverflowCounterReg 0x05
#define FIFOReadPointerReg 0x06
#define FIFODataReg 0x07
#define FIFOConfigReg 0x08
#define FIFODataControlReg1 0x09
#define FIFODataControlReg2 0x0A
#define SystemControlReg 0x0D
#define ppgConfigReg0 0x0E
#define ppgConfigReg1 0x0F
#define ProxIntThreshReg 0x10
#define LED1PulseAmpReg 0x11
#define LED2PulseAmpReg 0x12
#define LEDRangeReg 0x14
#define LEDPilotPAReg 0x15
#define EcgConfigReg1 0x3C
#define EcgConfigReg2 0x3D
#define EcgConfigReg3 0x3E
#define EcgConfigReg4 0x3F
#define PartIDReg 0xFF
#define maxi2cFreq 1000000
#define recommendedi2cFreq 400000
#define interrupt_pin P5_0 //INTB pin --see InterruptIn declaration
#define maxECGrate 0
#define normECGrate 1
//#define BaudRate 921600
//#define BaudRate 256000 
//#define BaudRate 250000 
#define BaudRate 9600
//#define BaudRate 115200
//#define BaudRate 57600
//also try 921600, 460800 230400
const int16_t i2cBufferSize=32; //32 was stable. In this rev exploring 36
void ISR_AFULL();


//I2C i2c(I2C_SDA,I2C_SCL);


Serial pc(USBTX,USBRX,NULL,BaudRate); //open serial port (optionally add device name and baud rate after specifying TX and RX pins)
InterruptIn intPin(P5_5);
I2C i2c(I2C2_SDA, I2C2_SCL);
MAX86150 max86150Sensor;

volatile bool intFlag = false;
volatile uint8_t writePointer;
volatile uint8_t readPointer;
volatile uint32_t curr_time;
volatile uint32_t prev_time;
volatile int16_t samplesToRead;

Timer timer;



//// Bluetooth Init
//BLE& ble = BLE::Instance();
static events::EventQueue event_queue(/* event count */ 16 * EVENTS_EVENT_SIZE);

void ISR_AFULL()
{
    intPin.disable_irq();
    intFlag = true;
    readPointer = max86150Sensor.getReadPointer();
    writePointer = max86150Sensor.getWritePointer();
    samplesToRead = (int16_t)writePointer - (int16_t)readPointer;
    if (samplesToRead < 0) samplesToRead+=32;

}
//////////
int main(){
    //i2c.frequency(recommendedi2cFreq);
     //max86150Sensor.softReset();
     //wait_ms(3000);
    max86150Sensor.begin(i2c, recommendedi2cFreq, MAX86150_Addr); 
    wait_ms(300);
   
    //unsigned char partID = max86150Sensor.readPartID();
    unsigned char partID = max86150Sensor.readRegister8(MAX86150_Addr,0xFF);
    pc.printf("Part ID is: %X\n",partID);
    
    
    //***** SETUP SENSOR
    //max86150Sensor.writeRegister8(MAX86150_Addr,0x0D,0x01); 
    max86150Sensor.setup(); //Configure sensor
    //
    wait_ms(300);
    pc.printf("SYSCONTOL REG: %x\n", max86150Sensor.readRegister8(MAX86150_Addr,0x0D));
    while(max86150Sensor.readRegister8(MAX86150_Addr,0x0D) != 0x04)
    {
        pc.printf("SYS CTRL not set properly\n");
        wait_ms(200);
    }
    pc.printf("FIFO CONFIG: %X\n",max86150Sensor.readRegister8(MAX86150_Addr,0x08));
    pc.printf("INT_EN1: %X\n", max86150Sensor.readRegister8(MAX86150_Addr,0x02));
    pc.printf("INT STATUS: %X\n",max86150Sensor.readRegister8(MAX86150_Addr,0x00));
    pc.printf("INT STATUS: %X\n",max86150Sensor.readRegister8(MAX86150_Addr,0x01));
    
    //*************************************************************\\
    
    //wait_ms(2000);
    //pc.printf("SYS CTRL REG: %x\n",max86150Sensor.readRegister8(MAX86150_Addr,0x0D));
    //uint8_t readPointer = max86150Sensor.getReadPointer();
    //uint8_t writePointer = max86150Sensor.getWritePointer();
    //pc.printf("WRT_PTR: %X ... READ_PTR: %X",writePointer,readPointer);
    //pc.printf("SYS CTRL REG: %x\n",max86150Sensor.readRegister8(MAX86150_Addr,0x0D));
    
    
    //******* SETUP BLUETOOTH *********   
    
    
    //eventQueue.call_every(1, periodicCallback); //it was 500
    BLE &ble = BLE::Instance();
    //ble.onEventsToProcess(scheduleBleEventsProcessing);
    ble.init(bleInitComplete);
    //pc.printf("Before dispatch forever");
    //eventQueue.dispatch_forever();
    
    
    
    
    intPin.fall(&ISR_AFULL);
    max86150Sensor.readRegister8(MAX86150_Addr,0x00);
    max86150Sensor.readRegister8(MAX86150_Addr,0x01);
    while(1){
        //pc.printf("INT STATUS1: %X\n",max86150Sensor.readRegister8(MAX86150_Addr,0x00));
        
        if (intFlag){
            pc.printf("intFLagged\n");
            pc.printf("ReadPtr: %d ... WrtPtr: %d ... SmplRead: %d\n",readPointer, writePointer, samplesToRead);
            intFlag = false;
            max86150Sensor.readRegister8(MAX86150_Addr,0x00);
            //max86150Sensor.readRegister8(MAX86150_Addr,0x01);
            pc.printf("INT STATUS2: %X\n",max86150Sensor.readRegister8(MAX86150_Addr,0x01));
            intPin.enable_irq();
            }
        
        }
    
    /// Get sensor data
    /*
    while(1){
        if(max86150Sensor.check()>0)
        {
        pc.printf("%d\n",max86150Sensor.getFIFOECG());
        }
        wait_us(500); 
        }
      */
        
    
    
}