MAX32625PICO LP0 mode

Dependencies:   SX1276GenericLib USBDevice

Fork of PICO_LP0 by Walter Luu

main.cpp

Committer:
walterluu
Date:
2020-10-12
Revision:
3:85fc843a9d7d
Parent:
2:f6ae69f3bfce
Child:
5:9e751733a6f3

File content as of revision 3:85fc843a9d7d:


#include "mbed.h"

// Board pins related
#include "PinMap.h"

// LORA related
#include "global_buffers.h"
#include "GenericPingPong2.h"
#define FEATURE_LORA
#include "sx1276-mbed-hal.h"

#include "main.h"

// OT07 related
#include "OT07_lib.h"      
#define CONVERT_T_DELAY 30 

// MAX44009 related
#include "MAX44009_lib.h"    

// AO32 related
#include "AO32_lib.h" 

//#if defined(TARGET_MAX32630FTHR) // using the RFM95 board
//    #include "max32630fthr.h"
//    MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
//#endif

// Virtual COM related
#include "USBSerial.h"      // for virtual COM
#define BS          8       // ASCII Back Space
#define CR          13      // ASCII Carriage Return

// Virtual serial port over USB TODO NEW VID PID NEEDED!!
USBSerial pc(0x0B6A, 0x0042, 0x0001, false);

///***************************************************************************
// * Virtual COM Instantiation
// **************************************************************************/
//#include "USBSerial.h"  // for virtual COM
//#define BS          8       // ASCII Back Space
//#define CR          13      // ASCII Carriage Return
//// Virtual serial port over USB TODO NEW VID PID NEEDED!!
//USBSerial pc(0x0B6A, 0x0042, 0x0001, false);

/***************************************************************************
 * LEDs Instantiation
 **************************************************************************/
DigitalOut myled(LED2);          // LED = LED2 green
DigitalOut rLED(LED1);          // red LED
DigitalOut bLED(LED3);          // blue LED
//DigitalOut *led3;

/***************************************************************************
 * I2C Bus Instantiation
 **************************************************************************/
I2C i2cBus0(P1_6, P1_7);            // I2C of MAX32625PICO


bool get_data_flag = false;         // used for data tramission frequency


//Timer setup
Ticker timer_1;                     // timer for data tramission frequency


void onTimerInterrupt(){
    get_data_flag = true;
}

