diff --git a/src/helpers/CommonCLI.cpp b/src/helpers/CommonCLI.cpp index b83bb26d..a9345ece 100644 --- a/src/helpers/CommonCLI.cpp +++ b/src/helpers/CommonCLI.cpp @@ -14,57 +14,65 @@ static uint32_t _atoi(const char* sp) { } void CommonCLI::loadPrefs(FILESYSTEM* fs) { - if (fs->exists("/node_prefs")) { - File file = fs->open("/node_prefs"); - if (file) { - uint8_t pad[8]; + if (fs->exists("/com_prefs")) { + loadPrefsInt(fs, "/com_prefs"); // new filename + } else if (fs->exists("/node_prefs")) { + loadPrefsInt(fs, "/node_prefs"); + savePrefs(fs); // save to new filename + fs->remove("/node_prefs"); // remove old + } +} - file.read((uint8_t *) &_prefs->airtime_factor, sizeof(_prefs->airtime_factor)); // 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->password[0], sizeof(_prefs->password)); // 56 - file.read((uint8_t *) &_prefs->freq, sizeof(_prefs->freq)); // 72 - 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 *) &_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 - file.read((uint8_t *) &_prefs->direct_tx_delay_factor, sizeof(_prefs->direct_tx_delay_factor)); // 104 - file.read(pad, 4); // 108 - file.read((uint8_t *) &_prefs->sf, sizeof(_prefs->sf)); // 112 - file.read((uint8_t *) &_prefs->cr, sizeof(_prefs->cr)); // 113 - file.read((uint8_t *) &_prefs->allow_read_only, sizeof(_prefs->allow_read_only)); // 114 - file.read((uint8_t *) &_prefs->reserved2, sizeof(_prefs->reserved2)); // 115 - 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 +void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) { + File file = fs->open(filename); + if (file) { + uint8_t pad[8]; - // sanitise bad pref values - _prefs->rx_delay_base = constrain(_prefs->rx_delay_base, 0, 20.0f); - _prefs->tx_delay_factor = constrain(_prefs->tx_delay_factor, 0, 2.0f); - _prefs->direct_tx_delay_factor = constrain(_prefs->direct_tx_delay_factor, 0, 2.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, 30); + file.read((uint8_t *) &_prefs->airtime_factor, sizeof(_prefs->airtime_factor)); // 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->password[0], sizeof(_prefs->password)); // 56 + file.read((uint8_t *) &_prefs->freq, sizeof(_prefs->freq)); // 72 + 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 *) &_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 + file.read((uint8_t *) &_prefs->direct_tx_delay_factor, sizeof(_prefs->direct_tx_delay_factor)); // 104 + file.read(pad, 4); // 108 + file.read((uint8_t *) &_prefs->sf, sizeof(_prefs->sf)); // 112 + file.read((uint8_t *) &_prefs->cr, sizeof(_prefs->cr)); // 113 + file.read((uint8_t *) &_prefs->allow_read_only, sizeof(_prefs->allow_read_only)); // 114 + file.read((uint8_t *) &_prefs->reserved2, sizeof(_prefs->reserved2)); // 115 + 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.close(); - } + // sanitise bad pref values + _prefs->rx_delay_base = constrain(_prefs->rx_delay_base, 0, 20.0f); + _prefs->tx_delay_factor = constrain(_prefs->tx_delay_factor, 0, 2.0f); + _prefs->direct_tx_delay_factor = constrain(_prefs->direct_tx_delay_factor, 0, 2.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, 30); + + file.close(); } } void CommonCLI::savePrefs(FILESYSTEM* fs) { #if defined(NRF52_PLATFORM) - File file = fs->open("/node_prefs", FILE_O_WRITE); + File file = fs->open("/com_prefs", FILE_O_WRITE); if (file) { file.seek(0); file.truncate(); } #else - File file = fs->open("/node_prefs", "w", true); + File file = fs->open("/com_prefs", "w", true); #endif if (file) { uint8_t pad[8]; diff --git a/src/helpers/CommonCLI.h b/src/helpers/CommonCLI.h index 4a6a6454..a31eefa5 100644 --- a/src/helpers/CommonCLI.h +++ b/src/helpers/CommonCLI.h @@ -53,6 +53,8 @@ class CommonCLI { void checkAdvertInterval(); + void loadPrefsInt(FILESYSTEM* _fs, const char* filename); + public: CommonCLI(mesh::MainBoard& board, mesh::Mesh* mesh, NodePrefs* prefs, CommonCLICallbacks* callbacks) : _board(&board), _mesh(mesh), _prefs(prefs), _callbacks(callbacks) { }