LoRa Access Point 1.5.2018

Dependencies:   mbed ds3231 SX1276Lib_LoRa_Access_Point

Revision:
5:19b34c4d27a1
Parent:
4:e20eb5efd859
Child:
6:1ee035ae2a2c
--- a/RFM95W.cpp	Mon Apr 30 17:09:34 2018 +0000
+++ b/RFM95W.cpp	Mon Apr 30 22:41:48 2018 +0000
@@ -1,19 +1,37 @@
 #include "RFM95W.h"
 
-RFM95W rfm; // Globalna instancia
+RFM95W rfm;
 
 //--------------------------- Callback funkcie ---------------------------------
-void TxDone(void){rfm.OnTxDone();};
+void TxDone(void)
+{
+    rfm.OnTxDone();
+};
 
-void RxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ){rfm.OnRxDone(payload,size,rssi,snr);};
+void RxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )
+{
+    rfm.OnRxDone(payload,size,rssi,snr);
+};
 
-void TxTimeout(void){rfm.OnTxTimeout();};
+void TxTimeout(void)
+{
+    rfm.OnTxTimeout();
+};
 
-void RxTimeout(void){rfm.OnRxTimeout();};
+void RxTimeout(void)
+{
+    rfm.OnRxTimeout();
+};
 
-void RxError(void){rfm.OnRxError();};
+void RxError(void)
+{
+    rfm.OnRxError();
+};
 
-void CadDone(bool channelActivityDetected){rfm.OnCadDone(channelActivityDetected);};
+void CadDone(bool channelActivityDetected)
+{
+    rfm.OnCadDone(channelActivityDetected);
+};
 //------------------------------------------------------------------------------
 
 RFM95W::RFM95W()