int main() {

/***************************************************************************

 
 
    /* Setup begins here: */
    #if   MASTER == 1 // Master Device
        pc.printf("MAX32625PICO: MASTER DEVICE\r\n");
        wait(1);
    #elif SLAVE == 1 // Slave Device
        pc.printf("MAX32625PICO: SLAVE DEVICE\r\n");
        wait(1);
    #endif
    
    /* Introduction text: */
    pc.printf("Welcome to the SX1276GenericLib\r\n");
//    wait(5);
    pc.printf("Starting a simple LoRa PingPong\r\n");
//    wait(5);
    
     /***************************************************************************
     * Combined Payload Buffers for LoRa Communications
     **************************************************************************/
    uint8_t BufferTx[BufferSizeTx];             // more info in global_buffers.h
    uint8_t BufferRx[BufferSizeRx];             // more info in global_buffers.h
    
    /***************************************************************************
     * Identification Buffers
     **************************************************************************/
    #if   MASTER == 1 // Master Device
        uint8_t ID_of_slave[size_signature]; 
    #elif SLAVE == 1 // Slave Device
        uint8_t ID_of_master[size_signature];
    #endif
    
    /***************************************************************************
     * Dummy Data Buffers
     **************************************************************************/
    #if MASTER == 1  // Master Device
        uint8_t curr_dum_to_slave[size_of_dum];
    #elif SLAVE == 1 // Slave Device
        uint8_t curr_dum_from_master[size_of_dum];
        uint8_t prev_dum_from_master[size_of_dum];
    #endif
    
    /***************************************************************************
     * MAX30208 Data Buffers
     **************************************************************************/
    #if   MASTER == 1 // Master Device
//        uint8_t curr_MAX77650_from_slave[size_of_MAX77650];
        uint8_t curr_raw_temp_from_slave[size_of_MAX30208];
//        uint8_t prev_MAX77650_from_slave[size_of_MAX77650];
        uint8_t prev_raw_temp_from_slave[size_of_MAX30208];
//        bool chrg_status = false;; //True = ON False = OFF    
    #elif SLAVE == 1 // Slave Device
//        uint8_t curr_MAX77650_to_master[size_of_MAX77650];
//        bool chrg_status = false; //True = ON False = OFF
        uint8_t curr_raw_temp_to_master[size_of_MAX30208];
    #endif
    
    
    /***************************************************************************
     * MAX44009 Data Buffers
     **************************************************************************/
    #if   MASTER == 1 // Master Device
        uint8_t curr_raw_light_from_slave[size_of_MAX44009];
        uint8_t prev_raw_light_from_slave[size_of_MAX44009];
    //    static int16_t conv_frame_data_from_slave[64];
    #elif SLAVE == 1 // Slave Device
        uint8_t curr_raw_light_to_master[size_of_MAX44009];
    //    static char prev_raw_light_data_to_master[size_of_MAX44009];
    //    static int16_t conv_frame_data_to_master[64];
    #endif
    
    /***************************************************************************
     * MAX20361 Data Buffers
     **************************************************************************/
    #if   MASTER == 1 // Master Device
        uint8_t curr_raw_AO32_from_slave[size_of_MAX20361];
        uint8_t prev_raw_AO32_from_slave[size_of_MAX20361];
    //    static int16_t conv_frame_data_from_slave[64];
    #elif SLAVE == 1 // Slave Device
        uint8_t curr_raw_AO32_to_master[size_of_MAX20361];
    //    static char prev_raw_AO32_data_to_master[size_of_MAX20361];
    //    static int16_t conv_frame_data_to_master[64];
    #endif
    
    /***************************************************************************
     * Other Data Buffers
     **************************************************************************/
    #if   MASTER == 1 // Master Device
//        uint8_t curr_raw_other_from_slave[size_of_other];
//        uint8_t prev_raw_other_from_slave[size_of_other];
    //    static int16_t conv_frame_data_from_slave[64];
    #elif SLAVE == 1 // Slave Device
//        uint8_t curr_raw_other_to_master[size_of_other];
    //    static char prev_raw_other_data_to_master[size_of_other];
    //    static int16_t conv_frame_data_to_master[64];
    #endif
    
    /***************************************************************************
     * Finish Setting up LoRa Radios: This passes in pointers to Buffers to send
     **************************************************************************/
    SX1276PingPongSetup(BufferTx, BufferRx, &pc);
    
//    Pointer Tutorials
//    https://www.tutorialspoint.com/cprogramming/c_pointers.htm
    
    /***************************************************************************
     * Create Dummy Data For Master and Slave
     **************************************************************************/
//    Array Tutorials    
//    http://www.cplusplus.com/doc/tutorial/arrays/
    #if MASTER == 1
//    curr_dum_to_slave[0] = {33, 34};
    curr_dum_to_slave[0] = 33;
    curr_dum_to_slave[1] = 34;
    #endif
    
    #if SLAVE == 1
//    curr_raw_temp_to_master[size_of_MAX30208] = {10, 13, 15, 17, 19};
    curr_raw_temp_to_master[0] = 99;
    curr_raw_temp_to_master[1] = 99;
//    curr_raw_temp_to_master[2] = 15;
//    curr_raw_temp_to_master[3] = 17;
//    curr_raw_temp_to_master[4] = 19;
//    curr_raw_light_to_master[size_of_MAX44009] = {25, 26, 27, 28, 29};
    curr_raw_light_to_master[0] = 25;
    curr_raw_light_to_master[1] = 26;
//    curr_raw_light_to_master[2] = 27;
//    curr_raw_light_to_master[3] = 28;
//    curr_raw_light_to_master[4] = 29;
//    curr_raw_AO32_to_master[size_of_MAX20361] = {99, 100, 101, 102, 103};
    curr_raw_AO32_to_master[0] = 99;
    curr_raw_AO32_to_master[1] = 100;
    curr_raw_AO32_to_master[2] = 101;
    curr_raw_AO32_to_master[3] = 102;
//    curr_raw_AO32_to_master[4] = 103;
//    curr_raw_other_to_master[size_of_other] = {20, 30, 40, 50, 60, 70, 80};
//    curr_raw_other_to_master[0] = 20;
//    curr_raw_other_to_master[1] = 30;
//    curr_raw_other_to_master[2] = 40;
//    curr_raw_other_to_master[3] = 50;
//    curr_raw_other_to_master[4] = 60;
//    curr_raw_other_to_master[5] = 70;
//    curr_raw_other_to_master[6] = 80;
    
    
     #endif
    
    /***************************************************************************
     * Loop Counter
     **************************************************************************/
    int loopCnt = 0;
    
    #if SLAVE == 1
    //************* init ticker timer callbacks  ****************
    timer_1.attach(&onTimerInterrupt, 3);        //LED3 toggles every 3 seconds
    
    //************* OT07 Variables  ****************
//    char data[5];   
    char rawtempdata[2];          
    char OT07_i2c_add = 0xA0;
//    TempResponse T;
    
    //************* MAX44009 Variables  ****************
    char rawluxdata[2];          
    char MAX44009_i2c_add = 0x96;      // 0b1001 011x
    
    //************* AO32 Variables  ****************
    char rawOCVdata[2];                 // only needs 1
    char rawCntdata[2];
    char AO32_i2c_add = 0x2A;      // 0b0010 101x
    
    #endif
    
    while (1) {
        
    // Application details:
    //1. Set a fixed timer.
    //2. Data sent from Master to Slave.
    //3. Display data and repeat from 1.
   
   
    #if SLAVE == 1
    if(get_data_flag) {
        
        //reset the flag
        get_data_flag = false;
        pc.printf("Timer interval reached!\r\n");
        
        /***************************************************************************
        * Temperature Sensor Data Measurement
        **************************************************************************/
        // obtain register hex values
        convert_temperature(&i2cBus0, OT07_i2c_add);  //send OW convert selected device
        wait_ms(CONVERT_T_DELAY);  //wait 20 ms for convert temperature to complete
        int temp_error = OT07_read_register(&i2cBus0, OT07_i2c_add, OT07_FIFO_DATA, rawtempdata, 2); 
        pc.printf("OT07 add[%02X] data[%02X] data[%02X]\r\n", OT07_FIFO_DATA, rawtempdata[0], rawtempdata[1]);  
            
        //calculate temperature from data     
        int count = (int)(rawtempdata[0]*256 + rawtempdata[1]);
        if (count >= 32768)count = count - 65536;     // 2s comp
        double Temp = (double)count*0.005; 
        pc.printf("OT07  temperature[%.3f]  status[%d]\r\n", Temp, temp_error);
        
        //fill raw temp data into the array
        curr_raw_temp_to_master[0] = rawtempdata[0];
        curr_raw_temp_to_master[1] = rawtempdata[1];      
            
       // for (int i = 0; i < 3; i++) {
//            convert_temperature(&i2cBus0, i2c_add);  //send OW convert selected device
//            wait_ms(CONVERT_T_DELAY);  //wait 20 ms for convert temperature to complete 
//            T = get_temperature(&i2cBus0, i2c_add);
//            pc.printf("OT07  temperature[%.3f]  status[%d]\r\n", T.tempC, T.status);
//        }
        
        /***************************************************************************
        * Light Intensity Sensor Data Measurement
        **************************************************************************/
        // obtain register hex values
//        int lux_error = MAX44009_read_lux_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_HI, rawluxdata);
        int lux_error1 = MAX44009_read_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_HI, &rawluxdata[0]);
        int lux_error2 = MAX44009_read_register(&i2cBus0, MAX44009_i2c_add, MAX44009_LUX_LO, &rawluxdata[1]);
        pc.printf("MAX44009 hi_add[%02X] hi_data[%02X] lo_add[%02X] lo_data[%02X]\r\n", MAX44009_LUX_HI, rawluxdata[0], MAX44009_LUX_LO, rawluxdata[1]);
        
        //calculate temperature from data  
        int exponent = int(rawluxdata[0] >> 4);
        int mantissa = int(rawluxdata[0] << 4) + int(rawluxdata[1]);
        double lux = 0.045 * mantissa * pow((double) 2, exponent);
        pc.printf("MAX44009  exponent[%d]  mantissa[%d]\r\n", exponent, mantissa);
        pc.printf("MAX44009  lux[%f]  status[%d] status[%d]\r\n", lux, lux_error1, lux_error2);
        
        //fill raw lux data into the array
//        curr_raw_light_to_master[0] = rawluxdata[0];
//        curr_raw_light_to_master[1] = rawluxdata[1];
        
        
        /***************************************************************************
        * Solar Harvester Data Measurement
        **************************************************************************/
        // obtain register hex values
        char AO32ID[2];
        int id_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_DEVICE_ID, AO32ID);  // testing
        pc.printf("AO32 add[%02X] data[%02X]\r\n", AO32_DEVICE_ID, AO32ID[0]);              // should be 0x00: 0x11
        
        int ocv_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_VOC, rawOCVdata);
        pc.printf("AO32 add[%02X] data[%02X]\r\n", AO32_VOC, rawOCVdata[0]);
        int cnt_error = AO32_read_register(&i2cBus0, AO32_i2c_add, AO32_HARV_H, rawCntdata, 2); // burst read 2 bytes
        pc.printf("AO32 hi_add[%02X] hi_data[%02X] lo_add[%02X] lo_data[%02X]\r\n", AO32_HARV_H, rawCntdata[0], AO32_HARV_L, rawCntdata[1]);
        
        //calculate open circuit voltage from data
        double voltage = int(rawOCVdata[0]) / 100;
        pc.printf("AO32  OCV[%.2f]  status[%d]\r\n", voltage, ocv_error);  
        
        //calculate harvesting counts from data
        int countHi = int(rawCntdata[0] << 8); // might cause trouble, * 256 instead?
        int countLo = int(rawCntdata[1]);
        int harvest_counts = countHi + countLo;
        pc.printf("AO32  HarvesterCnt[%d]  status[%d]\r\n", harvest_counts, cnt_error); 
        
        //fill raw AO32 data into the array
