Fixed crash bc Stackoverflow from within Webserver
This commit is contained in:
parent
01ba4b7333
commit
7c38d02bf8
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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()
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user