From 2b5039b8ab60c52e07ee101232c2148fdc22b3eb Mon Sep 17 00:00:00 2001 From: Marcel Peterkau Date: Mon, 2 May 2022 20:29:17 +0200 Subject: [PATCH] changed EEPROM-Stuff and added DTC if EE-Ver changed --- Software/ChainLube/src/can.cpp | 2 +- Software/ChainLube/src/config.cpp | 84 +++++++++++++------------------ Software/ChainLube/src/config.h | 3 +- Software/ChainLube/src/dtc.h | 1 + 4 files changed, 39 insertions(+), 51 deletions(-) diff --git a/Software/ChainLube/src/can.cpp b/Software/ChainLube/src/can.cpp index 2901cb4..b03a300 100644 --- a/Software/ChainLube/src/can.cpp +++ b/Software/ChainLube/src/can.cpp @@ -38,7 +38,7 @@ uint32_t Process_CAN_WheelSpeed() return milimeters_to_add; } - MaintainDTC(DTC_NO_CAN_SIGNAL, (millis() > lastRecTimestamp + 10000)); + MaintainDTC(DTC_NO_CAN_SIGNAL, (millis() > lastRecTimestamp + 10000 ? true : false)); return 0; } diff --git a/Software/ChainLube/src/config.cpp b/Software/ChainLube/src/config.cpp index 3ac8af2..fa8e821 100644 --- a/Software/ChainLube/src/config.cpp +++ b/Software/ChainLube/src/config.cpp @@ -1,28 +1,36 @@ #include "config.h" -#if PCB_REVISION >= 12 I2C_eeprom ee(0x50, EEPROM_SIZE_BYTES); -#endif LubeConfig_t LubeConfig; persistenceData_t PersistenceData; uint16_t eePersistenceMarker = 0; -uint16_t eeVersion = 0; // inc +const uint16_t eeVersion = 1; // inc boolean eeAvailable = false; const uint16_t startofLubeConfig = 16; const uint16_t startofPersistence = 16 + sizeof(LubeConfig) + (sizeof(LubeConfig) % 16); -#if PCB_REVISION >= 12 +boolean checkEEPROMavailable(); + void InitEEPROM() { ee.begin(); - if (!ee.isConnected()) + if (!checkEEPROMavailable()) { - MaintainDTC(DTC_NO_EEPROM_FOUND, true); + globals.systemStatus = sysStat_Error; + return; + } + GetConfig_EEPROM(); + + if (LubeConfig.EEPROM_Version != eeVersion) + { + FormatConfig_EEPROM(); + globals.systemStatus = sysStat_Error; + MaintainDTC(DTC_EEPROM_VERSION_BAD, true); + return; } } -#endif void EEPROM_Process() { @@ -55,29 +63,18 @@ void StoreConfig_EEPROM() { LubeConfig.checksum = 0; LubeConfig.checksum = Checksum_EEPROM((uint8_t *)&LubeConfig, sizeof(LubeConfig)); -#if PCB_REVISION >= 12 - if (!ee.isConnected()) + if (!checkEEPROMavailable()) return; + ee.updateBlock(startofLubeConfig, (uint8_t *)&LubeConfig, sizeof(LubeConfig)); -#else - EEPROM.begin(512); - EEPROM.put(startofLubeConfig, LubeConfig); - EEPROM.commit(); - EEPROM.end(); -#endif } void GetConfig_EEPROM() { -#if PCB_REVISION >= 12 - if (!ee.isConnected()) + if (!checkEEPROMavailable()) return; + ee.readBlock(startofLubeConfig, (uint8_t *)&LubeConfig, sizeof(LubeConfig)); -#else - EEPROM.begin(512); - EEPROM.get(startofLubeConfig, LubeConfig); - EEPROM.end(); -#endif uint32_t checksum = LubeConfig.checksum; LubeConfig.checksum = 0; @@ -105,34 +102,19 @@ void StorePersistence_EEPROM() PersistenceData.checksum = 0; PersistenceData.checksum = Checksum_EEPROM((uint8_t *)&PersistenceData, sizeof(PersistenceData)); -#if PCB_REVISION >= 12 - if (!ee.isConnected()) + if (!checkEEPROMavailable()) return; + ee.updateBlock(getPersistanceAddress(), (uint8_t *)&PersistenceData, sizeof(PersistenceData)); -#else - EEPROM.put(getPersistanceAddress(), PersistenceData); - EEPROM.commit(); - EEPROM.end(); -#endif } void GetPersistence_EEPROM() { -#if PCB_REVISION >= 12 - if (!ee.isConnected()) + if (!checkEEPROMavailable()) return; - eePersistenceMarker = (ee.readByte(0) << 8) | ee.readByte(1); -#else - EEPROM.begin(512); - EEPROM.get(0, eePersistenceMarker); -#endif -#if PCB_REVISION >= 12 + eePersistenceMarker = (ee.readByte(0) << 8) | ee.readByte(1); ee.readBlock(getPersistanceAddress(), (uint8_t *)&PersistenceData, sizeof(PersistenceData)); -#else - EEPROM.get(getPersistanceAddress(), PersistenceData); - EEPROM.end(); -#endif uint32_t checksum = PersistenceData.checksum; PersistenceData.checksum = 0; @@ -165,15 +147,11 @@ void MovePersistencePage_EEPROM(boolean reset) eePersistenceMarker = reset ? sizeof(PersistenceData) : eePersistenceMarker + sizeof(PersistenceData); PersistenceData.writeCycleCounter = 0; -#if PCB_REVISION >= 12 - if (!ee.isConnected()) + if (!checkEEPROMavailable()) return; + ee.updateByte(0, (uint8_t)(eePersistenceMarker >> 8)); ee.updateByte(1, (uint8_t)(eePersistenceMarker & 0xFF)); -#else - EEPROM.begin(512); - EEPROM.put(0, eePersistenceMarker); -#endif } uint32_t Checksum_EEPROM(uint8_t const *data, size_t len) @@ -199,7 +177,7 @@ void dumpEEPROM(uint16_t memoryAddress, uint16_t length) { #define BLOCK_TO_LENGTH 16 - if (!ee.isConnected()) + if (!checkEEPROMavailable()) return; char ascii_buf[BLOCK_TO_LENGTH + 1]; @@ -227,4 +205,14 @@ void dumpEEPROM(uint16_t memoryAddress, uint16_t length) memoryAddress++; } Serial.println(); +} + +boolean checkEEPROMavailable() +{ + if (!ee.isConnected()) + { + MaintainDTC(DTC_NO_EEPROM_FOUND, true); + return false; + } + return true; } \ No newline at end of file diff --git a/Software/ChainLube/src/config.h b/Software/ChainLube/src/config.h index 1ab7bc1..1bbdca2 100644 --- a/Software/ChainLube/src/config.h +++ b/Software/ChainLube/src/config.h @@ -69,6 +69,7 @@ typedef struct typedef struct { + uint8_t EEPROM_Version = 0; uint32_t DistancePerLube_Default = 8000; uint32_t DistancePerLube_Rain = 4000; uint32_t tankCapacity_ml = 320; @@ -88,9 +89,7 @@ typedef struct uint32_t checksum = 0; } LubeConfig_t; -#if PCB_REVISION >= 12 void InitEEPROM(); -#endif void EEPROM_Process(); void StoreConfig_EEPROM(); void GetConfig_EEPROM(); diff --git a/Software/ChainLube/src/dtc.h b/Software/ChainLube/src/dtc.h index f0627d3..6538d51 100644 --- a/Software/ChainLube/src/dtc.h +++ b/Software/ChainLube/src/dtc.h @@ -12,6 +12,7 @@ typedef enum DTCNums_e DTC_NO_EEPROM_FOUND, DTC_EEPROM_CFG_BAD, DTC_EEPROM_PDS_BAD, + DTC_EEPROM_VERSION_BAD, DTC_CAN_TRANSCEIVER_FAILED, DTC_NO_CAN_SIGNAL, DTC_LAST_DTC