Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
bcf7fa216a | |||
5824b28993 | |||
f196838f6b | |||
607822b413 | |||
21258c2d79 | |||
cca96f2a96 | |||
7f3d827a6e |
@ -10,6 +10,13 @@ list yields a list of all related PRs for each release.
|
||||
|
||||
# [unreleased]
|
||||
|
||||
# [v1.14.1]
|
||||
|
||||
- Various bugfixes and regression fixes
|
||||
- General file handling at program initialization now works properly again
|
||||
- Scratch buffer preferred SD card handling works again
|
||||
- Use scoped locks in TCS controller to avoid deadlocks
|
||||
|
||||
# [v1.14.0]
|
||||
|
||||
- Provide full SW update capability for the OBSW.
|
||||
|
@ -11,7 +11,7 @@ cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
set(OBSW_VERSION_MAJOR_IF_GIT_FAILS 1)
|
||||
set(OBSW_VERSION_MINOR_IF_GIT_FAILS 14)
|
||||
set(OBSW_VERSION_REVISION_IF_GIT_FAILS 0)
|
||||
set(OBSW_VERSION_REVISION_IF_GIT_FAILS 1)
|
||||
|
||||
# set(CMAKE_VERBOSE TRUE)
|
||||
|
||||
|
@ -1230,10 +1230,8 @@ void CoreController::performWatchdogControlOperation() {
|
||||
}
|
||||
|
||||
void CoreController::performMountedSdCardOperations() {
|
||||
auto mountedSdCardOp = [&](bool &mntSwitch, sd::SdCard sdCard, std::string mntPoint) {
|
||||
if (mntSwitch) {
|
||||
bool sdCardMounted = sdcMan->isSdCardUsable(sdCard);
|
||||
if (sdCardMounted and not performOneShotSdCardOpsSwitch) {
|
||||
auto mountedSdCardOp = [&](sd::SdCard sdCard, std::string mntPoint) {
|
||||
if (not performOneShotSdCardOpsSwitch) {
|
||||
std::ostringstream path;
|
||||
path << mntPoint << "/" << CONF_FOLDER;
|
||||
if (not std::filesystem::exists(path.str())) {
|
||||
@ -1242,17 +1240,19 @@ void CoreController::performMountedSdCardOperations() {
|
||||
initVersionFile();
|
||||
initClockFromTimeFile();
|
||||
performRebootFileHandling(false);
|
||||
performOneShotSdCardOpsSwitch = true;
|
||||
}
|
||||
mntSwitch = false;
|
||||
}
|
||||
};
|
||||
if (sdInfo.active == sd::SdCard::SLOT_1) {
|
||||
mountedSdCardOp(sdInfo.mountSwitch.second, sd::SdCard::SLOT_1, config::SD_1_MOUNT_POINT);
|
||||
mountedSdCardOp(sdInfo.mountSwitch.first, sd::SdCard::SLOT_0, config::SD_0_MOUNT_POINT);
|
||||
} else {
|
||||
mountedSdCardOp(sdInfo.mountSwitch.first, sd::SdCard::SLOT_0, config::SD_0_MOUNT_POINT);
|
||||
mountedSdCardOp(sdInfo.mountSwitch.second, sd::SdCard::SLOT_1, config::SD_1_MOUNT_POINT);
|
||||
bool clearOneShotFlag = false;
|
||||
if (sdInfo.active == sd::SdCard::SLOT_0 and sdcMan->isSdCardUsable(sd::SdCard::SLOT_0)) {
|
||||
mountedSdCardOp(sd::SdCard::SLOT_0, config::SD_0_MOUNT_POINT);
|
||||
clearOneShotFlag = true;
|
||||
}
|
||||
if (sdInfo.active == sd::SdCard::SLOT_1 and sdcMan->isSdCardUsable(sd::SdCard::SLOT_1)) {
|
||||
mountedSdCardOp(sd::SdCard::SLOT_1, config::SD_1_MOUNT_POINT);
|
||||
clearOneShotFlag = true;
|
||||
}
|
||||
if (clearOneShotFlag) {
|
||||
performOneShotSdCardOpsSwitch = true;
|
||||
}
|
||||
timeFileHandler();
|
||||
}
|
||||
|
@ -205,7 +205,7 @@ class CoreController : public ExtendedControllerBase {
|
||||
|
||||
RebootFile rebootFile = {};
|
||||
std::string currMntPrefix;
|
||||
bool performOneShotSdCardOpsSwitch = true;
|
||||
bool performOneShotSdCardOpsSwitch = false;
|
||||
|
||||
/**
|
||||
* Index 0: Chip 0 Copy 0
|
||||
|
@ -27,8 +27,7 @@ SdCardManager::SdCardManager() : SystemObject(objects::SDC_MANAGER), cmdExecutor
|
||||
}
|
||||
uint8_t prefSdRaw = 0;
|
||||
result = scratch::readNumber(scratch::PREFERED_SDC_KEY, prefSdRaw);
|
||||
result = mutex->unlockMutex();
|
||||
if (result != returnvalue::OK) {
|
||||
if (mutex->unlockMutex() != returnvalue::OK) {
|
||||
sif::error << "SdCardManager::SdCardManager: Mutex unlock failed" << std::endl;
|
||||
}
|
||||
|
||||
|
2
fsfw
2
fsfw
Submodule fsfw updated: a8fb83dfce...692be9df8d
@ -234,24 +234,31 @@ ReturnValue_t ThermalController::checkModeCommand(Mode_t mode, Submode_t submode
|
||||
}
|
||||
|
||||
void ThermalController::copySensors() {
|
||||
{
|
||||
PoolReadGuard pg0(&max31865Set0);
|
||||
if (pg0.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_ploc_heatspreader.value = max31865Set0.temperatureCelcius.value;
|
||||
sensorTemperatures.sensor_ploc_heatspreader.setValid(max31865Set0.temperatureCelcius.isValid());
|
||||
sensorTemperatures.sensor_ploc_heatspreader.setValid(
|
||||
max31865Set0.temperatureCelcius.isValid());
|
||||
if (not sensorTemperatures.sensor_ploc_heatspreader.isValid()) {
|
||||
sensorTemperatures.sensor_ploc_heatspreader.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg1(&max31865Set1);
|
||||
if (pg1.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_ploc_missionboard.value = max31865Set1.temperatureCelcius.value;
|
||||
sensorTemperatures.sensor_ploc_missionboard.setValid(max31865Set1.temperatureCelcius.isValid());
|
||||
sensorTemperatures.sensor_ploc_missionboard.setValid(
|
||||
max31865Set1.temperatureCelcius.isValid());
|
||||
if (not sensorTemperatures.sensor_ploc_missionboard.isValid()) {
|
||||
sensorTemperatures.sensor_ploc_missionboard.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg2(&max31865Set2);
|
||||
if (pg2.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_4k_camera.value = max31865Set2.temperatureCelcius.value;
|
||||
@ -260,16 +267,21 @@ void ThermalController::copySensors() {
|
||||
sensorTemperatures.sensor_4k_camera.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg3(&max31865Set3);
|
||||
if (pg3.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_dac_heatspreader.value = max31865Set3.temperatureCelcius.value;
|
||||
sensorTemperatures.sensor_dac_heatspreader.setValid(max31865Set3.temperatureCelcius.isValid());
|
||||
sensorTemperatures.sensor_dac_heatspreader.setValid(
|
||||
max31865Set3.temperatureCelcius.isValid());
|
||||
if (not sensorTemperatures.sensor_dac_heatspreader.isValid()) {
|
||||
sensorTemperatures.sensor_dac_heatspreader.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg4(&max31865Set4);
|
||||
if (pg4.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_startracker.value = max31865Set4.temperatureCelcius.value;
|
||||
@ -278,7 +290,9 @@ void ThermalController::copySensors() {
|
||||
sensorTemperatures.sensor_startracker.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg5(&max31865Set5);
|
||||
if (pg5.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_rw1.value = max31865Set5.temperatureCelcius.value;
|
||||
@ -287,7 +301,9 @@ void ThermalController::copySensors() {
|
||||
sensorTemperatures.sensor_rw1.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg6(&max31865Set6);
|
||||
if (pg6.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_dro.value = max31865Set6.temperatureCelcius.value;
|
||||
@ -296,7 +312,9 @@ void ThermalController::copySensors() {
|
||||
sensorTemperatures.sensor_dro.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg7(&max31865Set7);
|
||||
if (pg7.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_scex.value = max31865Set7.temperatureCelcius.value;
|
||||
@ -305,7 +323,9 @@ void ThermalController::copySensors() {
|
||||
sensorTemperatures.sensor_scex.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg8(&max31865Set8);
|
||||
if (pg8.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_x8.value = max31865Set8.temperatureCelcius.value;
|
||||
@ -314,7 +334,9 @@ void ThermalController::copySensors() {
|
||||
sensorTemperatures.sensor_x8.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg9(&max31865Set9);
|
||||
if (pg9.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_hpa.value = max31865Set9.temperatureCelcius.value;
|
||||
@ -323,7 +345,9 @@ void ThermalController::copySensors() {
|
||||
sensorTemperatures.sensor_hpa.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg10(&max31865Set10);
|
||||
if (pg10.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_tx_modul.value = max31865Set10.temperatureCelcius.value;
|
||||
@ -332,7 +356,9 @@ void ThermalController::copySensors() {
|
||||
sensorTemperatures.sensor_tx_modul.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg11(&max31865Set11);
|
||||
if (pg11.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_mpa.value = max31865Set11.temperatureCelcius.value;
|
||||
@ -341,7 +367,9 @@ void ThermalController::copySensors() {
|
||||
sensorTemperatures.sensor_mpa.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg12(&max31865Set12);
|
||||
if (pg12.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_acu.value = max31865Set12.temperatureCelcius.value;
|
||||
@ -350,7 +378,9 @@ void ThermalController::copySensors() {
|
||||
sensorTemperatures.sensor_acu.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg13(&max31865Set13);
|
||||
if (pg13.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_plpcdu_heatspreader.value = max31865Set13.temperatureCelcius.value;
|
||||
@ -360,7 +390,9 @@ void ThermalController::copySensors() {
|
||||
sensorTemperatures.sensor_plpcdu_heatspreader.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg14(&max31865Set14);
|
||||
if (pg14.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_tcs_board.value = max31865Set14.temperatureCelcius.value;
|
||||
@ -369,7 +401,9 @@ void ThermalController::copySensors() {
|
||||
sensorTemperatures.sensor_tcs_board.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg15(&max31865Set15);
|
||||
if (pg15.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_magnettorquer.value = max31865Set15.temperatureCelcius.value;
|
||||
@ -378,16 +412,22 @@ void ThermalController::copySensors() {
|
||||
sensorTemperatures.sensor_magnettorquer.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg111(&tmp1075Set1);
|
||||
if (pg1.getReadResult() == returnvalue::OK) {
|
||||
if (pg111.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_tmp1075_1.value = tmp1075Set1.temperatureCelcius.value;
|
||||
sensorTemperatures.sensor_tmp1075_1.setValid(tmp1075Set1.temperatureCelcius.isValid());
|
||||
if (not tmp1075Set1.temperatureCelcius.isValid()) {
|
||||
sensorTemperatures.sensor_tmp1075_1.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg112(&tmp1075Set2);
|
||||
if (pg2.getReadResult() == returnvalue::OK) {
|
||||
if (pg112.getReadResult() == returnvalue::OK) {
|
||||
sensorTemperatures.sensor_tmp1075_2.value = tmp1075Set2.temperatureCelcius.value;
|
||||
sensorTemperatures.sensor_tmp1075_2.setValid(tmp1075Set2.temperatureCelcius.isValid());
|
||||
if (not tmp1075Set2.temperatureCelcius.isValid()) {
|
||||
@ -395,8 +435,10 @@ void ThermalController::copySensors() {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ThermalController::copySus() {
|
||||
{
|
||||
PoolReadGuard pg0(&susSet0);
|
||||
if (pg0.getReadResult() == returnvalue::OK) {
|
||||
susTemperatures.sus_0_n_loc_xfyfzm_pt_xf.value = susSet0.temperatureCelcius.value;
|
||||
@ -405,7 +447,9 @@ void ThermalController::copySus() {
|
||||
susTemperatures.sus_0_n_loc_xfyfzm_pt_xf.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg1(&susSet1);
|
||||
if (pg1.getReadResult() == returnvalue::OK) {
|
||||
susTemperatures.sus_6_r_loc_xfybzm_pt_xf.value = susSet1.temperatureCelcius.value;
|
||||
@ -414,7 +458,9 @@ void ThermalController::copySus() {
|
||||
susTemperatures.sus_6_r_loc_xfybzm_pt_xf.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg2(&susSet2);
|
||||
if (pg2.getReadResult() == returnvalue::OK) {
|
||||
susTemperatures.sus_1_n_loc_xbyfzm_pt_xb.value = susSet2.temperatureCelcius.value;
|
||||
@ -423,7 +469,9 @@ void ThermalController::copySus() {
|
||||
susTemperatures.sus_1_n_loc_xbyfzm_pt_xb.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg3(&susSet3);
|
||||
if (pg3.getReadResult() == returnvalue::OK) {
|
||||
susTemperatures.sus_7_r_loc_xbybzm_pt_xb.value = susSet3.temperatureCelcius.value;
|
||||
@ -432,7 +480,9 @@ void ThermalController::copySus() {
|
||||
susTemperatures.sus_7_r_loc_xbybzm_pt_xb.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg4(&susSet4);
|
||||
if (pg4.getReadResult() == returnvalue::OK) {
|
||||
susTemperatures.sus_2_n_loc_xfybzb_pt_yb.value = susSet4.temperatureCelcius.value;
|
||||
@ -441,7 +491,9 @@ void ThermalController::copySus() {
|
||||
susTemperatures.sus_2_n_loc_xfybzb_pt_yb.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg5(&susSet5);
|
||||
if (pg5.getReadResult() == returnvalue::OK) {
|
||||
susTemperatures.sus_8_r_loc_xbybzb_pt_yb.value = susSet5.temperatureCelcius.value;
|
||||
@ -450,7 +502,9 @@ void ThermalController::copySus() {
|
||||
susTemperatures.sus_8_r_loc_xbybzb_pt_yb.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg6(&susSet6);
|
||||
if (pg6.getReadResult() == returnvalue::OK) {
|
||||
susTemperatures.sus_3_n_loc_xfybzf_pt_yf.value = susSet6.temperatureCelcius.value;
|
||||
@ -459,7 +513,9 @@ void ThermalController::copySus() {
|
||||
susTemperatures.sus_3_n_loc_xfybzf_pt_yf.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg7(&susSet7);
|
||||
if (pg7.getReadResult() == returnvalue::OK) {
|
||||
susTemperatures.sus_9_r_loc_xbybzb_pt_yf.value = susSet7.temperatureCelcius.value;
|
||||
@ -468,7 +524,9 @@ void ThermalController::copySus() {
|
||||
susTemperatures.sus_9_r_loc_xbybzb_pt_yf.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg8(&susSet8);
|
||||
if (pg8.getReadResult() == returnvalue::OK) {
|
||||
susTemperatures.sus_4_n_loc_xmyfzf_pt_zf.value = susSet8.temperatureCelcius.value;
|
||||
@ -477,7 +535,9 @@ void ThermalController::copySus() {
|
||||
susTemperatures.sus_4_n_loc_xmyfzf_pt_zf.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg9(&susSet9);
|
||||
if (pg9.getReadResult() == returnvalue::OK) {
|
||||
susTemperatures.sus_10_n_loc_xmybzf_pt_zf.value = susSet9.temperatureCelcius.value;
|
||||
@ -486,7 +546,9 @@ void ThermalController::copySus() {
|
||||
susTemperatures.sus_10_n_loc_xmybzf_pt_zf.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg10(&susSet10);
|
||||
if (pg10.getReadResult() == returnvalue::OK) {
|
||||
susTemperatures.sus_5_n_loc_xfymzb_pt_zb.value = susSet10.temperatureCelcius.value;
|
||||
@ -495,7 +557,9 @@ void ThermalController::copySus() {
|
||||
susTemperatures.sus_5_n_loc_xfymzb_pt_zb.value = INVALID_TEMPERATURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
PoolReadGuard pg11(&susSet11);
|
||||
if (pg11.getReadResult() == returnvalue::OK) {
|
||||
susTemperatures.sus_11_r_loc_xbymzb_pt_zb.value = susSet11.temperatureCelcius.value;
|
||||
@ -505,6 +569,7 @@ void ThermalController::copySus() {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ThermalController::copyDevices() {
|
||||
lp_var_t<float> tempQ7s = lp_var_t<float>(objects::CORE_CONTROLLER, core::PoolIds::TEMPERATURE);
|
||||
|
@ -98,7 +98,6 @@ ReturnValue_t ScexDeviceHandler::buildCommandFromCommand(DeviceCommandId_t devic
|
||||
prepareScexCmd(cmdTyped, {cmdBuf.data(), cmdBuf.size()}, rawPacketLen,
|
||||
{commandData + 1, commandDataLen - 1}, tempCheck);
|
||||
updatePeriodicReply(true, deviceCommand);
|
||||
finishAction(true, deviceCommand, OK);
|
||||
break;
|
||||
}
|
||||
case (ONE_CELL): {
|
||||
@ -108,7 +107,6 @@ ReturnValue_t ScexDeviceHandler::buildCommandFromCommand(DeviceCommandId_t devic
|
||||
prepareScexCmd(cmdTyped, {cmdBuf.data(), cmdBuf.size()}, rawPacketLen,
|
||||
{commandData + 1, commandDataLen - 1}, tempCheck);
|
||||
updatePeriodicReply(true, deviceCommand);
|
||||
finishAction(true, deviceCommand, OK);
|
||||
break;
|
||||
}
|
||||
case (ALL_CELLS_CMD): {
|
||||
@ -117,7 +115,6 @@ ReturnValue_t ScexDeviceHandler::buildCommandFromCommand(DeviceCommandId_t devic
|
||||
finishCountdown.resetTimer();
|
||||
prepareScexCmd(cmdTyped, {cmdBuf.data(), cmdBuf.size()}, rawPacketLen,
|
||||
{commandData + 1, commandDataLen - 1}, tempCheck);
|
||||
finishAction(true, deviceCommand, OK);
|
||||
updatePeriodicReply(true, deviceCommand);
|
||||
break;
|
||||
}
|
||||
@ -175,14 +172,17 @@ ReturnValue_t ScexDeviceHandler::handleValidReply(size_t remSize, DeviceCommandI
|
||||
sif::info << "ScexDeviceHandler::handleValidReply: RemMillis: " << remainingMillis
|
||||
<< std::endl;
|
||||
}
|
||||
finishAction(true, helper.getCmd(), OK);
|
||||
result = APERIODIC_REPLY;
|
||||
break;
|
||||
}
|
||||
case (ONE_CELL): {
|
||||
finishAction(true, helper.getCmd(), OK);
|
||||
result = APERIODIC_REPLY;
|
||||
break;
|
||||
}
|
||||
case (ALL_CELLS_CMD): {
|
||||
finishAction(true, helper.getCmd(), OK);
|
||||
result = APERIODIC_REPLY;
|
||||
break;
|
||||
}
|
||||
|
2
tmtc
2
tmtc
Submodule tmtc updated: a91d40f333...4c3f5f2825
Reference in New Issue
Block a user