Fixed crash bc Stackoverflow from within Webserver
This commit is contained in:
		| @@ -4,7 +4,6 @@ I2C_eeprom ee(0x50, EEPROM_SIZE_BYTES); | |||||||
|  |  | ||||||
| LubeConfig_t LubeConfig; | LubeConfig_t LubeConfig; | ||||||
| persistenceData_t PersistenceData; | persistenceData_t PersistenceData; | ||||||
| uint16_t eePersistenceMarker = 0; |  | ||||||
| const uint16_t eeVersion = 1; // inc | const uint16_t eeVersion = 1; // inc | ||||||
| boolean eeAvailable = false; | boolean eeAvailable = false; | ||||||
|  |  | ||||||
| @@ -93,11 +92,6 @@ void GetConfig_EEPROM() | |||||||
|   LubeConfig.checksum = checksum; |   LubeConfig.checksum = checksum; | ||||||
| } | } | ||||||
|  |  | ||||||
| uint16_t getPersistanceAddress() |  | ||||||
| { |  | ||||||
|   return startofPersistence + eePersistenceMarker; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void StorePersistence_EEPROM() | void StorePersistence_EEPROM() | ||||||
| { | { | ||||||
|   if (PersistenceData.writeCycleCounter >= 0xFFF0) |   if (PersistenceData.writeCycleCounter >= 0xFFF0) | ||||||
| @@ -111,7 +105,7 @@ void StorePersistence_EEPROM() | |||||||
|   if (!checkEEPROMavailable()) |   if (!checkEEPROMavailable()) | ||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   ee.updateBlock(getPersistanceAddress(), (uint8_t *)&PersistenceData, sizeof(PersistenceData)); |   ee.updateBlock(globals.eePersistanceAdress, (uint8_t *)&PersistenceData, sizeof(PersistenceData)); | ||||||
| } | } | ||||||
|  |  | ||||||
| void GetPersistence_EEPROM() | void GetPersistence_EEPROM() | ||||||
| @@ -119,8 +113,18 @@ void GetPersistence_EEPROM() | |||||||
|   if (!checkEEPROMavailable()) |   if (!checkEEPROMavailable()) | ||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   eePersistenceMarker = (ee.readByte(0) << 8) | ee.readByte(1); |   ee.readBlock(0, (uint8_t *)&globals.eePersistanceAdress, sizeof(globals.eePersistanceAdress)); | ||||||
|   ee.readBlock(getPersistanceAddress(), (uint8_t *)&PersistenceData, sizeof(PersistenceData)); |   // if we got the StartAdress of Persistance and it's out of Range - we Reset it and store defaults | ||||||
|  |   // otherwise we Read from eeprom and check if everything is correct | ||||||
|  |   if (globals.eePersistanceAdress < startofPersistence || globals.eePersistanceAdress > ee.getDeviceSize()) | ||||||
|  |   { | ||||||
|  |     MovePersistencePage_EEPROM(true); | ||||||
|  |     FormatPersistence_EEPROM(); | ||||||
|  |     MaintainDTC(DTC_EEPROM_PDSADRESS_BAD, true); | ||||||
|  |   } | ||||||
|  |   else | ||||||
|  |   { | ||||||
|  |     ee.readBlock(globals.eePersistanceAdress, (uint8_t *)&PersistenceData, sizeof(PersistenceData)); | ||||||
|  |  | ||||||
|     uint32_t checksum = PersistenceData.checksum; |     uint32_t checksum = PersistenceData.checksum; | ||||||
|     PersistenceData.checksum = 0; |     PersistenceData.checksum = 0; | ||||||
| @@ -128,10 +132,10 @@ void GetPersistence_EEPROM() | |||||||
|     if (Checksum_EEPROM((uint8_t *)&PersistenceData, sizeof(PersistenceData)) != checksum) |     if (Checksum_EEPROM((uint8_t *)&PersistenceData, sizeof(PersistenceData)) != checksum) | ||||||
|     { |     { | ||||||
|       MaintainDTC(DTC_EEPROM_PDS_BAD, true); |       MaintainDTC(DTC_EEPROM_PDS_BAD, true); | ||||||
|     FormatPersistence_EEPROM(); |  | ||||||
|     } |     } | ||||||
|     PersistenceData.checksum = checksum; |     PersistenceData.checksum = checksum; | ||||||
|   } |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| void FormatConfig_EEPROM() | void FormatConfig_EEPROM() | ||||||
| { | { | ||||||
| @@ -145,7 +149,6 @@ void FormatPersistence_EEPROM() | |||||||
| { | { | ||||||
|   persistenceData_t defaults; |   persistenceData_t defaults; | ||||||
|   PersistenceData = defaults; |   PersistenceData = defaults; | ||||||
|   eePersistenceMarker = 0; |  | ||||||
|   StorePersistence_EEPROM(); |   StorePersistence_EEPROM(); | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -154,17 +157,16 @@ void MovePersistencePage_EEPROM(boolean reset) | |||||||
|   if (!checkEEPROMavailable()) |   if (!checkEEPROMavailable()) | ||||||
|     return; |     return; | ||||||
|  |  | ||||||
|   eePersistenceMarker = eePersistenceMarker + sizeof(PersistenceData); |   globals.eePersistanceAdress = +sizeof(PersistenceData); | ||||||
|   PersistenceData.writeCycleCounter = 0; |   PersistenceData.writeCycleCounter = 0; | ||||||
|  |  | ||||||
|   // check if we reached the End of the EEPROM and Startover at the beginning |   // check if we reached the End of the EEPROM and Startover at the beginning | ||||||
|   // if ((startofPersistence + eePersistenceMarker + sizeof(PersistenceData)) > ee.getDeviceSize() || reset) |   if ((globals.eePersistanceAdress + sizeof(PersistenceData)) > ee.getDeviceSize() || reset) | ||||||
|   // { |   { | ||||||
|   //   eePersistenceMarker = 0; |     globals.eePersistanceAdress = startofPersistence; | ||||||
|   // } |   } | ||||||
|  |  | ||||||
|   ee.updateByte(0, (uint8_t)(eePersistenceMarker >> 8)); |   ee.updateBlock(0, (uint8_t *)&globals.eePersistanceAdress, sizeof(globals.eePersistanceAdress)); | ||||||
|   ee.updateByte(1, (uint8_t)(eePersistenceMarker & 0xFF)); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| uint32_t Checksum_EEPROM(uint8_t const *data, size_t len) | uint32_t Checksum_EEPROM(uint8_t const *data, size_t len) | ||||||
|   | |||||||
| @@ -105,7 +105,6 @@ void FormatPersistence_EEPROM(); | |||||||
| uint32_t Checksum_EEPROM(uint8_t const *data, size_t len); | uint32_t Checksum_EEPROM(uint8_t const *data, size_t len); | ||||||
| void dumpEEPROM(uint16_t memoryAddress, uint16_t length); | void dumpEEPROM(uint16_t memoryAddress, uint16_t length); | ||||||
| void MovePersistencePage_EEPROM(boolean reset); | void MovePersistencePage_EEPROM(boolean reset); | ||||||
| uint16_t getPersistanceAddress(); |  | ||||||
|  |  | ||||||
| extern LubeConfig_t LubeConfig; | extern LubeConfig_t LubeConfig; | ||||||
| extern persistenceData_t PersistenceData; | extern persistenceData_t PersistenceData; | ||||||
|   | |||||||
| @@ -11,6 +11,7 @@ typedef enum DTCNums_e | |||||||
|   DTC_NO_EEPROM_FOUND, |   DTC_NO_EEPROM_FOUND, | ||||||
|   DTC_EEPROM_CFG_BAD, |   DTC_EEPROM_CFG_BAD, | ||||||
|   DTC_EEPROM_PDS_BAD, |   DTC_EEPROM_PDS_BAD, | ||||||
|  |   DTC_EEPROM_PDSADRESS_BAD, | ||||||
|   DTC_EEPROM_VERSION_BAD, |   DTC_EEPROM_VERSION_BAD, | ||||||
|   DTC_FLASHFS_ERROR, |   DTC_FLASHFS_ERROR, | ||||||
| #ifdef FEATURE_ENABLE_GPS | #ifdef FEATURE_ENABLE_GPS | ||||||
|   | |||||||
| @@ -31,6 +31,8 @@ typedef struct Globals_s | |||||||
|   uint8_t purgePulses = 0; |   uint8_t purgePulses = 0; | ||||||
|   eEERequest requestEEAction = EE_IDLE; |   eEERequest requestEEAction = EE_IDLE; | ||||||
|   char DeviceName[33]; |   char DeviceName[33]; | ||||||
|  |   uint32_t FlashVersion; | ||||||
|  |   uint16_t eePersistanceAdress; | ||||||
| } Globals_t; | } Globals_t; | ||||||
|  |  | ||||||
| extern Globals_t globals; | extern Globals_t globals; | ||||||
|   | |||||||
| @@ -354,7 +354,7 @@ void RemoteDebug_dumpPersistance() | |||||||
|   debugA("tankRemain_µl: %d", PersistenceData.tankRemain_µl); |   debugA("tankRemain_µl: %d", PersistenceData.tankRemain_µl); | ||||||
|   debugA("TravelDistance_highRes_mm: %d", PersistenceData.TravelDistance_highRes_mm); |   debugA("TravelDistance_highRes_mm: %d", PersistenceData.TravelDistance_highRes_mm); | ||||||
|   debugA("checksum: %d", PersistenceData.checksum); |   debugA("checksum: %d", PersistenceData.checksum); | ||||||
|   debugA("PSD Adress: 0x%04X", getPersistanceAddress()); |   debugA("PSD Adress: 0x%04X", globals.eePersistanceAdress); | ||||||
| } | } | ||||||
|  |  | ||||||
| void RemoteDebug_printWifiInfo() | void RemoteDebug_printWifiInfo() | ||||||
|   | |||||||
| @@ -20,6 +20,8 @@ void initWebUI() | |||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   globals.FlashVersion = GetFlashVersion(); | ||||||
|  |  | ||||||
|   MDNS.begin(globals.DeviceName); |   MDNS.begin(globals.DeviceName); | ||||||
|   MDNS.addService("telnet", "tcp", 23); |   MDNS.addService("telnet", "tcp", 23); | ||||||
|   MDNS.addService("http", "tcp", 80); |   MDNS.addService("http", "tcp", 80); | ||||||
| @@ -85,7 +87,7 @@ String processor(const String &var) | |||||||
|   if (var == "WRITE_CYCLE_COUNT") |   if (var == "WRITE_CYCLE_COUNT") | ||||||
|     return String(PersistenceData.writeCycleCounter); |     return String(PersistenceData.writeCycleCounter); | ||||||
|   if (var == "PERSISTENCE_MARKER") |   if (var == "PERSISTENCE_MARKER") | ||||||
|     return String(getPersistanceAddress()); |     return String(globals.eePersistanceAdress); | ||||||
|   if (var == "TANK_REMAIN_UL") |   if (var == "TANK_REMAIN_UL") | ||||||
|     return String(PersistenceData.tankRemain_µl); |     return String(PersistenceData.tankRemain_µl); | ||||||
|   if (var == "TRAVEL_DISTANCE_HIGHRES") |   if (var == "TRAVEL_DISTANCE_HIGHRES") | ||||||
| @@ -194,7 +196,7 @@ String processor(const String &var) | |||||||
|     return String(buffer); |     return String(buffer); | ||||||
|   } |   } | ||||||
|   if (var == "FS_VERSION") |   if (var == "FS_VERSION") | ||||||
|     return String(GetFlashVersion()); |     return String(globals.FlashVersion); | ||||||
|  |  | ||||||
|   if (var == "PLACEHOLDER") |   if (var == "PLACEHOLDER") | ||||||
|     return "placeholder"; |     return "placeholder"; | ||||||
| @@ -298,14 +300,13 @@ void WebserverNotFound_Callback(AsyncWebServerRequest *request) | |||||||
|  |  | ||||||
| uint32_t GetFlashVersion() | uint32_t GetFlashVersion() | ||||||
| { | { | ||||||
|  |  | ||||||
|     char buffer[20]; |     char buffer[20]; | ||||||
|     File this_file = LittleFS.open("version", "r"); |     File this_file = LittleFS.open("version", "r"); | ||||||
|     if (!this_file) |     if (!this_file) | ||||||
|     { // failed to open the file, retrn empty result |     { // failed to open the file, retrn empty result | ||||||
|       return 0; |       return 0; | ||||||
|     } |     } | ||||||
|   while (this_file.available()) |     if (this_file.available()) | ||||||
|     { |     { | ||||||
|       this_file.readBytesUntil('\r', buffer, sizeof(buffer)); |       this_file.readBytesUntil('\r', buffer, sizeof(buffer)); | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user