From 014fd6b0450bb9b3cd43db70ae6b0614ef8ea4f4 Mon Sep 17 00:00:00 2001 From: sh123 Date: Tue, 2 Feb 2021 11:18:46 +0200 Subject: [PATCH] Small refactoring --- ax25_payload.cpp | 4 +-- ax25_payload.h | 4 +-- loraprs_service.cpp | 67 ++++++++++++++++++++++++--------------------- loraprs_service.h | 18 ++++++------ 4 files changed, 50 insertions(+), 43 deletions(-) diff --git a/ax25_payload.cpp b/ax25_payload.cpp index b54974d..79c50bc 100644 --- a/ax25_payload.cpp +++ b/ax25_payload.cpp @@ -2,7 +2,7 @@ namespace AX25 { -Payload::Payload(byte *rxPayload, int payloadLength) +Payload::Payload(const byte *rxPayload, int payloadLength) : rptCallsCount_(0) { isValid_ = fromBinary(rxPayload, payloadLength); @@ -67,7 +67,7 @@ int Payload::ToBinary(byte *txPayload, int bufferLength) const return (int)(txPtr-txPayload); } -String Payload::ToString(String customComment) +String Payload::ToString(const String &customComment) { String txt = srcCall_.ToString() + String(">") + dstCall_.ToString(); diff --git a/ax25_payload.h b/ax25_payload.h index a8c6636..f4e6146 100644 --- a/ax25_payload.h +++ b/ax25_payload.h @@ -11,11 +11,11 @@ class Payload { public: Payload(const String &textPayload); - Payload(byte *rxPayload, int payloadLength); + Payload(const byte *rxPayload, int payloadLength); inline bool IsValid() const { return isValid_; } - String ToString(String customComment=String()); + String ToString(const String &customComment=String()); int ToBinary(byte *txPayload, int bufferLength) const; bool Digirepeat(const Callsign &ownCallsign); diff --git a/loraprs_service.cpp b/loraprs_service.cpp index 3a65de6..03436a0 100644 --- a/loraprs_service.cpp +++ b/loraprs_service.cpp @@ -69,7 +69,7 @@ void Service::setupWifi(const String &wifiName, const String &wifiKey) } } -void Service::reconnectWifi() +void Service::reconnectWifi() const { Serial.print("WIFI re-connecting..."); @@ -268,9 +268,6 @@ void Service::onLoraDataAvailable(int packetSize) } serialBt_.write(KissMarker::Fend); - - float snr = LoRa.packetSnr(); - float rssi = LoRa.packetRssi(); long frequencyError = LoRa.packetFrequencyError(); if (config_.EnableAutoFreqCorrection) { @@ -279,36 +276,44 @@ void Service::onLoraDataAvailable(int packetSize) } if (!config_.IsClientMode) { + processIncomingRawPacketAsServer(rxBuf, rxBufIndex); + } +} + +void Service::processIncomingRawPacketAsServer(const byte *packet, int packetLength) { + + float snr = LoRa.packetSnr(); + float rssi = LoRa.packetRssi(); + long frequencyError = LoRa.packetFrequencyError(); + + String signalReport = String(" ") + + String("rssi: ") + + String(snr < 0 ? rssi + snr : rssi) + + String("dBm, ") + + String("snr: ") + + String(snr) + + String("dB, ") + + String("err: ") + + String(frequencyError) + + String("Hz"); + + AX25::Payload payload(packet, packetLength); + + if (payload.IsValid()) { - String signalReport = String(" ") + - String("rssi: ") + - String(snr < 0 ? rssi + snr : rssi) + - String("dBm, ") + - String("snr: ") + - String(snr) + - String("dB, ") + - String("err: ") + - String(frequencyError) + - String("Hz"); - - AX25::Payload payload(rxBuf, rxBufIndex); - - if (payload.IsValid()) { - String textPayload = payload.ToString(config_.EnableSignalReport ? signalReport : String()); - Serial.println(textPayload); - - if (config_.EnableRfToIs) { - sendToAprsis(textPayload); - Serial.println("Packet sent to APRS-IS"); - } - if (config_.EnableRepeater && payload.Digirepeat(ownCallsign_)) { - sendAX25ToLora(payload); - Serial.println("Packet digirepeated"); - } + String textPayload = payload.ToString(config_.EnableSignalReport ? signalReport : String()); + Serial.println(textPayload); + + if (config_.EnableRfToIs) { + sendToAprsis(textPayload); + Serial.println("Packet sent to APRS-IS"); } - else { - Serial.println("Skipping non-AX25 payload"); + if (config_.EnableRepeater && payload.Digirepeat(ownCallsign_)) { + sendAX25ToLora(payload); + Serial.println("Packet digirepeated"); } + } else { + Serial.println("Skipping non-AX25 payload"); } } diff --git a/loraprs_service.h b/loraprs_service.h index b0aea09..0be521a 100644 --- a/loraprs_service.h +++ b/loraprs_service.h @@ -26,7 +26,7 @@ private: void setupLora(long loraFreq, long bw, int sf, int cr, int pwr, int sync, bool enableCrc); void setupBt(const String &btName); - void reconnectWifi(); + void reconnectWifi() const; bool reconnectAprsis(); void processTx(); @@ -37,6 +37,7 @@ private: void sendPeriodicBeacon(); void sendToAprsis(const String &aprsMessage); bool sendAX25ToLora(const AX25::Payload &payload); + void processIncomingRawPacketAsServer(const byte *packet, int packetLength); bool kissReceiveByte(unsigned char rxByte); bool kissProcessCommand(unsigned char rxByte); @@ -91,20 +92,21 @@ private: const String CfgLoraprsVersion = "LoRAPRS 0.1"; + // module pinouts + const byte CfgPinSs = 5; + const byte CfgPinRst = 26; + const byte CfgPinDio0 = 14; + + // processor config const int CfgConnRetryMs = 500; const int CfgPollDelayMs = 5; const int CfgLoraTxQueueSize = 4096; const int CfgWiFiConnRetryMaxTimes = 10; - // tx when lower than this value from random 0..255 - // use lower value for high traffic, use 255 for real time + // csma paramters, use lower value for high traffic, use 255 for real time const long CfgCsmaPersistence = 100; const long CfgCsmaSlotTimeMs = 500; - - const byte CfgPinSs = 5; - const byte CfgPinRst = 26; - const byte CfgPinDio0 = 14; - + private: // config Config config_;