@@ -21,7 +39,7 @@
       indicationLed(LED_PIN),
       noise(NOISE_PIN)
 {
-    for(uint16_t i=0; i<MAX_DEVICES;i++)
+    for(uint16_t i=0; i<MAX_DEVICES; i++)
         messageNumbers[i]=NULL;
     memset(receivedMessage, '\0', sizeof(receivedMessage));
     ledState = 0;
@@ -61,7 +79,9 @@
 float RFM95W::CalculateRandomTime()
 {
     uint8_t number = rand() % 1500;;
-    while(number == 0) {number = rand() % 1500;}
+    while(number == 0) {
+        number = rand() % 1500;
+    }
     return (timeOnAirSec * (number / 150.0));
 };
 
@@ -69,8 +89,7 @@
 {
     if((receivedAck == false) && (sendCounter < MAX_RESENDS))
         sendTicker.attach(callback(this,&RFM95W::OnSendAgain), CalculateRandomTime());
-    else if((receivedAck == false) && (sendCounter >= MAX_RESENDS))
-    {
+    else if((receivedAck == false) && (sendCounter >= MAX_RESENDS)) {
         messageNumber++;
         if(messageNumber>255)
             messageNumber = 0;
@@ -91,8 +110,7 @@
     radio.Sleep();
     if(sendingAck)
         sendingAck = false;
-    else
-    {
+    else {
         pc.printf("OnTxDone !\r\n");
         receivedAck = false;
         ackTicker.attach(callback(this,&RFM95W::OnCheckAck),timeOnAirSec*3);
@@ -105,49 +123,41 @@
     radio.Sleep();
 //    debug("%d \r\n", payload[0]);
     if(payload[0] == GATEWAY_ID) {
+        uint8_t msgFrom = payload[1];           // konverzia na cislo
         indicationLed=0;
         ledTicker.attach(callback(this,&RFM95W::OnLedTick), LED_BLIK_PERIOD);
-        if((size == 3) && (strncmp( ( const char* )payload, ( const char* )ack, 3 ) == 0) ) 
-        {
+        if((size == 3) && (strncmp( ( const char* )payload, ( const char* )ack, 3 ) == 0) ) {
             receivedAck = true;
+            wifi.ConfirmReceivedAck(msgFrom);
             pc.printf("Received Ack : %s \r\n",ack);
             messageNumber++;
             if(messageNumber>255)
                 messageNumber = 0;
-            radio.Rx(0); 
-            return;
-        } 
-        sendingAck = true; 
-        // moje ID - adresa brany, konverzia na cislo     
-        uint8_t msgFrom = payload[1];           // konverzia na cislo
-        SendAck(msgFrom,payload[2]);
-        pc.printf("MSG from : %c , message number received= %d \r\n",msgFrom,payload[2]);
-        if(payload[2] == messageNumbers[msgFrom])
-        {
-            pc.printf("--------------------- Ta ista sprava -------------------- \r\n");
- //           radio.Rx(0);
+            radio.Rx(0);
             return;
         }
-        messageNumbers[msgFrom] = payload[2]; 
+        sendingAck = true;
+        SendAck(msgFrom,payload[2]);
+        pc.printf("MSG from : %c , message number received= %d \r\n",msgFrom,payload[2]);
+        if(payload[2] == messageNumbers[msgFrom]) {
+            pc.printf("--------------------- Ta ista sprava -------------------- \r\n");
+//           radio.Rx(0);
+            return;
+        }
+        messageNumbers[msgFrom] = payload[2];
         payload[2] = 48;        // ASCII hodnota cisla 0
-//        pc.printf("Message number saved= %d \r\n",messageNumbers[MsgFrom]);
-
         memmove(payload, payload+4, size - 4 + 1);      // orezem prve styri bajty
-
         snprintf((char *)receivedMessage, BUFF_SIZE, "%d|%d|%d|%d|%s|\r\n", rssi, snr, GATEWAY_ID, msgFrom, payload);
         wifi.SendMessage((char *)receivedMessage);
-//        debug_if( DEBUG_MESSAGE, "> OnRxDone\n\r" );
-  
         return;
     }
-    radio.Rx(0);                  // som zakomentil :P
+    radio.Rx(0);
 };
 
 void RFM95W::OnTxTimeout( void )
 {
     radio.Sleep();
     Init();
-//    radio.Rx(0);
 };
 
 void RFM95W::OnRxTimeout( void )
@@ -163,14 +173,14 @@
     radio.Rx(0);
 };
 
-void RFM95W::OnCadDone( bool channelActivityDetected ){};
+void RFM95W::OnCadDone( bool channelActivityDetected ) {};
 
 void RFM95W::SendValue(uint8_t addr, float value)
 {
     snprintf((char *)sendBuffer, BUFF_SIZE, "%c%c%c|%.2f|",addr, GATEWAY_ID, messageNumber, value);
     sendCounter = 0;
     receivedAck = false;
-    SendMessage();   
+    SendMessage();
 };
 
 void RFM95W::SendValue(uint8_t addr, int value)
@@ -178,7 +188,7 @@
     snprintf((char *)sendBuffer, BUFF_SIZE, "%c%c%c|%d|",addr, GATEWAY_ID, messageNumber, value);
     sendCounter = 0;
     receivedAck = false;
-    SendMessage();   
+    SendMessage();
 };
 
 void RFM95W::SendMessage(char* message)
@@ -191,7 +201,7 @@
     receivedAck = false;
 
     pc.printf("%s",sendBuffer);
-    SendMessage();   
+    SendMessage();
 };
 
 void RFM95W::Init( void )
@@ -210,14 +220,8 @@
         pc.printf( "Radiovy modul nie je pripojeny!\n\r", NULL );
         wait(1);
     }
-
-//    debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1LAS ) ) , "\n\r        > TYP: RFM95W < \n\r" );
-//    debug_if( ( DEBUG_MESSAGE & ( Radio.DetectBoardType( ) == SX1276MB1MAS ) ) , "\n\r        > TYP: RFM95W < \n\r" );
     radio.SetChannel( RF_FREQUENCY );
 #if USE_MODEM_LORA == 1
-
-//    debug_if( LORA_FHSS_ENABLED, "\n\r        > LORA FHSS Mod < \n\n\r");
-//    debug_if( !LORA_FHSS_ENABLED, "\n\r        > LORA Mod < \n\n\r");
     pc.printf("\n\r        > LORA Mod <        \n\n\r");
     radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
                        LORA_SPREADING_FACTOR, LORA_CODINGRATE,
@@ -254,7 +258,7 @@
     paConfig = radio.Read( REG_PACONFIG );
     paConfig |= RF_PACONFIG_PASELECT_PABOOST;
     radio.Write( REG_PACONFIG, paConfig );
-      
+
     pc.printf("________Start aplikacie________\r\n" );
     timeOnAirSec = (radio.TimeOnAir( MODEM_LORA, 10)/1000.0);              // time on air v ms
     pc.printf( "\n\n\r------- Time on air : %f sec. -------\n\r", timeOnAirSec);
@@ -270,7 +274,7 @@
     uint8_t loops = 3;
     for (int i=0; i<(32*loops); i++) {
         seed ^= noise.read_u16();
-        if (seed & 1<31) { // shift left and wrap.
+        if (seed & 1<31) {
             seed <<= 1;
             seed |= 1;
         } else