@@ -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 ];
0 commit comments