MAX32625PICO LP1 mode

Dependencies:   SX1276GenericLib USBDevice

Fork of PICO_LP1 by Walter Luu

Revision:
3:85fc843a9d7d
Parent:
2:f6ae69f3bfce
Child:
5:9e751733a6f3
--- a/main.cpp	Sun Aug 09 19:41:16 2020 +0000
+++ b/main.cpp	Mon Oct 12 21:55:22 2020 +0000
@@ -1,566 +1,615 @@
+
 #include "mbed.h"
+
+// Board pins related
 #include "PinMap.h"
 
-//#include "BufferedSerial.h"
+// LORA related
+#include "global_buffers.h"
+#include "GenericPingPong2.h"
+#define FEATURE_LORA
+#include "sx1276-mbed-hal.h"
+
+#include "main.h"
 
-//#ifdef FEATURE_USBSERIAL
-//#include "USBSerialBuffered.h"
-//#endif
-//
-//#ifdef FEATURE_USBSERIAL
-//extern USBSerialBuffered *usb;
+// 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
 
-#include "GenericPingPong.h"
- 
-#define FEATURE_LORA
-#include "sx1276-mbed-hal.h"
-#include "main.h"
-
-
-//#if defined(TARGET_MAX32630FTHR) // using the RFM95 board
-#include "max32630fthr.h"
-MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);
-//#endif
-
-#include "USBSerial.h"  // for virtual COM
-
+// 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
-
-
-/*
-LoRa initialization
-*/
-
-/* Set this flag to '1' to display debug messages on the console */
-#define DEBUG_MESSAGE   1
-
-/* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */
-#define USE_MODEM_LORA  1
-#define USE_MODEM_FSK   !USE_MODEM_LORA
-#define RF_FREQUENCY            RF_FREQUENCY_915_0  // Hz
-#define TX_OUTPUT_POWER         14                  // 14 dBm
-
-#if USE_MODEM_LORA == 1
-
-#define LORA_BANDWIDTH          125000  // LoRa default, details in SX1276::BandwidthMap
-#define LORA_SPREADING_FACTOR   LORA_SF7
-#define LORA_CODINGRATE         LORA_ERROR_CODING_RATE_4_5
+//DigitalOut *led3;
 
-#define LORA_PREAMBLE_LENGTH    8       // Same for Tx and Rx
-#define LORA_SYMBOL_TIMEOUT     5       // Symbols
-#define LORA_FIX_LENGTH_PAYLOAD_ON  false
-#define LORA_FHSS_ENABLED       false  
-#define LORA_NB_SYMB_HOP        4     
-#define LORA_IQ_INVERSION_ON    false
-#define LORA_CRC_ENABLED        true
-    
-#elif USE_MODEM_FSK == 1
-
-#define FSK_FDEV                25000     // Hz
-#define FSK_DATARATE            19200     // bps
-#define FSK_BANDWIDTH           50000     // Hz
-#define FSK_AFC_BANDWIDTH       83333     // Hz
-#define FSK_PREAMBLE_LENGTH     5         // Same for Tx and Rx
-#define FSK_FIX_LENGTH_PAYLOAD_ON   false
-#define FSK_CRC_ENABLED         true
-    
-#else
-    #error "Please define a modem in the compiler options."
-#endif 
+/***************************************************************************
+ * I2C Bus Instantiation
+ **************************************************************************/
+I2C i2cBus0(P1_6, P1_7);            // I2C of MAX32625PICO
 
 
-#define RX_TIMEOUT_VALUE    3500    // in ms
-
-//#define BUFFER_SIZE       32        // Define the payload size here
-#define BUFFER_SIZE         64        // Define the payload size here
-
-/*
- *  Global variables declarations
- */
-typedef enum
-{
-    LOWPOWER = 0,
-    IDLE,
-    
-    RX,
-    RX_TIMEOUT,
-    RX_ERROR,
-    
-    TX,
-    TX_TIMEOUT,
-    
-    CAD,
-    CAD_DONE
-} AppStates_t;
-
-volatile AppStates_t State = LOWPOWER;
-
-/*!
- * Radio events function pointer
- */
-static RadioEvents_t RadioEvents;
-
-/*
- *  Global variables declarations
- */
-SX1276Generic *Radio;
+bool get_data_flag = false;         // used for data tramission frequency
 
 
-const uint8_t PingMsg[] = { 0xff, 0xff, 0x00, 0x00, 'P', 'I', 'N', 'G'};// "PING";
-const uint8_t PongMsg[] = { 0xff, 0xff, 0x00, 0x00, 'P', 'O', 'N', 'G'};// "PONG";
+//Timer setup
+Ticker timer_1;                     // timer for data tramission frequency
+
 
