Procházet zdrojové kódy

fix save web_param when size settings changed

balbekova před 7 roky
rodič
revize
5536c78f64
1 změnil soubory, kde provedl 37 přidání a 4 odebrání
  1. 37 4
      modules/settings_api.c

+ 37 - 4
modules/settings_api.c

@@ -69,7 +69,7 @@ void SETTINGS_SetBootParamsDef(void)
   */
 void SETTINGS_SetWebParamsDef(void)
 {
-	  strcpy(sSettings.sWebParams.ip, "192.168.14.63");
+	  strcpy(sSettings.sWebParams.ip, "192.168.0.254");
 	  strcpy(sSettings.sWebParams.gate, "192.168.14.1");
 	  strcpy(sSettings.sWebParams.mask, "255.255.255.0");
 	  sSettings.sWebParams.dhcpEnable = 1;
@@ -312,6 +312,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 из флеш памяти */
@@ -321,9 +325,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();
+  }
 }
 
 /**