Skip to content

Commit 753e6a6

Browse files
author
Scott Powell
committed
* flood_advert_interval" now defaults to 3 hours for upgrading nodes (not just fresh install)
* companion: "node_prefs" -> "new_prefs" migration
1 parent f33e1b2 commit 753e6a6

File tree

2 files changed

+47
-37
lines changed

2 files changed

+47
-37
lines changed

examples/companion_radio/main.cpp

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,41 @@ class MyMesh : public BaseChatMesh {
732732
//_prefs.rx_delay_base = 10.0f; enable once new algo fixed
733733
}
734734

735+
void loadPrefsInt(const char* filename) {
736+
File file = _fs->open(filename);
737+
if (file) {
738+
uint8_t pad[8];
739+
740+
file.read((uint8_t *) &_prefs.airtime_factor, sizeof(float)); // 0
741+
file.read((uint8_t *) _prefs.node_name, sizeof(_prefs.node_name)); // 4
742+
file.read(pad, 4); // 36
743+
file.read((uint8_t *) &_prefs.node_lat, sizeof(_prefs.node_lat)); // 40
744+
file.read((uint8_t *) &_prefs.node_lon, sizeof(_prefs.node_lon)); // 48
745+
file.read((uint8_t *) &_prefs.freq, sizeof(_prefs.freq)); // 56
746+
file.read((uint8_t *) &_prefs.sf, sizeof(_prefs.sf)); // 60
747+
file.read((uint8_t *) &_prefs.cr, sizeof(_prefs.cr)); // 61
748+
file.read((uint8_t *) &_prefs.reserved1, sizeof(_prefs.reserved1)); // 62
749+
file.read((uint8_t *) &_prefs.reserved2, sizeof(_prefs.reserved2)); // 63
750+
file.read((uint8_t *) &_prefs.bw, sizeof(_prefs.bw)); // 64
751+
file.read((uint8_t *) &_prefs.tx_power_dbm, sizeof(_prefs.tx_power_dbm)); // 68
752+
file.read((uint8_t *) _prefs.unused, sizeof(_prefs.unused)); // 69
753+
file.read((uint8_t *) &_prefs.rx_delay_base, sizeof(_prefs.rx_delay_base)); // 72
754+
file.read(pad, 4); // 76
755+
file.read((uint8_t *) &_prefs.ble_pin, sizeof(_prefs.ble_pin)); // 80
756+
757+
// sanitise bad pref values
758+
_prefs.rx_delay_base = constrain(_prefs.rx_delay_base, 0, 20.0f);
759+
_prefs.airtime_factor = constrain(_prefs.airtime_factor, 0, 9.0f);
760+
_prefs.freq = constrain(_prefs.freq, 400.0f, 2500.0f);
761+
_prefs.bw = constrain(_prefs.bw, 62.5f, 500.0f);
762+
_prefs.sf = constrain(_prefs.sf, 7, 12);
763+
_prefs.cr = constrain(_prefs.cr, 5, 8);
764+
_prefs.tx_power_dbm = constrain(_prefs.tx_power_dbm, 1, MAX_LORA_TX_POWER);
765+
766+
file.close();
767+
}
768+
}
769+
735770
void begin(FILESYSTEM& fs, mesh::RNG& trng, bool has_display) {
736771
_fs = &fs;
737772

@@ -746,39 +781,12 @@ class MyMesh : public BaseChatMesh {
746781
loadMainIdentity(trng);
747782

748783
// load persisted prefs
749-
if (_fs->exists("/node_prefs")) {
750-
File file = _fs->open("/node_prefs");
751-
if (file) {
752-
uint8_t pad[8];
753-
754-
file.read((uint8_t *) &_prefs.airtime_factor, sizeof(float)); // 0
755-
file.read((uint8_t *) _prefs.node_name, sizeof(_prefs.node_name)); // 4
756-
file.read(pad, 4); // 36
757-
file.read((uint8_t *) &_prefs.node_lat, sizeof(_prefs.node_lat)); // 40
758-
file.read((uint8_t *) &_prefs.node_lon, sizeof(_prefs.node_lon)); // 48
759-
file.read((uint8_t *) &_prefs.freq, sizeof(_prefs.freq)); // 56
760-
file.read((uint8_t *) &_prefs.sf, sizeof(_prefs.sf)); // 60
761-
file.read((uint8_t *) &_prefs.cr, sizeof(_prefs.cr)); // 61
762-
file.read((uint8_t *) &_prefs.reserved1, sizeof(_prefs.reserved1)); // 62
763-
file.read((uint8_t *) &_prefs.reserved2, sizeof(_prefs.reserved2)); // 63
764-
file.read((uint8_t *) &_prefs.bw, sizeof(_prefs.bw)); // 64
765-
file.read((uint8_t *) &_prefs.tx_power_dbm, sizeof(_prefs.tx_power_dbm)); // 68
766-
file.read((uint8_t *) _prefs.unused, sizeof(_prefs.unused)); // 69
767-
file.read((uint8_t *) &_prefs.rx_delay_base, sizeof(_prefs.rx_delay_base)); // 72
768-
file.read(pad, 4); // 76
769-
file.read((uint8_t *) &_prefs.ble_pin, sizeof(_prefs.ble_pin)); // 80
770-
771-
// sanitise bad pref values
772-
_prefs.rx_delay_base = constrain(_prefs.rx_delay_base, 0, 20.0f);
773-
_prefs.airtime_factor = constrain(_prefs.airtime_factor, 0, 9.0f);
774-
_prefs.freq = constrain(_prefs.freq, 400.0f, 2500.0f);
775-
_prefs.bw = constrain(_prefs.bw, 62.5f, 500.0f);
776-
_prefs.sf = constrain(_prefs.sf, 7, 12);
777-
_prefs.cr = constrain(_prefs.cr, 5, 8);
778-
_prefs.tx_power_dbm = constrain(_prefs.tx_power_dbm, 1, MAX_LORA_TX_POWER);
779-
780-
file.close();
781-
}
784+
if (_fs->exists("/new_prefs")) {
785+
loadPrefsInt("/new_prefs"); // new filename
786+
} else if (_fs->exists("/node_prefs")) {
787+
loadPrefsInt("/node_prefs");
788+
savePrefs(); // save to new filename
789+
_fs->remove("/node_prefs"); // remove old
782790
}
783791

784792
#ifdef BLE_PIN_CODE
@@ -823,10 +831,10 @@ class MyMesh : public BaseChatMesh {
823831

824832
void savePrefs() {
825833
#if defined(NRF52_PLATFORM)
826-
File file = _fs->open("/node_prefs", FILE_O_WRITE);
834+
File file = _fs->open("/new_prefs", FILE_O_WRITE);
827835
if (file) { file.seek(0); file.truncate(); }
828836
#else
829-
File file = _fs->open("/node_prefs", "w", true);
837+
File file = _fs->open("/new_prefs", "w", true);
830838
#endif
831839
if (file) {
832840
uint8_t pad[8];

src/helpers/CommonCLI.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ void CommonCLI::loadPrefsInt(FILESYSTEM* fs, const char* filename) {
3838
file.read((uint8_t *) &_prefs->tx_power_dbm, sizeof(_prefs->tx_power_dbm)); // 76
3939
file.read((uint8_t *) &_prefs->disable_fwd, sizeof(_prefs->disable_fwd)); // 77
4040
file.read((uint8_t *) &_prefs->advert_interval, sizeof(_prefs->advert_interval)); // 78
41-
file.read((uint8_t *) &_prefs->flood_advert_interval, sizeof(_prefs->flood_advert_interval)); // 79
41+
file.read((uint8_t *) pad, 1); // 79 was 'unused'
4242
file.read((uint8_t *) &_prefs->rx_delay_base, sizeof(_prefs->rx_delay_base)); // 80
4343
file.read((uint8_t *) &_prefs->tx_delay_factor, sizeof(_prefs->tx_delay_factor)); // 84
4444
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) {
5151
file.read((uint8_t *) &_prefs->bw, sizeof(_prefs->bw)); // 116
5252
file.read(pad, 4); // 120
5353
file.read((uint8_t *) &_prefs->flood_max, sizeof(_prefs->flood_max)); // 124
54+
file.read((uint8_t *) &_prefs->flood_advert_interval, sizeof(_prefs->flood_advert_interval)); // 125
5455

5556
// sanitise bad pref values
5657
_prefs->rx_delay_base = constrain(_prefs->rx_delay_base, 0, 20.0f);
@@ -88,7 +89,7 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) {
8889
file.write((uint8_t *) &_prefs->tx_power_dbm, sizeof(_prefs->tx_power_dbm)); // 76
8990
file.write((uint8_t *) &_prefs->disable_fwd, sizeof(_prefs->disable_fwd)); // 77
9091
file.write((uint8_t *) &_prefs->advert_interval, sizeof(_prefs->advert_interval)); // 78
91-
file.write((uint8_t *) &_prefs->flood_advert_interval, sizeof(_prefs->flood_advert_interval)); // 79
92+
file.write((uint8_t *) pad, 1); // 79 was 'unused'
9293
file.write((uint8_t *) &_prefs->rx_delay_base, sizeof(_prefs->rx_delay_base)); // 80
9394
file.write((uint8_t *) &_prefs->tx_delay_factor, sizeof(_prefs->tx_delay_factor)); // 84
9495
file.write((uint8_t *) &_prefs->guest_password[0], sizeof(_prefs->guest_password)); // 88
@@ -101,6 +102,7 @@ void CommonCLI::savePrefs(FILESYSTEM* fs) {
101102
file.write((uint8_t *) &_prefs->bw, sizeof(_prefs->bw)); // 116
102103
file.write(pad, 4); // 120
103104
file.write((uint8_t *) &_prefs->flood_max, sizeof(_prefs->flood_max)); // 124
105+
file.write((uint8_t *) &_prefs->flood_advert_interval, sizeof(_prefs->flood_advert_interval)); // 125
104106

105107
file.close();
106108
}

0 commit comments

Comments
 (0)