|
@@ -306,6 +306,10 @@ void SETTINGS_Load(void)
|
|
|
{
|
|
|
uint32_t loadCRC; // CRC из flash
|
|
|
uint32_t newCRC; // CRC загруженной структуры настроек
|
|
|
+ bool need_default = false;
|
|
|
+
|
|
|
+ WEB_PARAMS_t sWebParamsBackup;
|
|
|
+ BOOT_PARAMS_t bootParamsBackup;
|
|
|
|
|
|
SETTINGS_ReadFromFlash((uint8_t*)&sSettings, sizeof(sSettings));
|
|
|
/* Считываем CRC из флеш памяти */
|
|
@@ -315,9 +319,38 @@ void SETTINGS_Load(void)
|
|
|
newCRC = SETTINGS_GetCRC();
|
|
|
|
|
|
if (loadCRC != newCRC) {
|
|
|
- SETTINGS_SetAllDefault();
|
|
|
- SETTINGS_Save();
|
|
|
- }
|
|
|
+ /* SETTINGS_SetAllDefault();
|
|
|
+ SETTINGS_Save();*/
|
|
|
+ need_default = true;
|
|
|
+ }
|
|
|
+ /* CRC совпала, проверяем контрольное слово если слово не совпадает
|
|
|
+ то это значит, что поплыла структура нстроек, прошиваем дефолт */
|
|
|
+ else if (sSettings.controlWorld != SETTINGS_CONTROL_WORD)
|
|
|
+ {
|
|
|
+ need_default = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* Прошиваем дефолтные настройки если нужно */
|
|
|
+ if (need_default) {
|
|
|
+
|
|
|
+ /* Бэкапим сетевые параметры загрузчика */
|
|
|
+ memcpy(&sWebParamsBackup, &sSettings.sWebParams, sizeof(sWebParamsBackup));
|
|
|
+
|
|
|
+ /* Бэкапим флаги загрузчика */
|
|
|
+ memcpy(&bootParamsBackup, &sSettings.bootParams, sizeof(bootParamsBackup));
|
|
|
+ loadCRC = sSettings.CritSecCRC;
|
|
|
+ newCRC = SETTINGS_GetCritSecCRC();
|
|
|
+ SETTINGS_SetAllDefault();
|
|
|
+ if (loadCRC == newCRC) {
|
|
|
+ /* Применяем флаги загрузчика */
|
|
|
+ memcpy(&sSettings.bootParams, &bootParamsBackup, sizeof(sSettings.bootParams));
|
|
|
+
|
|
|
+ /* Применяем сетевые параметры загрузчика */
|
|
|
+ memcpy(&sSettings.sWebParams, &sWebParamsBackup, sizeof(sSettings.sWebParams));
|
|
|
+ }
|
|
|
+
|
|
|
+ SETTINGS_Save();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|