Explorar o código

Added buzzer config persistance accross restart

zaquaz hai 8 meses
pai
achega
2bd47de3b9

+ 7 - 0
examples/companion_radio/DataStore.cpp

@@ -200,6 +200,11 @@ void DataStore::loadPrefsInt(const char *filename, NodePrefs& _prefs, double& no
   File file = openRead(_fs, filename);
   if (file) {
     uint8_t pad[8];
+    
+    // Initialize defaults for any missing fields (backward compatibility)
+    memset(&_prefs, 0, sizeof(_prefs));
+    node_lat = 0.0;
+    node_lon = 0.0;
 
     file.read((uint8_t *)&_prefs.airtime_factor, sizeof(float));                           // 0
     file.read((uint8_t *)_prefs.node_name, sizeof(_prefs.node_name));                      // 4
@@ -221,6 +226,7 @@ void DataStore::loadPrefsInt(const char *filename, NodePrefs& _prefs, double& no
     file.read((uint8_t *)&_prefs.multi_acks, sizeof(_prefs.multi_acks));                   // 77
     file.read(pad, 2);                                                                     // 78
     file.read((uint8_t *)&_prefs.ble_pin, sizeof(_prefs.ble_pin));                         // 80
+    file.read((uint8_t *)&_prefs.buzzer_quiet, sizeof(_prefs.buzzer_quiet));               // 84
 
     file.close();
   }
@@ -252,6 +258,7 @@ void DataStore::savePrefs(const NodePrefs& _prefs, double node_lat, double node_
     file.write((uint8_t *)&_prefs.multi_acks, sizeof(_prefs.multi_acks));                   // 77
     file.write(pad, 2);                                                                     // 78
     file.write((uint8_t *)&_prefs.ble_pin, sizeof(_prefs.ble_pin));                         // 80
+    file.write((uint8_t *)&_prefs.buzzer_quiet, sizeof(_prefs.buzzer_quiet));               // 84
 
     file.close();
   }

+ 3 - 2
examples/companion_radio/MyMesh.h

@@ -152,6 +152,9 @@ protected:
     pending_login = pending_status = pending_telemetry = pending_discovery = pending_req = 0;
   }
 
+public:
+  void savePrefs() { _store->savePrefs(_prefs, sensors.node_lat, sensors.node_lon); }
+
 private:
   void writeOKFrame();
   void writeErrFrame(uint8_t err_code);
@@ -171,11 +174,9 @@ private:
   void checkSerialInterface();
 
   // helpers, short-cuts
-  void savePrefs() { _store->savePrefs(_prefs, sensors.node_lat, sensors.node_lon); }
   void saveChannels() { _store->saveChannels(this); }
   void saveContacts() { _store->saveContacts(this); }
 
-private:
   DataStore* _store;
   NodePrefs _prefs;
   uint32_t pending_login;

+ 1 - 0
examples/companion_radio/NodePrefs.h

@@ -24,4 +24,5 @@ struct NodePrefs {  // persisted to file
   float rx_delay_base;
   uint32_t ble_pin;
   uint8_t  advert_loc_policy;
+  uint8_t  buzzer_quiet;
 };

+ 3 - 0
examples/companion_radio/ui-new/UITask.cpp

@@ -532,6 +532,7 @@ void UITask::begin(DisplayDriver* display, SensorManager* sensors, NodePrefs* no
 
 #ifdef PIN_BUZZER
   buzzer.begin();
+  buzzer.quiet(_node_prefs->buzzer_quiet);
 #endif
 
 #ifdef PIN_VIBRATION
@@ -871,6 +872,8 @@ void UITask::toggleBuzzer() {
       buzzer.quiet(true);
       showAlert("Buzzer: OFF", 800);
     }
+    _node_prefs->buzzer_quiet = buzzer.isQuiet();
+    the_mesh.savePrefs();
     _next_refresh = 0;  // trigger refresh
   #endif
 }

+ 3 - 0
examples/companion_radio/ui-orig/UITask.cpp

@@ -56,6 +56,7 @@ void UITask::begin(DisplayDriver* display, SensorManager* sensors, NodePrefs* no
 
 #ifdef PIN_BUZZER
   buzzer.begin();
+  buzzer.quiet(_node_prefs->buzzer_quiet);
 #endif
 
   // Initialize digital button if available
@@ -394,6 +395,8 @@ void UITask::handleButtonTriplePress() {
       buzzer.quiet(true);
       sprintf(_alert, "Buzzer: OFF");
     }
+    _node_prefs->buzzer_quiet = buzzer.isQuiet();
+    the_mesh.savePrefs();
     _need_refresh = true;
   #endif
 }