Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

Revision:
8:cd489b7c49a0
Parent:
7:1d890cab51bd
Child:
10:1b37e3b41947
--- a/main.cpp	Sun Aug 20 15:16:24 2017 +0000
+++ b/main.cpp	Wed Aug 22 13:03:00 2018 +0000
@@ -1,548 +1,116 @@
+/*
+ *  MISNet   
+ *
+ *  Main   TERMINAL VERSION HALF DUPLEX 
+ *
+ *  Created on: August 17, 2018    Author: Francis CHATAIN
+ *
+ */
+ 
 #include "mbed.h"
-#include "radio.h"
 #include "sx1280-hal.h"
 #include "stdio.h"
-#include "XNucleoIKS01A2.h"
-
-#include "DmTftHX8353C.h" 
-#include "DmTftS6D0164.h"
-#include "DmTftIli9325.h"
-#include "DmTftIli9341.h"
-#include "DmTftSsd2119.h"
-#include "DmTftRa8875.h"
-
-#define FIRMWARE_VERSION ( ( char* )"Firmware Version: 1.0" )   // display firmware version on RS232
-#define MODE_LORA                                               // Lora modulation 
-#define RF_FREQUENCY     2400000000UL                           // HzNominal frequency
-#define TX_OUTPUT_POWER  -18                                    // Output power in dBm [-18..+13] dBm
+#include <string>
 
-typedef enum         // States of the application
-{
-    APP_LOWPOWER,
-    APP_RX,
-    APP_RX_TIMEOUT,
-    APP_RX_ERROR,
-    APP_TX,
-    APP_TX_TIMEOUT,
-}AppStates_t;
-
-#define ID_TERMINAL1     '1' 
-#define ID_TERMINAL2     '2'
-#define ID_GATEWAY       '1'
-
-float temperature = 0.0 ; 
-float humidite    = 0.0 ; 
-
-float etalonTemp1 = 6.3F ; 
-float etalonTemp2 = 8.7F ; 
+#include "main.h"
+#include "Application.h"
 
 
-#define log(...) printf(__VA_ARGS__)
-
-#define MESSAGESIZE     34                  // Defines the size of the token defining message type in the payload
-char Message[MESSAGESIZE] = "MSG DATA IOT TERMINAL";
-
-int cptr = 0 ; 
-
-#define BUFFER_SIZE     34                  // Payload size
-uint8_t BufferSize      =   BUFFER_SIZE;    // Size of the buffer
-uint8_t Buffer[BUFFER_SIZE];                // Buffer 
-
-AppStates_t AppState = APP_LOWPOWER;        // State of the application
-
-int8_t RssiValue    = 0;
-int8_t SnrValue     = 0;
-
-void OnTxDone       ( void );               // Function to be executed on Radio Tx Done event
-void OnRxDone       ( void );               // Function to be executed on Radio Rx Done event
-void OnTxTimeout    ( void );               // Function executed on Radio Tx Timeout event
-void OnRxTimeout    ( void );               // Function executed on Radio Rx Timeout event
-void OnRxError      ( IrqErrorCode_t );     // Function executed on Radio Rx Error event
+using namespace std;
 
-RadioCallbacks_t callbacks =                // All the callbacks are stored in a structure
-{
-    &OnTxDone,        // txDone
-    &OnRxDone,        // rxDone
-    NULL,             // syncWordDone
-    NULL,             // headerDone
-    &OnTxTimeout,     // txTimeout
-    &OnRxTimeout,     // rxTimeout
-    &OnRxError,       // rxError
-    NULL,             // rangingDone
-    NULL,             // cadDone
-};
-
-//                    mosi, miso, sclk, nss, busy, dio1, dio2, dio3, rst, callbacks...
-SX1280Hal Radio     ( D11 , D12 , D13 , D7 , D3  , D5  , NC  , NC  , A0 , &callbacks );
+//  INSTANCE of APPLICATION OBJECT 
 
