diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e4a138c..65ec154d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,9 @@ will consitute of a breaking change warranting a new major release: completed immediately. - CFDP Space Packets SSC is now generated properly, was always 0 before. - Host build fixes +- PL Enable set of the power controller is now set to invalid properly if the power controller + is not in normal mode. +- MPSoC debug mode. # [v7.1.0] 2023-10-11 diff --git a/linux/payload/PlocMpsocHandler.cpp b/linux/payload/PlocMpsocHandler.cpp index 66fba6d8..34053c70 100644 --- a/linux/payload/PlocMpsocHandler.cpp +++ b/linux/payload/PlocMpsocHandler.cpp @@ -91,6 +91,8 @@ ReturnValue_t PlocMpsocHandler::initialize() { void PlocMpsocHandler::performOperationHook() { if (commandIsPending and cmdCountdown.hasTimedOut()) { + sif::warning << "PlocMpsocHandler: Command " << getPendingCommand() << " has timed out" + << std::endl; commandIsPending = false; // TODO: Better returnvalue? cmdDoneHandler(false, returnvalue::FAILED); @@ -215,7 +217,6 @@ ReturnValue_t PlocMpsocHandler::buildNormalDeviceCommand(DeviceCommandId_t* id) if (not commandIsPending and not specialComHelperExecuting) { *id = mpsoc::TC_GET_HK_REPORT; commandIsPending = true; - cmdCountdown.resetTimer(); return buildCommandFromCommand(*id, nullptr, 0); } return NOTHING_TO_SEND; @@ -352,6 +353,11 @@ ReturnValue_t PlocMpsocHandler::scanForReply(const uint8_t* start, size_t remain SpacePacketReader spacePacket; spacePacket.setReadOnlyData(start, remainingSize); + if (DEBUG_MPSOC_COMMUNICATION) { + sif::debug << "RECV MPSOC packet. APID 0x" << std::hex << std::setw(3) << spacePacket.getApid() + << std::dec << " Size " << spacePacket.getFullPacketLen() << " SSC " + << spacePacket.getSequenceCount() << std::endl; + } if (spacePacket.isNull()) { return returnvalue::FAILED; } @@ -467,7 +473,7 @@ void PlocMpsocHandler::setNormalDatapoolEntriesInvalid() { hkReport.setValidity(false, true); } -uint32_t PlocMpsocHandler::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) { return 10000; } +uint32_t PlocMpsocHandler::getTransitionDelayMs(Mode_t modeFrom, Mode_t modeTo) { return 15000; } ReturnValue_t PlocMpsocHandler::initializeLocalDataPool(localpool::DataPool& localDataPoolMap, LocalDataPoolManager& poolManager) { @@ -700,6 +706,13 @@ ReturnValue_t PlocMpsocHandler::finishTcPrep(mpsoc::TcBase& tcBase) { rawPacket = commandBuffer; rawPacketLen = tcBase.getFullPacketLen(); sequenceCount++; + + if (DEBUG_MPSOC_COMMUNICATION) { + sif::debug << "SEND MPSOC packet. APID 0x" << std::hex << std::setw(3) << tcBase.getApid() + << " Size " << std::dec << tcBase.getFullPacketLen() << " SSC " + << tcBase.getSeqCount() << std::endl; + } + cmdCountdown.resetTimer(); return returnvalue::OK; } @@ -1223,10 +1236,12 @@ void PlocMpsocHandler::dataReceived(ActionId_t actionId, const uint8_t* data, ui void PlocMpsocHandler::completionSuccessfulReceived(ActionId_t actionId) { if (actionId == supv::ACK_REPORT) { - sif::warning - << "PlocMpsocHandler::completionSuccessfulReceived: Only received ACK report. Consider " - "increasing the MPSoC boot timer." - << std::endl; + // I seriously don't know why this happens.. + // sif::warning + // << "PlocMpsocHandler::completionSuccessfulReceived: Only received ACK report. Consider + // " + // "increasing the MPSoC boot timer." + // << std::endl; } else if (actionId != supv::EXE_REPORT) { sif::warning << "PlocMpsocHandler::completionSuccessfulReceived: Did not expect the action " << "ID " << actionId << std::endl; @@ -1490,7 +1505,7 @@ LocalPoolDataSetBase* PlocMpsocHandler::getDataSetHandle(sid_t sid) { bool PlocMpsocHandler::dontCheckQueue() { // The TC and TMs need to be handled strictly sequentially, so while a command is pending, - // more specifically while replies are still expected, do not check the queue.s + // more specifically while replies are still expected, do not check the queue. return commandIsPending; } diff --git a/linux/payload/PlocMpsocHandler.h b/linux/payload/PlocMpsocHandler.h index 0203b942..5d584943 100644 --- a/linux/payload/PlocMpsocHandler.h +++ b/linux/payload/PlocMpsocHandler.h @@ -17,6 +17,8 @@ #include "fsfw_hal/linux/gpio/Gpio.h" #include "fsfw_hal/linux/serial/SerialComIF.h" +static constexpr bool DEBUG_MPSOC_COMMUNICATION = false; + /** * @brief This is the device handler for the MPSoC of the payload computer. * diff --git a/mission/controller/PowerController.cpp b/mission/controller/PowerController.cpp index 7b7db9e8..2a735782 100644 --- a/mission/controller/PowerController.cpp +++ b/mission/controller/PowerController.cpp @@ -100,15 +100,16 @@ void PowerController::performControlOperation() { return; } case InternalState::READY: { + if (mode != MODE_NORMAL) { + PoolReadGuard pg(&enablePl); + if (pg.getReadResult() == returnvalue::OK) { + enablePl.setValidity(false, true); + } + } if (mode != MODE_OFF) { calculateStateOfCharge(); if (mode == MODE_NORMAL) { watchStateOfCharge(); - } else { - PoolReadGuard pg(&enablePl); - if (pg.getReadResult() == returnvalue::OK) { - enablePl.setValidity(false, true); - } } } break;