Преглед изворни кода

refactor: remove legacy battery reporting toggle path

Jared Dohrman пре 3 месеци
родитељ
комит
bbab7c95d4

+ 0 - 2
docs/custom-cli.md

@@ -86,8 +86,6 @@ Legacy dotted aliases are also accepted:
 
 ### Board Battery Reporting
 
-- `get battery.reporting`: shows whether board battery reporting is enabled. Support is board-dependent.
-- `set battery.reporting on|off`: enables or disables battery voltage reporting on supported boards. This is currently useful for Heltec V3 boards where USB-only power can produce misleading battery readings. If your board needs this too, open an issue and support can be added board-by-board.
 - On repeater MQTT builds, background battery sampling used for MQTT/status history is rate-limited to about once per minute. Explicit status and telemetry requests still refresh the reading immediately.
 
 ### T-Beam 1W Fan Control

+ 24 - 0
docs/web-panel.md

@@ -165,6 +165,30 @@ Notes:
 - the refresh buttons load the current value from the repeater
 - the save buttons send the matching CLI command immediately
 
+## Ghost Node Mode
+
+Ghost Node Mode is a convenience control on `/app` for a repeater that should stay on Wi-Fi and MQTT, but should not actively behave like another nearby repeater.
+
+Typical use case:
+
+- an indoor or colocated MQTT observer where another repeater nearby is already doing the RF relay work
+- a node you want feeding MQTT, web status, and troubleshooting data without also adding extra repeat traffic or adverts
+
+When enabled, Ghost Node Mode:
+
+- turns `repeat` off
+- sets `advert.interval` to `0`
+- sets `flood.advert.interval` to `0`
+- leaves the local web panel and MQTT features running
+
+When disabled, the panel restores the prior repeat and advert settings if it still knows them from the current browser session. If not, it falls back to:
+
+- `repeat on`
+- `advert.interval 60`
+- `flood.advert.interval 12`
+
+This mode is useful when you want the device to observe and publish, not to act as an additional RF repeater. It does not create a separate firmware role; it is just a grouped web-panel shortcut for those existing settings.
+
 ## MQTT Settings
 
 This section includes:

+ 1 - 9
examples/simple_repeater/MyMesh.cpp

@@ -1240,7 +1240,7 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc
   _prefs.advert_loc_policy = ADVERT_LOC_PREFS;
 
   _prefs.adc_multiplier = 0.0f; // 0.0f means use default board multiplier
-  _prefs.battery_reporting_enabled = 1;
+  _prefs.reserved_290 = 0;
   _prefs.fan_mode = 0; // auto
   _prefs.fan_timeout_secs = 30;
 
