From 71ac1ce272247696e140a40003dc4fe8794f6fc0 Mon Sep 17 00:00:00 2001 From: DiegoDVG Date: Tue, 1 Jun 2021 19:12:00 +0200 Subject: [PATCH 1/2] sub 1 --- src/LoRa.cpp | 28 ++++++++++++++++++++++++++++ src/LoRa.h | 3 ++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/LoRa.cpp b/src/LoRa.cpp index 210a589..46f17ad 100644 --- a/src/LoRa.cpp +++ b/src/LoRa.cpp @@ -751,4 +751,32 @@ ISR_PREFIX void LoRaClass::onDio0Rise() LoRa.handleDio0Rise(); } +double LoRaClass::Airtime_Message() +{ + int SF = getSpreadingFactor(); + int BW = getSignalBandwidth(); + int H = _implicitHeaderMode; + int PL = readRegister(REG_PAYLOAD_LENGTH); + int DE = 0; + if (((BW == 125E3) && ((SF == 11) || (SF == 12))) || + ((BW == 250E3) && (SF == 12))) + { + DE = 1; + } + else + { + DE = 0; + } + + int CR = (readRegister(REG_MODEM_CONFIG_1) & 0xf1) + 4; + + double Tsym = pow(2, SF) / (BW)*1000; + double Tpreamble = (8 + 4.25) * Tsym; + int PrePay = ceil((8.0 * PL - 4.0 * SF + 28 + 16 - 20 * (1 - H)) / (4.0 * (SF - 2.0 * DE))) * (CR); + int payloadSymbNb = 8 + _max(PrePay, 0); + double Tpayload = payloadSymbNb * Tsym; + double Tpacket = Tpreamble + Tpayload; + return Tpacket; +} + LoRaClass LoRa; diff --git a/src/LoRa.h b/src/LoRa.h index b312db5..258e778 100644 --- a/src/LoRa.h +++ b/src/LoRa.h @@ -93,7 +93,7 @@ class LoRaClass : public Stream { void setSPIFrequency(uint32_t frequency); void dumpRegisters(Stream& out); - + double Airtime_Message(); private: void explicitHeaderMode(); void implicitHeaderMode(); @@ -123,6 +123,7 @@ class LoRaClass : public Stream { int _implicitHeaderMode; void (*_onReceive)(int); void (*_onTxDone)(); + int _coderate; }; extern LoRaClass LoRa; From 48b79c0cfb33924aaeabc72c63c924136bb3d7ba Mon Sep 17 00:00:00 2001 From: DiegoDVG Date: Tue, 1 Jun 2021 19:15:58 +0200 Subject: [PATCH 2/2] Ready --- src/LoRa.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/LoRa.cpp b/src/LoRa.cpp index 46f17ad..a8c459d 100644 --- a/src/LoRa.cpp +++ b/src/LoRa.cpp @@ -565,7 +565,7 @@ void LoRaClass::setCodingRate4(int denominator) } else if (denominator > 8) { denominator = 8; } - + _coderate = denominator; // save coderate int cr = denominator - 4; writeRegister(REG_MODEM_CONFIG_1, (readRegister(REG_MODEM_CONFIG_1) & 0xf1) | (cr << 1)); @@ -755,7 +755,7 @@ double LoRaClass::Airtime_Message() { int SF = getSpreadingFactor(); int BW = getSignalBandwidth(); - int H = _implicitHeaderMode; + int H = _implicitHeaderMode; // save header mode int PL = readRegister(REG_PAYLOAD_LENGTH); int DE = 0; if (((BW == 125E3) && ((SF == 11) || (SF == 12))) ||