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

View File

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

View File

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

View File

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

View File

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