-DigitalOut ANT_SW   ( A3 )  ;
-DigitalOut TxLed    ( A4 )  ;
-DigitalOut RxLed    ( A5 )  ;
-DigitalOut F_CS     ( D6 )  ;     // MBED description of pin
-DigitalOut SD_CS    ( D8 )  ;     // MBED description of pin
-
-#define TX_TIMEOUT_VALUE        100         // ms   Number of tick size steps for tx timeout
-#define RX_TIMEOUT_VALUE        100         // ms   Number of tick size steps for rx timeout
-#define RX_TIMEOUT_TICK_SIZE    RADIO_TICK_SIZE_1000_US   // Size of ticks (used for Tx and Rx timeout)
-
-uint16_t RxIrqMask = IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT;       // Mask of IRQs to listen to in rx mode
-uint16_t TxIrqMask = IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT;       // Mask of IRQs to listen to in tx mode
-
-PacketParams_t PacketParams;        // Locals parameters and status for radio API
-PacketStatus_t PacketStatus;        // NEED TO BE OPTIMIZED, COPY OF STUCTURE ALREADY EXISTING
-
-ModulationParams_t modulationParams;
+Application     app                             ;       // Core of application start also 
 
 
-/* Instantiate the expansion board */
-static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5);
-
-/* Retrieve the composing elements of the expansion board */
-static LSM303AGRMagSensor   *magnetometer = mems_expansion_board->magnetometer;
-static HTS221Sensor         *hum_temp = mems_expansion_board->ht_sensor;
-static LPS22HBSensor        *press_temp = mems_expansion_board->pt_sensor;
-static LSM6DSLSensor        *acc_gyro = mems_expansion_board->acc_gyro;
-static LSM303AGRAccSensor   *accelerometer = mems_expansion_board->accelerometer;
-
-uint8_t     id1, id2, id3, id4, id5, id6, id7;
-float       valueTH1, valueTH2, valueTP1, valueTP2;
-float       OldvalueTH1, OldvalueTH2, OldvalueTP1, OldvalueTP2;
-char        buffer1[32], buffer2[32], buffer3[32], buffer4[32];
-int32_t     axesA[3], axesM[3], axesG1[3], axesG2[3];
-int32_t     OldaxesA[3], OldaxesM[3], OldaxesG1[3], OldaxesG2[3];
+//******************************************************************************
+//     Watch Dog functionnality
+//******************************************************************************
+uint16_t TimerPayload, TimerGoodhealth, TimerSynchro, TimerListening = 0L ;
 
-static char *print_double   ( char* str, double v, int decimalDigits=2) ; 
-void        baud            ( int baudrate ) ; 
-void        sendRadio       ( char TERMINAL, char GATEWAY, float value1, float value2) ; 
- 
- 
-DmTftIli9341 tft(D10, D9, D11, D12, D13);  /* DmTftIli9341(PinName cs, PinName dc, PinName mosi, PinName miso, PinName clk)  DM_TFT28_105 */
-
-int bmpWidth, bmpHeight;
-uint8_t bmpImageoffset;
-
-/******************************************************************************
- * Global variables
- *****************************************************************************/
-
-extern uint8_t dmlogo[];
-
-/******************************************************************************
- * Local functions
- *****************************************************************************/
+LowPowerTicker  wakeUpPayload                   ;       // normal wake up 
+void wakeUpPayloadCallback      (void)          ; 
 
-// LITTLE ENDIAN!
-uint16_t read16(uint8_t *src)
-{
-  uint16_t d;
-  uint8_t b;
-  b = *src;
-  d = *(src+1);
-  d <<= 8;
-  d |= b;
-  return d;
-}
+LowPowerTicker  wakeUpGoodhealth                ;       // GoodHealth wake up 
+void wakeUpGoodhealthCallback   (void)          ; 
 
-// LITTLE ENDIAN!
-uint32_t read32(uint8_t *src)
-{
-  uint32_t d;
-  uint16_t b;
-
-  b = read16(src);
-  d = read16(src+2);
-  d <<= 16;
-  d |= b;
-  return d;
-}
+LowPowerTicker  wakeUpSynchro                   ;       // Synchro wake up  (Mode B)
+void wakeUpSynchroCallback      (void)          ; 
 
