From 753e6a69dce1f6634cc93680c7f8beeb7bcbd89e Mon Sep 17 00:00:00 2001 From: Scott Powell Date: Tue, 25 Mar 2025 20:20:03 +1100 Subject: [PATCH] * flood_advert_interval" now defaults to 3 hours for upgrading nodes (not just fresh install) * companion: "node_prefs" -> "new_prefs" migration --- examples/companion_radio/main.cpp | 78 +++++++++++++++++-------------- src/helpers/CommonCLI.cpp | 6 ++- 2 files changed, 47 insertions(+), 37 deletions(-) diff --git a/examples/companion_radio/main.cpp b/examples/companion_radio/main.cpp index 58709d0e..cf96b859 100644 --- a/examples/companion_radio/main.cpp +++ b/examples/companion_radio/main.cpp @@ -732,6 +732,41 @@ public: //_prefs.rx_delay_base = 10.0f; enable once new algo fixed } + void loadPrefsInt(const char* filename) { + File file = _fs->open(filename); + if (file) { + uint8_t pad[8]; + + file.read((uint8_t *) &_prefs.airtime_factor, sizeof(float)); // 0 + file.read((uint8_t *) _prefs.node_name, sizeof(_prefs.node_name)); // 4 + file.read(pad, 4); // 36 + file.read((uint8_t *) &_prefs.node_lat, sizeof(_prefs.node_lat)); // 40 + file.read((uint8_t *) &_prefs.node_lon, sizeof(_prefs.node_lon)); // 48 + file.read((uint8_t *) &_prefs.freq, sizeof(_prefs.freq)); // 56 + file.read((uint8_t *) &_prefs.sf, sizeof(_prefs.sf)); // 60 + file.read((uint8_t *) &_prefs.cr, sizeof(_prefs.cr)); // 61 + file.read((uint8_t *) &_prefs.reserved1, sizeof(_prefs.reserved1)); // 62 + file.read((uint8_t *) &_prefs.reserved2, sizeof(_prefs.reserved2)); // 63 + file.read((uint8_t *) &_prefs.bw, sizeof(_prefs.bw)); // 64 + file.read((uint8_t *) &_prefs.tx_power_dbm, sizeof(_prefs.tx_power_dbm)); // 68 + file.read((uint8_t *) _prefs.unused, sizeof(_prefs.unused)); // 69 + file.read((uint8_t *) &_prefs.rx_delay_base, sizeof(_prefs.rx_delay_base)); // 72 + file.read(pad, 4); // 76 + file.read((uint8_t *) &_prefs.ble_pin, sizeof(_prefs.ble_pin)); // 80 + + // sanitise bad pref values + _prefs.rx_delay_base = constrain(_prefs.rx_delay_base, 0, 20.0f); + _prefs.airtime_factor = constrain(_prefs.airtime_factor, 0, 9.0f); + _prefs.freq = constrain(_prefs.freq, 400.0f, 2500.0f); + _prefs.bw = constrain(_prefs.bw, 62.5f, 500.0f); + _prefs.sf = constrain(_prefs.sf, 7, 12); + _prefs.cr = constrain(_prefs.cr, 5, 8); + _prefs.tx_power_dbm = constrain(_prefs.tx_power_dbm, 1, MAX_LORA_TX_POWER); + + file.close(); + } + } + void begin(FILESYSTEM& fs, mesh::RNG& trng, bool has_display) { _fs = &fs; @@ -746,39 +781,12 @@ public: loadMainIdentity(trng); // load persisted prefs - if (_fs->exists("/node_prefs")) { - File file = _fs->open("/node_prefs"); - if (file) { - uint8_t pad[8]; - - file.read((uint8_t *) &_prefs.airtime_factor, sizeof(float)); // 0 - file.read((uint8_t *) _prefs.node_name, sizeof(_prefs.node_name)); // 4 - file.read(pad, 4); // 36 - file.read((uint8_t *) &_prefs.node_lat, sizeof(_prefs.node_lat)); // 40 - file.read((uint8_t *) &_prefs.node_lon, sizeof(_prefs.node_lon)); // 48 - file.read((uint8_t *) &_prefs.freq, sizeof(_prefs.freq)); // 56 - file.read((uint8_t *) &_prefs.sf, sizeof(_prefs.sf)); // 60 - file.read((uint8_t *) &_prefs.cr, sizeof(_prefs.cr)); // 61 - file.read((uint8_t *) &_prefs.reserved1, sizeof(_prefs.reserved1)); // 62 - file.read((uint8_t *) &_prefs.reserved2, sizeof(_prefs.reserved2)); // 63 - file.read((uint8_t *) &_prefs.bw, sizeof(_prefs.bw)); // 64 - file.read((uint8_t *) &_prefs.tx_power_dbm, sizeof(_prefs.tx_power_dbm)); // 68 - file.read((uint8_t *) _prefs.unused, sizeof(_prefs.unused)); // 69 - file.read((uint8_t *) &_prefs.rx_delay_base, sizeof(_prefs.rx_delay_base)); // 72 - file.read(pad, 4); // 76 - file.read((uint8_t *) &_prefs.ble_pin, sizeof(_prefs.ble_pin)); // 80 - - // sanitise bad pref values - _prefs.rx_delay_base = constrain(_prefs.rx_delay_base, 0, 20.0f); - _prefs.airtime_factor = constrain(_prefs.airtime_factor, 0, 9.0f); - _prefs.freq = constrain(_prefs.freq, 400.0f, 2500.0f); - _prefs.bw = constrain(_prefs.bw, 62.5f, 500.0f); - _prefs.sf = constrain(_prefs.sf, 7, 12); - _prefs.cr = constrain(_prefs.cr, 5, 8); - _prefs.tx_power_dbm = constrain(_prefs.tx_power_dbm, 1, MAX_LORA_TX_POWER); - - file.close(); - } + if (_fs->exists("/new_prefs")) { + loadPrefsInt("/new_prefs"); // new filename + } else if (_fs->exists("/node_prefs")) { + loadPrefsInt("/node_prefs"); + savePrefs(); // save to new filename + _fs->remove("/node_prefs"); // remove old } #ifdef BLE_PIN_CODE @@ -823,10 +831,10 @@ public: void savePrefs() { #if defined(NRF52_PLATFORM) - File file = _fs->open("/node_prefs", FILE_O_WRITE); + File file = _fs->open("/new_prefs", FILE_O_WRITE); if (file) { file.seek(0); file.truncate(); } #else - File file = _fs->open("/node_prefs", "w", true); + File file = _fs->open("/new_prefs", "w", true); #endif if (file) { uint8_t pad[8]; diff --git a/src/helpers/CommonCLI.cpp b/src/helpers/CommonCLI.cpp index a9345ece..177138c6 100644 --- a/src/helpers/CommonCLI.cpp +++ b/src/helpers/CommonCLI.cpp @@ -38,7 +38,7 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) { file.read((uint8_t *) &_prefs->tx_power_dbm, sizeof(_prefs->tx_power_dbm)); // 76 file.read((uint8_t *) &_prefs->disable_fwd, sizeof(_prefs->disable_fwd)); // 77 file.read((uint8_t *) &_prefs->advert_interval, sizeof(_prefs->advert_interval)); // 78 - file.read((uint8_t *) &_prefs->flood_advert_interval, sizeof(_prefs->flood_advert_interval)); // 79 + file.read((uint8_t *) pad, 1); // 79 was 'unused' file.read((uint8_t *) &_prefs->rx_delay_base, sizeof(_prefs->rx_delay_base)); // 80 file.read((uint8_t *) &_prefs->tx_delay_factor, sizeof(_prefs->tx_delay_factor)); // 84 file.read((uint8_t *) &_prefs->guest_password[0], sizeof(_prefs->guest_password)); // 88 @@ -51,6 +51,7 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) { file.read((uint8_t *) &_prefs->bw, sizeof(_prefs->bw)); // 116 file.read(pad, 4); // 120 file.read((uint8_t *) &_prefs->flood_max, sizeof(_prefs->flood_max)); // 124 + file.read((uint8_t *) &_prefs->flood_advert_interval, sizeof(_prefs->flood_advert_interval)); // 125 // sanitise bad pref values _prefs->rx_delay_base = constrain(_prefs->rx_delay_base, 0, 20.0f); @@ -88,7 +89,7 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) { file.write((uint8_t *) &_prefs->tx_power_dbm, sizeof(_prefs->tx_power_dbm)); // 76 file.write((uint8_t *) &_prefs->disable_fwd, sizeof(_prefs->disable_fwd)); // 77 file.write((uint8_t *) &_prefs->advert_interval, sizeof(_prefs->advert_interval)); // 78 - file.write((uint8_t *) &_prefs->flood_advert_interval, sizeof(_prefs->flood_advert_interval)); // 79 + file.write((uint8_t *) pad, 1); // 79 was 'unused' file.write((uint8_t *) &_prefs->rx_delay_base, sizeof(_prefs->rx_delay_base)); // 80 file.write((uint8_t *) &_prefs->tx_delay_factor, sizeof(_prefs->tx_delay_factor)); // 84 file.write((uint8_t *) &_prefs->guest_password[0], sizeof(_prefs->guest_password)); // 88 @@ -101,6 +102,7 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) { file.write((uint8_t *) &_prefs->bw, sizeof(_prefs->bw)); // 116 file.write(pad, 4); // 120 file.write((uint8_t *) &_prefs->flood_max, sizeof(_prefs->flood_max)); // 124 + file.write((uint8_t *) &_prefs->flood_advert_interval, sizeof(_prefs->flood_advert_interval)); // 125 file.close(); }