Assembly and FDIR updates #572

Merged
meggert merged 7 commits from bugfix_syrlinks into develop 2023-04-05 17:02:51 +02:00
5 changed files with 46 additions and 7 deletions
Showing only changes of commit 36d5f8fd31 - Show all commits

View File

@ -25,6 +25,12 @@ will consitute of a breaking change warranting a new major release:
- Syrlinks assembly
- Dual Lane Assembly
## Fixed
- Dual lane assemblies: Fix handling when health states are overwritten. Also add better handling
when some devices are permanent faulty and some are only faulty. In that case, only the faulty
devices will be restored.
# [v1.43.1] 2023-04-04
## Fixed

View File

@ -267,12 +267,45 @@ ReturnValue_t AcsBoardAssembly::checkAndHandleHealthStates(Mode_t commandedMode,
HealthState h1 = healthHelper.healthTable->getHealth(o1);
HealthState h2 = healthHelper.healthTable->getHealth(o2);
HealthState h3 = healthHelper.healthTable->getHealth(o3);
// All device are faulty or permanent faulty, but this is a safe mode assembly, so we need
// to restore the devices.
if ((h0 == FAULTY or h0 == PERMANENT_FAULTY) and (h1 == FAULTY or h1 == PERMANENT_FAULTY) and
(h2 == FAULTY or h2 == PERMANENT_FAULTY) and (h3 == FAULTY or h3 == PERMANENT_FAULTY)) {
overwriteDeviceHealth(o0, h0);
overwriteDeviceHealth(o1, h1);
overwriteDeviceHealth(o2, h2);
overwriteDeviceHealth(o3, h3);
uint8_t numPermFaulty = 0;
if (h0 == PERMANENT_FAULTY) {
numPermFaulty++;
}
if (h1 == PERMANENT_FAULTY) {
numPermFaulty++;
}
if (h2 == PERMANENT_FAULTY) {
numPermFaulty++;
}
if (h3 == PERMANENT_FAULTY) {
numPermFaulty++;
}
if (numPermFaulty < 4) {
// Some are faulty and some are permanent faulty, so only set faulty ones to
// EXTERNAL_CONTROL.
if (h0 == FAULTY) {
overwriteDeviceHealth(o0, h0);
}
if (h1 == FAULTY) {
overwriteDeviceHealth(o0, h0);
meggert marked this conversation as resolved
Review

copy pasta

copy pasta
}
if (h2 == FAULTY) {
overwriteDeviceHealth(o0, h0);
meggert marked this conversation as resolved
Review

copy pasta

copy pasta
}
if (h3 == FAULTY) {
overwriteDeviceHealth(o0, h0);
meggert marked this conversation as resolved
Review

copy pasta

copy pasta
}
} else {
// All permanent faulty, so set all to EXTERNAL_CONTROL
overwriteDeviceHealth(o0, h0);
overwriteDeviceHealth(o1, h1);
overwriteDeviceHealth(o2, h2);
overwriteDeviceHealth(o3, h3);
}
healthNeedsToBeOverwritten = true;
}
if (h0 == EXTERNAL_CONTROL or h1 == EXTERNAL_CONTROL or h2 == EXTERNAL_CONTROL or

View File

@ -117,7 +117,7 @@ ReturnValue_t DualLaneAssemblyBase::isModeCombinationValid(Mode_t mode, Submode_
if (mode != MODE_OFF and (submode != A_SIDE and submode != B_SIDE and submode != DUAL_MODE)) {
return HasModesIF::INVALID_SUBMODE;
}
if(mode == MODE_OFF and submode != SUBMODE_NONE) {
if (mode == MODE_OFF and submode != SUBMODE_NONE) {
return HasModesIF::INVALID_SUBMODE;
}
return returnvalue::OK;

View File

@ -35,7 +35,7 @@ ReturnValue_t ImtqAssembly::checkChildrenStateOn(Mode_t wantedMode, Submode_t wa
ReturnValue_t ImtqAssembly::isModeCombinationValid(Mode_t mode, Submode_t submode) {
if (mode == MODE_ON or mode == DeviceHandlerIF::MODE_NORMAL or mode == MODE_OFF) {
if(submode != SUBMODE_NONE) {
if (submode != SUBMODE_NONE) {
return HasModesIF::INVALID_SUBMODE;
}
return returnvalue::OK;

View File

@ -41,7 +41,7 @@ ReturnValue_t SyrlinksAssembly::isModeCombinationValid(Mode_t mode, Submode_t su
}
return returnvalue::OK;
}
if(mode == MODE_OFF and submode != SUBMODE_NONE) {
if (mode == MODE_OFF and submode != SUBMODE_NONE) {
return HasModesIF::INVALID_SUBMODE;
}
return returnvalue::OK;