-void drawBmpFromFlash(int x, int y)
-{
-  uint16_t pos = bmpImageoffset;
-
-  uint16_t p;  // pixel
-  uint8_t g, b;
-  int i, j; // line, column
-
-  for(i=bmpHeight; i>0; i--) {
-    for(j=0; j<bmpWidth; j++) {
-      b = *(dmlogo+pos++);
-      g = *(dmlogo+pos++);
-      p = *(dmlogo+pos++);
+LowPowerTicker  wakeUpListening                 ;       // Listening wake up (Mode C)
+void wakeUpListeningCallback    (void)          ; 
 
-      p >>= 3;
-      p <<= 6;
-
-      g >>= 2;
-      p |= g;
-      p <<= 5;
-
-      b >>= 3;
-      p |= b;
-
-      // write out the 16 bits of color
-      tft.setPixel(j, i+y, p);
-    }
-  }
-}
+void            setup ()                        ;       // Init Terminal 
+void            loop  ()                        ;       // Main Loop 
 
 
-int bmpReadHeader() {
-  uint32_t fileSize;
-  uint32_t headerSize;
-  uint16_t bmpDepth;
-  uint16_t pos = 0;
-  log("reading bmp header\r\n");
-  log("Magic byte is: %d \r\n", read16(dmlogo));
-
-
-  if (read16(dmlogo) !=0x4D42){ // read magic byte
-    log("Magic byte not found\r\n");
-    return false;
-  }
-
-  pos += 2;
-
-  // read file size
-  fileSize = read32(dmlogo+pos);
-  log("filesize is: %d \r\n", fileSize);
-  log("");
-  pos += 4;
-
-  pos += 4; // Skip creator bytes
-
-  bmpImageoffset = read32(dmlogo+pos);
-  pos += 4;
-
-  // read DIB header
-  headerSize = read32(dmlogo+pos);
-  pos +=4;
-  bmpWidth = read32(dmlogo+pos);
-  pos += 4;
-  bmpHeight = read32(dmlogo+pos);
-  pos += 4;
-
-  //if (bmpHeight == -40) bmpHeight = 40 ; 
-
-
-  log("Image size:        %d\r\n", fileSize);
-  log("Image offset:      %d\r\n", bmpImageoffset);
-  log("Header size:       %d\r\n", headerSize);
-  log("Image width:       %d\r\n", bmpWidth );
-  log("Image height:      %d\r\n", bmpHeight );
-  
-
-  if (read16(dmlogo+pos) != 1){
-    // number of color planes must be 1
-    return false;
-  }
-
-  pos += 2;
-
-  bmpDepth = read16(dmlogo+pos);
-  pos +=2;
-  log("Bitdepth:          %d\r\n", bmpDepth);
-
-
-  if (read16(dmlogo+pos) != 0) {
-    // compression not supported!
-    return false;
-  }
-
-  pos += 2; // Should really be 2??
-
-  return true;
-}
+// ============================================================================ Main
+int main( ) { setup () ; loop () ; }
+// ============================================================================
 
 
-void updateDisplay (float temp1, float hum, float temp2, float press, int cptr1, int cptr2) ; 
-void updateLed (bool led1, bool led2) ; 
-
-/* Specify serial datarate for UART debug output */
-void baud   ( int baudrate )    { Serial s( USBTX, USBRX ); s.baud( baudrate );}
-
-  char bufferDisplay[50] ;  
- 
-  int IDTerminal = 1 ; 
-  int IDGateway  = 1 ; 
-  float temp1 = 20.0F ; 
-  float temp2 = 20.0F ; 
-  float hum = 50.0F ; 
-  int press = 1000 ; 
-
+// ============================================================================ Setup
 void setup () {
-    baud    (115200); 
-    printf( "\n\n\r SX1280 Terminal IoT LORA MODULATION 2.4GHz (%s)\n\n\r", FIRMWARE_VERSION );
-
-    F_CS   = 1  ;
-    SD_CS  = 1  ;
-    ANT_SW = 1  ;
-
-    wait_ms( 500 ); // wait for on board DC/DC start-up time
-
-    Radio.Init              ( );
-    Radio.SetRegulatorMode  ( USE_DCDC ); // Can also be set in LDO mode but consume more power
-
-    memset  ( &Buffer, 0x00, BufferSize );
- 
-    RxLed = 0;
-    TxLed = 0;
-    
-    modulationParams.PacketType                     =   PACKET_TYPE_LORA        ;
-    modulationParams.Params.LoRa.SpreadingFactor    =   LORA_SF7                ;
-    modulationParams.Params.LoRa.Bandwidth          =   LORA_BW_0400            ;
-    modulationParams.Params.LoRa.CodingRate         =   LORA_CR_4_5             ;
-
-    PacketParams.PacketType                         =   PACKET_TYPE_LORA        ;
-    PacketParams.Params.LoRa.PreambleLength         =   0x08                    ;
-    PacketParams.Params.LoRa.HeaderType             =   LORA_PACKET_VARIABLE_LENGTH;
-    PacketParams.Params.LoRa.PayloadLength          =   34                      ;
-    PacketParams.Params.LoRa.CrcMode                =   LORA_CRC_ON             ;
-    PacketParams.Params.LoRa.InvertIQ               =   LORA_IQ_INVERTED        ;
 
-    Radio.SetStandby                ( STDBY_RC );
-    Radio.SetPacketType             ( modulationParams.PacketType );
-    Radio.SetModulationParams       ( &modulationParams );
-    Radio.SetPacketParams           ( &PacketParams );
-    Radio.SetRfFrequency            ( RF_FREQUENCY );
-    Radio.SetBufferBaseAddresses    ( 0x00, 0x00 );
-    Radio.SetTxParams               ( TX_OUTPUT_POWER, RADIO_RAMP_20_US );
-    Radio.SetDioIrqParams           ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE );
-    Radio.SetRx                     ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } );
-
-    AppState = APP_LOWPOWER;    
+    app.start    ();         // Start Application 
+    
+    // -------------------------------------------------- Scheduler  by IRQ or watch dog 
+    
+    app.getScheduling          (TimerPayload, TimerGoodhealth, TimerSynchro, TimerListening) ;   // What mode ? 
+    
+    wakeUpPayload.attach       (&wakeUpPayloadCallback,     (float)TimerPayload )   ;     // All mode 
     
