]> git.tnoah.ca Git - lora-radio.git/commitdiff
LoRa: Enable LowDataRateOptimize for symbol length >16ms
authortomelec <tomgh@tomelec.net>
Mon, 14 Oct 2019 21:16:30 +0000 (23:16 +0200)
committertomelec <tomgh@tomelec.net>
Mon, 14 Oct 2019 21:16:30 +0000 (23:16 +0200)
LoRa.cpp
LoRa.h

index eb3ec2aec7a7c6f44691d28ed505e2e595e77003..dcf5edc8a4703969a090808ad8e5fbdd38430edc 100644 (file)
--- a/LoRa.cpp
+++ b/LoRa.cpp
@@ -418,6 +418,8 @@ void LoRaClass::setSpreadingFactor(int sf)
   }
 
   writeRegister(REG_MODEM_CONFIG_2, (readRegister(REG_MODEM_CONFIG_2) & 0x0f) | ((sf << 4) & 0xf0));
+
+  handleLowDataRate();
 }
 
 long LoRaClass::getSignalBandwidth()
@@ -437,6 +439,18 @@ long LoRaClass::getSignalBandwidth()
   }
 }
 
+void LoRaClass::handleLowDataRate(){
+  int sf = (readRegister(REG_MODEM_CONFIG_2) >> 4);
+  if ( long( (1<<sf) / (getSignalBandwidth()/1000)) > 16) {
+    // set auto AGC and LowDataRateOptimize
+    writeRegister(REG_MODEM_CONFIG_3, (1<<3)|(1<<2));
+  }
+  else {
+    // set auto AGC
+    writeRegister(REG_MODEM_CONFIG_3, (1<<2));
+  }
+}
+
 void LoRaClass::setSignalBandwidth(long sbw)
 {
   int bw;
@@ -464,6 +478,8 @@ void LoRaClass::setSignalBandwidth(long sbw)
   }
 
   writeRegister(REG_MODEM_CONFIG_1, (readRegister(REG_MODEM_CONFIG_1) & 0x0f) | (bw << 4));
+  
+  handleLowDataRate();
 }
 
 void LoRaClass::setCodingRate4(int denominator)
diff --git a/LoRa.h b/LoRa.h
index c65ce6411cb1d28cd0373ddbf590b5aebee5399a..f191a741323887489b10c6b8c34df871e8ecfe92 100644 (file)
--- a/LoRa.h
+++ b/LoRa.h
@@ -82,6 +82,8 @@ private:
 
   static void onDio0Rise();
 
+  void handleLowDataRate();
+
 private:
   SPISettings _spiSettings;
   int _ss;