LoRa_Node_STM32F103C8T6

Dependencies:   mbed mbed-STM32F103C8T6 OneWireCRC_LoRa_Node SX1276Lib_LoRa_Node

Revision:
2:8bd9ce0ae2df
Parent:
1:a54ff5e2c2f3
Child:
3:369546c57dc7
--- a/RFM95W.cpp	Sun Apr 22 12:39:13 2018 +0000
+++ b/RFM95W.cpp	Sun Apr 22 15:09:23 2018 +0000
@@ -54,9 +54,43 @@
     radio.Send(ack, 3);
 };
 
+float RFM95W::CalculateRandomTime()
+{
+    uint8_t number;
+    while(number == 0) {number = rand() % 1200;}
+    return (timeOnAirSec * (number / 200.0));
+};
+
+void RFM95W::OnCheckAck()
+{
+    if((receivedAck == false) && (sendCounter < MAX_RESENDS))
+    {
+        sendTicker.attach(callback(this,&RFM95W::OnSendAgain), CalculateRandomTime());
+/*        NumberOfFailSends++;
+        if(NumberOfFailSends >=3 )
+        {
+//            MessageAlter = !MessageAlter;           // ????????????????????????????????????????????????????????????????????????????????????????????????????????
+           NumberOfFailSends = 0;
+           sampleTicker.detach();
+           sampleTicker.attach(&onSampleTick,15.0);          // kazdych 15s
+        }
+*/
+    }
+    ackTicker.detach();
+};
+
+void RFM95W::OnSendAgain()
+{
+    SendMessage();
+    sendCounter++;
+    sendTicker.detach();
+};
+
 void RFM95W::OnTxDone( void )
 {
     radio.Sleep();
+    receivedAck = false;
+    ackTicker.attach(callback(this,&RFM95W::OnCheckAck),timeOnAirSec*3);
     radio.Rx(0);
 };
 
@@ -73,6 +107,7 @@
             messageNumber++;
             if(messageNumber>255)
                 messageNumber = 0;
+            radio.Rx(0); 
             return;
         }  
         // moje ID - adresa brany, konverzia na cislo     
@@ -82,6 +117,7 @@
         if(payload[2] == messageNumbers[MsgFrom])
         {
             PC.printf("--------------------- Ta ista sprava -------------------- \r\n");
+            radio.Rx(0);
             return;
         }
         messageNumbers[MsgFrom] = payload[2];
@@ -94,14 +130,14 @@
   
         return;
     }
-      radio.Rx(0);                  // som zakomentil :P
+    radio.Rx(0);                  // som zakomentil :P
 };
 
 void RFM95W::OnTxTimeout( void )
 {
     radio.Sleep();
     Init();
-    radio.Rx(0);
+//    radio.Rx(0);
 };
 
 void RFM95W::OnRxTimeout( void )
@@ -122,16 +158,11 @@
 void RFM95W::SendValue(uint8_t addr, float value)
 {
     snprintf((char *)sendBuffer, BUFF_SIZE, "%d%d%c|%.2f|",GATEWAY_ID, NODE_ID, messageNumber, value);
+    sendCounter = 0;
+    receivedAck = false;
     SendMessage();
 };
 
-float RFM95W::CalculateRandomTime()
-{
-    uint8_t number;
-    while(number == 0) {number = rand() % 1200;}
-    return (timeOnAirSec * (number / 200.0));
-};
-
 void RFM95W::Init( void )
 {
     PC.printf( "\n\n\r------- RFM95W GATEWAY -------\n\r" );