fix: any macro now returns zero on no match, reset error counters on (re-)init
This commit is contained in:
parent
76a358207d
commit
a249064059
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user