Explorar o código

* flood_advert_interval" now defaults to 3 hours for upgrading nodes (not just fresh install)
* companion: "node_prefs" -> "new_prefs" migration

Scott Powell hai 1 ano
pai
achega
753e6a69dc
Modificáronse 2 ficheiros con 47 adicións e 37 borrados
  1. 43 35
      examples/companion_radio/main.cpp
  2. 4 2
      src/helpers/CommonCLI.cpp

+ 43 - 35
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];

+ 4 - 2
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();
   }