2022-01-08 03:14:26 +01:00
|
|
|
#include "lubeapp.h"
|
2022-01-07 23:36:02 +01:00
|
|
|
|
2022-01-10 00:55:04 +01:00
|
|
|
uint32_t lubePulseTimestamp = 0;
|
2022-01-09 20:51:16 +01:00
|
|
|
|
2022-02-04 21:28:18 +01:00
|
|
|
void RunLubeApp(uint32_t add_milimeters)
|
2022-01-07 23:36:02 +01:00
|
|
|
{
|
2022-03-09 20:25:02 +01:00
|
|
|
|
2022-08-22 14:13:55 +02:00
|
|
|
globals.TankPercentage = PersistenceData.tankRemain_µl / (LubeConfig.tankCapacity_ml * 1000);
|
2022-03-09 20:25:02 +01:00
|
|
|
|
2022-08-22 14:13:55 +02:00
|
|
|
MaintainDTC(DTC_TANK_EMPTY, DTC_CRITICAL, (PersistenceData.tankRemain_µl < LubeConfig.amountPerDose_µl));
|
|
|
|
MaintainDTC(DTC_TANK_LOW, DTC_WARN, (globals.TankPercentage < LubeConfig.TankRemindAtPercentage));
|
2022-05-06 22:38:24 +02:00
|
|
|
|
2022-08-22 14:13:55 +02:00
|
|
|
static tSystem_Status preserverSysStatusError;
|
2022-05-27 13:33:44 +02:00
|
|
|
|
2022-08-22 14:13:55 +02:00
|
|
|
if (getlastDTC(false) < DTC_LAST_DTC)
|
2022-05-06 22:38:24 +02:00
|
|
|
{
|
2022-08-22 14:13:55 +02:00
|
|
|
globals.hasDTC = true;
|
|
|
|
if (getlastDTC_Severity(true, DTC_CRITICAL) < DTC_LAST_DTC)
|
|
|
|
{
|
|
|
|
if (globals.systemStatus != sysStat_Error)
|
|
|
|
{
|
|
|
|
preserverSysStatusError = globals.systemStatus;
|
|
|
|
}
|
|
|
|
globals.systemStatus = sysStat_Error;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (globals.systemStatus == sysStat_Error)
|
|
|
|
{
|
|
|
|
globals.systemStatus = preserverSysStatusError;
|
|
|
|
}
|
|
|
|
}
|
2022-05-06 22:38:24 +02:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2022-08-22 14:13:55 +02:00
|
|
|
globals.hasDTC = false;
|
2022-05-06 22:38:24 +02:00
|
|
|
}
|
2022-03-08 21:23:06 +01:00
|
|
|
|
2022-02-04 21:28:18 +01:00
|
|
|
// Add traveled Distance in mm
|
2022-05-05 21:07:24 +02:00
|
|
|
PersistenceData.TravelDistance_highRes_mm += add_milimeters;
|
|
|
|
PersistenceData.odometer_mm += add_milimeters;
|
|
|
|
if (PersistenceData.odometer_mm >= 1000000)
|
|
|
|
{
|
|
|
|
PersistenceData.odometer++;
|
|
|
|
PersistenceData.odometer_mm = 0;
|
|
|
|
}
|
2022-01-10 00:02:21 +01:00
|
|
|
|
|
|
|
switch (globals.systemStatus)
|
|
|
|
{
|
2022-01-10 00:55:04 +01:00
|
|
|
case sysStat_Startup:
|
2022-01-14 15:36:17 +01:00
|
|
|
if (millis() > STARTUP_DELAY)
|
|
|
|
{
|
|
|
|
globals.systemStatus = sysStat_Normal;
|
|
|
|
globals.resumeStatus = sysStat_Normal;
|
|
|
|
}
|
2022-01-10 00:55:04 +01:00
|
|
|
break;
|
|
|
|
|
2022-01-10 00:02:21 +01:00
|
|
|
case sysStat_Normal:
|
2022-05-05 21:07:24 +02:00
|
|
|
if (PersistenceData.TravelDistance_highRes_mm / 1000 > LubeConfig.DistancePerLube_Default)
|
2022-01-10 00:55:04 +01:00
|
|
|
{
|
|
|
|
LubePulse();
|
2022-05-05 21:07:24 +02:00
|
|
|
PersistenceData.TravelDistance_highRes_mm = 0;
|
2022-01-10 00:55:04 +01:00
|
|
|
}
|
2022-01-10 00:02:21 +01:00
|
|
|
break;
|
2022-01-10 00:55:04 +01:00
|
|
|
|
2022-01-10 00:02:21 +01:00
|
|
|
case sysStat_Rain:
|
2022-05-05 21:07:24 +02:00
|
|
|
if (PersistenceData.TravelDistance_highRes_mm / 1000 > LubeConfig.DistancePerLube_Rain)
|
2022-01-10 00:55:04 +01:00
|
|
|
{
|
|
|
|
LubePulse();
|
2022-05-05 21:07:24 +02:00
|
|
|
PersistenceData.TravelDistance_highRes_mm = 0;
|
2022-01-10 00:55:04 +01:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case sysStat_Purge:
|
|
|
|
if (globals.purgePulses > 0)
|
|
|
|
{
|
2022-01-12 00:52:27 +01:00
|
|
|
if (lubePulseTimestamp + LUBE_PULSE_PAUSE_MS < millis())
|
2022-01-10 00:55:04 +01:00
|
|
|
{
|
|
|
|
LubePulse();
|
|
|
|
globals.purgePulses--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
globals.systemStatus = globals.resumeStatus;
|
|
|
|
}
|
2022-01-10 00:02:21 +01:00
|
|
|
break;
|
2022-01-12 00:52:27 +01:00
|
|
|
case sysStat_Error:
|
2022-03-08 21:23:06 +01:00
|
|
|
case sysStat_Shutdown:
|
2022-01-12 00:52:27 +01:00
|
|
|
default:
|
|
|
|
break;
|
2022-01-10 00:02:21 +01:00
|
|
|
}
|
|
|
|
|
2022-01-14 15:36:17 +01:00
|
|
|
switch (globals.systemStatus)
|
|
|
|
{
|
|
|
|
case sysStat_Normal:
|
2022-08-19 00:10:42 +02:00
|
|
|
strcpy_P(globals.systemStatustxt, PSTR("Normal"));
|
2022-01-14 15:36:17 +01:00
|
|
|
break;
|
|
|
|
case sysStat_Purge:
|
2022-08-19 00:10:42 +02:00
|
|
|
strcpy_P(globals.systemStatustxt, PSTR("Purge"));
|
2022-01-14 15:36:17 +01:00
|
|
|
break;
|
|
|
|
case sysStat_Rain:
|
2022-08-19 00:10:42 +02:00
|
|
|
strcpy_P(globals.systemStatustxt, PSTR("Rain"));
|
2022-01-14 15:36:17 +01:00
|
|
|
break;
|
|
|
|
case sysStat_Startup:
|
2022-08-19 00:10:42 +02:00
|
|
|
strcpy_P(globals.systemStatustxt, PSTR("Startup"));
|
2022-01-14 15:36:17 +01:00
|
|
|
break;
|
2022-01-19 22:21:54 +01:00
|
|
|
case sysStat_Error:
|
2022-08-19 00:10:42 +02:00
|
|
|
strcpy_P(globals.systemStatustxt, PSTR("Error"));
|
2022-01-19 22:21:54 +01:00
|
|
|
break;
|
|
|
|
case sysStat_Shutdown:
|
2022-08-19 00:10:42 +02:00
|
|
|
strcpy_P(globals.systemStatustxt, PSTR("Shutdown"));
|
2022-01-19 22:21:54 +01:00
|
|
|
break;
|
2022-01-14 15:36:17 +01:00
|
|
|
}
|
|
|
|
|
2022-01-10 00:55:04 +01:00
|
|
|
// maintain Pin-State of Lube-Pump
|
2022-01-10 00:02:21 +01:00
|
|
|
if (lubePulseTimestamp > millis())
|
|
|
|
digitalWrite(GPIO_PUMP, HIGH);
|
|
|
|
else
|
|
|
|
digitalWrite(GPIO_PUMP, LOW);
|
|
|
|
}
|
2022-01-10 00:55:04 +01:00
|
|
|
|
|
|
|
void LubePulse()
|
|
|
|
{
|
2022-08-22 14:29:01 +02:00
|
|
|
if (PersistenceData.tankRemain_µl > 0) // Only Lube if theres Oil remaining!
|
|
|
|
{
|
|
|
|
lubePulseTimestamp = millis() + LUBE_PULSE_LENGHT_MS;
|
|
|
|
|
|
|
|
if (PersistenceData.tankRemain_µl < LubeConfig.amountPerDose_µl) // Prevent underrun and shiftover
|
|
|
|
PersistenceData.tankRemain_µl = 0;
|
|
|
|
else
|
|
|
|
PersistenceData.tankRemain_µl = PersistenceData.tankRemain_µl - LubeConfig.amountPerDose_µl;
|
|
|
|
}
|
2022-01-10 00:55:04 +01:00
|
|
|
}
|