-    /* Enable all sensors */
-    hum_temp->enable        ();
-    press_temp->enable      ();
-    magnetometer->enable    ();
-    accelerometer->enable   ();
-    acc_gyro->enable_x      ();
-    acc_gyro->enable_g      ();
-  
-    printf("\r\n--- Starting new run ---\r\n");
+    wakeUpGoodhealth.attach    (&wakeUpGoodhealthCallback,  (float)TimerGoodhealth) ;  // All Mode 
+    
+    if ( TimerSynchro !=0) 
+        wakeUpSynchro.attach   (&wakeUpSynchroCallback,     (float)TimerSynchro)    ;    // Mode B
+        
+    if ( TimerSynchro !=0) 
+        wakeUpListening.attach (&wakeUpListeningCallback,(float)TimerListening) ;  // Mode C       
+}
+//==============================================================================
 
-    hum_temp->read_id       (&id1);
-    printf("HTS221  humidity & temperature    = 0x%X\r\n", id1);
-    press_temp->read_id     (&id2);
-    printf("LPS22HB  pressure & temperature   = 0x%X\r\n", id2);
-    magnetometer->read_id   (&id3);
-    printf("LSM303AGR magnetometer            = 0x%X\r\n", id3);
-    accelerometer->read_id  (&id4);
-    printf("LSM303AGR accelerometer           = 0x%X\r\n", id4);
-    acc_gyro->read_id       (&id5);
-    printf("LSM6DSL accelerometer & gyroscope = 0x%X\r\n", id5);
-    
-      tft.init();
 