-uint16_t BufferSize = BUFFER_SIZE;
-uint8_t *Buffer;
-
-DigitalOut *led3;
+void onTimerInterrupt(){
+    get_data_flag = true;
+}
 
 int main() {
 
-// This mbed-os is copied from Joey's PICO_I2C_FW_Virtual_COM project: FTHR becomes a virtual serial port.
-    
-myled = 0;                      // green led off
-rLED = 0;                       // red led off
-bLED = 0;                       // blue led off
-
-/************ Testing purpose ************
-*/
-//pc.printf("Hello World\n");
-//bLED = 1;
-//wait(3); 
-//bLED = 0;
-//
-//while (1) {
-//    pc.printf("Testing\n");
-//    pc.printf("Haha\n");
-//    wait(1);
-//    myled = !myled;
-//    }    
-    
-    pc.printf("Starting LoRa Example\n");
-//    GenericPingPong.SX1276PingPong();
-    SX1276PingPong();
-}
+/***************************************************************************
 
-int SX1276PingPong(void) 
-{
-//    dprintf("TEST" );
-    pc.printf("TEST");
-#if( defined ( TARGET_KL25Z ) || defined ( TARGET_LPC11U6X ) )
-    DigitalOut *led = new DigitalOut(LED2);
-#elif defined(TARGET_NUCLEO_L073RZ) || defined(TARGET_DISCO_L072CZ_LRWAN1)
-    DigitalOut *led = new DigitalOut(LED4);   // RX red
-    led3 = new DigitalOut(LED3);  // TX blue
-#else
-    DigitalOut *led = new DigitalOut(LED1);             // led = LED1 red  FTHR board
-    led3 = led;                                         // led3 = led red  FTHR board
-#endif
+ 
+ 
+    /* 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
+    
     
-    Buffer = new  uint8_t[BUFFER_SIZE];
-    *led3 = 1;                                          // red LED on
-
-#ifdef B_L072Z_LRWAN1_LORA
-    Radio = new SX1276Generic(NULL, MURATA_SX1276,
-            LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
-            LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5,
-            LORA_ANT_RX, LORA_ANT_TX, LORA_ANT_BOOST, LORA_TCXO);
-#else // RFM95
-    Radio = new SX1276Generic(NULL, RFM95_SX1276,
-            LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
-            LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5);
-
-#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
     
-    uint8_t i;
-    bool isMaster = true;
+    /***************************************************************************
+     * 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
     
-//    dprintf("SX1276 Ping Pong Demo Application" );
-    pc.printf("SX1276 Ping Pong Demo Application");
-//    dprintf("Freqency: %.1f", (double)RF_FREQUENCY/1000000.0);
-    pc.printf("Freqency: %.1f", (double)RF_FREQUENCY/1000000.0);
-//    dprintf("TXPower: %d dBm",  TX_OUTPUT_POWER);
-    pc.printf("TXPower: %d dBm",  TX_OUTPUT_POWER);
-#if USE_MODEM_LORA == 1
-//    dprintf("Bandwidth: %d Hz", LORA_BANDWIDTH);
-    pc.printf("Bandwidth: %d Hz", LORA_BANDWIDTH);
-//    dprintf("Spreading factor: SF%d", LORA_SPREADING_FACTOR);
-    pc.printf("Spreading factor: SF%d", LORA_SPREADING_FACTOR);
-#elif USE_MODEM_FSK == 1
-//    dprintf("Bandwidth: %d kHz",  FSK_BANDWIDTH);
-    pc.printf("Bandwidth: %d kHz",  FSK_BANDWIDTH);
-//    dprintf("Baudrate: %d", FSK_DATARATE);
-    pc.printf("Baudrate: %d", FSK_DATARATE);
-#endif
-    // Initialize Radio driver
-    RadioEvents.TxDone = OnTxDone;
-    RadioEvents.RxDone = OnRxDone;
-    RadioEvents.RxError = OnRxError;
-    RadioEvents.TxTimeout = OnTxTimeout;
-    RadioEvents.RxTimeout = OnRxTimeout;    
-    if (Radio->Init( &RadioEvents ) == false) {
-        while(1) {
-//            dprintf("Radio could not be detected!");
-            pc.printf("Radio could not be detected!");
-            wait( 1 );
-        }
-    }
-
+    #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
     
-    switch(Radio->DetectBoardType()) {            // check where DetectBoardType is!!
-        case SX1276MB1LAS:
-            if (DEBUG_MESSAGE)
-//                dprintf(" > Board Type: SX1276MB1LAS <");
-                pc.printf(" > Board Type: SX1276MB1LAS <");
-            break;
-        case SX1276MB1MAS:
-            if (DEBUG_MESSAGE)
-//                dprintf(" > Board Type: SX1276MB1LAS <");
-                pc.printf(" > Board Type: SX1276MB1LAS <");
-        case MURATA_SX1276:
-            if (DEBUG_MESSAGE)
-//                dprintf(" > Board Type: MURATA_SX1276_STM32L0 <");
-                pc.printf(" > Board Type: MURATA_SX1276_STM32L0 <");
-            break;
-        case RFM95_SX1276:
-            if (DEBUG_MESSAGE)
-//                dprintf(" > HopeRF RFM95xx <");
-                pc.printf(" > HopeRF RFM95xx <");
-            break;
-        default:
-//            dprintf(" > Board Type: unknown <");
-            pc.printf(" > Board Type: unknown <");
-    }
-
-    Radio->SetChannel(RF_FREQUENCY ); 
-
-#if USE_MODEM_LORA == 1
-    
-    if (LORA_FHSS_ENABLED)
-//        dprintf("             > LORA FHSS Mode <");
-        pc.printf("             > LORA FHSS Mode <");
-    if (!LORA_FHSS_ENABLED)
-//        dprintf("             > LORA Mode <");
-        pc.printf("             > LORA Mode <");
-
-    Radio->SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
-                         LORA_SPREADING_FACTOR, LORA_CODINGRATE,
-                         LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
-                         LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP, 
-                         LORA_IQ_INVERSION_ON, 2000 );
-    
-    Radio->SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
-                         LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
-                         LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0,
-                         LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP, 
-                         LORA_IQ_INVERSION_ON, true );
-                         
-#elif USE_MODEM_FSK == 1
-
-//    dprintf("              > FSK Mode <");
-    pc.printf("              > FSK Mode <");
-    Radio->SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,
-                         FSK_DATARATE, 0,
-                         FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,
-                         FSK_CRC_ENABLED, 0, 0, 0, 2000 );
-    
-    Radio->SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,
-                         0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,
-                         0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, FSK_CRC_ENABLED,
-                         0, 0, false, true );
-                         
-#else
-
-#error "Please define a modem in the compiler options."
-
-#endif
-     
-    if (DEBUG_MESSAGE)
-        pc.printf("Starting Ping-Pong loop"); 
-//        dprintf("Starting Ping-Pong loop"); 
-
+    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);
+//        }
         
-    Radio->Rx( RX_TIMEOUT_VALUE );
-    
-    while( 1 )
-    {
-#ifdef TARGET_STM32L4
-    //     WatchDogUpdate();
-#endif
+        /***************************************************************************
+        * 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
         
-        switch( State )
-        {
-        case RX:
-            *led3 = 0;
-            if( isMaster == true )
-            {
-                if( BufferSize > 0 )
-                {
-                    if( memcmp(Buffer, PongMsg, sizeof(PongMsg)) == 0 )
-                    {
-                        *led = !*led;
-//                        dprintf( "...Pong" );
-                        pc.printf( "...Pong" );
-                        // Send the next PING frame            
-                        memcpy(Buffer, PingMsg, sizeof(PingMsg));
-                        // We fill the buffer with numbers for the payload 
-                        for( i = sizeof(PingMsg); i < BufferSize; i++ )
-                        {
-                            Buffer[i] = i - sizeof(PingMsg);
-                        }
-                        wait_ms( 10 ); 
-                        Radio->Send( Buffer, BufferSize );
-                    }
-                    else if( memcmp(Buffer, PingMsg, sizeof(PingMsg)) == 0 )
-                    { // A master already exists then become a slave
-//                        dprintf( "...Ping" );
-                        pc.printf( "...Ping" );
-                        *led = !*led;
-                        isMaster = false;
-                        // Send the next PONG frame
-                        memcpy(Buffer, PongMsg, sizeof(PongMsg));        
-                        // We fill the buffer with numbers for the payload 
-                        for( i = sizeof(PongMsg); i < BufferSize; i++ )
-                        {
-                            Buffer[i] = i - sizeof(PongMsg);
-                        }
-                        wait_ms( 10 ); 
-                        Radio->Send( Buffer, BufferSize );
-                    }
-                    else // valid reception but neither a PING or a PONG message
-                    {    // Set device as master ans start again
-                        isMaster = true;
-                        Radio->Rx( RX_TIMEOUT_VALUE );
-                    }    
-                }
-            }
-            else
-            {
-                if( BufferSize > 0 )
-                {
-                    if( memcmp(Buffer, PingMsg, sizeof(PingMsg)) == 0 )
-                    {
-                        *led = !*led;
-//                        dprintf( "...Ping" );
-                        pc.printf( "...Ping" );
-                        // Send the reply to the PING string
-                        memcpy(Buffer, PongMsg, sizeof(PongMsg));
-                        // We fill the buffer with numbers for the payload 
-                        for( i = sizeof(PongMsg); i < BufferSize; i++ )
-                        {
-                            Buffer[i] = i - sizeof(PongMsg);
-                        }
-                        wait_ms( 10 );  
-                        Radio->Send( Buffer, BufferSize );
-                    }
-                    else // valid reception but not a PING as expected
-                    {    // Set device as master and start again
-                        isMaster = true;
-                        Radio->Rx( RX_TIMEOUT_VALUE );
-                    }    
-                }
-            }
-            State = LOWPOWER;
-            break;
-        case TX:    
-            *led3 = 1;
-            if( isMaster == true )  
-            {
-//                dprintf("Ping..." );
-                pc.printf("Ping..." );
-            }
-            else
-            {
-//                dprintf("Pong..." );
-                pc.printf("Pong..." );
-            }
-            Radio->Rx( RX_TIMEOUT_VALUE );
-            State = LOWPOWER;
-            break;
-        case RX_TIMEOUT:
-            if( isMaster == true )
-            {
-                // Send the next PING frame
-                memcpy(Buffer, PingMsg, sizeof(PingMsg));
-                for( i = sizeof(PingMsg); i < BufferSize; i++ )
-                {
-                    Buffer[i] = i - sizeof(PingMsg);
-                }
-                wait_ms( 10 ); 
-                Radio->Send( Buffer, BufferSize );
-            }
-            else
-            {
-                Radio->Rx( RX_TIMEOUT_VALUE );  
-            }             
-            State = LOWPOWER;
-            break;
-        case RX_ERROR:
-            // We have received a Packet with a CRC error, send reply as if packet was correct
-            if( isMaster == true )
-            {
-                // Send the next PING frame
-                memcpy(Buffer, PingMsg, sizeof(PingMsg));
-                for( i = 4; i < BufferSize; i++ )
-                {
-                    Buffer[i] = i - 4;
-                }
-                wait_ms( 10 );  
-                Radio->Send( Buffer, BufferSize );
-            }
-            else
-            {
-                // Send the next PONG frame
-                memcpy(Buffer, PongMsg, sizeof(PongMsg));
-                for( i = sizeof(PongMsg); i < BufferSize; i++ )
-                {
-                    Buffer[i] = i - sizeof(PongMsg);
-                }
-                wait_ms( 10 );  
-                Radio->Send( Buffer, BufferSize );
-            }
-            State = LOWPOWER;
-            break;
-        case TX_TIMEOUT:
-            Radio->Rx( RX_TIMEOUT_VALUE );
-            State = LOWPOWER;
-            break;
-        case LOWPOWER:
-            sleep();
-            break;
-        default:
-            State = LOWPOWER;
-            break;
-        }    
+        /***************************************************************************
+        * 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]); 
     }
-}
-
-void dump(const char *title, const void *data, int len, bool dwords)
-{
-//    dprintf("dump(\"%s\", 0x%x, %d bytes)", title, data, len);
-    pc.printf("dump(\"%s\", 0x%x, %d bytes)", title, data, len);
-
-    int i, j, cnt;
-    unsigned char *u;
-    const int width = 16;
-    const int seppos = 7;
+    
+    
+    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()
 
-    cnt = 0;
-    u = (unsigned char *)data;
-    while (len > 0) {
-//        rprintf("%08x: ", (unsigned int)data + cnt);
-//        pc.printf("%08x: ", (unsigned int)data + cnt);          //comment out
-        if (dwords) {
-            unsigned int *ip = ( unsigned int *)u;
-//            rprintf(" 0x%08x\r\n", *ip);
-//            pc.printf(" 0x%08x\r\n", *ip);                         //comment out
-            u+= 4;
-            len -= 4;
-            cnt += 4;
-            continue;
-        }
-        cnt += width;
-        j = len < width ? len : width;
-        for (i = 0; i < j; i++) {
-//            rprintf("%2.2x ", *(u + i));
-//            pc.printf("%2.2x ", *(u + i));           //comment out
-            if (i == seppos)
-//                rprintf(" ");
-                pc.printf(" ");                        //comment out
-        }
-//        rprintf(" ");
-//        pc.printf(" ");                                 //comment out
-        if (j < width) {
-            i = width - j;
-            if (i > seppos + 1)
-//                rprintf(" ");
-//                pc.printf(" ");                           //comment out
-            while (i--) {
-//                rprintf("%s", "   ");
-//                pc.printf("%s", "   ");                      //comment out
-            }
-        }
-        for (i = 0; i < j; i++) {
-            int c = *(u + i);
-            if (c >= ' ' && c <= '~')
-//                rprintf("%c", c);
-                pc.printf("%c", c);                              //comment out
-            else
-//                rprintf(".");
-                pc.printf(".");                              //comment out
-            if (i == seppos)
-//                rprintf(" ");
-                pc.printf(" ");                                 //comment out             
-        }
-        len -= width;
-        u += width;
-//        rprintf("\r\n");
-//        pc.printf("\r\n");                                       //comment out
-    }
-//    rprintf("--\r\n");
-//    pc.printf("--\r\n");                                         //comment out
-}
-
-
-void OnTxDone(void *radio, void *userThisPtr, void *userData)
-{
-    Radio->Sleep( );
-    State = TX;
-    if (DEBUG_MESSAGE)
-        //dprintf("> OnTxDone");
-        pc.printf("> OnTxDone");
-}
-
-void OnRxDone(void *radio, void *userThisPtr, void *userData, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)
-{
-    Radio->Sleep( );
-    BufferSize = size;
-    memcpy( Buffer, payload, BufferSize );
-    State = RX;
-    if (DEBUG_MESSAGE)
-        pc.printf("> OnRxDone: RssiValue=%d dBm, SnrValue=%d", rssi, snr);
-//        dprintf("> OnRxDone: RssiValue=%d dBm, SnrValue=%d", rssi, snr);
-//    dump("Data:", payload, size);
-    dump("Data:", payload, size, false);
-}
-
-void OnTxTimeout(void *radio, void *userThisPtr, void *userData)
-{
-    *led3 = 0;
-    Radio->Sleep( );
-    State = TX_TIMEOUT;
-    if(DEBUG_MESSAGE)
-        pc.printf("> OnTxTimeout");
-//        dprintf("> OnTxTimeout");
-}
-
-void OnRxTimeout(void *radio, void *userThisPtr, void *userData)
-{
-    *led3 = 0;
-    Radio->Sleep( );
-    Buffer[BufferSize-1] = 0;
-    State = RX_TIMEOUT;
-    if (DEBUG_MESSAGE)
-        pc.printf("> OnRxTimeout");
-//        dprintf("> OnRxTimeout");
-}
-
-void OnRxError(void *radio, void *userThisPtr, void *userData)
-{
-    Radio->Sleep( );
-    State = RX_ERROR;
-    if (DEBUG_MESSAGE)
-        pc.printf("> OnRxError");
-//        dprintf("> OnRxError");
-}
-
-
-
-//#endif