//        curr_raw_AO32_to_master[0] = rawOCVdata[0];         // Fill OCV hex first
//        curr_raw_AO32_to_master[1] = rawCntdata[0];         // Fill Harvesting count high byte
//        curr_raw_AO32_to_master[2] = rawCntdata[1];         // Fill Harvesting count low byte
        
        /***************************************************************************
        * Fill Payload Buffer With Data From Main Program Buffers for next LoRa Transmition
        **************************************************************************/
        memcpy(&BufferTx[tx_idx_signature], PongMsg,                  size_signature);
        memcpy(&BufferTx[tx_idx_MAX30208],  curr_raw_temp_to_master, size_of_MAX30208);
        memcpy(&BufferTx[tx_idx_MAX44009],  curr_raw_light_to_master, size_of_MAX44009);
        memcpy(&BufferTx[tx_idx_MAX20361],  curr_raw_AO32_to_master,  size_of_MAX20361);
//        memcpy(&BufferTx[tx_idx_other],  curr_raw_other_to_master,  size_of_other);
        
        /***************************************************************************
        * In case of OnRxTimeout
        **************************************************************************/
        // Slave Device, these are values when LoRa communication did not happen
       // ID_of_master[0] = 'N'; // 0x4E or 78
//        ID_of_master[1] = 'A'; // 0x41 or 65
//        ID_of_master[2] = 'C'; // 0x43 or 67
//        ID_of_master[3] = 'K'; // 0x4B or 75
//        ID_of_master[4] = 'M'; // 0x4D or 77
//        ID_of_master[5] = 'A'; // 0x41 or 65
//        ID_of_master[6] = 'S'; // 0x53 or 83
//        ID_of_master[7] = '!'; // 0x21 or 33
//        
//        curr_dum_from_master[0] = 39;
//        curr_dum_from_master[1] = 40;       
        
        /***************************************************************************
        * LoRa Communication: Send Sensor Data
        **************************************************************************/
