|
|
@@ -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];
|