diff --git a/Software/src/config.cpp b/Software/src/config.cpp index 61882c4..0f4308e 100644 --- a/Software/src/config.cpp +++ b/Software/src/config.cpp @@ -4,7 +4,6 @@ I2C_eeprom ee(0x50, EEPROM_SIZE_BYTES); LubeConfig_t LubeConfig; persistenceData_t PersistenceData; -uint16_t eePersistenceMarker = 0; const uint16_t eeVersion = 1; // inc boolean eeAvailable = false; @@ -93,11 +92,6 @@ void GetConfig_EEPROM() LubeConfig.checksum = checksum; } -uint16_t getPersistanceAddress() -{ - return startofPersistence + eePersistenceMarker; -} - void StorePersistence_EEPROM() { if (PersistenceData.writeCycleCounter >= 0xFFF0) @@ -111,7 +105,7 @@ void StorePersistence_EEPROM() if (!checkEEPROMavailable()) return; - ee.updateBlock(getPersistanceAddress(), (uint8_t *)&PersistenceData, sizeof(PersistenceData)); + ee.updateBlock(globals.eePersistanceAdress, (uint8_t *)&PersistenceData, sizeof(PersistenceData)); } void GetPersistence_EEPROM() @@ -119,18 +113,28 @@ void GetPersistence_EEPROM() if (!checkEEPROMavailable()) return; - eePersistenceMarker = (ee.readByte(0) << 8) | ee.readByte(1); - ee.readBlock(getPersistanceAddress(), (uint8_t *)&PersistenceData, sizeof(PersistenceData)); - - uint32_t checksum = PersistenceData.checksum; - PersistenceData.checksum = 0; - - if (Checksum_EEPROM((uint8_t *)&PersistenceData, sizeof(PersistenceData)) != checksum) + ee.readBlock(0, (uint8_t *)&globals.eePersistanceAdress, sizeof(globals.eePersistanceAdress)); + // 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()) { - MaintainDTC(DTC_EEPROM_PDS_BAD, true); + 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; + PersistenceData.checksum = 0; + + if (Checksum_EEPROM((uint8_t *)&PersistenceData, sizeof(PersistenceData)) != checksum) + { + MaintainDTC(DTC_EEPROM_PDS_BAD, true); + } + PersistenceData.checksum = checksum; } - PersistenceData.checksum = checksum; } void FormatConfig_EEPROM() @@ -145,7 +149,6 @@ void FormatPersistence_EEPROM() { persistenceData_t defaults; PersistenceData = defaults; - eePersistenceMarker = 0; StorePersistence_EEPROM(); } @@ -154,17 +157,16 @@ void MovePersistencePage_EEPROM(boolean reset) if (!checkEEPROMavailable()) return; - eePersistenceMarker = eePersistenceMarker + sizeof(PersistenceData); + globals.eePersistanceAdress = +sizeof(PersistenceData); PersistenceData.writeCycleCounter = 0; // check if we reached the End of the EEPROM and Startover at the beginning - // if ((startofPersistence + eePersistenceMarker + sizeof(PersistenceData)) > ee.getDeviceSize() || reset) - // { - // eePersistenceMarker = 0; - // } + if ((globals.eePersistanceAdress + sizeof(PersistenceData)) > ee.getDeviceSize() || reset) + { + globals.eePersistanceAdress = startofPersistence; + } - ee.updateByte(0, (uint8_t)(eePersistenceMarker >> 8)); - ee.updateByte(1, (uint8_t)(eePersistenceMarker & 0xFF)); + ee.updateBlock(0, (uint8_t *)&globals.eePersistanceAdress, sizeof(globals.eePersistanceAdress)); } uint32_t Checksum_EEPROM(uint8_t const *data, size_t len) diff --git a/Software/src/config.h b/Software/src/config.h index a866327..b8eb81f 100644 --- a/Software/src/config.h +++ b/Software/src/config.h @@ -105,7 +105,6 @@ void FormatPersistence_EEPROM(); uint32_t Checksum_EEPROM(uint8_t const *data, size_t len); void dumpEEPROM(uint16_t memoryAddress, uint16_t length); void MovePersistencePage_EEPROM(boolean reset); -uint16_t getPersistanceAddress(); extern LubeConfig_t LubeConfig; extern persistenceData_t PersistenceData; diff --git a/Software/src/dtc.h b/Software/src/dtc.h index 9e9f575..320b833 100644 --- a/Software/src/dtc.h +++ b/Software/src/dtc.h @@ -11,6 +11,7 @@ typedef enum DTCNums_e DTC_NO_EEPROM_FOUND, DTC_EEPROM_CFG_BAD, DTC_EEPROM_PDS_BAD, + DTC_EEPROM_PDSADRESS_BAD, DTC_EEPROM_VERSION_BAD, DTC_FLASHFS_ERROR, #ifdef FEATURE_ENABLE_GPS diff --git a/Software/src/globals.h b/Software/src/globals.h index b9f5e9a..82bb35d 100644 --- a/Software/src/globals.h +++ b/Software/src/globals.h @@ -31,6 +31,8 @@ typedef struct Globals_s uint8_t purgePulses = 0; eEERequest requestEEAction = EE_IDLE; char DeviceName[33]; + uint32_t FlashVersion; + uint16_t eePersistanceAdress; } Globals_t; extern Globals_t globals; diff --git a/Software/src/main.cpp b/Software/src/main.cpp index ad538b8..796e9ac 100644 --- a/Software/src/main.cpp +++ b/Software/src/main.cpp @@ -354,7 +354,7 @@ void RemoteDebug_dumpPersistance() debugA("tankRemain_µl: %d", PersistenceData.tankRemain_µl); debugA("TravelDistance_highRes_mm: %d", PersistenceData.TravelDistance_highRes_mm); debugA("checksum: %d", PersistenceData.checksum); - debugA("PSD Adress: 0x%04X", getPersistanceAddress()); + debugA("PSD Adress: 0x%04X", globals.eePersistanceAdress); } void RemoteDebug_printWifiInfo() diff --git a/Software/src/webui.cpp b/Software/src/webui.cpp index 94c6661..a2fe890 100644 --- a/Software/src/webui.cpp +++ b/Software/src/webui.cpp @@ -20,6 +20,8 @@ void initWebUI() return; } + globals.FlashVersion = GetFlashVersion(); + MDNS.begin(globals.DeviceName); MDNS.addService("telnet", "tcp", 23); MDNS.addService("http", "tcp", 80); @@ -85,7 +87,7 @@ String processor(const String &var) if (var == "WRITE_CYCLE_COUNT") return String(PersistenceData.writeCycleCounter); if (var == "PERSISTENCE_MARKER") - return String(getPersistanceAddress()); + return String(globals.eePersistanceAdress); if (var == "TANK_REMAIN_UL") return String(PersistenceData.tankRemain_µl); if (var == "TRAVEL_DISTANCE_HIGHRES") @@ -194,7 +196,7 @@ String processor(const String &var) return String(buffer); } if (var == "FS_VERSION") - return String(GetFlashVersion()); + return String(globals.FlashVersion); if (var == "PLACEHOLDER") return "placeholder"; @@ -298,18 +300,17 @@ void WebserverNotFound_Callback(AsyncWebServerRequest *request) uint32_t GetFlashVersion() { - - char buffer[20]; - File this_file = LittleFS.open("version", "r"); - if (!this_file) - { // failed to open the file, retrn empty result - return 0; - } - while (this_file.available()) - { - this_file.readBytesUntil('\r', buffer, sizeof(buffer)); - } - this_file.close(); + char buffer[20]; + File this_file = LittleFS.open("version", "r"); + if (!this_file) + { // failed to open the file, retrn empty result + return 0; + } + if (this_file.available()) + { + this_file.readBytesUntil('\r', buffer, sizeof(buffer)); + } + this_file.close(); return atoi(buffer); }