//        SX1276SensorSend();
        SX1276PingPong(); 
        int sendTime = TimeOnAirSend();
        pc.printf("Tx Time on Air: %d \r\n", sendTime);
        
        /***************************************************************************
        * Fill Main Program Buffers With Data From Received Payload Buffer
        **************************************************************************/
        // Slave Device
        memcpy(ID_of_master,              &BufferRx[rx_idx_signature], size_signature);
        memcpy(curr_dum_from_master,      &BufferRx[rx_idx_dum],       size_of_dum);
        
         /***************************************************************************
        * Slave Device: Print out Master Data
        **************************************************************************/
        //        memcpy(ID_of_master,              &BufferRx[rx_idx_signature], size_signature);
        pc.printf("Print ID_of_master\r\n");
        for(int i = 0; i < sizeof(ID_of_master); i++){
            pc.printf("%d \r\n", ID_of_master[i]);
        }
            
        //        memcpy(curr_dum_from_master,      &BufferRx[rx_idx_dum],       size_of_dum);
//        pc.printf("Print Dum From Master\r\n");
//        for(int i = 0; i < sizeof(curr_dum_from_master); i++){
//            pc.printf("%d \r\n", curr_dum_from_master[i]);
//        }
            
        // print loop counter
        pc.printf("Loop Counter Slave: %d \r\n", loopCnt);
        loopCnt = loopCnt + 1;
    } // end of transmission frequency for slave
    #endif    
    
    
    #if MASTER == 1
    /***************************************************************************
     * Fill Payload Buffer With Data From Main Program Buffers for next LoRa Transmition
     **************************************************************************/
    memcpy(&BufferTx[tx_idx_signature], PingMsg,           size_signature);
    memcpy(&BufferTx[tx_idx_dum],       curr_dum_to_slave, size_of_dum);
    
     /***************************************************************************
     * LoRa Communication: Gateway Receive Sensor Data
     **************************************************************************/
