Просмотр исходного кода

Also implement LR11x10 AGC reset

Similar to SX126x but simpler.
Wessel Nieboer 5 месяцев назад
Родитель
Сommit
f54948e06d
2 измененных файлов с 20 добавлено и 1 удалено
  1. 3 1
      src/helpers/radiolib/CustomLR1110Wrapper.h
  2. 17 0
      src/helpers/radiolib/LR11x0Reset.h

+ 3 - 1
src/helpers/radiolib/CustomLR1110Wrapper.h

@@ -2,11 +2,13 @@
 
 #include "CustomLR1110.h"
 #include "RadioLibWrappers.h"
+#include "LR11x0Reset.h"
 
 class CustomLR1110Wrapper : public RadioLibWrapper {
 public:
   CustomLR1110Wrapper(CustomLR1110& radio, mesh::MainBoard& board) : RadioLibWrapper(radio, board) { }
-  bool isReceivingPacket() override { 
+  void doResetAGC() override { lr11x0ResetAGC((LR11x0 *)_radio); }
+  bool isReceivingPacket() override {
     return ((CustomLR1110 *)_radio)->isReceiving();
   }
   float getCurrentRSSI() override {

+ 17 - 0
src/helpers/radiolib/LR11x0Reset.h

@@ -0,0 +1,17 @@
+#pragma once
+
+#include <RadioLib.h>
+
+// Full receiver reset for LR11x0-family chips (LR1110, LR1120, LR1121).
+// Warm sleep powers down analog, calibrate(0x3F) refreshes all calibration blocks,
+// then re-applies RX settings that calibration may reset.
+inline void lr11x0ResetAGC(LR11x0* radio) {
+  radio->sleep(true, 0);
+  radio->standby(RADIOLIB_LR11X0_STANDBY_RC, true);
+
+  radio->calibrate(RADIOLIB_LR11X0_CALIBRATE_ALL);
+
+#ifdef RX_BOOSTED_GAIN
+  radio->setRxBoostedGainMode(RX_BOOSTED_GAIN);
+#endif
+}