Assembly and FDIR updates #572
@ -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
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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.
|
||||||
|
@ -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) {
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user