-  //tft.drawString(0,32,"www.");
-  //tft.drawString(12,48,"displaymodule");
-  //tft.drawString(88,64,".com");
-  
-  tft.drawString (20,80,"TERMINAL IoT MISNet V1.0");
-
-  tft.drawRectangle (05, 70 , 230, 105, GREEN);
-  tft.drawRectangle (05, 125, 230, 175, RED);
-  tft.drawRectangle (05, 185, 230, 270, BLUE);
-  tft.drawRectangle (05, 280, 230, 310, YELLOW); 
-
-  sprintf (bufferDisplay, "ID Terminal  : %1d ", IDTerminal); 
-  tft.drawString (40,130,bufferDisplay);
-  sprintf (bufferDisplay, "ID Gateway   : %1d ", IDGateway); 
-  tft.drawString (40,150,bufferDisplay);
-  
-  updateDisplay ( 0.0, 0.0, 0.0, 0.0, 0, 0 ) ; 
-  updateLed     (false, false) ; 
-
-  if (! bmpReadHeader()) {
-    log("bad bmp\r\n");
-    //return -1;
-  }
-  drawBmpFromFlash(20, 10);
+// ============================================================================= LOOP  
+void loop () { 
+    while(1) { 
+        // deepsleep ();     // perd la conf uart 
+        sleep () ; 
+    } 
 }
