mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-24 03:06:33 +00:00
Support for reset settings on filesystem
This commit is contained in:
parent
2ce93bdddd
commit
bda32739a8
@ -14,6 +14,7 @@ All notable changes to this project will be documented in this file.
|
|||||||
- Berry `webclient` `collect_headers()` and `set_headers`
|
- Berry `webclient` `collect_headers()` and `set_headers`
|
||||||
- Display TM1650 commands like TM1637 (#18109)
|
- Display TM1650 commands like TM1637 (#18109)
|
||||||
- Berry add `web_get_arg` event to drivers when `FUNC_WEB_GET_ARG` event is processed
|
- Berry add `web_get_arg` event to drivers when `FUNC_WEB_GET_ARG` event is processed
|
||||||
|
- Support for reset settings on filesystem
|
||||||
|
|
||||||
### Breaking Changed
|
### Breaking Changed
|
||||||
- Shelly Pro 4PM using standard MCP23xxx driver and needs one time Auto-Configuration
|
- Shelly Pro 4PM using standard MCP23xxx driver and needs one time Auto-Configuration
|
||||||
|
@ -389,7 +389,7 @@ enum LightTypes { LT_BASIC, LT_PWM1, LT_PWM2, LT_PWM3, LT_PWM4, LT
|
|||||||
|
|
||||||
enum XsnsFunctions { FUNC_SETTINGS_OVERRIDE, FUNC_SETUP_RING1, FUNC_SETUP_RING2, FUNC_PRE_INIT, FUNC_INIT,
|
enum XsnsFunctions { FUNC_SETTINGS_OVERRIDE, FUNC_SETUP_RING1, FUNC_SETUP_RING2, FUNC_PRE_INIT, FUNC_INIT,
|
||||||
FUNC_LOOP, FUNC_SLEEP_LOOP, FUNC_EVERY_50_MSECOND, FUNC_EVERY_100_MSECOND, FUNC_EVERY_200_MSECOND, FUNC_EVERY_250_MSECOND, FUNC_EVERY_SECOND,
|
FUNC_LOOP, FUNC_SLEEP_LOOP, FUNC_EVERY_50_MSECOND, FUNC_EVERY_100_MSECOND, FUNC_EVERY_200_MSECOND, FUNC_EVERY_250_MSECOND, FUNC_EVERY_SECOND,
|
||||||
FUNC_SAVE_SETTINGS, FUNC_SAVE_AT_MIDNIGHT, FUNC_SAVE_BEFORE_RESTART, FUNC_INTERRUPT_STOP, FUNC_INTERRUPT_START,
|
FUNC_RESET_SETTINGS, FUNC_SAVE_SETTINGS, FUNC_SAVE_AT_MIDNIGHT, FUNC_SAVE_BEFORE_RESTART, FUNC_INTERRUPT_STOP, FUNC_INTERRUPT_START,
|
||||||
FUNC_AFTER_TELEPERIOD, FUNC_JSON_APPEND, FUNC_WEB_SENSOR, FUNC_WEB_COL_SENSOR,
|
FUNC_AFTER_TELEPERIOD, FUNC_JSON_APPEND, FUNC_WEB_SENSOR, FUNC_WEB_COL_SENSOR,
|
||||||
FUNC_MQTT_SUBSCRIBE, FUNC_MQTT_INIT,
|
FUNC_MQTT_SUBSCRIBE, FUNC_MQTT_INIT,
|
||||||
FUNC_SET_POWER, FUNC_SHOW_SENSOR, FUNC_ANY_KEY, FUNC_LED_LINK,
|
FUNC_SET_POWER, FUNC_SHOW_SENSOR, FUNC_ANY_KEY, FUNC_LED_LINK,
|
||||||
|
@ -1513,6 +1513,9 @@ void Every250mSeconds(void)
|
|||||||
SettingsUpdateText(SET_MQTT_TOPIC, storage_mqtttopic);
|
SettingsUpdateText(SET_MQTT_TOPIC, storage_mqtttopic);
|
||||||
Settings->mqtt_port = mqtt_port;
|
Settings->mqtt_port = mqtt_port;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XdrvCall(FUNC_RESET_SETTINGS);
|
||||||
|
|
||||||
TasmotaGlobal.restart_flag = 3; // Finish backlog then Restart 1
|
TasmotaGlobal.restart_flag = 3; // Finish backlog then Restart 1
|
||||||
}
|
}
|
||||||
else if (213 == TasmotaGlobal.restart_flag) { // Reset 3
|
else if (213 == TasmotaGlobal.restart_flag) { // Reset 3
|
||||||
|
@ -273,7 +273,7 @@ bool EnergyRtcSettingsValid(void) {
|
|||||||
|
|
||||||
const uint32_t XDRV_03_VERSION = 0x0102; // Latest driver version (See settings deltas below)
|
const uint32_t XDRV_03_VERSION = 0x0102; // Latest driver version (See settings deltas below)
|
||||||
|
|
||||||
void EnergySettingsLoad(void) {
|
void EnergySettingsLoad(bool erase) {
|
||||||
// *** Start init default values in case file is not found ***
|
// *** Start init default values in case file is not found ***
|
||||||
memset(&Energy->Settings, 0x00, sizeof(tEnergySettings));
|
memset(&Energy->Settings, 0x00, sizeof(tEnergySettings));
|
||||||
Energy->Settings.version = XDRV_03_VERSION;
|
Energy->Settings.version = XDRV_03_VERSION;
|
||||||
@ -320,7 +320,10 @@ void EnergySettingsLoad(void) {
|
|||||||
char filename[20];
|
char filename[20];
|
||||||
// Use for drivers:
|
// Use for drivers:
|
||||||
snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_DRIVER), XDRV_03);
|
snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_DRIVER), XDRV_03);
|
||||||
if (TfsLoadFile(filename, (uint8_t*)&Energy->Settings, sizeof(tEnergySettings))) {
|
if (erase) {
|
||||||
|
TfsDeleteFile(filename); // Use defaults
|
||||||
|
}
|
||||||
|
else if (TfsLoadFile(filename, (uint8_t*)&Energy->Settings, sizeof(tEnergySettings))) {
|
||||||
if (Energy->Settings.version != XDRV_03_VERSION) { // Fix version dependent changes
|
if (Energy->Settings.version != XDRV_03_VERSION) { // Fix version dependent changes
|
||||||
|
|
||||||
// *** Start fix possible setting deltas ***
|
// *** Start fix possible setting deltas ***
|
||||||
@ -336,7 +339,8 @@ void EnergySettingsLoad(void) {
|
|||||||
EnergySettingsSave();
|
EnergySettingsSave();
|
||||||
}
|
}
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("CFG: Energy loaded from file"));
|
AddLog(LOG_LEVEL_INFO, PSTR("CFG: Energy loaded from file"));
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
// File system not ready: No flash space reserved for file system
|
// File system not ready: No flash space reserved for file system
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("CFG: Energy use defaults as file system not ready or file not found"));
|
AddLog(LOG_LEVEL_INFO, PSTR("CFG: Energy use defaults as file system not ready or file not found"));
|
||||||
}
|
}
|
||||||
@ -1338,7 +1342,7 @@ void EnergyDrvInit(void) {
|
|||||||
Energy = (tEnergy*)calloc(sizeof(tEnergy), 1); // Need calloc to reset registers to 0/false
|
Energy = (tEnergy*)calloc(sizeof(tEnergy), 1); // Need calloc to reset registers to 0/false
|
||||||
if (!Energy) { return; }
|
if (!Energy) { return; }
|
||||||
|
|
||||||
EnergySettingsLoad();
|
EnergySettingsLoad(0);
|
||||||
EnergyRtcSettingsLoad();
|
EnergyRtcSettingsLoad();
|
||||||
|
|
||||||
// Energy->voltage_common = false;
|
// Energy->voltage_common = false;
|
||||||
@ -1746,6 +1750,9 @@ bool Xdrv03(uint32_t function)
|
|||||||
case FUNC_SERIAL:
|
case FUNC_SERIAL:
|
||||||
result = XnrgCall(FUNC_SERIAL);
|
result = XnrgCall(FUNC_SERIAL);
|
||||||
break;
|
break;
|
||||||
|
case FUNC_RESET_SETTINGS:
|
||||||
|
EnergySettingsLoad(1);
|
||||||
|
break;
|
||||||
case FUNC_SAVE_SETTINGS:
|
case FUNC_SAVE_SETTINGS:
|
||||||
EnergySettingsSave();
|
EnergySettingsSave();
|
||||||
EnergyRtcSettingsSave();
|
EnergyRtcSettingsSave();
|
||||||
|
@ -78,96 +78,81 @@ void CmndDrvText(void) {
|
|||||||
* Driver Settings load and save
|
* Driver Settings load and save
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
uint32_t DrvDemoSettingsCrc32(void) {
|
void DrvDemoSettingsLoad(bool erase) {
|
||||||
// Use Tasmota CRC calculation function
|
// Called from FUNC_PRE_INIT (erase = 0) once at restart
|
||||||
return GetCfgCrc32((uint8_t*)&DrvDemoSettings +4, sizeof(DrvDemoSettings) -4); // Skip crc32
|
// Called from FUNC_RESET_SETTINGS (erase = 1) after command reset 4, 5, or 6
|
||||||
}
|
|
||||||
|
|
||||||
void DrvDemoSettingsDefault(void) {
|
|
||||||
// Init default values in case file is not found
|
|
||||||
|
|
||||||
|
// *** Start init default values in case file is not found ***
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("DRV: " D_USE_DEFAULTS));
|
AddLog(LOG_LEVEL_INFO, PSTR("DRV: " D_USE_DEFAULTS));
|
||||||
|
|
||||||
memset(&DrvDemoSettings, 0x00, sizeof(DrvDemoSettings));
|
memset(&DrvDemoSettings, 0x00, sizeof(DrvDemoSettings));
|
||||||
DrvDemoSettings.version = DRV_DEMO_VERSION;
|
DrvDemoSettings.version = DRV_DEMO_VERSION;
|
||||||
// Init any other parameter in struct DrvDemoSettings
|
// Init any other parameter in struct DrvDemoSettings
|
||||||
snprintf_P(DrvDemoSettings.drv_text[0], sizeof(DrvDemoSettings.drv_text[0]), PSTR("Azalea"));
|
snprintf_P(DrvDemoSettings.drv_text[0], sizeof(DrvDemoSettings.drv_text[0]), PSTR("Azalea"));
|
||||||
}
|
|
||||||
|
|
||||||
void DrvDemoSettingsDelta(void) {
|
// *** End Init default values ***
|
||||||
// Fix possible setting deltas
|
|
||||||
|
|
||||||
if (DrvDemoSettings.version != DRV_DEMO_VERSION) { // Fix version dependent changes
|
|
||||||
|
|
||||||
if (Settings->version < 0x01010100) {
|
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("DRV: Update oldest version restore"));
|
|
||||||
|
|
||||||
}
|
|
||||||
if (Settings->version < 0x01010101) {
|
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("DRV: Update old version restore"));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set current version and save settings
|
|
||||||
DrvDemoSettings.version = DRV_DEMO_VERSION;
|
|
||||||
DrvDemoSettingsSave();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void DrvDemoSettingsLoad(void) {
|
|
||||||
// Called from FUNC_PRE_INIT once at restart
|
|
||||||
|
|
||||||
// Init default values in case file is not found
|
|
||||||
DrvDemoSettingsDefault();
|
|
||||||
|
|
||||||
|
#ifndef USE_UFILESYS
|
||||||
|
AddLog(LOG_LEVEL_INFO, PSTR("CFG: Demo use defaults as file system not enabled"));
|
||||||
|
#else
|
||||||
// Try to load file /.drvset122
|
// Try to load file /.drvset122
|
||||||
char filename[20];
|
char filename[20];
|
||||||
// Use for sensors:
|
// Use for sensors:
|
||||||
// snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_SENSOR), XSNS_122);
|
// snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_SENSOR), XSNS_122);
|
||||||
// Use for drivers:
|
// Use for drivers:
|
||||||
snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_DRIVER), XDRV_122);
|
snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_DRIVER), XDRV_122);
|
||||||
|
if (erase) {
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("DRV: About to load settings from file %s"), filename);
|
TfsDeleteFile(filename); // Use defaults
|
||||||
|
|
||||||
#ifdef USE_UFILESYS
|
|
||||||
if (TfsLoadFile(filename, (uint8_t*)&DrvDemoSettings, sizeof(DrvDemoSettings))) {
|
|
||||||
// Fix possible setting deltas
|
|
||||||
DrvDemoSettingsDelta();
|
|
||||||
} else {
|
|
||||||
// File system not ready: No flash space reserved for file system
|
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("DRV: ERROR File system not ready or file not found"));
|
|
||||||
}
|
}
|
||||||
#else
|
else if (TfsLoadFile(filename, (uint8_t*)&DrvDemoSettings, sizeof(DrvDemoSettings))) {
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("DRV: ERROR File system not enabled"));
|
if (DrvDemoSettings.version != DRV_DEMO_VERSION) { // Fix version dependent changes
|
||||||
#endif // USE_UFILESYS
|
|
||||||
|
|
||||||
DrvDemoSettings.crc32 = DrvDemoSettingsCrc32();
|
// *** Start fix possible setting deltas ***
|
||||||
|
if (Settings->version < 0x01010100) {
|
||||||
|
AddLog(LOG_LEVEL_INFO, PSTR("CFG: Update oldest version restore"));
|
||||||
|
|
||||||
|
}
|
||||||
|
if (Settings->version < 0x01010101) {
|
||||||
|
AddLog(LOG_LEVEL_INFO, PSTR("CFG: Update old version restore"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// *** End setting deltas ***
|
||||||
|
|
||||||
|
// Set current version and save settings
|
||||||
|
DrvDemoSettings.version = DRV_DEMO_VERSION;
|
||||||
|
DrvDemoSettingsSave();
|
||||||
|
}
|
||||||
|
AddLog(LOG_LEVEL_INFO, PSTR("CFG: Demo loaded from file"));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// File system not ready: No flash space reserved for file system
|
||||||
|
AddLog(LOG_LEVEL_INFO, PSTR("CFG: Demo use defaults as file system not ready or file not found"));
|
||||||
|
}
|
||||||
|
#endif // USE_UFILESYS
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrvDemoSettingsSave(void) {
|
void DrvDemoSettingsSave(void) {
|
||||||
// Called from FUNC_SAVE_SETTINGS every SaveData second and at restart
|
// Called from FUNC_SAVE_SETTINGS every SaveData second and at restart
|
||||||
|
#ifdef USE_UFILESYS
|
||||||
if (DrvDemoSettingsCrc32() != DrvDemoSettings.crc32) {
|
uint32_t crc32 = GetCfgCrc32((uint8_t*)&DrvDemoSettings +4, sizeof(DrvDemoSettings) -4); // Skip crc32
|
||||||
|
if (crc32 != DrvDemoSettings.crc32) {
|
||||||
// Try to save file /.drvset122
|
// Try to save file /.drvset122
|
||||||
DrvDemoSettings.crc32 = DrvDemoSettingsCrc32();
|
DrvDemoSettings.crc32 = crc32;
|
||||||
|
|
||||||
char filename[20];
|
char filename[20];
|
||||||
// Use for sensors:
|
// Use for sensors:
|
||||||
// snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_SENSOR), XSNS_122);
|
// snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_SENSOR), XSNS_122);
|
||||||
// Use for drivers:
|
// Use for drivers:
|
||||||
snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_DRIVER), XDRV_122);
|
snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_DRIVER), XDRV_122);
|
||||||
|
if (TfsSaveFile(filename, (const uint8_t*)&DrvDemoSettings, sizeof(DrvDemoSettings))) {
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("DRV: About to save settings to file %s"), filename);
|
AddLog(LOG_LEVEL_DEBUG, PSTR("CFG: Demo saved to file"));
|
||||||
|
} else {
|
||||||
#ifdef USE_UFILESYS
|
|
||||||
if (!TfsSaveFile(filename, (const uint8_t*)&DrvDemoSettings, sizeof(DrvDemoSettings))) {
|
|
||||||
// File system not ready: No flash space reserved for file system
|
// File system not ready: No flash space reserved for file system
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("DRV: ERROR File system not ready or unable to save file"));
|
AddLog(LOG_LEVEL_DEBUG, PSTR("CFG: ERROR Demo file system not ready or unable to save file"));
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("DRV: ERROR File system not enabled"));
|
|
||||||
#endif // USE_UFILESYS
|
|
||||||
}
|
}
|
||||||
|
#endif // USE_UFILESYS
|
||||||
}
|
}
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
@ -178,6 +163,9 @@ bool Xdrv122(uint32_t function) {
|
|||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
switch (function) {
|
switch (function) {
|
||||||
|
case FUNC_RESET_SETTINGS:
|
||||||
|
DrvDemoSettingsLoad(1);
|
||||||
|
break;
|
||||||
case FUNC_SAVE_SETTINGS:
|
case FUNC_SAVE_SETTINGS:
|
||||||
DrvDemoSettingsSave();
|
DrvDemoSettingsSave();
|
||||||
break;
|
break;
|
||||||
@ -185,7 +173,7 @@ bool Xdrv122(uint32_t function) {
|
|||||||
result = DecodeCommand(kDrvDemoCommands, DrvDemoCommand);
|
result = DecodeCommand(kDrvDemoCommands, DrvDemoCommand);
|
||||||
break;
|
break;
|
||||||
case FUNC_PRE_INIT:
|
case FUNC_PRE_INIT:
|
||||||
DrvDemoSettingsLoad();
|
DrvDemoSettingsLoad(0);
|
||||||
break;
|
break;
|
||||||
case FUNC_SAVE_BEFORE_RESTART:
|
case FUNC_SAVE_BEFORE_RESTART:
|
||||||
// !!! DO NOT USE AS IT'S FUNCTION IS BETTER HANDLED BY FUNC_SAVE_SETTINGS !!!
|
// !!! DO NOT USE AS IT'S FUNCTION IS BETTER HANDLED BY FUNC_SAVE_SETTINGS !!!
|
||||||
|
@ -310,7 +310,7 @@ TSspm *Sspm = nullptr;
|
|||||||
|
|
||||||
const uint32_t XDRV_86_VERSION = 0x0104; // Latest driver version (See settings deltas below)
|
const uint32_t XDRV_86_VERSION = 0x0104; // Latest driver version (See settings deltas below)
|
||||||
|
|
||||||
void Xdrv86SettingsLoad(void) {
|
void Xdrv86SettingsLoad(bool erase) {
|
||||||
// *** Start init default values in case file is not found ***
|
// *** Start init default values in case file is not found ***
|
||||||
memset(&Sspm->Settings, 0x00, sizeof(tSspmSettings));
|
memset(&Sspm->Settings, 0x00, sizeof(tSspmSettings));
|
||||||
Sspm->Settings.version = XDRV_86_VERSION;
|
Sspm->Settings.version = XDRV_86_VERSION;
|
||||||
@ -326,7 +326,10 @@ void Xdrv86SettingsLoad(void) {
|
|||||||
char filename[20];
|
char filename[20];
|
||||||
// Use for drivers:
|
// Use for drivers:
|
||||||
snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_DRIVER), XDRV_86);
|
snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_DRIVER), XDRV_86);
|
||||||
if (TfsLoadFile(filename, (uint8_t*)&Sspm->Settings, sizeof(tSspmSettings))) {
|
if (erase) {
|
||||||
|
TfsDeleteFile(filename); // Use defaults
|
||||||
|
}
|
||||||
|
else if (TfsLoadFile(filename, (uint8_t*)&Sspm->Settings, sizeof(tSspmSettings))) {
|
||||||
if (Sspm->Settings.version != XDRV_86_VERSION) { // Fix version dependent changes
|
if (Sspm->Settings.version != XDRV_86_VERSION) { // Fix version dependent changes
|
||||||
|
|
||||||
// *** Start fix possible setting deltas ***
|
// *** Start fix possible setting deltas ***
|
||||||
@ -341,7 +344,8 @@ void Xdrv86SettingsLoad(void) {
|
|||||||
Xdrv86SettingsSave();
|
Xdrv86SettingsSave();
|
||||||
}
|
}
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("CFG: XDRV86 loaded from file"));
|
AddLog(LOG_LEVEL_INFO, PSTR("CFG: XDRV86 loaded from file"));
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
// File system not ready: No flash space reserved for file system
|
// File system not ready: No flash space reserved for file system
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("CFG: XDRV86 Use defaults as file system not ready or file not found"));
|
AddLog(LOG_LEVEL_DEBUG, PSTR("CFG: XDRV86 Use defaults as file system not ready or file not found"));
|
||||||
}
|
}
|
||||||
@ -1907,7 +1911,7 @@ void SSPMInit(void) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Xdrv86SettingsLoad();
|
Xdrv86SettingsLoad(0);
|
||||||
|
|
||||||
pinMode(SSPM_GPIO_ARM_RESET, OUTPUT);
|
pinMode(SSPM_GPIO_ARM_RESET, OUTPUT);
|
||||||
digitalWrite(SSPM_GPIO_ARM_RESET, 1);
|
digitalWrite(SSPM_GPIO_ARM_RESET, 1);
|
||||||
@ -2645,6 +2649,9 @@ bool Xdrv86(uint32_t function) {
|
|||||||
case FUNC_EVERY_100_MSECOND:
|
case FUNC_EVERY_100_MSECOND:
|
||||||
SSPMEvery100ms();
|
SSPMEvery100ms();
|
||||||
break;
|
break;
|
||||||
|
case FUNC_RESET_SETTINGS:
|
||||||
|
Xdrv86SettingsLoad(1);
|
||||||
|
break;
|
||||||
case FUNC_SAVE_SETTINGS:
|
case FUNC_SAVE_SETTINGS:
|
||||||
Xdrv86SettingsSave();
|
Xdrv86SettingsSave();
|
||||||
break;
|
break;
|
||||||
|
@ -99,7 +99,7 @@ tXdrv87Settings Xdrv87Settings;
|
|||||||
|
|
||||||
/*********************************************************************************************/
|
/*********************************************************************************************/
|
||||||
|
|
||||||
void Xdrv87SettingsLoad(void) {
|
void Xdrv87SettingsLoad(bool erase) {
|
||||||
// *** Start init default values in case file is not found ***
|
// *** Start init default values in case file is not found ***
|
||||||
memset(&Xdrv87Settings, 0x00, sizeof(tXdrv87Settings));
|
memset(&Xdrv87Settings, 0x00, sizeof(tXdrv87Settings));
|
||||||
Xdrv87Settings.version = XDRV_87_VERSION;
|
Xdrv87Settings.version = XDRV_87_VERSION;
|
||||||
@ -115,7 +115,10 @@ void Xdrv87SettingsLoad(void) {
|
|||||||
char filename[20];
|
char filename[20];
|
||||||
// Use for drivers:
|
// Use for drivers:
|
||||||
snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_DRIVER), XDRV_87);
|
snprintf_P(filename, sizeof(filename), PSTR(TASM_FILE_DRIVER), XDRV_87);
|
||||||
if (TfsLoadFile(filename, (uint8_t*)&Xdrv87Settings, sizeof(tXdrv87Settings))) {
|
if (erase) {
|
||||||
|
TfsDeleteFile(filename); // Use defaults
|
||||||
|
}
|
||||||
|
else if (TfsLoadFile(filename, (uint8_t*)&Xdrv87Settings, sizeof(tXdrv87Settings))) {
|
||||||
if (Xdrv87Settings.version != XDRV_87_VERSION) { // Fix version dependent changes
|
if (Xdrv87Settings.version != XDRV_87_VERSION) { // Fix version dependent changes
|
||||||
|
|
||||||
// *** Start fix possible setting deltas ***
|
// *** Start fix possible setting deltas ***
|
||||||
@ -130,7 +133,8 @@ void Xdrv87SettingsLoad(void) {
|
|||||||
Xdrv87SettingsSave();
|
Xdrv87SettingsSave();
|
||||||
}
|
}
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("CFG: XDRV87 loaded from file"));
|
AddLog(LOG_LEVEL_INFO, PSTR("CFG: XDRV87 loaded from file"));
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
// File system not ready: No flash space reserved for file system
|
// File system not ready: No flash space reserved for file system
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("CFG: XDRV87 Use defaults as file system not ready or file not found"));
|
AddLog(LOG_LEVEL_DEBUG, PSTR("CFG: XDRV87 Use defaults as file system not ready or file not found"));
|
||||||
}
|
}
|
||||||
@ -298,7 +302,7 @@ void TM1621PreInit(void) {
|
|||||||
pinMode(Tm1621.pin_wr, OUTPUT);
|
pinMode(Tm1621.pin_wr, OUTPUT);
|
||||||
digitalWrite(Tm1621.pin_wr, 1);
|
digitalWrite(Tm1621.pin_wr, 1);
|
||||||
|
|
||||||
Xdrv87SettingsLoad();
|
Xdrv87SettingsLoad(0);
|
||||||
|
|
||||||
Tm1621.state = 200;
|
Tm1621.state = 200;
|
||||||
|
|
||||||
@ -578,6 +582,9 @@ bool Xdrv87(uint32_t function) {
|
|||||||
case FUNC_EVERY_SECOND:
|
case FUNC_EVERY_SECOND:
|
||||||
TM1621EverySecond();
|
TM1621EverySecond();
|
||||||
break;
|
break;
|
||||||
|
case FUNC_RESET_SETTINGS:
|
||||||
|
Xdrv87SettingsLoad(1);
|
||||||
|
break;
|
||||||
case FUNC_SAVE_SETTINGS:
|
case FUNC_SAVE_SETTINGS:
|
||||||
Xdrv87SettingsSave();
|
Xdrv87SettingsSave();
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user