proper post reset handling for PDEC reset
All checks were successful
EIVE/eive-obsw/pipeline/pr-develop This commit looks good
All checks were successful
EIVE/eive-obsw/pipeline/pr-develop This commit looks good
This commit is contained in:
parent
644a768778
commit
62d18826f1
@ -107,18 +107,7 @@ ReturnValue_t PdecHandler::firstLoop() {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This configuration must be done while the PDEC is not held in reset.
|
return postResetOperation();
|
||||||
if (OP_MODE == Modes::IRQ) {
|
|
||||||
// Configure interrupt mask register to enable interrupts
|
|
||||||
*(registerBaseAddress + PDEC_IMR_OFFSET) = pdecConfig.getImrReg();
|
|
||||||
}
|
|
||||||
result = resetFarStatFlag();
|
|
||||||
if (result != returnvalue::OK) {
|
|
||||||
// Requires reconfiguration and reinitialization of PDEC
|
|
||||||
triggerEvent(INVALID_FAR);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
return returnvalue::OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ReturnValue_t PdecHandler::performOperation(uint8_t operationCode) {
|
ReturnValue_t PdecHandler::performOperation(uint8_t operationCode) {
|
||||||
@ -785,6 +774,27 @@ void PdecHandler::pdecResetNoInit() {
|
|||||||
pdecToReset();
|
pdecToReset();
|
||||||
usleep(20);
|
usleep(20);
|
||||||
releasePdec();
|
releasePdec();
|
||||||
|
ReturnValue_t result = postResetOperation();
|
||||||
|
if (result != returnvalue::OK) {
|
||||||
|
// What can we really do here? Event was already triggered if this is due to the FAR flag
|
||||||
|
// not being reset.
|
||||||
|
sif::error << "PdecHandler::pdecResetNoInit: Post reset operation failed unexpectedly"
|
||||||
|
<< std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ReturnValue_t PdecHandler::postResetOperation() {
|
||||||
|
// This configuration must be done while the PDEC is not held in reset.
|
||||||
|
if (OP_MODE == Modes::IRQ) {
|
||||||
|
// Configure interrupt mask register to enable interrupts
|
||||||
|
*(registerBaseAddress + PDEC_IMR_OFFSET) = pdecConfig.getImrReg();
|
||||||
|
}
|
||||||
|
ReturnValue_t result = resetFarStatFlag();
|
||||||
|
if (result != returnvalue::OK) {
|
||||||
|
// Requires reconfiguration and reinitialization of PDEC
|
||||||
|
triggerEvent(INVALID_FAR);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string PdecHandler::getMonStatusString(uint32_t status) {
|
std::string PdecHandler::getMonStatusString(uint32_t status) {
|
||||||
|
@ -365,6 +365,8 @@ class PdecHandler : public SystemObject,
|
|||||||
|
|
||||||
void pdecResetNoInit();
|
void pdecResetNoInit();
|
||||||
|
|
||||||
|
ReturnValue_t postResetOperation();
|
||||||
|
|
||||||
void initFailedHandler(ReturnValue_t reason);
|
void initFailedHandler(ReturnValue_t reason);
|
||||||
|
|
||||||
std::string getMonStatusString(uint32_t status);
|
std::string getMonStatusString(uint32_t status);
|
||||||
|
@ -278,11 +278,14 @@ ReturnValue_t EiveSystem::sendFullRebootCommand() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EiveSystem::pdecRecoveryLogic() {
|
void EiveSystem::pdecRecoveryLogic() {
|
||||||
|
if (ptmeResetWasAttempted and ptmeResetWasAttemptedCd.hasTimedOut()) {
|
||||||
|
ptmeResetWasAttempted = false;
|
||||||
|
}
|
||||||
if (frameDirtyCheckCd.hasTimedOut()) {
|
if (frameDirtyCheckCd.hasTimedOut()) {
|
||||||
if (frameDirtyErrorCounter >= 4) {
|
if (frameDirtyErrorCounter >= 4) {
|
||||||
// If a PTME reset was already attempted and there is still an issue receiving TC frames,
|
// If a PTME reset was already attempted and there is still an issue receiving TC frames,
|
||||||
// reboot the system.
|
// reboot the system.
|
||||||
if (ptmeResetWasAttemptedCd.isBusy()) {
|
if (ptmeResetWasAttempted) {
|
||||||
// Send reboot command.
|
// Send reboot command.
|
||||||
sendFullRebootCommand();
|
sendFullRebootCommand();
|
||||||
} else {
|
} else {
|
||||||
@ -292,6 +295,7 @@ void EiveSystem::pdecRecoveryLogic() {
|
|||||||
ActionMessage::setCommand(&msg, pdec::RESET_PDEC_WITH_REINIITALIZATION, dummy);
|
ActionMessage::setCommand(&msg, pdec::RESET_PDEC_WITH_REINIITALIZATION, dummy);
|
||||||
commandQueue->sendMessage(pdecHandlerQueueId, &msg);
|
commandQueue->sendMessage(pdecHandlerQueueId, &msg);
|
||||||
ptmeResetWasAttemptedCd.resetTimer();
|
ptmeResetWasAttemptedCd.resetTimer();
|
||||||
|
ptmeResetWasAttempted = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
frameDirtyErrorCounter = 0;
|
frameDirtyErrorCounter = 0;
|
||||||
|
@ -40,6 +40,7 @@ class EiveSystem : public Subsystem, public HasActionsIF {
|
|||||||
// If the PDEC reset was already attempted in the last 2 minutes, there is a high chance that
|
// If the PDEC reset was already attempted in the last 2 minutes, there is a high chance that
|
||||||
// only a full reboot will fix the issue.
|
// only a full reboot will fix the issue.
|
||||||
Countdown ptmeResetWasAttemptedCd = Countdown(120000);
|
Countdown ptmeResetWasAttemptedCd = Countdown(120000);
|
||||||
|
bool ptmeResetWasAttempted = false;
|
||||||
|
|
||||||
ActionHelper actionHelper;
|
ActionHelper actionHelper;
|
||||||
PowerSwitchIF* powerSwitcher = nullptr;
|
PowerSwitchIF* powerSwitcher = nullptr;
|
||||||
|
2
tmtc
2
tmtc
@ -1 +1 @@
|
|||||||
Subproject commit 183cd859073899d7f4d7a2f485eacd17d774fe50
|
Subproject commit 63c584e061a8e0d27189d66fb3ac1c48d011afe7
|
Loading…
Reference in New Issue
Block a user