diff --git a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_HighLevel.c b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_HighLevel.c index fc81f66..35b9bd1 100644 --- a/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_HighLevel.c +++ b/AMS_Master_Code/Core/Lib/ADBMS6830B_Driver/Core/Src/ADBMS_HighLevel.c @@ -46,6 +46,8 @@ ADBMS_DetailedStatus AMS_Init(SPI_HandleTypeDef* hspi) { } pollingTimes = (struct pollingTimes){HAL_GetTick(), HAL_GetTick()}; + packetChecksumFails = 0; + deviceSleeps = 0; return NO_ERROR; } @@ -59,7 +61,7 @@ ADBMS_DetailedStatus AMS_Init(SPI_HandleTypeDef* hspi) { break; \ } \ } \ - first_match; \ + first_match + 1; \ }) ADBMS_DetailedStatus AMS_Idle_Loop() { @@ -70,11 +72,11 @@ ADBMS_DetailedStatus AMS_Idle_Loop() { packetChecksumFails += (amsAuxAndStatusMeasurement(&modules) == HAL_ERROR); - static int match = 0; + int match = 0; if ((match = any(module.status.SLEEP))) { deviceSleeps++; if (deviceSleeps > MAX_DEVICE_SLEEP) { - return (ADBMS_DetailedStatus){ADBMS_INTERNAL_BMS_TIMEOUT, match}; + return (ADBMS_DetailedStatus){ADBMS_INTERNAL_BMS_TIMEOUT, match - 1}; } else { amsReset(); } @@ -86,7 +88,7 @@ ADBMS_DetailedStatus AMS_Idle_Loop() { // iteration. amsClearFlag(); - return (ADBMS_DetailedStatus){ADBMS_INTERNAL_BMS_FAULT, match}; + return (ADBMS_DetailedStatus){ADBMS_INTERNAL_BMS_FAULT, match - 1}; } packetChecksumFails += (amsCellMeasurement(&modules) == HAL_ERROR); @@ -97,16 +99,16 @@ ADBMS_DetailedStatus AMS_Idle_Loop() { } if ((match = any(module.overVoltage))) { - return (ADBMS_DetailedStatus){ADBMS_OVERVOLT, match}; + return (ADBMS_DetailedStatus){ADBMS_OVERVOLT, match - 1}; } if ((match = any(module.underVoltage))) { - return (ADBMS_DetailedStatus){ADBMS_UNDERVOLT, match}; + return (ADBMS_DetailedStatus){ADBMS_UNDERVOLT, match - 1}; } // TODO: replace with the correct threshold for the internal die temperature if ((match = any(module.internalDieTemp > 28000 || module.status.THSD))) { - return (ADBMS_DetailedStatus){ADBMS_INTERNAL_BMS_OVERTEMP, match}; + return (ADBMS_DetailedStatus){ADBMS_INTERNAL_BMS_OVERTEMP, match - 1}; } // mcuDelay(10);