fix: any macro now returns zero on no match, reset error counters on (re-)init

This commit is contained in:
Kilian Bracher 2025-03-04 17:23:48 +01:00
parent 76a358207d
commit a249064059

View File

@ -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);