diff --git a/Software/data_src/static/tt_dtc/dtc_13.json b/Software/data_src/static/tt_dtc/dtc_13.json new file mode 100644 index 0000000..f7fea72 --- /dev/null +++ b/Software/data_src/static/tt_dtc/dtc_13.json @@ -0,0 +1,4 @@ +{ + "title": "Config-Validierung", + "description": "Ein oder mehrer Einstellungswerte waren ausserhalb gültiger Werte. Diese wurden automatisch korrigiert. Prüfen Sie Ihre Einstellungen" +} \ No newline at end of file diff --git a/Software/src/config.cpp b/Software/src/config.cpp index 2c173ef..481a8f6 100644 --- a/Software/src/config.cpp +++ b/Software/src/config.cpp @@ -88,6 +88,12 @@ void GetConfig_EEPROM() MaintainDTC(DTC_EEPROM_CFG_BAD, DTC_CRITICAL, true); } LubeConfig.checksum = checksum; + + if (!ConfigSanityCheck(true)) + { + MaintainDTC(DTC_EEPROM_CFG_SANITY, DTC_WARN, true); + globals.requestEEAction = EE_CFG_SAVE; + } } void StorePersistence_EEPROM() @@ -230,4 +236,112 @@ boolean checkEEPROMavailable() } MaintainDTC(DTC_NO_EEPROM_FOUND, DTC_CRITICAL, false); return true; +} + +bool ConfigSanityCheck(bool autocorrect) +{ + bool allvalid = true; + + if (!(LubeConfig.DistancePerLube_Default > 0) || !(LubeConfig.DistancePerLube_Default < 50000)) + { + allvalid = false; + if (autocorrect) + LubeConfig.DistancePerLube_Default = LubeConfig_defaults.DistancePerLube_Default; + } + + if (!(LubeConfig.DistancePerLube_Rain > 0) || !(LubeConfig.DistancePerLube_Rain < 50000)) + { + allvalid = false; + if (autocorrect) + LubeConfig.DistancePerLube_Rain = LubeConfig_defaults.DistancePerLube_Rain; + } + + if (!(LubeConfig.tankCapacity_ml > 0) || !(LubeConfig.tankCapacity_ml < 5000)) + { + allvalid = false; + if (autocorrect) + LubeConfig.tankCapacity_ml = LubeConfig_defaults.tankCapacity_ml; + } + + if (!(LubeConfig.amountPerDose_µl > 0) || !(LubeConfig.amountPerDose_µl < 100)) + { + allvalid = false; + if (autocorrect) + LubeConfig.amountPerDose_µl = LubeConfig_defaults.amountPerDose_µl; + } + + if (!(LubeConfig.TankRemindAtPercentage >= 0) || !(LubeConfig.TankRemindAtPercentage <= 100)) + { + allvalid = false; + if (autocorrect) + LubeConfig.TankRemindAtPercentage = LubeConfig_defaults.TankRemindAtPercentage; + } + + if (!(LubeConfig.PulsePerRevolution > 0) || !(LubeConfig.PulsePerRevolution < 1000)) + { + allvalid = false; + if (autocorrect) + LubeConfig.PulsePerRevolution = LubeConfig_defaults.PulsePerRevolution; + } + + if (!(LubeConfig.TireWidth_mm > 0) || !(LubeConfig.TireWidth_mm < 500)) + { + allvalid = false; + if (autocorrect) + LubeConfig.TireWidth_mm = LubeConfig_defaults.TireWidth_mm; + } + + if (!(LubeConfig.TireWidthHeight_Ratio > 0) || !(LubeConfig.TireWidthHeight_Ratio < 150)) + { + allvalid = false; + if (autocorrect) + LubeConfig.TireWidthHeight_Ratio = LubeConfig_defaults.TireWidthHeight_Ratio; + } + + if (!(LubeConfig.RimDiameter_Inch > 0) || !(LubeConfig.RimDiameter_Inch < 30)) + { + allvalid = false; + if (autocorrect) + LubeConfig.RimDiameter_Inch = LubeConfig_defaults.RimDiameter_Inch; + } + + if (!(LubeConfig.DistancePerRevolution_mm > 0) || !(LubeConfig.DistancePerRevolution_mm < 10000)) + { + allvalid = false; + if (autocorrect) + LubeConfig.DistancePerRevolution_mm = LubeConfig_defaults.DistancePerRevolution_mm; + } + + if (!(LubeConfig.BleedingPulses > 0) || !(LubeConfig.BleedingPulses < 1001)) + { + allvalid = false; + if (autocorrect) + LubeConfig.BleedingPulses = LubeConfig_defaults.BleedingPulses; + } + + if (!(LubeConfig.SpeedSource >= 0) || !(LubeConfig.SpeedSource < SpeedSourceString_Elements)) + { + allvalid = false; + if (autocorrect) + LubeConfig.SpeedSource = LubeConfig_defaults.SpeedSource; + } + +#ifdef FEATURE_ENABLE_GPS + if (!(LubeConfig.GPSBaudRate >= 0) || !(LubeConfig.GPSBaudRate < GPSBaudRateString_Elements)) + { + allvalid = false; + if (autocorrect) + LubeConfig.GPSBaudRate = LubeConfig_defaults.GPSBaudRate; + } +#endif + +#ifdef FEATURE_ENABLE_CAN + if (!(LubeConfig.CANSource >= 0) || !(LubeConfig.CANSource < CANSourceString_Elements)) + { + allvalid = false; + if (autocorrect) + LubeConfig.CANSource = LubeConfig_defaults.CANSource; + } +#endif + return allvalid; } \ No newline at end of file diff --git a/Software/src/config.h b/Software/src/config.h index 796d6d4..b501a62 100644 --- a/Software/src/config.h +++ b/Software/src/config.h @@ -116,6 +116,7 @@ void FormatPersistence_EEPROM(); uint32_t Checksum_EEPROM(uint8_t const *data, size_t len); void dumpEEPROM(uint16_t memoryAddress, uint16_t length); void MovePersistencePage_EEPROM(boolean reset); +bool ConfigSanityCheck(bool autocorrect = false); extern LubeConfig_t LubeConfig; extern persistenceData_t PersistenceData; diff --git a/Software/src/dtc.h b/Software/src/dtc.h index f00fe55..167163f 100644 --- a/Software/src/dtc.h +++ b/Software/src/dtc.h @@ -23,6 +23,7 @@ typedef enum DTCNums_e DTC_CAN_TRANSCEIVER_FAILED, DTC_NO_CAN_SIGNAL, #endif + DTC_EEPROM_CFG_SANITY, DTC_LAST_DTC } DTCNums_t;