GYR fix #346
21
CHANGELOG.md
21
CHANGELOG.md
@ -12,7 +12,7 @@ list yields a list of all related PRs for each release.
|
|||||||
|
|
||||||
## Added
|
## Added
|
||||||
|
|
||||||
- The Q7S SW now checks for a file named `boot_delay_secs.stxt` in the home directory.
|
- The Q7S SW now checks for a file named `boot_delay_secs.txt` in the home directory.
|
||||||
If it exists and the file is empty, it will delay for 6 seconds before continuing
|
If it exists and the file is empty, it will delay for 6 seconds before continuing
|
||||||
with the regular boot. It can also try to read delay seconds from the file.
|
with the regular boot. It can also try to read delay seconds from the file.
|
||||||
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/340.
|
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/340.
|
||||||
@ -22,6 +22,15 @@ list yields a list of all related PRs for each release.
|
|||||||
- The ACS Controller Gyro Sets (raw and processed) and the MEKF dataset are diagnostics now.
|
- The ACS Controller Gyro Sets (raw and processed) and the MEKF dataset are diagnostics now.
|
||||||
- Bumped FSFW for Service 11 improvement which includes size and CRC check for contained TC
|
- Bumped FSFW for Service 11 improvement which includes size and CRC check for contained TC
|
||||||
- Syrlinks module now always included for both EM and FM
|
- Syrlinks module now always included for both EM and FM
|
||||||
|
- SA Deployment: Allow specifying the switch interval and the initial channel. This allows testing
|
||||||
|
the new deployment procedure where each channel is burned for half of the whole burn duration.
|
||||||
|
It also allows burning only one channel for the whole burn duration. The autonomous mechanism
|
||||||
|
was adapted to burn each channel for half of the burn time by default.
|
||||||
|
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/347
|
||||||
|
TMTC PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/127
|
||||||
|
- `Max31865RtdLowlevelHandler.cpp`: For each RTD device, the config is now re-written before
|
||||||
|
every read. This seems to fix some issue with invalid temperature sensor readings.
|
||||||
|
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/345
|
||||||
|
|
||||||
## Fixed
|
## Fixed
|
||||||
|
|
||||||
@ -31,7 +40,7 @@ list yields a list of all related PRs for each release.
|
|||||||
on shut-down.
|
on shut-down.
|
||||||
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/342
|
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/342
|
||||||
|
|
||||||
# [v1.19.0] 10.01.2023
|
# [v1.19.0] 2023-01-10
|
||||||
|
|
||||||
## Changed
|
## Changed
|
||||||
|
|
||||||
@ -53,7 +62,7 @@ list yields a list of all related PRs for each release.
|
|||||||
- Add automatic 5V stack commanding for all connected devices
|
- Add automatic 5V stack commanding for all connected devices
|
||||||
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/335
|
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/335
|
||||||
|
|
||||||
# [v1.18.0] 01.12.2022
|
# [v1.18.0] 2022-12-01
|
||||||
|
|
||||||
## Changed
|
## Changed
|
||||||
|
|
||||||
@ -62,7 +71,7 @@ list yields a list of all related PRs for each release.
|
|||||||
- Renamed `/dev/i2c_eive` to `/dev/i2c_pl` and `/dev/i2c-2` to `/dev/i2c_ps`.
|
- Renamed `/dev/i2c_eive` to `/dev/i2c_pl` and `/dev/i2c-2` to `/dev/i2c_ps`.
|
||||||
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/328
|
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/328
|
||||||
|
|
||||||
# [v1.17.0] 28.11.2022
|
# [v1.17.0] 2022-11-28
|
||||||
|
|
||||||
## Added
|
## Added
|
||||||
|
|
||||||
@ -71,7 +80,7 @@ list yields a list of all related PRs for each release.
|
|||||||
PR 2: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/324
|
PR 2: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/324
|
||||||
PR 3: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/326
|
PR 3: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/326
|
||||||
|
|
||||||
# [v1.16.0] 18.11.2022
|
# [v1.16.0] 2022-11-18
|
||||||
|
|
||||||
- It is now possible to compile Linux components for the hosted build conditionally
|
- It is now possible to compile Linux components for the hosted build conditionally
|
||||||
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/322
|
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/322
|
||||||
@ -88,7 +97,7 @@ list yields a list of all related PRs for each release.
|
|||||||
- Add remaining missing TMP1075 device handlers.
|
- Add remaining missing TMP1075 device handlers.
|
||||||
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/318
|
PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/318
|
||||||
|
|
||||||
# [v1.15.0] 27.10.2022
|
# [v1.15.0] 2022-10-27
|
||||||
|
|
||||||
- Consistent device file naming
|
- Consistent device file naming
|
||||||
- Remove rad sensor from EM build, lead to weird bugs on EM which
|
- Remove rad sensor from EM build, lead to weird bugs on EM which
|
||||||
|
@ -39,7 +39,7 @@ static constexpr uint32_t SA_DEPL_INIT_BUFFER_SECS = 120;
|
|||||||
static constexpr uint32_t SA_DEPL_BURN_TIME_SECS = 180;
|
static constexpr uint32_t SA_DEPL_BURN_TIME_SECS = 180;
|
||||||
static constexpr uint32_t SA_DEPL_WAIT_TIME_SECS = 45 * 60;
|
static constexpr uint32_t SA_DEPL_WAIT_TIME_SECS = 45 * 60;
|
||||||
// HW constraints (current limit) mean that the GPIO channels need to be switched on in alternation
|
// HW constraints (current limit) mean that the GPIO channels need to be switched on in alternation
|
||||||
static constexpr uint32_t SA_DEPL_CHANNEL_ALTERNATION_INTERVAL_SECS = 5;
|
static constexpr uint32_t LEGACY_SA_DEPL_CHANNEL_ALTERNATION_INTERVAL_SECS = 5;
|
||||||
// Maximum allowed burn time allowed by the software.
|
// Maximum allowed burn time allowed by the software.
|
||||||
static constexpr uint32_t SA_DEPL_MAX_BURN_TIME = 180;
|
static constexpr uint32_t SA_DEPL_MAX_BURN_TIME = 180;
|
||||||
|
|
||||||
|
2
fsfw
2
fsfw
@ -1 +1 @@
|
|||||||
Subproject commit accaf855ee53d3dc429d7bcdf1b7b89768c166b6
|
Subproject commit bd189518b6f91f25db1845e2657101e6bf46eec0
|
@ -143,7 +143,7 @@ ReturnValue_t Max31865RtdReader::periodicReadHandling() {
|
|||||||
auto result = returnvalue::OK;
|
auto result = returnvalue::OK;
|
||||||
MutexGuard mg(readerMutex);
|
MutexGuard mg(readerMutex);
|
||||||
if (mg.getLockResult() != returnvalue::OK) {
|
if (mg.getLockResult() != returnvalue::OK) {
|
||||||
sif::warning << "Max31865RtdReader::periodicReadReqHandling: Mutex lock failed" << std::endl;
|
sif::warning << "Max31865RtdReader::periodicReadHandling: Mutex lock failed" << std::endl;
|
||||||
return returnvalue::FAILED;
|
return returnvalue::FAILED;
|
||||||
}
|
}
|
||||||
// Now read the RTD values
|
// Now read the RTD values
|
||||||
@ -154,6 +154,10 @@ ReturnValue_t Max31865RtdReader::periodicReadHandling() {
|
|||||||
if (rtdIsActive(rtd->idx)) {
|
if (rtdIsActive(rtd->idx)) {
|
||||||
uint16_t rtdVal = 0;
|
uint16_t rtdVal = 0;
|
||||||
bool faultBitSet = false;
|
bool faultBitSet = false;
|
||||||
|
result = writeCfgReg(rtd->spiCookie, BASE_CFG);
|
||||||
|
if (result != returnvalue::OK) {
|
||||||
|
handleSpiError(rtd, result, "writeCfgReg");
|
||||||
|
}
|
||||||
result = readRtdVal(rtd->spiCookie, rtdVal, faultBitSet);
|
result = readRtdVal(rtd->spiCookie, rtdVal, faultBitSet);
|
||||||
if (result != returnvalue::OK) {
|
if (result != returnvalue::OK) {
|
||||||
handleSpiError(rtd, result, "readRtdVal");
|
handleSpiError(rtd, result, "readRtdVal");
|
||||||
@ -282,7 +286,13 @@ ReturnValue_t Max31865RtdReader::sendMessage(CookieIF* cookie, const uint8_t* se
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (EiveMax31855::RtdCommands::CFG):
|
case (EiveMax31855::RtdCommands::CFG): {
|
||||||
|
ReturnValue_t result = writeCfgReg(rtdCookie->spiCookie, BASE_CFG);
|
||||||
|
if (result != returnvalue::OK) {
|
||||||
|
handleSpiError(rtdCookie, result, "writeCfgReg");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
// TODO: Only implement if needed
|
// TODO: Only implement if needed
|
||||||
break;
|
break;
|
||||||
|
@ -9,8 +9,12 @@ PdecConfig::~PdecConfig() {}
|
|||||||
void PdecConfig::initialize() {
|
void PdecConfig::initialize() {
|
||||||
uint32_t word = 0;
|
uint32_t word = 0;
|
||||||
word |= (VERSION_ID << 30);
|
word |= (VERSION_ID << 30);
|
||||||
|
|
||||||
|
// Setting the bypass flag and the control command flag should not have any
|
||||||
|
// implication on the operation of the PDEC IP Core
|
||||||
word |= (BYPASS_FLAG << 29);
|
word |= (BYPASS_FLAG << 29);
|
||||||
word |= (CONTROL_COMMAND_FLAG << 28);
|
word |= (CONTROL_COMMAND_FLAG << 28);
|
||||||
|
|
||||||
word |= (RESERVED_FIELD_A << 26);
|
word |= (RESERVED_FIELD_A << 26);
|
||||||
word |= (SPACECRAFT_ID << 16);
|
word |= (SPACECRAFT_ID << 16);
|
||||||
word |= (VIRTUAL_CHANNEL << 10);
|
word |= (VIRTUAL_CHANNEL << 10);
|
||||||
|
@ -69,7 +69,8 @@ ReturnValue_t Max31865EiveHandler::buildCommandFromCommand(DeviceCommandId_t dev
|
|||||||
switch (cmdTyped) {
|
switch (cmdTyped) {
|
||||||
case (EiveMax31855::RtdCommands::ON):
|
case (EiveMax31855::RtdCommands::ON):
|
||||||
case (EiveMax31855::RtdCommands::ACTIVE):
|
case (EiveMax31855::RtdCommands::ACTIVE):
|
||||||
case (EiveMax31855::RtdCommands::OFF): {
|
case (EiveMax31855::RtdCommands::OFF):
|
||||||
|
case (EiveMax31855::RtdCommands::CFG): {
|
||||||
simpleCommand(cmdTyped);
|
simpleCommand(cmdTyped);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -77,9 +78,6 @@ ReturnValue_t Max31865EiveHandler::buildCommandFromCommand(DeviceCommandId_t dev
|
|||||||
case (EiveMax31855::RtdCommands::HIGH_TRESHOLD): {
|
case (EiveMax31855::RtdCommands::HIGH_TRESHOLD): {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (EiveMax31855::RtdCommands::CFG): {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
return NOTHING_TO_SEND;
|
return NOTHING_TO_SEND;
|
||||||
}
|
}
|
||||||
@ -100,6 +98,7 @@ void Max31865EiveHandler::simpleCommand(EiveMax31855::RtdCommands cmd) {
|
|||||||
rawPacket = cmdBuf.data();
|
rawPacket = cmdBuf.data();
|
||||||
rawPacketLen = 1;
|
rawPacketLen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Max31865EiveHandler::doTransition(Mode_t modeFrom, Submode_t subModeFrom) {
|
void Max31865EiveHandler::doTransition(Mode_t modeFrom, Submode_t subModeFrom) {
|
||||||
if (getMode() == _MODE_TO_NORMAL) {
|
if (getMode() == _MODE_TO_NORMAL) {
|
||||||
if (state != InternalState::ACTIVE) {
|
if (state != InternalState::ACTIVE) {
|
||||||
@ -117,6 +116,7 @@ void Max31865EiveHandler::fillCommandAndReplyMap() {
|
|||||||
insertInCommandMap(EiveMax31855::RtdCommands::ON);
|
insertInCommandMap(EiveMax31855::RtdCommands::ON);
|
||||||
insertInCommandMap(EiveMax31855::RtdCommands::ACTIVE);
|
insertInCommandMap(EiveMax31855::RtdCommands::ACTIVE);
|
||||||
insertInCommandMap(EiveMax31855::RtdCommands::OFF);
|
insertInCommandMap(EiveMax31855::RtdCommands::OFF);
|
||||||
|
insertInCommandMap(EiveMax31855::RtdCommands::CFG);
|
||||||
insertInReplyMap(EiveMax31855::RtdCommands::EXCHANGE_SET_ID, 200, &sensorDataset, 0, true);
|
insertInReplyMap(EiveMax31855::RtdCommands::EXCHANGE_SET_ID, 200, &sensorDataset, 0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,12 +97,19 @@ void SolarArrayDeploymentHandler::handleStateMachine() {
|
|||||||
// This should never fail
|
// This should never fail
|
||||||
channelAlternationCd.resetTimer();
|
channelAlternationCd.resetTimer();
|
||||||
if (not fsmInfo.dryRun) {
|
if (not fsmInfo.dryRun) {
|
||||||
|
if (fsmInfo.initChannel == 0) {
|
||||||
sa2Off();
|
sa2Off();
|
||||||
sa1On();
|
sa1On();
|
||||||
fsmInfo.alternationDummy = true;
|
fsmInfo.alternationDummy = true;
|
||||||
|
} else {
|
||||||
|
sa1Off();
|
||||||
|
sa2On();
|
||||||
|
fsmInfo.alternationDummy = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sif::info << "S/A Deployment: Burning" << std::endl;
|
sif::info << "S/A Deployment: Burning" << std::endl;
|
||||||
triggerEvent(BURN_PHASE_START, fsmInfo.burnCountdownMs, fsmInfo.dryRun);
|
triggerEvent(BURN_PHASE_START, fsmInfo.burnCountdownMs, fsmInfo.dryRun);
|
||||||
|
channelAlternationCd.resetTimer();
|
||||||
stateMachine = BURNING;
|
stateMachine = BURNING;
|
||||||
}
|
}
|
||||||
if (stateMachine == BURNING) {
|
if (stateMachine == BURNING) {
|
||||||
@ -219,7 +226,8 @@ bool SolarArrayDeploymentHandler::autonomousDeplForFile(sd::SdCard sdCard, const
|
|||||||
if (stateSwitch or firstAutonomousCycle) {
|
if (stateSwitch or firstAutonomousCycle) {
|
||||||
if (deplState == AutonomousDeplState::FIRST_BURN or
|
if (deplState == AutonomousDeplState::FIRST_BURN or
|
||||||
deplState == AutonomousDeplState::SECOND_BURN) {
|
deplState == AutonomousDeplState::SECOND_BURN) {
|
||||||
startFsmOn(config::SA_DEPL_BURN_TIME_SECS, dryRun);
|
startFsmOn(config::SA_DEPL_BURN_TIME_SECS, (config::SA_DEPL_BURN_TIME_SECS / 2) * 1000, 0,
|
||||||
|
dryRun);
|
||||||
} else if (deplState == AutonomousDeplState::WAIT or deplState == AutonomousDeplState::DONE or
|
} else if (deplState == AutonomousDeplState::WAIT or deplState == AutonomousDeplState::DONE or
|
||||||
deplState == AutonomousDeplState::INIT) {
|
deplState == AutonomousDeplState::INIT) {
|
||||||
startFsmOff();
|
startFsmOff();
|
||||||
@ -283,15 +291,19 @@ bool SolarArrayDeploymentHandler::checkMainPower(bool onOff) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SolarArrayDeploymentHandler::startFsmOn(uint32_t burnCountdownSecs, bool dryRun) {
|
bool SolarArrayDeploymentHandler::startFsmOn(uint32_t burnCountdownSecs,
|
||||||
|
uint32_t channelAlternationIntervalMs,
|
||||||
|
uint8_t initChannel, bool dryRun) {
|
||||||
if (stateMachine != StateMachine::IDLE) {
|
if (stateMachine != StateMachine::IDLE) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
channelAlternationCd.setTimeout(channelAlternationIntervalMs);
|
||||||
if (burnCountdownSecs > config::SA_DEPL_MAX_BURN_TIME) {
|
if (burnCountdownSecs > config::SA_DEPL_MAX_BURN_TIME) {
|
||||||
burnCountdownSecs = config::SA_DEPL_MAX_BURN_TIME;
|
burnCountdownSecs = config::SA_DEPL_MAX_BURN_TIME;
|
||||||
}
|
}
|
||||||
fsmInfo.dryRun = dryRun;
|
fsmInfo.dryRun = dryRun;
|
||||||
fsmInfo.burnCountdownMs = burnCountdownSecs * 1000;
|
fsmInfo.burnCountdownMs = burnCountdownSecs * 1000;
|
||||||
|
fsmInfo.initChannel = initChannel;
|
||||||
stateMachine = StateMachine::MAIN_POWER_ON;
|
stateMachine = StateMachine::MAIN_POWER_ON;
|
||||||
retryCounter = 0;
|
retryCounter = 0;
|
||||||
return true;
|
return true;
|
||||||
@ -354,8 +366,9 @@ ReturnValue_t SolarArrayDeploymentHandler::executeAction(ActionId_t actionId,
|
|||||||
if (result != returnvalue::OK) {
|
if (result != returnvalue::OK) {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
uint32_t burnCountdown = cmd.getBurnTime();
|
uint32_t burnCountdown = cmd.getBurnTimeSecs();
|
||||||
if (not startFsmOn(burnCountdown, cmd.isDryRun())) {
|
if (not startFsmOn(burnCountdown, cmd.getSwitchIntervalMs(), cmd.getInitChannel(),
|
||||||
|
cmd.isDryRun())) {
|
||||||
return HasActionsIF::IS_BUSY;
|
return HasActionsIF::IS_BUSY;
|
||||||
}
|
}
|
||||||
actionActive = true;
|
actionActive = true;
|
||||||
|
@ -28,16 +28,24 @@ class ManualDeploymentCommand : public SerialLinkedListAdapter<SerializeIF> {
|
|||||||
ManualDeploymentCommand() { setLinks(); }
|
ManualDeploymentCommand() { setLinks(); }
|
||||||
|
|
||||||
void setLinks() {
|
void setLinks() {
|
||||||
setStart(&burnTime);
|
setStart(&burnTimeSecs);
|
||||||
burnTime.setNext(&dryRun);
|
burnTimeSecs.setNext(&switchIntervalMs);
|
||||||
|
switchIntervalMs.setNext(&initChannel);
|
||||||
|
initChannel.setNext(&dryRun);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t getBurnTime() const { return burnTime.entry; }
|
uint32_t getBurnTimeSecs() const { return burnTimeSecs.entry; }
|
||||||
|
|
||||||
|
uint32_t getSwitchIntervalMs() const { return switchIntervalMs.entry; };
|
||||||
|
|
||||||
|
uint8_t getInitChannel() const { return initChannel.entry; };
|
||||||
|
|
||||||
bool isDryRun() const { return dryRun.entry; }
|
bool isDryRun() const { return dryRun.entry; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SerializeElement<uint32_t> burnTime;
|
SerializeElement<uint32_t> burnTimeSecs;
|
||||||
|
SerializeElement<uint32_t> switchIntervalMs;
|
||||||
|
SerializeElement<uint8_t> initChannel;
|
||||||
SerializeElement<uint8_t> dryRun;
|
SerializeElement<uint8_t> dryRun;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -50,7 +58,16 @@ class SolarArrayDeploymentHandler : public ExecutableObjectIF,
|
|||||||
public SystemObject,
|
public SystemObject,
|
||||||
public HasActionsIF {
|
public HasActionsIF {
|
||||||
public:
|
public:
|
||||||
//! Manual deployment of the solar arrays. Burn time and channels are supplied with TC parameters
|
//! Manual deployment of the solar arrays. Burn time, channel switch interval, initial
|
||||||
|
//! burn channel and dry run flag are supplied as parameters. There are following cases to
|
||||||
|
//! consider.
|
||||||
|
//!
|
||||||
|
//! - Channel switch interval greater or equal to burn time: Only burn one channel. The init
|
||||||
|
//! burn channel parameter can be used to select which channel is burned.
|
||||||
|
//! - Channel switch interval half of burn time: Burn each channel for half of the burn time.
|
||||||
|
//!
|
||||||
|
//! The dry run flag can be used to avoid actually toggling IO pins and only test the
|
||||||
|
//! application logic.
|
||||||
static constexpr DeviceCommandId_t DEPLOY_SOLAR_ARRAYS_MANUALLY = 0x05;
|
static constexpr DeviceCommandId_t DEPLOY_SOLAR_ARRAYS_MANUALLY = 0x05;
|
||||||
static constexpr DeviceCommandId_t SWITCH_OFF_DEPLOYMENT = 0x06;
|
static constexpr DeviceCommandId_t SWITCH_OFF_DEPLOYMENT = 0x06;
|
||||||
|
|
||||||
@ -119,6 +136,7 @@ class SolarArrayDeploymentHandler : public ExecutableObjectIF,
|
|||||||
// DeploymentChannels channel;
|
// DeploymentChannels channel;
|
||||||
bool dryRun;
|
bool dryRun;
|
||||||
bool alternationDummy = false;
|
bool alternationDummy = false;
|
||||||
|
uint8_t initChannel = 0;
|
||||||
uint32_t burnCountdownMs = config::SA_DEPL_MAX_BURN_TIME;
|
uint32_t burnCountdownMs = config::SA_DEPL_MAX_BURN_TIME;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -157,7 +175,8 @@ class SolarArrayDeploymentHandler : public ExecutableObjectIF,
|
|||||||
PeriodicOperationDivider opDivider = PeriodicOperationDivider(5);
|
PeriodicOperationDivider opDivider = PeriodicOperationDivider(5);
|
||||||
uint8_t retryCounter = 3;
|
uint8_t retryCounter = 3;
|
||||||
|
|
||||||
bool startFsmOn(uint32_t burnCountdownSecs, bool dryRun);
|
bool startFsmOn(uint32_t burnCountdownSecs, uint32_t channelAlternationIntervalMs,
|
||||||
|
uint8_t initChannel, bool dryRun);
|
||||||
void startFsmOff();
|
void startFsmOff();
|
||||||
|
|
||||||
void finishFsm(ReturnValue_t resultForActionHelper);
|
void finishFsm(ReturnValue_t resultForActionHelper);
|
||||||
@ -175,8 +194,9 @@ class SolarArrayDeploymentHandler : public ExecutableObjectIF,
|
|||||||
*/
|
*/
|
||||||
Countdown burnCountdown;
|
Countdown burnCountdown;
|
||||||
|
|
||||||
|
// Only initial value, new approach is to burn each channel half of the total burn time.
|
||||||
Countdown channelAlternationCd =
|
Countdown channelAlternationCd =
|
||||||
Countdown(config::SA_DEPL_CHANNEL_ALTERNATION_INTERVAL_SECS * 1000);
|
Countdown(config::LEGACY_SA_DEPL_CHANNEL_ALTERNATION_INTERVAL_SECS * 1000);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The message queue id of the component commanding an action will be stored in this variable.
|
* The message queue id of the component commanding an action will be stored in this variable.
|
||||||
|
2
tmtc
2
tmtc
@ -1 +1 @@
|
|||||||
Subproject commit f3c0b7567aec22db02a07d76548617b8d163fb29
|
Subproject commit 2f33a4393774a3d6905f2239bd72cb0c4cc2060a
|
Loading…
x
Reference in New Issue
Block a user