extend syrlinks code a bit
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
a4bf6d9872
commit
b879533d41
@ -674,6 +674,16 @@ ReturnValue_t SyrlinksHandler::handleAckReply(const uint8_t* packet) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReturnValue_t SyrlinksHandler::isModeCombinationValid(Mode_t mode, Submode_t submode) {
|
||||||
|
if (mode == HasModesIF::MODE_ON or mode == DeviceHandlerIF::MODE_NORMAL) {
|
||||||
|
if (submode >= syrlinks::Submode::NUM_SUBMODES) {
|
||||||
|
return HasModesIF::INVALID_SUBMODE;
|
||||||
|
}
|
||||||
|
return returnvalue::OK;
|
||||||
|
}
|
||||||
|
return DeviceHandlerBase::isModeCombinationValid(mode, submode);
|
||||||
|
}
|
||||||
|
|
||||||
void SyrlinksHandler::prepareCommand(std::string command, DeviceCommandId_t commandId) {
|
void SyrlinksHandler::prepareCommand(std::string command, DeviceCommandId_t commandId) {
|
||||||
command.copy(reinterpret_cast<char*>(commandBuffer), command.size(), 0);
|
command.copy(reinterpret_cast<char*>(commandBuffer), command.size(), 0);
|
||||||
rawPacketLen = command.size();
|
rawPacketLen = command.size();
|
||||||
@ -685,37 +695,79 @@ void SyrlinksHandler::setDebugMode(bool enable) { this->debugMode = enable; }
|
|||||||
|
|
||||||
void SyrlinksHandler::doTransition(Mode_t modeFrom, Submode_t subModeFrom) {
|
void SyrlinksHandler::doTransition(Mode_t modeFrom, Submode_t subModeFrom) {
|
||||||
Mode_t tgtMode = getBaseMode(getMode());
|
Mode_t tgtMode = getBaseMode(getMode());
|
||||||
|
auto commandDone = [&]() {
|
||||||
|
setMode(tgtMode);
|
||||||
|
internalState = InternalState::IDLE;
|
||||||
|
};
|
||||||
if (tgtMode == HasModesIF::MODE_ON or tgtMode == DeviceHandlerIF::MODE_NORMAL) {
|
if (tgtMode == HasModesIF::MODE_ON or tgtMode == DeviceHandlerIF::MODE_NORMAL) {
|
||||||
switch (getSubmode()) {
|
switch (getSubmode()) {
|
||||||
case (syrlinks::Submode::TX_MODULATION): {
|
case (syrlinks::Submode::TX_MODULATION_LOW_DATARATE): {
|
||||||
|
if (internalState == InternalState::IDLE) {
|
||||||
|
commandExecuted = false;
|
||||||
|
internalState = InternalState::SELECT_MODULATION_QPSK;
|
||||||
|
}
|
||||||
|
if (internalState == InternalState::SELECT_MODULATION_QPSK) {
|
||||||
if (commandExecuted) {
|
if (commandExecuted) {
|
||||||
setMode(tgtMode);
|
internalState = InternalState::SET_TX_MODULATION;
|
||||||
|
commandExecuted = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (internalState == InternalState::SET_TX_MODULATION) {
|
||||||
|
if (commandExecuted) {
|
||||||
|
commandDone();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case (syrlinks::Submode::TX_MODULATION_HIGH_DATARATE): {
|
||||||
|
if (internalState == InternalState::IDLE) {
|
||||||
|
commandExecuted = false;
|
||||||
|
internalState = InternalState::SELECT_MODULATION_0BPSK;
|
||||||
|
}
|
||||||
|
if (internalState == InternalState::SELECT_MODULATION_0BPSK) {
|
||||||
|
if (commandExecuted) {
|
||||||
internalState = InternalState::SET_TX_MODULATION;
|
internalState = InternalState::SET_TX_MODULATION;
|
||||||
|
commandExecuted = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (internalState == InternalState::SET_TX_MODULATION) {
|
||||||
|
if (commandExecuted) {
|
||||||
|
commandDone();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (syrlinks::Submode::TX_STANDBY): {
|
case (syrlinks::Submode::TX_STANDBY): {
|
||||||
|
if (internalState == InternalState::IDLE) {
|
||||||
|
internalState = InternalState::SET_TX_STANDBY;
|
||||||
|
commandExecuted = false;
|
||||||
|
}
|
||||||
|
if (internalState == InternalState::SET_TX_STANDBY) {
|
||||||
if (commandExecuted) {
|
if (commandExecuted) {
|
||||||
setMode(tgtMode);
|
commandDone();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
internalState = InternalState::SET_TX_STANDBY;
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case (syrlinks::Submode::TX_CW): {
|
case (syrlinks::Submode::TX_CW): {
|
||||||
|
if (internalState == InternalState::IDLE) {
|
||||||
|
internalState = InternalState::SET_TX_STANDBY;
|
||||||
|
commandExecuted = false;
|
||||||
|
}
|
||||||
if (commandExecuted) {
|
if (commandExecuted) {
|
||||||
setMode(tgtMode);
|
commandDone();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
internalState = InternalState::SET_TX_CW;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
setMode(tgtMode);
|
commandDone();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
setMode(tgtMode);
|
commandDone();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,7 @@ class SyrlinksHandler : public DeviceHandlerBase {
|
|||||||
void doStartUp() override;
|
void doStartUp() override;
|
||||||
void doShutDown() override;
|
void doShutDown() override;
|
||||||
void doTransition(Mode_t modeFrom, Submode_t subModeFrom) override;
|
void doTransition(Mode_t modeFrom, Submode_t subModeFrom) override;
|
||||||
|
ReturnValue_t isModeCombinationValid(Mode_t mode, Submode_t submode) override;
|
||||||
ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t* id) override;
|
ReturnValue_t buildNormalDeviceCommand(DeviceCommandId_t* id) override;
|
||||||
ReturnValue_t buildTransitionDeviceCommand(DeviceCommandId_t* id) override;
|
ReturnValue_t buildTransitionDeviceCommand(DeviceCommandId_t* id) override;
|
||||||
ReturnValue_t buildCommandFromCommand(DeviceCommandId_t deviceCommand, const uint8_t* commandData,
|
ReturnValue_t buildCommandFromCommand(DeviceCommandId_t deviceCommand, const uint8_t* commandData,
|
||||||
@ -112,6 +113,8 @@ class SyrlinksHandler : public DeviceHandlerBase {
|
|||||||
enum class InternalState {
|
enum class InternalState {
|
||||||
OFF,
|
OFF,
|
||||||
ENABLE_TEMPERATURE_PROTECTION,
|
ENABLE_TEMPERATURE_PROTECTION,
|
||||||
|
SELECT_MODULATION_0BPSK,
|
||||||
|
SELECT_MODULATION_QPSK,
|
||||||
SET_TX_MODULATION,
|
SET_TX_MODULATION,
|
||||||
SET_TX_CW,
|
SET_TX_CW,
|
||||||
SET_TX_STANDBY,
|
SET_TX_STANDBY,
|
||||||
|
@ -9,9 +9,10 @@ namespace syrlinks {
|
|||||||
enum Submode {
|
enum Submode {
|
||||||
DEFAULT,
|
DEFAULT,
|
||||||
TX_STANDBY,
|
TX_STANDBY,
|
||||||
TX_MODULATION,
|
TX_MODULATION_LOW_DATARATE,
|
||||||
// TODO: Is this needed?
|
TX_MODULATION_HIGH_DATARATE,
|
||||||
TX_CW
|
TX_CW,
|
||||||
|
NUM_SUBMODES
|
||||||
};
|
};
|
||||||
|
|
||||||
static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::SYRLINKS;
|
static constexpr uint8_t SUBSYSTEM_ID = SUBSYSTEM_ID::SYRLINKS;
|
||||||
|
2
tmtc
2
tmtc
@ -1 +1 @@
|
|||||||
Subproject commit 49ccb4be8d42d6916be00ff9d8462a1f65481a6c
|
Subproject commit 8a7880bc35d1069577b7e0427c1f45c54ac5241c
|
Loading…
Reference in New Issue
Block a user