//    SX1276GateWayReceive(333);
    SX1276PingPong();
    int sendTime = TimeOnAirSend();
    pc.printf("Tx Time on Air: %d \r\n", sendTime);
    
    /***************************************************************************
     * Fill Main Program Buffers With Data From Received Payload Buffer
     **************************************************************************/
    memcpy(ID_of_slave,               &BufferRx[rx_idx_signature], size_signature);
    memcpy(curr_raw_temp_from_slave, &BufferRx[rx_idx_MAX30208],  size_of_MAX30208);
    memcpy(curr_raw_light_from_slave, &BufferRx[rx_idx_MAX44009], size_of_MAX44009);
    memcpy(curr_raw_AO32_from_slave,  &BufferRx[rx_idx_MAX20361],  size_of_MAX20361);
//    memcpy(curr_raw_other_from_slave,  &BufferRx[rx_idx_other],  size_of_other);

    /***************************************************************************
    * Master Device: Print out Slave Data
    **************************************************************************/
    
    //        memcpy(ID_of_slave,               &BufferRx[rx_idx_signature], size_signature);
    //pc.printf("Print ID_of_slave\r\n");
//    for(int i = 0; i < sizeof(ID_of_slave); i++){
//        pc.printf("%d \r\n", ID_of_slave[i]); 
//    }
    
    //        memcpy(curr_raw_temp_from_slave, &BufferRx[rx_idx_MAX30208],  size_of_MAX30208);
    pc.printf("Print MAX30208 data\r\n");
    for(int i = 0; i < sizeof(curr_raw_temp_from_slave); i++){
        pc.printf("%d \r\n", curr_raw_temp_from_slave[i]); 
    }
    
    
    int count = curr_raw_temp_from_slave[0] * 256 +  curr_raw_temp_from_slave[1];
    if (count >= 32768)count = count - 65536;     // 2s comp
    double tempResult = count * 0.005; 
//    pc.printf("OT07  temperature[%.3f]  status[%d]\r\n", Temp, error);
    pc.printf("MSG: [%.3f] [] [] [] []\r\n", tempResult);
    
            
    //        memcpy(curr_raw_light_from_slave, &BufferRx[rx_idx_MAX44009], size_of_MAX44009);
    // pc.printf("Print MAX44009 data\r\n");
