LoRa Access Point 1.5.2018
Dependencies: mbed ds3231 SX1276Lib_LoRa_Access_Point
Diff: RFM95W.cpp
- 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