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

Fix remote LNA toggle bugs: correct register comparison, add missing implementations, wire up companion radio

getRxBoostedGain was returned true because both 0x94 (power saving) and
0x96 (boosted gain = 1) return true
Wessel Nieboer 5 месяцев назад
Родитель
Сommit
8bf63256b6

+ 2 - 0
examples/companion_radio/DataStore.cpp

@@ -228,6 +228,7 @@ void DataStore::loadPrefsInt(const char *filename, NodePrefs& _prefs, double& no
     file.read((uint8_t *)&_prefs.gps_enabled, sizeof(_prefs.gps_enabled));                 // 85
     file.read((uint8_t *)&_prefs.gps_interval, sizeof(_prefs.gps_interval));               // 86
     file.read((uint8_t *)&_prefs.autoadd_config, sizeof(_prefs.autoadd_config));           // 87
+    file.read((uint8_t *)&_prefs.sx126x_rx_boosted_gain, sizeof(_prefs.sx126x_rx_boosted_gain)); // 88
 
     file.close();
   }
@@ -263,6 +264,7 @@ void DataStore::savePrefs(const NodePrefs& _prefs, double node_lat, double node_
     file.write((uint8_t *)&_prefs.gps_enabled, sizeof(_prefs.gps_enabled));                 // 85
     file.write((uint8_t *)&_prefs.gps_interval, sizeof(_prefs.gps_interval));               // 86
     file.write((uint8_t *)&_prefs.autoadd_config, sizeof(_prefs.autoadd_config));           // 87
+    file.write((uint8_t *)&_prefs.sx126x_rx_boosted_gain, sizeof(_prefs.sx126x_rx_boosted_gain)); // 88
 
     file.close();
   }

+ 12 - 0
examples/companion_radio/MyMesh.cpp

@@ -803,6 +803,13 @@ MyMesh::MyMesh(mesh::Radio &radio, mesh::RNG &rng, mesh::RTCClock &rtc, SimpleMe
   _prefs.gps_enabled = 0;       // GPS disabled by default
   _prefs.gps_interval = 0;      // No automatic GPS updates by default
   //_prefs.rx_delay_base = 10.0f;  enable once new algo fixed
+#if defined(USE_SX1262) || defined(USE_SX1268)
+#ifdef SX126X_RX_BOOSTED_GAIN
+  _prefs.sx126x_rx_boosted_gain = SX126X_RX_BOOSTED_GAIN;
+#else
+  _prefs.sx126x_rx_boosted_gain = 1; // enabled by default
+#endif
+#endif
 }
 
 void MyMesh::begin(bool has_display) {
@@ -869,6 +876,11 @@ void MyMesh::begin(bool has_display) {
 
   radio_set_params(_prefs.freq, _prefs.bw, _prefs.sf, _prefs.cr);
   radio_set_tx_power(_prefs.tx_power_dbm);
+#if defined(USE_SX1262) || defined(USE_SX1268)
+  radio_set_rx_boosted_gain_mode(_prefs.sx126x_rx_boosted_gain);
+  MESH_DEBUG_PRINTLN("SX126x RX Boosted Gain Mode: %s",
+                     radio_get_rx_boosted_gain_mode() ? "Enabled" : "Disabled");
+#endif
 }
 
 const char *MyMesh::getNodeName() {

+ 1 - 0
examples/companion_radio/NodePrefs.h

@@ -28,4 +28,5 @@ struct NodePrefs {  // persisted to file
   uint8_t  gps_enabled;      // GPS enabled flag (0=disabled, 1=enabled)
   uint32_t gps_interval;     // GPS read interval in seconds
   uint8_t autoadd_config;    // bitmask for auto-add contacts config
+  uint8_t sx126x_rx_boosted_gain; // SX126x RX boosted gain mode (0=power saving, 1=boosted)
 };

+ 2 - 2
src/helpers/radiolib/CustomSX1262.h

@@ -93,9 +93,9 @@ class CustomSX1262 : public SX1262 {
       return detected;
     }
 
-    uint8_t getRxBoostedGainMode() {
+    bool getRxBoostedGainMode() {
       uint8_t rxGain = 0;
       readRegister(RADIOLIB_SX126X_REG_RX_GAIN, &rxGain, 1);
-      return rxGain;
+      return (rxGain == RADIOLIB_SX126X_RX_GAIN_BOOSTED);
     }
 };

+ 2 - 2
src/helpers/radiolib/CustomSX1268.h

@@ -85,9 +85,9 @@ class CustomSX1268 : public SX1268 {
       return detected;
     }
 
-    uint8_t getRxBoostedGainMode() {
+    bool getRxBoostedGainMode() {
       uint8_t rxGain = 0;
       readRegister(RADIOLIB_SX126X_REG_RX_GAIN, &rxGain, 1);
-      return rxGain;
+      return (rxGain == RADIOLIB_SX126X_RX_GAIN_BOOSTED);
     }
 };

+ 0 - 2
variants/heltec_v2/target.h

@@ -27,5 +27,3 @@ uint32_t radio_get_rng_seed();
 void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr);
 void radio_set_tx_power(int8_t dbm);
 mesh::LocalIdentity radio_new_identity();
-
-bool radio_get_rx_boosted_gain_mode();

+ 1 - 3
variants/lilygo_t3s3_sx1276/target.h

@@ -26,6 +26,4 @@ bool radio_init();
 uint32_t radio_get_rng_seed();
 void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr);
 void radio_set_tx_power(int8_t dbm);
-mesh::LocalIdentity radio_new_identity();
-
-bool radio_get_rx_boosted_gain_mode();
+mesh::LocalIdentity radio_new_identity();

+ 1 - 3
variants/lilygo_tbeam_SX1276/target.h

@@ -26,6 +26,4 @@ bool radio_init();
 uint32_t radio_get_rng_seed();
 void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr);
 void radio_set_tx_power(int8_t dbm);
-mesh::LocalIdentity radio_new_identity();
-
-bool radio_get_rx_boosted_gain_mode();
+mesh::LocalIdentity radio_new_identity();

+ 1 - 3
variants/lilygo_tlora_v2_1/target.h

@@ -26,6 +26,4 @@ bool radio_init();
 uint32_t radio_get_rng_seed();
 void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr);
 void radio_set_tx_power(int8_t dbm);
-mesh::LocalIdentity radio_new_identity();
-
-bool radio_get_rx_boosted_gain_mode();
+mesh::LocalIdentity radio_new_identity();

+ 10 - 0
variants/m5stack_unit_c6l/UnitC6LBoard.cpp

@@ -47,3 +47,13 @@ mesh::LocalIdentity radio_new_identity() {
   RadioNoiseListener rng(radio);
   return mesh::LocalIdentity(&rng);  // create new random identity
 }
+
+#if defined(USE_SX1262) || defined(USE_SX1268)
+void radio_set_rx_boosted_gain_mode(bool rxbgm) {
+  radio.setRxBoostedGainMode(rxbgm);
+}
+
+bool radio_get_rx_boosted_gain_mode() {
+  return radio.getRxBoostedGainMode();
+}
+#endif