PersistenceData gets stored cyclic now.

This commit is contained in:
Marcel Peterkau 2022-02-04 22:26:26 +01:00
parent 6ae9c273cb
commit 055183ce90
5 changed files with 23 additions and 15 deletions

View File

@ -10,8 +10,8 @@ uint16_t eePersistenceMarker = 0;
uint16_t eeVersion = 0; // inc uint16_t eeVersion = 0; // inc
boolean eeAvailable = false; boolean eeAvailable = false;
const uint16_t startofLubeConfig = sizeof(eePersistenceMarker); const uint16_t startofLubeConfig = 16;
const uint16_t startofPersistence = sizeof(LubeConfig) + sizeof(eePersistenceMarker); const uint16_t startofPersistence = 16 + sizeof(LubeConfig) + (sizeof(LubeConfig) % 16);
#if PCB_REVISION >= 12 #if PCB_REVISION >= 12
void InitEEPROM() void InitEEPROM()
@ -52,7 +52,7 @@ void StoreConfig_EEPROM()
#if PCB_REVISION >= 12 #if PCB_REVISION >= 12
if (!ee.isConnected()) if (!ee.isConnected())
return; return;
ee.writeBlock(startofLubeConfig, (uint8_t *)&LubeConfig, sizeof(LubeConfig)); ee.updateBlock(startofLubeConfig, (uint8_t *)&LubeConfig, sizeof(LubeConfig));
#else #else
EEPROM.begin(512); EEPROM.begin(512);
EEPROM.put(startofLubeConfig, LubeConfig); EEPROM.put(startofLubeConfig, LubeConfig);
@ -86,7 +86,7 @@ void GetConfig_EEPROM()
void StorePersistence_EEPROM() void StorePersistence_EEPROM()
{ {
if (PersistenceData.writeCycleCounter == 0xFFFF) if (PersistenceData.writeCycleCounter >= 0xFFF0)
MovePersistencePage_EEPROM(false); MovePersistencePage_EEPROM(false);
else else
PersistenceData.writeCycleCounter++; PersistenceData.writeCycleCounter++;

View File

@ -62,7 +62,7 @@ typedef struct
{ {
uint16_t writeCycleCounter = 0; uint16_t writeCycleCounter = 0;
uint32_t tankRemain_µl = 0; uint32_t tankRemain_µl = 0;
uint32_t distanceTraveled_m = 0; uint32_t TravelDistance_highRes = 0;
uint32_t checksum = 0; uint32_t checksum = 0;
} persistenceData_t; } persistenceData_t;

View File

@ -32,6 +32,5 @@ typedef struct Globals_s
} Globals_t; } Globals_t;
extern Globals_t globals; extern Globals_t globals;
extern uint32_t TravelDistance_highRes;
#endif #endif

View File

