mirror of
https://github.com/meshtastic/firmware.git
synced 2025-04-24 01:16:55 +00:00
Merge pull request #1749 from meshtastic/flash-save
Only save the changed parts of config to disk.
This commit is contained in:
commit
ce5bce5cdc
@ -324,7 +324,7 @@ void setup()
|
|||||||
DEBUG_MSG("GPS FactoryReset requested\n");
|
DEBUG_MSG("GPS FactoryReset requested\n");
|
||||||
if (gps->factoryReset()) { // If we don't succeed try again next time
|
if (gps->factoryReset()) { // If we don't succeed try again next time
|
||||||
devicestate.did_gps_reset = true;
|
devicestate.did_gps_reset = true;
|
||||||
nodeDB.saveToDisk();
|
nodeDB.saveToDisk(SEGMENT_DEVICESTATE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ void MeshService::loop()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// The radioConfig object just changed, call this to force the hw to change to the new settings
|
/// The radioConfig object just changed, call this to force the hw to change to the new settings
|
||||||
bool MeshService::reloadConfig()
|
bool MeshService::reloadConfig(int saveWhat)
|
||||||
{
|
{
|
||||||
// If we can successfully set this radio to these settings, save them to disk
|
// If we can successfully set this radio to these settings, save them to disk
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ bool MeshService::reloadConfig()
|
|||||||
bool didReset = nodeDB.resetRadioConfig(); // Don't let the phone send us fatally bad settings
|
bool didReset = nodeDB.resetRadioConfig(); // Don't let the phone send us fatally bad settings
|
||||||
|
|
||||||
configChanged.notifyObservers(NULL); // This will cause radio hardware to change freqs etc
|
configChanged.notifyObservers(NULL); // This will cause radio hardware to change freqs etc
|
||||||
nodeDB.saveToDisk();
|
nodeDB.saveToDisk(saveWhat);
|
||||||
|
|
||||||
return didReset;
|
return didReset;
|
||||||
}
|
}
|
||||||
@ -113,7 +113,7 @@ void MeshService::reloadOwner()
|
|||||||
// update everyone else
|
// update everyone else
|
||||||
if (nodeInfoModule)
|
if (nodeInfoModule)
|
||||||
nodeInfoModule->sendOurNodeInfo();
|
nodeInfoModule->sendOurNodeInfo();
|
||||||
nodeDB.saveToDisk();
|
nodeDB.saveToDisk(SEGMENT_DEVICESTATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -66,7 +66,7 @@ class MeshService
|
|||||||
/** The radioConfig object just changed, call this to force the hw to change to the new settings
|
/** The radioConfig object just changed, call this to force the hw to change to the new settings
|
||||||
* @return true if client devices should be sent a new set of radio configs
|
* @return true if client devices should be sent a new set of radio configs
|
||||||
*/
|
*/
|
||||||
bool reloadConfig();
|
bool reloadConfig(int saveWhat=SEGMENT_CONFIG | SEGMENT_MODULECONFIG | SEGMENT_DEVICESTATE | SEGMENT_CHANNELS);
|
||||||
|
|
||||||
/// The owner User record just got updated, update our node DB and broadcast the info into the mesh
|
/// The owner User record just got updated, update our node DB and broadcast the info into the mesh
|
||||||
void reloadOwner();
|
void reloadOwner();
|
||||||
|
@ -128,7 +128,7 @@ bool NodeDB::factoryReset()
|
|||||||
// second, install default state (this will deal with the duplicate mac address issue)
|
// second, install default state (this will deal with the duplicate mac address issue)
|
||||||
installDefaultDeviceState();
|
installDefaultDeviceState();
|
||||||
installDefaultConfig();
|
installDefaultConfig();
|
||||||
// third, write to disk
|
// third, write everything to disk
|
||||||
saveToDisk();
|
saveToDisk();
|
||||||
#ifdef ARCH_ESP32
|
#ifdef ARCH_ESP32
|
||||||
// This will erase what's in NVS including ssl keys, persistant variables and ble pairing
|
// This will erase what's in NVS including ssl keys, persistant variables and ble pairing
|
||||||
@ -474,34 +474,41 @@ void NodeDB::saveDeviceStateToDisk()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NodeDB::saveToDisk()
|
void NodeDB::saveToDisk(int saveWhat)
|
||||||
{
|
{
|
||||||
if (!devicestate.no_save) {
|
if (!devicestate.no_save) {
|
||||||
#ifdef FSCom
|
#ifdef FSCom
|
||||||
FSCom.mkdir("/prefs");
|
FSCom.mkdir("/prefs");
|
||||||
#endif
|
#endif
|
||||||
saveProto(prefFileName, DeviceState_size, sizeof(devicestate), DeviceState_fields, &devicestate);
|
if (saveWhat && SEGMENT_DEVICESTATE) {
|
||||||
|
saveDeviceStateToDisk();
|
||||||
|
}
|
||||||
|
|
||||||
// save all config segments
|
if (saveWhat && SEGMENT_CONFIG) {
|
||||||
config.has_device = true;
|
config.has_device = true;
|
||||||
config.has_display = true;
|
config.has_display = true;
|
||||||
config.has_lora = true;
|
config.has_lora = true;
|
||||||
config.has_position = true;
|
config.has_position = true;
|
||||||
config.has_power = true;
|
config.has_power = true;
|
||||||
config.has_network = true;
|
config.has_network = true;
|
||||||
config.has_bluetooth = true;
|
config.has_bluetooth = true;
|
||||||
saveProto(configFileName, LocalConfig_size, sizeof(config), LocalConfig_fields, &config);
|
saveProto(configFileName, LocalConfig_size, sizeof(config), LocalConfig_fields, &config);
|
||||||
|
}
|
||||||
|
|
||||||
moduleConfig.has_canned_message = true;
|
if (saveWhat && SEGMENT_MODULECONFIG) {
|
||||||
moduleConfig.has_external_notification = true;
|
moduleConfig.has_canned_message = true;
|
||||||
moduleConfig.has_mqtt = true;
|
moduleConfig.has_external_notification = true;
|
||||||
moduleConfig.has_range_test = true;
|
moduleConfig.has_mqtt = true;
|
||||||
moduleConfig.has_serial = true;
|
moduleConfig.has_range_test = true;
|
||||||
moduleConfig.has_store_forward = true;
|
moduleConfig.has_serial = true;
|
||||||
moduleConfig.has_telemetry = true;
|
moduleConfig.has_store_forward = true;
|
||||||
saveProto(moduleConfigFileName, LocalModuleConfig_size, sizeof(moduleConfig), LocalModuleConfig_fields, &moduleConfig);
|
moduleConfig.has_telemetry = true;
|
||||||
|
saveProto(moduleConfigFileName, LocalModuleConfig_size, sizeof(moduleConfig), LocalModuleConfig_fields, &moduleConfig);
|
||||||
|
}
|
||||||
|
|
||||||
saveChannelsToDisk();
|
if (saveWhat && SEGMENT_CHANNELS) {
|
||||||
|
saveChannelsToDisk();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
DEBUG_MSG("***** DEVELOPMENT MODE - DO NOT RELEASE - not saving to flash *****\n");
|
DEBUG_MSG("***** DEVELOPMENT MODE - DO NOT RELEASE - not saving to flash *****\n");
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,11 @@ DeviceState versions used to be defined in the .proto file but really only this
|
|||||||
#define here.
|
#define here.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define SEGMENT_CONFIG 1
|
||||||
|
#define SEGMENT_MODULECONFIG 2
|
||||||
|
#define SEGMENT_DEVICESTATE 4
|
||||||
|
#define SEGMENT_CHANNELS 8
|
||||||
|
|
||||||
#define DEVICESTATE_CUR_VER 19
|
#define DEVICESTATE_CUR_VER 19
|
||||||
#define DEVICESTATE_MIN_VER DEVICESTATE_CUR_VER
|
#define DEVICESTATE_MIN_VER DEVICESTATE_CUR_VER
|
||||||
|
|
||||||
@ -52,7 +57,7 @@ class NodeDB
|
|||||||
void init();
|
void init();
|
||||||
|
|
||||||
/// write to flash
|
/// write to flash
|
||||||
void saveToDisk(), saveChannelsToDisk(), saveDeviceStateToDisk();
|
void saveToDisk(int saveWhat=SEGMENT_CONFIG | SEGMENT_MODULECONFIG | SEGMENT_DEVICESTATE | SEGMENT_CHANNELS), saveChannelsToDisk(), saveDeviceStateToDisk();
|
||||||
|
|
||||||
/** Reinit radio config if needed, because either:
|
/** Reinit radio config if needed, because either:
|
||||||
* a) sometimes a buggy android app might send us bogus settings or
|
* a) sometimes a buggy android app might send us bogus settings or
|
||||||
|
@ -241,7 +241,7 @@ void AdminModule::handleSetConfig(const Config &c)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
service.reloadConfig();
|
service.reloadConfig(SEGMENT_CONFIG);
|
||||||
// Reboot 5 seconds after a config that requires rebooting is set
|
// Reboot 5 seconds after a config that requires rebooting is set
|
||||||
if (requiresReboot) {
|
if (requiresReboot) {
|
||||||
DEBUG_MSG("Rebooting due to config changes\n");
|
DEBUG_MSG("Rebooting due to config changes\n");
|
||||||
@ -290,7 +290,7 @@ void AdminModule::handleSetModuleConfig(const ModuleConfig &c)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
service.reloadConfig();
|
service.reloadConfig(SEGMENT_MODULECONFIG);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdminModule::handleSetChannel(const Channel &cc)
|
void AdminModule::handleSetChannel(const Channel &cc)
|
||||||
|
@ -75,7 +75,7 @@ class NimbleBluetoothServerCallback : public NimBLEServerCallbacks
|
|||||||
if (doublepressed > 0 && (doublepressed + (30 * 1000)) > millis()) {
|
if (doublepressed > 0 && (doublepressed + (30 * 1000)) > millis()) {
|
||||||
DEBUG_MSG("User has set BLE pairing mode to fixed-pin\n");
|
DEBUG_MSG("User has set BLE pairing mode to fixed-pin\n");
|
||||||
config.bluetooth.mode = Config_BluetoothConfig_PairingMode_FIXED_PIN;
|
config.bluetooth.mode = Config_BluetoothConfig_PairingMode_FIXED_PIN;
|
||||||
nodeDB.saveToDisk();
|
nodeDB.saveToDisk(SEGMENT_CONFIG);
|
||||||
} else if (config.bluetooth.mode == Config_BluetoothConfig_PairingMode_RANDOM_PIN) {
|
} else if (config.bluetooth.mode == Config_BluetoothConfig_PairingMode_RANDOM_PIN) {
|
||||||
DEBUG_MSG("Using random passkey\n");
|
DEBUG_MSG("Using random passkey\n");
|
||||||
// This is the passkey to be entered on peer - we pick a number >100,000 to ensure 6 digits
|
// This is the passkey to be entered on peer - we pick a number >100,000 to ensure 6 digits
|
||||||
|
Loading…
Reference in New Issue
Block a user