From 055183ce903a10a17b8a11887db56a6a55a8fa37 Mon Sep 17 00:00:00 2001 From: Marcel Peterkau Date: Fri, 4 Feb 2022 22:26:26 +0100 Subject: [PATCH] PersistenceData gets stored cyclic now. --- Software/ChainLube/src/config.cpp | 8 ++++---- Software/ChainLube/src/config.h | 2 +- Software/ChainLube/src/globals.h | 1 - Software/ChainLube/src/lubeapp.cpp | 10 +++++----- Software/ChainLube/src/main.cpp | 17 +++++++++++++---- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/Software/ChainLube/src/config.cpp b/Software/ChainLube/src/config.cpp index dcebb32..67710c8 100644 --- a/Software/ChainLube/src/config.cpp +++ b/Software/ChainLube/src/config.cpp @@ -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++; diff --git a/Software/ChainLube/src/config.h b/Software/ChainLube/src/config.h index 9e20c41..0b6e4d9 100644 --- a/Software/ChainLube/src/config.h +++ b/Software/ChainLube/src/config.h @@ -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; diff --git a/Software/ChainLube/src/globals.h b/Software/ChainLube/src/globals.h index ec9a412..fd6111f 100644 --- a/Software/ChainLube/src/globals.h +++ b/Software/ChainLube/src/globals.h @@ -32,6 +32,5 @@ typedef struct Globals_s } Globals_t; extern Globals_t globals; -extern uint32_t TravelDistance_highRes; #endif \ No newline at end of file diff --git a/Software/ChainLube/src/lubeapp.cpp b/Software/ChainLube/src/lubeapp.cpp index fe935bb..3a813f4 100644 --- a/Software/ChainLube/src/lubeapp.cpp +++ b/Software/ChainLube/src/lubeapp.cpp @@ -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: diff --git a/Software/ChainLube/src/main.cpp b/Software/ChainLube/src/main.cpp index 886db11..044a39a 100644 --- a/Software/ChainLube/src/main.cpp +++ b/Software/ChainLube/src/main.cpp @@ -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(); }