Assembly and FDIR updates #572

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

View File

@ -20,6 +20,10 @@ will consitute of a breaking change warranting a new major release:
- Adapted HK data rates to new table for LEOP SAFE mode. - Adapted HK data rates to new table for LEOP SAFE mode.
- GPS controller HK is now generated periodically as well. - GPS controller HK is now generated periodically as well.
- Better mode combination checks for assembly components. This includes:
- IMTQ assembly
- Syrlinks assembly
- Dual Lane Assembly
# [v1.43.1] 2023-04-04 # [v1.43.1] 2023-04-04

View File

@ -277,7 +277,7 @@ void StarTrackerHandler::performOperationHook() {
} }
} }
Submode_t StarTrackerHandler::getInitialSubmode() { return SUBMODE_BOOTLOADER; } Submode_t StarTrackerHandler::getInitialSubmode() { return startracker::SUBMODE_BOOTLOADER; }
ReturnValue_t StarTrackerHandler::buildNormalDeviceCommand(DeviceCommandId_t* id) { ReturnValue_t StarTrackerHandler::buildNormalDeviceCommand(DeviceCommandId_t* id) {
if (strHelperHandlingSpecialRequest) { if (strHelperHandlingSpecialRequest) {
@ -705,7 +705,7 @@ ReturnValue_t StarTrackerHandler::isModeCombinationValid(Mode_t mode, Submode_t
return INVALID_SUBMODE; return INVALID_SUBMODE;
} }
case MODE_ON: case MODE_ON:
if (submode == SUBMODE_BOOTLOADER || submode == SUBMODE_FIRMWARE) { if (submode == startracker::SUBMODE_BOOTLOADER || submode == startracker::SUBMODE_FIRMWARE) {
return returnvalue::OK; return returnvalue::OK;
} else { } else {
return INVALID_SUBMODE; return INVALID_SUBMODE;
@ -736,6 +736,7 @@ void StarTrackerHandler::doTransition(Mode_t modeFrom, Submode_t subModeFrom) {
} }
void StarTrackerHandler::doOnTransition(Submode_t subModeFrom) { void StarTrackerHandler::doOnTransition(Submode_t subModeFrom) {
using namespace startracker;
uint8_t dhbSubmode = getSubmode(); uint8_t dhbSubmode = getSubmode();
// We hide that the transition to submode firmware actually goes through the submode bootloader. // We hide that the transition to submode firmware actually goes through the submode bootloader.
// This is because the startracker always starts in bootloader mode but we want to allow direct // This is because the startracker always starts in bootloader mode but we want to allow direct
@ -762,6 +763,7 @@ void StarTrackerHandler::doOnTransition(Submode_t subModeFrom) {
} }
void StarTrackerHandler::doNormalTransition(Mode_t modeFrom, Submode_t subModeFrom) { void StarTrackerHandler::doNormalTransition(Mode_t modeFrom, Submode_t subModeFrom) {
using namespace startracker;
if (subModeFrom == SUBMODE_FIRMWARE) { if (subModeFrom == SUBMODE_FIRMWARE) {
setMode(MODE_NORMAL); setMode(MODE_NORMAL);
} else if (subModeFrom == SUBMODE_BOOTLOADER) { } else if (subModeFrom == SUBMODE_BOOTLOADER) {
@ -787,7 +789,7 @@ void StarTrackerHandler::bootFirmware(Mode_t toMode) {
if (toMode == MODE_NORMAL) { if (toMode == MODE_NORMAL) {
setMode(toMode, 0); setMode(toMode, 0);
} else { } else {
setMode(toMode, SUBMODE_FIRMWARE); setMode(toMode, startracker::SUBMODE_FIRMWARE);
} }
sif::info << "STR: Firmware boot success" << std::endl; sif::info << "STR: Firmware boot success" << std::endl;
internalState = InternalState::IDLE; internalState = InternalState::IDLE;

View File

@ -54,9 +54,6 @@ class StarTrackerHandler : public DeviceHandlerBase {
Submode_t getInitialSubmode() override; Submode_t getInitialSubmode() override;
static const Submode_t SUBMODE_BOOTLOADER = 1;
static const Submode_t SUBMODE_FIRMWARE = 2;
protected: protected:
void doStartUp() override; void doStartUp() override;
void doShutDown() override; void doShutDown() override;

View File

@ -11,6 +11,9 @@
namespace startracker { namespace startracker {
static const Submode_t SUBMODE_BOOTLOADER = 1;
static const Submode_t SUBMODE_FIRMWARE = 2;
/** /**
* @brief Returns the frame type field of a decoded frame. * @brief Returns the frame type field of a decoded frame.
*/ */

View File

@ -114,8 +114,11 @@ ReturnValue_t DualLaneAssemblyBase::pwrStateMachineWrapper() {
ReturnValue_t DualLaneAssemblyBase::isModeCombinationValid(Mode_t mode, Submode_t submode) { ReturnValue_t DualLaneAssemblyBase::isModeCombinationValid(Mode_t mode, Submode_t submode) {
using namespace duallane; using namespace duallane;
if (submode != A_SIDE and submode != B_SIDE and submode != DUAL_MODE) { if (mode != MODE_OFF and (submode != A_SIDE and submode != B_SIDE and submode != DUAL_MODE)) {
return returnvalue::FAILED; return HasModesIF::INVALID_SUBMODE;
}
if(mode == MODE_OFF and submode != SUBMODE_NONE) {
return HasModesIF::INVALID_SUBMODE;
} }
return returnvalue::OK; return returnvalue::OK;
} }

View File

@ -70,7 +70,8 @@ class DualLaneAssemblyBase : public AssemblyBase, public ConfirmsFailuresIF {
* @param submode * @param submode
*/ */
virtual ReturnValue_t pwrStateMachineWrapper(); virtual ReturnValue_t pwrStateMachineWrapper();
virtual ReturnValue_t isModeCombinationValid(Mode_t mode, Submode_t submode) override; ReturnValue_t isModeCombinationValid(Mode_t mode, Submode_t submode) override;
/** /**
* Custom recovery implementation to ensure that the power lines are commanded off for a * Custom recovery implementation to ensure that the power lines are commanded off for a
* recovery. * recovery.

View File

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

View File

@ -2,6 +2,8 @@
#include <eive/objects.h> #include <eive/objects.h>
#include "mission/acs/str/strHelpers.h"
StrAssembly::StrAssembly(object_id_t objectId) : AssemblyBase(objectId) { StrAssembly::StrAssembly(object_id_t objectId) : AssemblyBase(objectId) {
ModeListEntry entry; ModeListEntry entry;
entry.setObject(objects::STAR_TRACKER); entry.setObject(objects::STAR_TRACKER);
@ -31,5 +33,12 @@ ReturnValue_t StrAssembly::checkChildrenStateOn(Mode_t wantedMode, Submode_t wan
} }
ReturnValue_t StrAssembly::isModeCombinationValid(Mode_t mode, Submode_t submode) { ReturnValue_t StrAssembly::isModeCombinationValid(Mode_t mode, Submode_t submode) {
if ((mode == DeviceHandlerIF::MODE_NORMAL or mode == MODE_OFF) and submode != SUBMODE_NONE) {
return HasModesIF::INVALID_SUBMODE;
}
if (mode == MODE_ON and
(submode != startracker::SUBMODE_BOOTLOADER and submode != startracker::SUBMODE_FIRMWARE)) {
return HasModesIF::INVALID_SUBMODE;
}
return returnvalue::OK; return returnvalue::OK;
} }

View File

@ -1,6 +1,7 @@
#include "SyrlinksAssembly.h" #include "SyrlinksAssembly.h"
#include <eive/objects.h> #include <eive/objects.h>
#include <mission/com/defs.h>
using namespace returnvalue; using namespace returnvalue;
@ -34,10 +35,16 @@ ReturnValue_t SyrlinksAssembly::checkChildrenStateOn(Mode_t wantedMode, Submode_
} }
ReturnValue_t SyrlinksAssembly::isModeCombinationValid(Mode_t mode, Submode_t submode) { ReturnValue_t SyrlinksAssembly::isModeCombinationValid(Mode_t mode, Submode_t submode) {
if (mode == MODE_ON or mode == DeviceHandlerIF::MODE_NORMAL or mode == MODE_OFF) { if (mode == MODE_ON or mode == DeviceHandlerIF::MODE_NORMAL) {
if (submode >= com::Submode::NUM_SUBMODES or submode < com::Submode::RX_ONLY) {
return HasModesIF::INVALID_SUBMODE;
}
return returnvalue::OK; return returnvalue::OK;
} }
return returnvalue::FAILED; if(mode == MODE_OFF and submode != SUBMODE_NONE) {
return HasModesIF::INVALID_SUBMODE;
}
return returnvalue::OK;
} }
ReturnValue_t SyrlinksAssembly::checkAndHandleHealthState(Mode_t deviceMode, ReturnValue_t SyrlinksAssembly::checkAndHandleHealthState(Mode_t deviceMode,