From 2bd47de3b9824d99450baa4d1d90c9729c13032f Mon Sep 17 00:00:00 2001 From: zaquaz Date: Thu, 20 Nov 2025 18:55:39 -0800 Subject: [PATCH] Added buzzer config persistance accross restart --- examples/companion_radio/DataStore.cpp | 7 +++++++ examples/companion_radio/MyMesh.h | 5 +++-- examples/companion_radio/NodePrefs.h | 1 + examples/companion_radio/ui-new/UITask.cpp | 3 +++ examples/companion_radio/ui-orig/UITask.cpp | 3 +++ 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/examples/companion_radio/DataStore.cpp b/examples/companion_radio/DataStore.cpp index eac027b8..058389fe 100644 --- a/examples/companion_radio/DataStore.cpp +++ b/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(); } diff --git a/examples/companion_radio/MyMesh.h b/examples/companion_radio/MyMesh.h index 927ec65e..9c22532d 100644 --- a/examples/companion_radio/MyMesh.h +++ b/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; diff --git a/examples/companion_radio/NodePrefs.h b/examples/companion_radio/NodePrefs.h index bfde7218..13c9f884 100644 --- a/examples/companion_radio/NodePrefs.h +++ b/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; }; \ No newline at end of file diff --git a/examples/companion_radio/ui-new/UITask.cpp b/examples/companion_radio/ui-new/UITask.cpp index 086f8259..9213df12 100644 --- a/examples/companion_radio/ui-new/UITask.cpp +++ b/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 } diff --git a/examples/companion_radio/ui-orig/UITask.cpp b/examples/companion_radio/ui-orig/UITask.cpp index 045c955d..f7838d68 100644 --- a/examples/companion_radio/ui-orig/UITask.cpp +++ b/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 }