@@ -1347,7 +1347,6 @@ void MyMesh::begin(FILESYSTEM *fs, ArchiveStorage* archive) {
   updateFloodAdvertTimer();
 
   board.setAdcMultiplier(_prefs.adc_multiplier);
-  board.setBatteryReporting(_prefs.battery_reporting_enabled);
 #if defined(TBEAM_1W)
   auto& tbeam1w_board = static_cast<TBeam1WBoard&>(board);
   tbeam1w_board.setFanPostTxHoldMs(static_cast<uint32_t>(_prefs.fan_timeout_secs) * 1000UL);
@@ -1375,13 +1374,6 @@ void MyMesh::sendFloodScoped(const TransportKey& scope, mesh::Packet* pkt, uint3
 uint16_t MyMesh::getBatteryMilliVolts(bool force_refresh) {
   constexpr unsigned long kBatterySampleIntervalMs = 60000UL;
 
-  if (board.supportsBatteryReporting() && !board.isBatteryReportingEnabled()) {
-    _battery_sample_valid = true;
-    _battery_mv_cache = 0;
-    next_battery_sample_ms = 0;
-    return 0;
-  }
-
   if (force_refresh || !_battery_sample_valid || next_battery_sample_ms == 0 || millisHasNowPassed(next_battery_sample_ms)) {
     _battery_mv_cache = board.getBattMilliVolts();
     _battery_sample_valid = true;

+ 1 - 3
examples/simple_room_server/MyMesh.cpp

@@ -652,8 +652,7 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc
   _prefs.gps_enabled = 0;
   _prefs.gps_interval = 0;
   _prefs.advert_loc_policy = ADVERT_LOC_PREFS;
-  _prefs.battery_reporting_enabled = 1;
-
+  _prefs.reserved_290 = 0;
   next_post_idx = 0;
   next_client_idx = 0;
   next_push = 0;
@@ -699,7 +698,6 @@ void MyMesh::begin(FILESYSTEM *fs) {
   updateFloodAdvertTimer();
 
   board.setAdcMultiplier(_prefs.adc_multiplier);
-  board.setBatteryReporting(_prefs.battery_reporting_enabled);
 
 #if ENV_INCLUDE_GPS == 1
   applyGpsPrefs();

+ 1 - 2
examples/simple_sensor/SensorMesh.cpp

@@ -731,7 +731,7 @@ SensorMesh::SensorMesh(mesh::MainBoard& board, mesh::Radio& radio, mesh::Millise
   _prefs.gps_enabled = 0;
   _prefs.gps_interval = 0;
   _prefs.advert_loc_policy = ADVERT_LOC_PREFS;
-  _prefs.battery_reporting_enabled = 1;
+  _prefs.reserved_290 = 0;
   memset(default_scope.key, 0, sizeof(default_scope.key));
 }
 
@@ -771,7 +771,6 @@ void SensorMesh::begin(FILESYSTEM* fs) {
   updateFloodAdvertTimer();
 
    board.setAdcMultiplier(_prefs.adc_multiplier);
-   board.setBatteryReporting(_prefs.battery_reporting_enabled);
 
 #if ENV_INCLUDE_GPS == 1
   applyGpsPrefs();

+ 3 - 0
release-notes.yml

@@ -418,6 +418,9 @@ releases:
       - type: fixed
         area: board-support
         text: "Reduced Heltec V3 battery-sense activity while MQTT and web features are active, while still keeping explicit status and telemetry requests on a fresh reading path."
+      - type: changed
+        area: board-support
+        text: "Removed the obsolete battery reporting toggle path and its stale CLI documentation now that repeater battery sampling is handled correctly without a board-level reporting disable switch."
       - type: docs
         area: docs
         text: "Updated the custom CLI docs to note that repeater MQTT background battery sampling is now rate-limited while explicit status and telemetry requests still refresh immediately."

+ 0 - 3
src/MeshCore.h

@@ -44,9 +44,6 @@ namespace mesh {
 class MainBoard {
 public:
   virtual uint16_t getBattMilliVolts() = 0;
-  virtual bool supportsBatteryReporting() const { return false; }
-  virtual bool setBatteryReporting(bool enabled) { (void)enabled; return false; }
-  virtual bool isBatteryReportingEnabled() const { return true; }
   virtual int getBatteryPercent() { return -1; }
   virtual bool isCharging() { return false; }
   virtual bool isVbusPresent() { return false; }

+ 3 - 4
src/helpers/CommonCLI.cpp

@@ -87,8 +87,8 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
     file.read((uint8_t *)&_prefs->discovery_mod_timestamp, sizeof(_prefs->discovery_mod_timestamp)); // 162
     file.read((uint8_t *)&_prefs->adc_multiplier, sizeof(_prefs->adc_multiplier));                 // 166
     file.read((uint8_t *)_prefs->owner_info, sizeof(_prefs->owner_info));                          // 170
-    if (file.available() >= (int)sizeof(_prefs->battery_reporting_enabled)) {
-      file.read((uint8_t *)&_prefs->battery_reporting_enabled, sizeof(_prefs->battery_reporting_enabled)); // 290
+    if (file.available() >= (int)sizeof(_prefs->reserved_290)) {
+      file.read((uint8_t *)&_prefs->reserved_290, sizeof(_prefs->reserved_290)); // 290 reserved
     }
     if (file.available() >= (int)sizeof(_prefs->rx_boosted_gain)) {
       file.read((uint8_t *)&_prefs->rx_boosted_gain, sizeof(_prefs->rx_boosted_gain));            // 291
@@ -123,7 +123,6 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
     _prefs->bridge_channel = constrain(_prefs->bridge_channel, 0, 14);
 
     _prefs->powersaving_enabled = constrain(_prefs->powersaving_enabled, 0, 1);
-    _prefs->battery_reporting_enabled = constrain(_prefs->battery_reporting_enabled, 0, 1);
 
     _prefs->gps_enabled = constrain(_prefs->gps_enabled, 0, 1);
     _prefs->advert_loc_policy = constrain(_prefs->advert_loc_policy, 0, 2);
@@ -192,7 +191,7 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) {
     file.write((uint8_t *)&_prefs->discovery_mod_timestamp, sizeof(_prefs->discovery_mod_timestamp)); // 162
     file.write((uint8_t *)&_prefs->adc_multiplier, sizeof(_prefs->adc_multiplier));                 // 166
     file.write((uint8_t *)_prefs->owner_info, sizeof(_prefs->owner_info));                          // 170
-    file.write((uint8_t *)&_prefs->battery_reporting_enabled, sizeof(_prefs->battery_reporting_enabled)); // 290
+    file.write((uint8_t *)&_prefs->reserved_290, sizeof(_prefs->reserved_290)); // 290 reserved
     file.write((uint8_t *)&_prefs->rx_boosted_gain, sizeof(_prefs->rx_boosted_gain));              // 291
     file.write((uint8_t *)&_prefs->fan_mode, sizeof(_prefs->fan_mode));                            // 292
     file.write((uint8_t *)&_prefs->fan_timeout_secs, sizeof(_prefs->fan_timeout_secs));            // 293

+ 1 - 1
src/helpers/CommonCLI.h

@@ -58,7 +58,7 @@ struct NodePrefs { // persisted to file
   uint32_t discovery_mod_timestamp;
   float adc_multiplier;
   char owner_info[120];
-  uint8_t battery_reporting_enabled; // boolean
+  uint8_t reserved_290; // reserved to preserve on-disk prefs layout
   uint8_t rx_boosted_gain; // power settings
   uint8_t path_hash_mode;   // which path mode to use when sending
   uint8_t loop_detect;

+ 0 - 19
variants/heltec_v3/HeltecV3Board.h

@@ -22,13 +22,11 @@
 class HeltecV3Board : public ESP32Board {
 private:
   bool adc_active_state;
-  bool battery_reporting_enabled;
 
 public:
   RefCountedDigitalPin periph_power;
 
   HeltecV3Board() : adc_active_state(false),
-                    battery_reporting_enabled(true),
                     periph_power(PIN_VEXT_EN) { }
 
   void begin() {
@@ -83,10 +81,6 @@ public:
   }
 
   uint16_t getBattMilliVolts() override {
-    if (!battery_reporting_enabled) {
-      return 0;
-    }
-
     analogReadResolution(10);
     digitalWrite(PIN_ADC_CTRL, adc_active_state);
 
@@ -109,19 +103,6 @@ public:
     return mv;
   }
 
-  bool supportsBatteryReporting() const override {
-    return true;
-  }
-
-  bool setBatteryReporting(bool enabled) override {
-    battery_reporting_enabled = enabled;
-    return true;
-  }
-
-  bool isBatteryReportingEnabled() const override {
-    return battery_reporting_enabled;
-  }
-
   const char* getManufacturerName() const override {
     return "Heltec V3";
   }