-
-  int cpt1, cpt2 = 0 ; 
-  bool led1, led2 ; 
+// No action : all event by IRQ 
+//==============================================================================
 
 
-void loop () {   
-
-    TxLed   = 0     ;     
-    RxLed   = 0     ; 
-    wait    (1)     ;
-    F_CS    = 1     ;
-    SD_CS   = 1     ;
-    ANT_SW  = 1     ;
-    led1 = led2 = false ; 
-    
-    /* Enable all sensors */
-    hum_temp->enable        ();
-    press_temp->enable      ();
-    magnetometer->enable    ();
-    accelerometer->enable   ();
-    acc_gyro->enable_x      ();
-    acc_gyro->enable_g      ();
-
-    printf("============================================================== \r\n");
-    hum_temp->get_temperature   (&valueTH1)   ;   
-    hum_temp->get_humidity      (&valueTH2)   ;   
-    printf("HTS221    : [temp] %7s C, [hum]   %s%%\r\n"    , print_double(buffer1, valueTH1), print_double(buffer2, valueTH2));
-    press_temp->get_temperature (&valueTP1)   ;    
-    press_temp->get_pressure    (&valueTP2)   ;    
-    printf("LPS22HB   : [temp] %7s C, [press] %s mbar\r\n" , print_double(buffer3, valueTP1), print_double(buffer4, valueTP2));
-    magnetometer->get_m_axes    (axesM)       ;   
-    printf("LSM303AGR : [mag/mgauss]  %6ld, %6ld, %6ld\r\n", axesM[0], axesM[1], axesM[2]);  
-    accelerometer->get_x_axes   (axesA)       ;   
-    printf("LSM303AGR : [acc/mg]      %6ld, %6ld, %6ld\r\n", axesA[0], axesA[1], axesA[2]);
-    acc_gyro->get_x_axes        (axesG1)      ;    
-    printf("LSM6DSL   : [acc/mg]      %6ld, %6ld, %6ld\r\n", axesG1[0], axesG1[1], axesG1[2]);
-    acc_gyro->get_g_axes        (axesG2)      ;        
-    printf("LSM6DSL   : [gyro/mdps]   %6ld, %6ld, %6ld\r\n", axesG2[0], axesG2[1], axesG2[2]);
-    printf("============================================================== \r\n");
-     
-    
-    valueTH1 = valueTH1 - etalonTemp1 ; 
-    valueTP1 = valueTP1 - etalonTemp2 ; 
- 
-    /* Disable all sensors */
-    hum_temp->disable        ();
-    press_temp->disable      ();
-    magnetometer->disable    ();
-    accelerometer->disable   ();
-    acc_gyro->disable_x      ();
-    acc_gyro->disable_g      ();
-    
-    if (    abs(OldvalueTH1 - valueTH1) > 0.25F  || 
-            abs(OldvalueTH2 - valueTH2) > 0.25F  ||
-            abs(OldaxesA[0] - axesA[0]) > 20 ) {
-            OldvalueTH1 = valueTH1 ;   
-            OldvalueTH2 = valueTH2 ;
-            OldaxesA[0] = axesA[0] ; 
-            led1 = true ; 
-            updateLed (led1, led2) ; 
-            sendRadio (ID_TERMINAL1, ID_GATEWAY, valueTH1, valueTH2) ;   
-            cpt1++ ; 
-
-     }
-    if (    abs(OldvalueTP1 - valueTP1) > 0.25F  || 
-            abs(OldvalueTP2 - valueTP2) > 0.25F  ||
-            abs(OldaxesM[0] - axesM[0]) > 20 ) {
-            OldvalueTP1 = valueTP1 ;   
-            OldvalueTP2 = valueTP2 ;
-            OldaxesM[0] = axesM[0] ; 
-            led2 = true ; 
-            updateLed (led1, led2) ; 
-            sendRadio (ID_TERMINAL2, ID_GATEWAY, valueTP1, valueTP2) ; 
-            cpt2++ ;  
-
-     }    
-
-    updateDisplay(valueTH1, valueTH2, valueTP1, valueTP2, cpt1, cpt2) ; 
-    wait (0.8) ; 
-    if (led1 ||led2) 
-        updateLed (false, false) ; 
-
-}
-  
-
-int main( )  { setup () ; while (1) loop () ; }
-
-void OnTxDone       ( void )                            { /*printf( "*** TERM ***  OnTxDone      \r\n" ); */ AppState = APP_TX         ;   }
-void OnRxDone       ( void )                            { printf( "*** TERM ***  OnRxDone      \r\n" ); AppState = APP_RX         ;   }
-void OnTxTimeout    ( void )                            { printf( "*** TERM ***  OnTxTimeout   \r\n" ); AppState = APP_TX_TIMEOUT ;   }
-void OnRxTimeout    ( void )                            { printf( "*** TERM ***  OnRxTimeout   \r\n" ); AppState = APP_RX_TIMEOUT ;   } 
-void OnRxError      ( IrqErrorCode_t errorCode )        { printf( "*** TERM ***  OnRxError     \r\n" ); AppState = APP_RX_ERROR   ;   }
-void OnRangingDone  ( IrqRangingCode_t val )            { printf( "*** TERM ***  OnRangingDone \r\n" ); }
-void OnCadDone      ( bool channelActivityDetected )    { printf( "*** TERM ***  OnCadDone     \r\n" ); }
 
