From 98597b98d7a67a2ac78458e9ef868156e5d710ff Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 20 Dec 2022 11:43:02 +0100 Subject: [PATCH 01/15] use memset for zeroing --- mission/controller/AcsController.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/mission/controller/AcsController.cpp b/mission/controller/AcsController.cpp index f9ea5926..1f215ded 100644 --- a/mission/controller/AcsController.cpp +++ b/mission/controller/AcsController.cpp @@ -219,10 +219,9 @@ void AcsController::performDetumble() { { PoolReadGuard pg(&actuatorCmdData); if (pg.getReadResult() == returnvalue::OK) { - int32_t zeroVec[4] = {0, 0, 0, 0}; - std::memcpy(actuatorCmdData.rwTargetTorque.value, zeroVec, 4 * sizeof(double)); + std::memset(actuatorCmdData.rwTargetTorque.value, 0, 4 * sizeof(double)); actuatorCmdData.rwTargetTorque.setValid(false); - std::memcpy(actuatorCmdData.rwTargetSpeed.value, zeroVec, 4 * sizeof(int32_t)); + std::memset(actuatorCmdData.rwTargetSpeed.value, 0, 4 * sizeof(int32_t)); actuatorCmdData.rwTargetSpeed.setValid(false); std::memcpy(actuatorCmdData.mtqTargetDipole.value, cmdDipolUnitsInt, 3 * sizeof(int16_t)); actuatorCmdData.mtqTargetDipole.setValid(true); From de3b2cefb0d5b176926464801f8fe24197313e14 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 20 Dec 2022 11:45:21 +0100 Subject: [PATCH 02/15] reinitiate reboot file disabled --- bsp_q7s/core/CoreController.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bsp_q7s/core/CoreController.cpp b/bsp_q7s/core/CoreController.cpp index a1491044..23c6cc4f 100644 --- a/bsp_q7s/core/CoreController.cpp +++ b/bsp_q7s/core/CoreController.cpp @@ -1323,7 +1323,7 @@ void CoreController::performRebootFileHandling(bool recreateFile) { #if OBSW_VERBOSE_LEVEL >= 1 sif::info << "CoreController::performRebootFileHandling: Recreating reboot file" << std::endl; #endif - rebootFile.enabled = true; + rebootFile.enabled = false; rebootFile.img00Cnt = 0; rebootFile.img01Cnt = 0; rebootFile.img10Cnt = 0; From c83a6a44c6977aad83120435f3552f02338aa66f Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Tue, 20 Dec 2022 11:45:46 +0100 Subject: [PATCH 03/15] actually use those defines --- bsp_q7s/fmObjectFactory.cpp | 4 ++++ tmtc | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/bsp_q7s/fmObjectFactory.cpp b/bsp_q7s/fmObjectFactory.cpp index c56dcf8d..2814c3f9 100644 --- a/bsp_q7s/fmObjectFactory.cpp +++ b/bsp_q7s/fmObjectFactory.cpp @@ -33,8 +33,12 @@ void ObjectFactory::produce(void* args) { new CoreController(objects::CORE_CONTROLLER); createPcduComponents(gpioComIF, &pwrSwitcher); +#if OBSW_ADD_RAD_SENSORS == 1 createRadSensorComponent(gpioComIF); +#endif +#if OBSW_ADD_SUN_SENSORS == 1 createSunSensorComponents(gpioComIF, spiMainComIF, pwrSwitcher, q7s::SPI_DEFAULT_DEV); +#endif #if OBSW_ADD_ACS_BOARD == 1 createAcsBoardComponents(gpioComIF, uartComIF, pwrSwitcher); diff --git a/tmtc b/tmtc index 96e27e71..383b3214 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 96e27e716349bf01cac11c7e7b0b497a36149e87 +Subproject commit 383b32141c8c382b84c587d6814fe9252dde0b4a From 7df7ced43e16f501cbd9087e64b299fbabc2708b Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 21 Dec 2022 13:40:31 +0100 Subject: [PATCH 04/15] added 5v stack command --- mission/devices/PCDUHandler.cpp | 5 +++++ mission/devices/devicedefinitions/GomspaceDefinitions.h | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/mission/devices/PCDUHandler.cpp b/mission/devices/PCDUHandler.cpp index 91881db5..71b4734e 100644 --- a/mission/devices/PCDUHandler.cpp +++ b/mission/devices/PCDUHandler.cpp @@ -321,6 +321,11 @@ ReturnValue_t PCDUHandler::sendSwitchCommand(uint8_t switchNr, ReturnValue_t onO pdu = ObjectManager::instance()->get(objects::PDU2_HANDLER); break; } + case pcdu::P60_DOCK_5V_STACK: { + memoryAddress = P60Dock::CONFIG_ADDRESS_OUT_EN_5V_STACK; + pdu = ObjectManager::instance()->get(objects::P60DOCK_HANDLER); + break; + } default: { sif::error << "PCDUHandler::sendSwitchCommand: Invalid switch number " << std::endl; diff --git a/mission/devices/devicedefinitions/GomspaceDefinitions.h b/mission/devices/devicedefinitions/GomspaceDefinitions.h index d2ffdc25..ca92f5e4 100644 --- a/mission/devices/devicedefinitions/GomspaceDefinitions.h +++ b/mission/devices/devicedefinitions/GomspaceDefinitions.h @@ -108,6 +108,8 @@ enum class SetIds : uint32_t { CORE = 1, AUX = 2, CONFIG = 3 }; namespace P60Dock { +static const uint16_t CONFIG_ADDRESS_OUT_EN_5V_STACK = 0x72; + namespace pool { enum Ids : lp_id_t { @@ -733,7 +735,9 @@ enum Switches : power::Switch_t { PDU2_CH5_DEPLOYMENT_MECHANISM_8V, PDU2_CH6_PL_PCDU_BATT_1_14V8, PDU2_CH7_ACS_BOARD_SIDE_B_3V3, - PDU2_CH8_PAYLOAD_CAMERA + PDU2_CH8_PAYLOAD_CAMERA, + + P60_DOCK_5V_STACK }; static constexpr uint8_t NUMBER_OF_SWITCHES = 18; From 9024460da34f7e1eb162467eaf5bcb10a7c1fc5b Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 21 Dec 2022 13:44:48 +0100 Subject: [PATCH 05/15] changelog update --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf627b3a..b7f27fc7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ list yields a list of all related PRs for each release. - First version of ACS controller PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/329 +- Allow commanding the 5V stack internally in software + PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/334 # [v1.18.0] 01.12.2022 From b53cc475febde310dea1a271e1f527860d18d852 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 21 Dec 2022 16:11:53 +0100 Subject: [PATCH 06/15] bugfix acs controller --- mission/controller/AcsController.cpp | 2 +- tmtc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mission/controller/AcsController.cpp b/mission/controller/AcsController.cpp index 1f215ded..ca030f1d 100644 --- a/mission/controller/AcsController.cpp +++ b/mission/controller/AcsController.cpp @@ -467,7 +467,7 @@ void AcsController::copyMgmData() { PoolReadGuard pg(&sensorValues.mgm3Rm3100Set); if (pg.getReadResult() == returnvalue::OK) { std::memcpy(mgmDataRaw.mgm3Rm3100.value, sensorValues.mgm3Rm3100Set.fieldStrengths.value, - 3 + sizeof(float)); + 3 * sizeof(float)); mgmDataRaw.mgm3Rm3100.setValid(sensorValues.mgm3Rm3100Set.fieldStrengths.isValid()); } } diff --git a/tmtc b/tmtc index 383b3214..00991b92 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 383b32141c8c382b84c587d6814fe9252dde0b4a +Subproject commit 00991b92f15425aa80d2448ad304de46a08b5470 From cbf5ca6d93028f46ba494bd2722984d33e250423 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Thu, 22 Dec 2022 17:17:23 +0100 Subject: [PATCH 07/15] minor fixes for MPSoC code --- .../devicedefinitions/PlocMPSoCDefinitions.h | 2 +- linux/devices/ploc/PlocMPSoCHandler.cpp | 26 +++---------------- linux/devices/ploc/PlocMPSoCHandler.h | 5 +--- 3 files changed, 5 insertions(+), 28 deletions(-) diff --git a/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h b/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h index 8a88a716..9cb609bf 100644 --- a/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h +++ b/linux/devices/devicedefinitions/PlocMPSoCDefinitions.h @@ -152,7 +152,7 @@ class TcBase : public ploc::SpTcBase, public MPSoCReturnValuesIF { * sent and received packets. */ TcBase(ploc::SpTcParams params, uint16_t apid, uint16_t sequenceCount) - : ploc::SpTcBase(params, apid, sequenceCount) { + : ploc::SpTcBase(params, apid, 0, sequenceCount) { spParams.setFullPayloadLen(INIT_LENGTH); } diff --git a/linux/devices/ploc/PlocMPSoCHandler.cpp b/linux/devices/ploc/PlocMPSoCHandler.cpp index 28513314..2ac58335 100644 --- a/linux/devices/ploc/PlocMPSoCHandler.cpp +++ b/linux/devices/ploc/PlocMPSoCHandler.cpp @@ -184,12 +184,14 @@ void PlocMPSoCHandler::doShutDown() { powerState = PowerState::SHUTDOWN; break; case PowerState::OFF: + sequenceCount = 0; setMode(_MODE_POWER_DOWN); break; default: break; } #else + sequenceCount = 0; uartIsolatorSwitch.pullLow(); setMode(_MODE_POWER_DOWN); powerState = PowerState::OFF; @@ -340,7 +342,6 @@ ReturnValue_t PlocMPSoCHandler::scanForReply(const uint8_t* start, size_t remain } } - sequenceCount++; uint16_t recvSeqCnt = (*(start + 2) << 8 | *(start + 3)) & PACKET_SEQUENCE_COUNT_MASK; if (recvSeqCnt != sequenceCount) { triggerEvent(MPSOC_HANDLER_SEQUENCE_COUNT_MISMATCH, sequenceCount, recvSeqCnt); @@ -403,11 +404,9 @@ void PlocMPSoCHandler::handleEvent(EventMessage* eventMessage) { ReturnValue_t PlocMPSoCHandler::prepareTcMemWrite(const uint8_t* commandData, size_t commandDataLen) { ReturnValue_t result = returnvalue::OK; - sequenceCount++; mpsoc::TcMemWrite tcMemWrite(spParams, sequenceCount); result = tcMemWrite.buildPacket(commandData, commandDataLen); if (result != returnvalue::OK) { - sequenceCount--; return result; } finishTcPrep(tcMemWrite.getFullPacketLen()); @@ -417,11 +416,9 @@ ReturnValue_t PlocMPSoCHandler::prepareTcMemWrite(const uint8_t* commandData, ReturnValue_t PlocMPSoCHandler::prepareTcMemRead(const uint8_t* commandData, size_t commandDataLen) { ReturnValue_t result = returnvalue::OK; - sequenceCount++; mpsoc::TcMemRead tcMemRead(spParams, sequenceCount); result = tcMemRead.buildPacket(commandData, commandDataLen); if (result != returnvalue::OK) { - sequenceCount--; return result; } finishTcPrep(tcMemRead.getFullPacketLen()); @@ -435,12 +432,10 @@ ReturnValue_t PlocMPSoCHandler::prepareTcFlashDelete(const uint8_t* commandData, return MPSoCReturnValuesIF::NAME_TOO_LONG; } ReturnValue_t result = returnvalue::OK; - sequenceCount++; mpsoc::TcFlashDelete tcFlashDelete(spParams, sequenceCount); result = tcFlashDelete.buildPacket( std::string(reinterpret_cast(commandData), commandDataLen)); if (result != returnvalue::OK) { - sequenceCount--; return result; } finishTcPrep(tcFlashDelete.getFullPacketLen()); @@ -450,11 +445,9 @@ ReturnValue_t PlocMPSoCHandler::prepareTcFlashDelete(const uint8_t* commandData, ReturnValue_t PlocMPSoCHandler::prepareTcReplayStart(const uint8_t* commandData, size_t commandDataLen) { ReturnValue_t result = returnvalue::OK; - sequenceCount++; mpsoc::TcReplayStart tcReplayStart(spParams, sequenceCount); result = tcReplayStart.buildPacket(commandData, commandDataLen); if (result != returnvalue::OK) { - sequenceCount--; return result; } finishTcPrep(tcReplayStart.getFullPacketLen()); @@ -463,11 +456,9 @@ ReturnValue_t PlocMPSoCHandler::prepareTcReplayStart(const uint8_t* commandData, ReturnValue_t PlocMPSoCHandler::prepareTcReplayStop() { ReturnValue_t result = returnvalue::OK; - sequenceCount++; mpsoc::TcReplayStop tcReplayStop(spParams, sequenceCount); result = tcReplayStop.buildPacket(); if (result != returnvalue::OK) { - sequenceCount--; return result; } finishTcPrep(tcReplayStop.getFullPacketLen()); @@ -477,11 +468,9 @@ ReturnValue_t PlocMPSoCHandler::prepareTcReplayStop() { ReturnValue_t PlocMPSoCHandler::prepareTcDownlinkPwrOn(const uint8_t* commandData, size_t commandDataLen) { ReturnValue_t result = returnvalue::OK; - sequenceCount++; mpsoc::TcDownlinkPwrOn tcDownlinkPwrOn(spParams, sequenceCount); result = tcDownlinkPwrOn.buildPacket(commandData, commandDataLen); if (result != returnvalue::OK) { - sequenceCount--; return result; } finishTcPrep(tcDownlinkPwrOn.getFullPacketLen()); @@ -490,11 +479,9 @@ ReturnValue_t PlocMPSoCHandler::prepareTcDownlinkPwrOn(const uint8_t* commandDat ReturnValue_t PlocMPSoCHandler::prepareTcDownlinkPwrOff() { ReturnValue_t result = returnvalue::OK; - sequenceCount++; mpsoc::TcDownlinkPwrOff tcDownlinkPwrOff(spParams, sequenceCount); result = tcDownlinkPwrOff.buildPacket(); if (result != returnvalue::OK) { - sequenceCount--; return result; } finishTcPrep(tcDownlinkPwrOff.getFullPacketLen()); @@ -504,11 +491,9 @@ ReturnValue_t PlocMPSoCHandler::prepareTcDownlinkPwrOff() { ReturnValue_t PlocMPSoCHandler::prepareTcReplayWriteSequence(const uint8_t* commandData, size_t commandDataLen) { ReturnValue_t result = returnvalue::OK; - sequenceCount++; mpsoc::TcReplayWriteSeq tcReplayWriteSeq(spParams, sequenceCount); result = tcReplayWriteSeq.buildPacket(commandData, commandDataLen); if (result != returnvalue::OK) { - sequenceCount--; return result; } finishTcPrep(tcReplayWriteSeq.getFullPacketLen()); @@ -517,11 +502,9 @@ ReturnValue_t PlocMPSoCHandler::prepareTcReplayWriteSequence(const uint8_t* comm ReturnValue_t PlocMPSoCHandler::prepareTcModeReplay() { ReturnValue_t result = returnvalue::OK; - sequenceCount++; mpsoc::TcModeReplay tcModeReplay(spParams, sequenceCount); result = tcModeReplay.buildPacket(); if (result != returnvalue::OK) { - sequenceCount--; return result; } finishTcPrep(tcModeReplay.getFullPacketLen()); @@ -530,11 +513,9 @@ ReturnValue_t PlocMPSoCHandler::prepareTcModeReplay() { ReturnValue_t PlocMPSoCHandler::prepareTcModeIdle() { ReturnValue_t result = returnvalue::OK; - sequenceCount++; mpsoc::TcModeIdle tcModeIdle(spParams, sequenceCount); result = tcModeIdle.buildPacket(); if (result != returnvalue::OK) { - sequenceCount--; return result; } finishTcPrep(tcModeIdle.getFullPacketLen()); @@ -544,11 +525,9 @@ ReturnValue_t PlocMPSoCHandler::prepareTcModeIdle() { ReturnValue_t PlocMPSoCHandler::prepareTcCamCmdSend(const uint8_t* commandData, size_t commandDataLen) { ReturnValue_t result = returnvalue::OK; - sequenceCount++; mpsoc::TcCamcmdSend tcCamCmdSend(spParams, sequenceCount); result = tcCamCmdSend.buildPacket(commandData, commandDataLen); if (result != returnvalue::OK) { - sequenceCount--; return result; } finishTcPrep(tcCamCmdSend.getFullPacketLen()); @@ -560,6 +539,7 @@ void PlocMPSoCHandler::finishTcPrep(size_t packetLen) { nextReplyId = mpsoc::ACK_REPORT; rawPacket = commandBuffer; rawPacketLen = packetLen; + sequenceCount++; } ReturnValue_t PlocMPSoCHandler::verifyPacket(const uint8_t* start, size_t foundLen) { diff --git a/linux/devices/ploc/PlocMPSoCHandler.h b/linux/devices/ploc/PlocMPSoCHandler.h index a7d7a427..99a12515 100644 --- a/linux/devices/ploc/PlocMPSoCHandler.h +++ b/linux/devices/ploc/PlocMPSoCHandler.h @@ -107,10 +107,7 @@ class PlocMPSoCHandler : public DeviceHandlerBase, public CommandsActionsIF { MessageQueueIF* eventQueue = nullptr; MessageQueueIF* commandActionHelperQueue = nullptr; - // Initiate the sequence count with the maximum value. It is incremented before - // a packet is sent, so the first value will be 0 accordingly using - // the wrap around of the counter. - SourceSequenceCounter sequenceCount = SourceSequenceCounter(ccsds::LIMIT_SEQUENCE_COUNT - 1); + SourceSequenceCounter sequenceCount = SourceSequenceCounter(0); uint8_t commandBuffer[mpsoc::MAX_COMMAND_SIZE]; SpacePacketCreator creator; From 30aa802069019d325ad15361ed37dcaa7004edd2 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 23 Dec 2022 10:13:26 +0100 Subject: [PATCH 08/15] minor udpates for PLOC SUPV code --- .../devicedefinitions/PlocSupervisorDefinitions.h | 10 +++------- linux/devices/ploc/PlocSupervisorHandler.cpp | 7 +++---- tmtc | 2 +- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h index cb0639fa..ffc310f0 100644 --- a/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h +++ b/linux/devices/devicedefinitions/PlocSupervisorDefinitions.h @@ -730,17 +730,13 @@ class FactoryReset : public TcBase { : TcBase(params, Apid::DATA_LOGGER, static_cast(tc::DataLoggerServiceId::FACTORY_RESET), 0) {} - ReturnValue_t buildPacket(std::optional op) { - if (op) { - setLenFromPayloadLen(1); - } + ReturnValue_t buildPacket(uint8_t op) { + setLenFromPayloadLen(1); auto res = checkSizeAndSerializeHeader(); if (res != returnvalue::OK) { return res; } - if (op) { - payloadStart[0] = op.value(); - } + payloadStart[0] = op; return calcAndSetCrc(); } diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 08c63b1a..74ea8780 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -1467,11 +1467,10 @@ ReturnValue_t PlocSupervisorHandler::prepareReadGpioCmd(const uint8_t* commandDa ReturnValue_t PlocSupervisorHandler::prepareFactoryResetCmd(const uint8_t* commandData, size_t len) { FactoryReset resetCmd(spParams); - std::optional op; - if (len > 0) { - op = commandData[0]; + if (len < 1) { + return HasActionsIF::INVALID_PARAMETERS; } - ReturnValue_t result = resetCmd.buildPacket(op); + ReturnValue_t result = resetCmd.buildPacket(commandData[0]); if (result != returnvalue::OK) { return result; } diff --git a/tmtc b/tmtc index 00991b92..20c2f615 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 00991b92f15425aa80d2448ad304de46a08b5470 +Subproject commit 20c2f615555e5e7ddc03a2a22e225f75dff1c320 From 0163791e26884b05a79dfea7b4ffc6518b9469d1 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 23 Dec 2022 10:17:54 +0100 Subject: [PATCH 09/15] bump tmtc --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index 20c2f615..825a1972 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 20c2f615555e5e7ddc03a2a22e225f75dff1c320 +Subproject commit 825a1972c4ca63f8044eff582a97b4221d513fec From 5e1d0543d7a521c89680eec1c2f05633c55e0317 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 23 Dec 2022 10:32:21 +0100 Subject: [PATCH 10/15] afmt --- linux/devices/ploc/PlocSupervisorHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 74ea8780..54af97ec 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -1468,7 +1468,7 @@ ReturnValue_t PlocSupervisorHandler::prepareFactoryResetCmd(const uint8_t* comma size_t len) { FactoryReset resetCmd(spParams); if (len < 1) { - return HasActionsIF::INVALID_PARAMETERS; + return HasActionsIF::INVALID_PARAMETERS; } ReturnValue_t result = resetCmd.buildPacket(commandData[0]); if (result != returnvalue::OK) { From 04b9b035025cd8f89dc27579d9ddfe261ecc23a4 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 23 Dec 2022 11:00:28 +0100 Subject: [PATCH 11/15] bump tmtc --- tmtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmtc b/tmtc index 825a1972..5c675560 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 825a1972c4ca63f8044eff582a97b4221d513fec +Subproject commit 5c675560eadadfbb5e674d9be87c206df09d1771 From cfae090de4c40c775d0fef574093780a5e1f65f9 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 23 Dec 2022 11:46:01 +0100 Subject: [PATCH 12/15] improvements for ploc supv SW --- linux/devices/ploc/PlocSupervisorHandler.cpp | 38 +++++++++++--------- linux/devices/ploc/PlocSupervisorHandler.h | 8 ++--- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/linux/devices/ploc/PlocSupervisorHandler.cpp b/linux/devices/ploc/PlocSupervisorHandler.cpp index 54af97ec..17657b50 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.cpp +++ b/linux/devices/ploc/PlocSupervisorHandler.cpp @@ -136,29 +136,34 @@ ReturnValue_t PlocSupervisorHandler::executeAction(ActionId_t actionId, } void PlocSupervisorHandler::doStartUp() { - if (setTimeDuringStartup) { - if (startupState == StartupState::OFF) { - bootTimeout.resetTimer(); - startupState = StartupState::BOOTING; - } - if (startupState == StartupState::BOOTING) { - if (bootTimeout.hasTimedOut()) { - uartIsolatorSwitch.pullHigh(); - uartManager.start(); + if (startupState == StartupState::OFF) { + bootTimeout.resetTimer(); + startupState = StartupState::BOOTING; + } + if (startupState == StartupState::BOOTING) { + if (bootTimeout.hasTimedOut()) { + uartIsolatorSwitch.pullHigh(); + uartManager.start(); + if (SET_TIME_DURING_BOOT) { startupState = StartupState::SET_TIME; + } else { + startupState = StartupState::ON; } } - if (startupState == StartupState::ON) { - setMode(_MODE_TO_ON); - } - } else { - uartIsolatorSwitch.pullHigh(); + } + if (startupState == StartupState::SET_TIME_EXECUTING) { + startupState = StartupState::ON; + } + if (startupState == StartupState::ON) { setMode(_MODE_TO_ON); } } void PlocSupervisorHandler::doShutDown() { setMode(_MODE_POWER_DOWN); + shutdownCmdSent = false; + packetInBuffer = false; + nextReplyId = supv::NONE; uartManager.stop(); uartIsolatorSwitch.pullLow(); startupState = StartupState::OFF; @@ -1896,9 +1901,8 @@ ReturnValue_t PlocSupervisorHandler::handleExecutionSuccessReport(ExecutionRepor break; } case supv::SET_TIME_REF: { - if (startupState == StartupState::SET_TIME_EXECUTING) { - startupState = StartupState::ON; - } + // We could only allow proper bootup when the time was set successfully, but + // this makes debugging difficult. break; } default: diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index 4ffe4166..85934cdc 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -97,11 +97,11 @@ class PlocSupervisorHandler : public DeviceHandlerBase { static const uint32_t COPY_ADC_TO_MRAM_TIMEOUT = 70000; // 60 s static const uint32_t MRAM_DUMP_TIMEOUT = 60000; - // 2 s - static const uint32_t BOOT_TIMEOUT = 2000; + // 5 s + static const uint32_t BOOT_TIMEOUT = 5000; enum class StartupState : uint8_t { OFF, BOOTING, SET_TIME, SET_TIME_EXECUTING, ON }; - bool setTimeDuringStartup = true; + static constexpr bool SET_TIME_DURING_BOOT = true; StartupState startupState = StartupState::OFF; @@ -138,8 +138,6 @@ class PlocSupervisorHandler : public DeviceHandlerBase { uint32_t receivedMramDumpPackets = 0; /** Set to true as soon as a complete space packet is present in the spacePacketBuffer */ bool packetInBuffer = false; - /** Points to the next free position in the space packet buffer */ - uint16_t bufferTop = 0; /** This buffer is used to concatenate space packets received in two different read steps */ uint8_t spacePacketBuffer[supv::MAX_PACKET_SIZE]; From 8fedaa43e909c9061728db0eafb82090cc225ba3 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 23 Dec 2022 12:14:01 +0100 Subject: [PATCH 13/15] important bugfix for PLOC SUPV --- linux/devices/ploc/PlocSupervisorHandler.h | 4 ++-- linux/devices/ploc/PlocSupvUartMan.cpp | 12 ++++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/linux/devices/ploc/PlocSupervisorHandler.h b/linux/devices/ploc/PlocSupervisorHandler.h index 85934cdc..52e2619b 100644 --- a/linux/devices/ploc/PlocSupervisorHandler.h +++ b/linux/devices/ploc/PlocSupervisorHandler.h @@ -97,8 +97,8 @@ class PlocSupervisorHandler : public DeviceHandlerBase { static const uint32_t COPY_ADC_TO_MRAM_TIMEOUT = 70000; // 60 s static const uint32_t MRAM_DUMP_TIMEOUT = 60000; - // 5 s - static const uint32_t BOOT_TIMEOUT = 5000; + // 4 s + static const uint32_t BOOT_TIMEOUT = 4000; enum class StartupState : uint8_t { OFF, BOOTING, SET_TIME, SET_TIME_EXECUTING, ON }; static constexpr bool SET_TIME_DURING_BOOT = true; diff --git a/linux/devices/ploc/PlocSupvUartMan.cpp b/linux/devices/ploc/PlocSupvUartMan.cpp index a246d97c..1fd2b841 100644 --- a/linux/devices/ploc/PlocSupvUartMan.cpp +++ b/linux/devices/ploc/PlocSupvUartMan.cpp @@ -100,6 +100,7 @@ ReturnValue_t PlocSupvUartManager::performOperation(uint8_t operationCode) { state = InternalState::SLEEPING; lock->unlockMutex(); semaphore->acquire(); + putTaskToSleep = false; while (true) { if (putTaskToSleep) { performUartShutdown(); @@ -295,11 +296,14 @@ void PlocSupvUartManager::stop() { } void PlocSupvUartManager::start() { - MutexGuard mg(lock); - if (state != InternalState::SLEEPING and state != InternalState::GO_TO_SLEEP) { - return; + { + MutexGuard mg(lock); + if (state != InternalState::SLEEPING and state != InternalState::GO_TO_SLEEP) { + return; + } + state = InternalState::DEFAULT; } - state = InternalState::DEFAULT; + semaphore->release(); } From 2531de507aedde1995b8e3283ac4ba1f1cf2dfed Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 23 Dec 2022 12:18:44 +0100 Subject: [PATCH 14/15] bump changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b7f27fc7..21bdd758 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,10 @@ list yields a list of all related PRs for each release. # [unreleased] +## Fixed + +- PLOC SUPV: Minor adaptions and important bugfix for UART manager + ## Added - First version of ACS controller From 76b162113f0f88430bd1b1c87c0a92baad84ae45 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Fri, 23 Dec 2022 12:50:10 +0100 Subject: [PATCH 15/15] add normal to on trnasition --- mission/devices/PayloadPcduHandler.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/mission/devices/PayloadPcduHandler.cpp b/mission/devices/PayloadPcduHandler.cpp index 7b4353e4..f4aba7ef 100644 --- a/mission/devices/PayloadPcduHandler.cpp +++ b/mission/devices/PayloadPcduHandler.cpp @@ -69,6 +69,16 @@ void PayloadPcduHandler::doTransition(Mode_t modeFrom, Submode_t subModeFrom) { if (getMode() == _MODE_TO_NORMAL) { stateMachineToNormal(modeFrom, subModeFrom); return; + } else if (getMode() == _MODE_TO_ON and modeFrom == MODE_NORMAL) { + gpioIF->pullLow(gpioIds::PLPCDU_ENB_HPA); + gpioIF->pullLow(gpioIds::PLPCDU_ENB_MPA); + gpioIF->pullLow(gpioIds::PLPCDU_ENB_TX); + gpioIF->pullLow(gpioIds::PLPCDU_ENB_X8); + gpioIF->pullLow(gpioIds::PLPCDU_ENB_DRO); + gpioIF->pullLow(gpioIds::PLPCDU_ENB_TX); + gpioIF->pullLow(gpioIds::PLPCDU_ENB_VBAT0); + gpioIF->pullLow(gpioIds::PLPCDU_ENB_VBAT1); + state = States::POWER_CHANNELS_ON; } DeviceHandlerBase::doTransition(modeFrom, subModeFrom); } @@ -144,6 +154,10 @@ ReturnValue_t PayloadPcduHandler::stateMachineToNormal(Mode_t modeFrom, Submode_ } }; + // sif::debug << "DIFF MASK: " << (int)diffMask << std::endl; + + // No handling for the SSRs: If those are pulled low, the ADC is off + // and normal mode does not really make sense anyway switchHandler(DRO_ON, gpioIds::PLPCDU_ENB_DRO, "DRO"); switchHandler(X8_ON, gpioIds::PLPCDU_ENB_X8, "X8"); switchHandler(TX_ON, gpioIds::PLPCDU_ENB_TX, "TX");