//    for(int i = 0; i < sizeof(curr_raw_light_from_slave); i++){
//        pc.printf("%d \r\n", curr_raw_light_from_slave[i]);
//    }
            
    //        memcpy(curr_raw_AO32_from_slave,  &BufferRx[rx_idx_MAX20361],  size_of_MAX20361);
    //pc.printf("Print MAX20361 data\r\n");
//    for(int i = 0; i < sizeof(curr_raw_AO32_from_slave); i++){
//        pc.printf("%d \r\n", curr_raw_AO32_from_slave[i]);
//    }
            
    //        memcpy(curr_raw_other_from_slave,  &BufferRx[rx_idx_other],  size_of_other);
    //pc.printf("Print Other data\r\n");
//    for(int i = 0; i < sizeof(curr_raw_other_from_slave); i++){
//        pc.printf("%d \r\n", curr_raw_other_from_slave[i]);
//    }
    
    // print loop counter
    pc.printf("Loop Counter Master: %d \r\n", loopCnt);
    loopCnt = loopCnt + 1;
    
//    wait(3);
    
    #endif
        
    ///***************************************************************************
//     * Fill Payload Buffer With Data From Main Program Buffers for next LoRa Transmition
//     **************************************************************************/
//    #if   MASTER == 1 // Master Device
//        memcpy(&BufferTx[tx_idx_signature], PingMsg,           size_signature);
//        memcpy(&BufferTx[tx_idx_dum],       curr_dum_to_slave, size_of_dum);
//    #elif SLAVE == 1 // Slave Device
//        memcpy(&BufferTx[tx_idx_signature], PongMsg,                  size_signature);
//        memcpy(&BufferTx[tx_idx_MAX30208],  curr_raw_temp_to_master, size_of_MAX30208);
//        memcpy(&BufferTx[tx_idx_MAX44009],  curr_raw_light_to_master, size_of_MAX44009);
//        memcpy(&BufferTx[tx_idx_MAX20361],  curr_raw_AO32_to_master,  size_of_MAX20361);
//        memcpy(&BufferTx[tx_idx_other],  curr_raw_other_to_master,  size_of_other);
//    #endif
//    
//    /***************************************************************************
//     * In case of OnRxTimeout
//     **************************************************************************/
//    #if   MASTER == 1 // Master Device, these are values when LoRa communication did not happen
//        ID_of_slave[0] = 10; // 
//        ID_of_slave[1] = 11; // 
//        ID_of_slave[2] = 12; // 
//        ID_of_slave[3] = 13; // 
//        ID_of_slave[4] = 14; // 
//        ID_of_slave[5] = 15; // 
//        ID_of_slave[6] = 16; // 
//        ID_of_slave[7] = 17; // 
//    
//    #elif SLAVE == 1 // Slave Device, these are values when LoRa communication did not happen
//        ID_of_master[0] = 'N'; // 0x4E or 78
//        ID_of_master[1] = 'A'; // 0x41 or 65
//        ID_of_master[2] = 'C'; // 0x43 or 67
//        ID_of_master[3] = 'K'; // 0x4B or 75
//        ID_of_master[4] = 'M'; // 0x4D or 77
//        ID_of_master[5] = 'A'; // 0x41 or 65
//        ID_of_master[6] = 'S'; // 0x53 or 83
//        ID_of_master[7] = '!'; // 0x21 or 33
//        
//        curr_dum_from_master[0] = 39;
//        curr_dum_from_master[1] = 40;       
//    
//    #endif
//
//
//    /***************************************************************************
//     * Lora Communications
//     **************************************************************************/
//    #if   MASTER == 1 // Master Device
//        SX1276GateWayReceive();
//    
//    #elif SLAVE == 1 // Slave Device
//        SX1276SensorSend(); 
//        int sendTime = TimeOnAirSend();
//        pc.printf("Tx Time on Air: %d \r\n", sendTime);
//    #endif  
//    
////    SX1276PingPong();           // what changes here?
//    
//    
//    /***************************************************************************
//     * Fill Main Program Buffers With Data From Received Payload Buffer
//     **************************************************************************/
//    /* The master and slave devices will have different requirements for offloading payload */
//    #if   MASTER == 1 // Master Device
//        memcpy(ID_of_slave,               &BufferRx[rx_idx_signature], size_signature);
//        memcpy(curr_raw_temp_from_slave, &BufferRx[rx_idx_MAX30208],  size_of_MAX30208);
//        memcpy(curr_raw_light_from_slave, &BufferRx[rx_idx_MAX44009], size_of_MAX44009);
//        memcpy(curr_raw_AO32_from_slave,  &BufferRx[rx_idx_MAX20361],  size_of_MAX20361);
//        memcpy(curr_raw_other_from_slave,  &BufferRx[rx_idx_other],  size_of_other);
//    #elif SLAVE == 1 // Slave Device
//        memcpy(ID_of_master,              &BufferRx[rx_idx_signature], size_signature);
//        memcpy(curr_dum_from_master,      &BufferRx[rx_idx_dum],       size_of_dum);
//    #endif    
//        
//       
//    /***************************************************************************
//     * Print Out Data Received
//     **************************************************************************/       
//    #if   MASTER == 1 // Master Device
//    
////        memcpy(ID_of_slave,               &BufferRx[rx_idx_signature], size_signature);
//        pc.printf("Print ID_of_slave\r\n");
//        for(int i = 0; i < sizeof(ID_of_slave); i++){
//            pc.printf("%d \r\n", ID_of_slave[i]); 
//            }
//    
////        memcpy(curr_raw_temp_from_slave, &BufferRx[rx_idx_MAX30208],  size_of_MAX30208);
//        pc.printf("Print MAX30208 data\r\n");
//        for(int i = 0; i < sizeof(curr_raw_temp_from_slave); i++){
//            pc.printf("%d \r\n", curr_raw_temp_from_slave[i]); 
//            }
//            
////        memcpy(curr_raw_light_from_slave, &BufferRx[rx_idx_MAX44009], size_of_MAX44009);
//         pc.printf("Print MAX44009 data\r\n");
//        for(int i = 0; i < sizeof(curr_raw_light_from_slave); i++){
//            pc.printf("%d \r\n", curr_raw_light_from_slave[i]);
//            }
//            
////        memcpy(curr_raw_AO32_from_slave,  &BufferRx[rx_idx_MAX20361],  size_of_MAX20361);
//        pc.printf("Print MAX20361 data\r\n");
//        for(int i = 0; i < sizeof(curr_raw_AO32_from_slave); i++){
//            pc.printf("%d \r\n", curr_raw_AO32_from_slave[i]);
//            }
//            
////        memcpy(curr_raw_other_from_slave,  &BufferRx[rx_idx_other],  size_of_other);
//        pc.printf("Print Other data\r\n");
//        for(int i = 0; i < sizeof(curr_raw_other_from_slave); i++){
//            pc.printf("%d \r\n", curr_raw_other_from_slave[i]);
//            }
//    
//    // print loop counter
//    pc.printf("Loop Counter Master: %d \r\n", loopCnt);
//    loopCnt = loopCnt + 1;
//            
//    #elif SLAVE == 1 // Slave Device
////        memcpy(ID_of_master,              &BufferRx[rx_idx_signature], size_signature);
//        pc.printf("Print ID_of_master\r\n");
//        for(int i = 0; i < sizeof(ID_of_master); i++){
//            pc.printf("%d \r\n", ID_of_master[i]);
//            }
//            
////        memcpy(curr_dum_from_master,      &BufferRx[rx_idx_dum],       size_of_dum);
//        pc.printf("Print Dum From Master\r\n");
//        for(int i = 0; i < sizeof(curr_dum_from_master); i++){
//            pc.printf("%d \r\n", curr_dum_from_master[i]);
//            }
//            
//    // print loop counter
//    pc.printf("Loop Counter Slave: %d \r\n", loopCnt);
//    loopCnt = loopCnt + 1;
//    #endif    
           
    // add delay to slow down
    //    wait(1);
        
        
//        }  //end of get_data_flag
    
    } // end of while(1) loop
        
}  // end of main()