-void updateDisplay (float temp1, float hum, float temp2, float press, int cptr1, int cptr2) {
-    sprintf (bufferDisplay, "Temperature1 : %02.2f C", temp1);
-    tft.drawString (20,190,bufferDisplay) ; 
-    sprintf (bufferDisplay, "Humidite     : %02.2f % ", hum);
-    tft.drawString (20,210,bufferDisplay);
-    sprintf (bufferDisplay, "Temperature2 : %02.2f C", temp2);
-    tft.drawString (20,230,bufferDisplay);
-    sprintf (bufferDisplay, "Pression     : %05.1f mb", press);
-    tft.drawString (20,250,bufferDisplay);   
-    sprintf (bufferDisplay, "Tx #1:%04d", cptr1);
-    tft.drawString (20,286,bufferDisplay);     
-    sprintf (bufferDisplay, "#2:%04d", cptr2);
-    tft.drawString (140,286,bufferDisplay); 
+// ============================================================ WATCH DOG PAYLOAD 
+void wakeUpPayloadCallback (void) {
+    printf ("*** MAIN ***  wakeUpPayloadCallback   \r\n");  
+    app.readSensors         () ;   // read Sensors   
+    app.buildMessageSensors () ;   // Prepare response  
+    app.sendMessage         () ;   // send message
 }
-
-void updateLed (bool led1, bool led2) {
-    if (led1)
-        tft.fillCircle (115, 295, 8, RED) ; 
-    else
-        tft.fillCircle (115, 295, 8, BLACK) ;
-        
-    if (led2) 
-        tft.fillCircle (210, 295, 8, RED) ; 
-    else
-        tft.fillCircle (210, 295, 8, BLACK) ;
-           
-    tft.drawCircle (115, 295, 8, WHITE) ; 
-    tft.drawCircle (210, 295, 8, WHITE) ; 
-    
+// ============================================================ WATCH DOG GOODHEALTH
+void wakeUpGoodhealthCallback (void) {
+    printf ("*** MAIN ***  wakeUpGoodhealthCallback  ==========================   \r\n");
+    app.readSensors         () ;   // read Sensors   
+    //app.buildMessageGoodhealth () ;   // Prepare response  
+    //app.sendMessage           () ;   // send message 
 }
+// ============================================================ WATCH DOG SYNCHRO
+void wakeUpSynchroCallback (void) {
+    printf ("*** MAIN ***  wakeUpSynchroCallback   \r\n");
+    //app.sendMessageSynchro         () ;   // send message 
+    //app.sendMessage           () ;   // send message 
+}
+// ============================================================ WATCH DOG LISTENING
+void wakeUpListeningCallback (void) {
+    printf ("*** MAIN ***  wakeUpListeningCallback   \r\n");
+    //app.startListening (duration) ;   // send message 
+}
+//*****************************************************************************
 
-   /*
-    Radio.GetPacketStatus(&packetStatus);
-    RssiValue = packetStatus.Lr24.RssiPkt;
-    SnrValue = packetStatus.Lr24.SnrPkt;
-    printf("rssi: %d; snr: %d\n\r", RssiValue, SnrValue );
-    */
-    
-void sendRadio (char TERMINAL, char GATEWAY, float value1, float value2) {  
-    TxLed = 1 ; 
-    memset  ( &Buffer , 0x00, BufferSize );
-    memset  ( &Message, 0x00, BufferSize );
-    int n = sprintf             ( Message, "%c%c%5s%5s",  
-                                    TERMINAL, 
-                                    GATEWAY,
-                                    print_double(buffer1, value1), 
-                                    print_double(buffer2, value2) );                              
-    memcpy                      ( Buffer    , Message   , MESSAGESIZE );
-    printf                      ( "*** TERM ***  Message = %s \r\n", Buffer );
-    Radio.SetDioIrqParams       ( TxIrqMask , TxIrqMask , IRQ_RADIO_NONE, IRQ_RADIO_NONE );
-    Radio.SendPayload           ( Buffer    , BufferSize,( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } );
-    TxLed = 0 ; 
- }   
-    
-    
-    
-/* Helper function for printing floats & doubles */
-static char *print_double(char* str, double v, int decimalDigits)
-{
-  int i = 1;
-  int intPart, fractPart;
-  int len;
-  char *ptr;
+
 
-  /* prepare decimal digits multiplicator */
-  for (;decimalDigits!=0; i*=10, decimalDigits--);
-
-  /* calculate integer & fractinal parts */
-  intPart = (int)v;
-  fractPart = (int)((v-(double)(int)v)*i);
-
-  /* fill in integer part */
-  sprintf(str, "%i.", intPart);
-
-  /* prepare fill in of fractional part */
-  len = strlen(str);
-  ptr = &str[len];
 
-  /* fill in leading fractional zeros */
-  for (i/=10;i>1; i/=10, ptr++) {
-    if (fractPart >= i) {
-      break;
-    }
-    *ptr = '0';
-  }
 
-  /* fill in (rest of) fractional part */
-  sprintf(ptr, "%i", fractPart);
-
-  return str;
-}