LoRa_Node_STM32F103C8T6
Dependencies: mbed mbed-STM32F103C8T6 OneWireCRC_LoRa_Node SX1276Lib_LoRa_Node
Diff: RFM95W.cpp
- Revision:
- 2:8bd9ce0ae2df
- Parent:
- 1:a54ff5e2c2f3
- Child:
- 3:369546c57dc7
diff -r a54ff5e2c2f3 -r 8bd9ce0ae2df RFM95W.cpp --- 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" );