diff --git a/Software/ChainLube/data/index.htm b/Software/ChainLube/data/index.htm index 6c3f68b..48e9237 100644 --- a/Software/ChainLube/data/index.htm +++ b/Software/ChainLube/data/index.htm @@ -432,6 +432,10 @@ TravelDistance_highRes %TRAVEL_DISTANCE_HIGHRES% + + Odometer + %ODOMETER%,%ODOMETER_M% + checksum %PERSISTANCE_CHECKSUM% diff --git a/Software/ChainLube/src/config.cpp b/Software/ChainLube/src/config.cpp index fa8e821..85642b2 100644 --- a/Software/ChainLube/src/config.cpp +++ b/Software/ChainLube/src/config.cpp @@ -144,12 +144,18 @@ void FormatPersistence_EEPROM() void MovePersistencePage_EEPROM(boolean reset) { - eePersistenceMarker = reset ? sizeof(PersistenceData) : eePersistenceMarker + sizeof(PersistenceData); - PersistenceData.writeCycleCounter = 0; - if (!checkEEPROMavailable()) return; + eePersistenceMarker = eePersistenceMarker + 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; + } + ee.updateByte(0, (uint8_t)(eePersistenceMarker >> 8)); ee.updateByte(1, (uint8_t)(eePersistenceMarker & 0xFF)); } diff --git a/Software/ChainLube/src/config.h b/Software/ChainLube/src/config.h index 819e44a..a866327 100644 --- a/Software/ChainLube/src/config.h +++ b/Software/ChainLube/src/config.h @@ -64,7 +64,9 @@ typedef struct { uint16_t writeCycleCounter = 0; uint32_t tankRemain_µl = 0; - uint32_t TravelDistance_highRes = 0; + uint32_t TravelDistance_highRes_mm = 0; + uint32_t odometer_mm = 0; + uint32_t odometer = 0; uint32_t checksum = 0; } persistenceData_t; diff --git a/Software/ChainLube/src/lubeapp.cpp b/Software/ChainLube/src/lubeapp.cpp index f824c8f..45df04d 100644 --- a/Software/ChainLube/src/lubeapp.cpp +++ b/Software/ChainLube/src/lubeapp.cpp @@ -11,7 +11,13 @@ void RunLubeApp(uint32_t add_milimeters) globals.systemStatus = sysStat_Error; // Add traveled Distance in mm - PersistenceData.TravelDistance_highRes += add_milimeters; + PersistenceData.TravelDistance_highRes_mm += add_milimeters; + PersistenceData.odometer_mm += add_milimeters; + if (PersistenceData.odometer_mm >= 1000000) + { + PersistenceData.odometer++; + PersistenceData.odometer_mm = 0; + } switch (globals.systemStatus) { @@ -24,18 +30,18 @@ void RunLubeApp(uint32_t add_milimeters) break; case sysStat_Normal: - if (PersistenceData.TravelDistance_highRes / 1000 > LubeConfig.DistancePerLube_Default) + if (PersistenceData.TravelDistance_highRes_mm / 1000 > LubeConfig.DistancePerLube_Default) { LubePulse(); - PersistenceData.TravelDistance_highRes = 0; + PersistenceData.TravelDistance_highRes_mm = 0; } break; case sysStat_Rain: - if (PersistenceData.TravelDistance_highRes / 1000 > LubeConfig.DistancePerLube_Rain) + if (PersistenceData.TravelDistance_highRes_mm / 1000 > LubeConfig.DistancePerLube_Rain) { LubePulse(); - PersistenceData.TravelDistance_highRes = 0; + PersistenceData.TravelDistance_highRes_mm = 0; } break; case sysStat_Purge: diff --git a/Software/ChainLube/src/main.cpp b/Software/ChainLube/src/main.cpp index 6180509..2cb9c53 100644 --- a/Software/ChainLube/src/main.cpp +++ b/Software/ChainLube/src/main.cpp @@ -338,7 +338,7 @@ void RemoteDebug_dumpPersistance() { debugA("writeCycleCounter: %d", PersistenceData.writeCycleCounter); debugA("tankRemain_µl: %d", PersistenceData.tankRemain_µl); - debugA("TravelDistance_highRes: %d", PersistenceData.TravelDistance_highRes); + debugA("TravelDistance_highRes_mm: %d", PersistenceData.TravelDistance_highRes_mm); debugA("checksum: %d", PersistenceData.checksum); debugA("PSD Adress: 0x%04X", getPersistanceAddress()); } @@ -415,7 +415,6 @@ void trigger_ISR() void LED_Process(uint8_t override, CRGB SetColor) { - typedef enum { LED_Startup, diff --git a/Software/ChainLube/src/webui.cpp b/Software/ChainLube/src/webui.cpp index b081cbb..18a5df1 100644 --- a/Software/ChainLube/src/webui.cpp +++ b/Software/ChainLube/src/webui.cpp @@ -74,7 +74,11 @@ String processor(const String &var) if (var == "TANK_REMAIN_UL") return String(PersistenceData.tankRemain_µl); if (var == "TRAVEL_DISTANCE_HIGHRES") - return String(PersistenceData.TravelDistance_highRes); + return String(PersistenceData.TravelDistance_highRes_mm); + if (var == "ODOMETER") + return String(PersistenceData.odometer); + if (var == "ODOMETER_M") + return String(PersistenceData.odometer_mm / 1000); if (var == "PERSISTANCE_CHECKSUM") { char buffer[7];