@ -5,7 +5,7 @@ uint32_t lubePulseTimestamp = 0;
void RunLubeApp(uint32_t add_milimeters) void RunLubeApp(uint32_t add_milimeters)
{ {
// Add traveled Distance in mm // Add traveled Distance in mm
TravelDistance_highRes += add_milimeters; PersistenceData.TravelDistance_highRes += add_milimeters;
switch (globals.systemStatus) switch (globals.systemStatus)
{ {
@ -18,18 +18,18 @@ void RunLubeApp(uint32_t add_milimeters)
break; break;
case sysStat_Normal: case sysStat_Normal:
if (TravelDistance_highRes / 1000 > LubeConfig.DistancePerLube_Default) if (PersistenceData.TravelDistance_highRes / 1000 > LubeConfig.DistancePerLube_Default)
{ {
LubePulse(); LubePulse();
TravelDistance_highRes = 0; PersistenceData.TravelDistance_highRes = 0;
} }
break; break;
case sysStat_Rain: case sysStat_Rain:
if (TravelDistance_highRes / 1000 > LubeConfig.DistancePerLube_Rain) if (PersistenceData.TravelDistance_highRes / 1000 > LubeConfig.DistancePerLube_Rain)
{ {
LubePulse(); LubePulse();
TravelDistance_highRes = 0; PersistenceData.TravelDistance_highRes = 0;
} }
break; break;
case sysStat_Purge: case sysStat_Purge:

View File

@ -61,12 +61,14 @@ void Button_Process();
void toggleWiFiAP(boolean shutdown = false); void toggleWiFiAP(boolean shutdown = false);
void SystemShutdown(); void SystemShutdown();
uint32_t Process_Impulse_WheelSpeed(); uint32_t Process_Impulse_WheelSpeed();
void EEPROMCyclicPDS_callback();
#ifdef WIFI_CLIENT #ifdef WIFI_CLIENT
void wifiMaintainConnectionTicker_callback(); void wifiMaintainConnectionTicker_callback();
Ticker WiFiMaintainConnectionTicker(wifiMaintainConnectionTicker_callback, 1000, 0, MILLIS); Ticker WiFiMaintainConnectionTicker(wifiMaintainConnectionTicker_callback, 1000, 0, MILLIS);
#endif #endif
Ticker UpdateWebUITicker(updateWebUITicker_callback, 5000, 0, MILLIS); Ticker UpdateWebUITicker(updateWebUITicker_callback, 5000, 0, MILLIS);
Ticker EEPROMCyclicPDSTicker(EEPROMCyclicPDS_callback, 60000, 0, MILLIS);
void setup() void setup()
{ {
@ -155,8 +157,7 @@ void setup()
ArduinoOTA.begin(); ArduinoOTA.begin();
u8x8.clearDisplay(); u8x8.clearDisplay();
u8x8.drawString(4, 0, "Souko's"); u8x8.drawString(0, 0, "KTM ChainLube V1");
u8x8.drawString(1, 1, "ChainLube Mk1");
u8x8.refreshDisplay(); u8x8.refreshDisplay();
#if PCB_REVISION >= 13 #if PCB_REVISION >= 13
@ -165,6 +166,7 @@ void setup()
initWebUI(); initWebUI();
UpdateWebUITicker.start(); UpdateWebUITicker.start();
EEPROMCyclicPDSTicker.start();
Serial.println("Setup Done"); Serial.println("Setup Done");
} }
@ -188,6 +190,7 @@ void loop()
RunLubeApp(wheelDistance); RunLubeApp(wheelDistance);
UpdateWebUITicker.update(); UpdateWebUITicker.update();
EEPROMCyclicPDSTicker.update();
Display_Process(); Display_Process();
Button_Process(); Button_Process();
LED_Process(); LED_Process();
@ -298,7 +301,7 @@ void RemoteDebug_dumpPersistance()
{ {
debugA("writeCycleCounter: %d", PersistenceData.writeCycleCounter); debugA("writeCycleCounter: %d", PersistenceData.writeCycleCounter);
debugA("tankRemain_µl: %d", PersistenceData.tankRemain_µl); debugA("tankRemain_µl: %d", PersistenceData.tankRemain_µl);
debugA("distanceTraveled_m: %d", PersistenceData.distanceTraveled_m); debugA("TravelDistance_highRes: %d", PersistenceData.TravelDistance_highRes);
debugA("checksum: %d", PersistenceData.checksum); debugA("checksum: %d", PersistenceData.checksum);
} }
@ -366,6 +369,11 @@ void updateWebUITicker_callback()
UpdateWebUI(); UpdateWebUI();
} }
void EEPROMCyclicPDS_callback()
{
StorePersistence_EEPROM();
}
void trigger_ISR() void trigger_ISR()
{ {
wheel_pulse++; wheel_pulse++;
@ -528,7 +536,7 @@ void LED_Process(uint8_t override, CRGB SetColor)
void Display_Process() void Display_Process()
{ {
u8x8.setCursor(0, 2); u8x8.setCursor(0, 1);
uint32_t DistRemain = globals.systemStatus == sysStat_Normal ? LubeConfig.DistancePerLube_Default : LubeConfig.DistancePerLube_Rain; uint32_t DistRemain = globals.systemStatus == sysStat_Normal ? LubeConfig.DistancePerLube_Default : LubeConfig.DistancePerLube_Rain;
DistRemain -= TravelDistance_highRes / 1000; DistRemain -= TravelDistance_highRes / 1000;
u8x8.printf("Mode: %10s\n", globals.systemStatustxt); u8x8.printf("Mode: %10s\n", globals.systemStatustxt);
@ -538,6 +546,7 @@ void Display_Process()
: WiFi.getMode() == WIFI_STA ? "CLIENT" : WiFi.getMode() == WIFI_STA ? "CLIENT"
: "UNKNOWN")); : "UNKNOWN"));
u8x8.printf("Source: %8s\n", SpeedSourceString[LubeConfig.SpeedSource]); u8x8.printf("Source: %8s\n", SpeedSourceString[LubeConfig.SpeedSource]);
u8x8.printf("EE_PDS: %6d s\n", EEPROMCyclicPDSTicker.remaining() / 1000);
u8x8.refreshDisplay(); u8x8.refreshDisplay();
} }