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];