Add new parameter to skip SUPV commanding #850
@ -16,6 +16,14 @@ will consitute of a breaking change warranting a new major release:
|
|||||||
|
|
||||||
# [unreleased]
|
# [unreleased]
|
||||||
|
|
||||||
|
## Added
|
||||||
|
|
||||||
|
- Added new parameter for MPSoC which allows to skip SUPV commanding.
|
||||||
|
|
||||||
|
## Changed
|
||||||
|
|
||||||
|
- Increased allowed mode transition time for PLOC SUPV.
|
||||||
|
|
||||||
# [v7.5.5] 2024-01-22
|
# [v7.5.5] 2024-01-22
|
||||||
|
|
||||||
## Fixed
|
## Fixed
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "OBSWConfig.h"
|
#include "OBSWConfig.h"
|
||||||
#include "fsfw/datapool/PoolReadGuard.h"
|
#include "fsfw/datapool/PoolReadGuard.h"
|
||||||
#include "fsfw/globalfunctions/CRC.h"
|
#include "fsfw/globalfunctions/CRC.h"
|
||||||
|
#include "fsfw/parameters/HasParametersIF.h"
|
||||||
|
|
||||||
PlocMpsocHandler::PlocMpsocHandler(object_id_t objectId, object_id_t uartComIFid,
|
PlocMpsocHandler::PlocMpsocHandler(object_id_t objectId, object_id_t uartComIFid,
|
||||||
CookieIF* comCookie, PlocMpsocSpecialComHelper* plocMPSoCHelper,
|
CookieIF* comCookie, PlocMpsocSpecialComHelper* plocMPSoCHelper,
|
||||||
@ -1395,14 +1396,18 @@ bool PlocMpsocHandler::handleHwStartup() {
|
|||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
if (powerState == PowerState::IDLE) {
|
if (powerState == PowerState::IDLE) {
|
||||||
if (supv::SUPV_ON) {
|
if (skipSupvCommandingToOn) {
|
||||||
commandActionHelper.commandAction(supervisorHandler, supv::START_MPSOC);
|
powerState = PowerState::DONE;
|
||||||
supvTransitionCd.resetTimer();
|
|
||||||
powerState = PowerState::PENDING_STARTUP;
|
|
||||||
} else {
|
} else {
|
||||||
triggerEvent(SUPV_NOT_ON, 1);
|
if (supv::SUPV_ON) {
|
||||||
// Set back to OFF for now, failing the transition.
|
commandActionHelper.commandAction(supervisorHandler, supv::START_MPSOC);
|
||||||
setMode(MODE_OFF);
|
supvTransitionCd.resetTimer();
|
||||||
|
powerState = PowerState::PENDING_STARTUP;
|
||||||
|
} else {
|
||||||
|
triggerEvent(SUPV_NOT_ON, 1);
|
||||||
|
// Set back to OFF for now, failing the transition.
|
||||||
|
setMode(MODE_OFF);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (powerState == PowerState::SUPV_FAILED) {
|
if (powerState == PowerState::SUPV_FAILED) {
|
||||||
@ -1532,3 +1537,20 @@ ReturnValue_t PlocMpsocHandler::checkModeCommand(Mode_t commandedMode, Submode_t
|
|||||||
}
|
}
|
||||||
return DeviceHandlerBase::checkModeCommand(commandedMode, commandedSubmode, msToReachTheMode);
|
return DeviceHandlerBase::checkModeCommand(commandedMode, commandedSubmode, msToReachTheMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ReturnValue_t PlocMpsocHandler::getParameter(uint8_t domainId, uint8_t uniqueId,
|
||||||
|
ParameterWrapper* parameterWrapper,
|
||||||
|
const ParameterWrapper* newValues,
|
||||||
|
uint16_t startAtIndex) {
|
||||||
|
if (uniqueId == mpsoc::ParamId::SKIP_SUPV_ON_COMMANDING) {
|
||||||
|
uint8_t value = 0;
|
||||||
|
newValues->getElement(&value);
|
||||||
|
if (value > 1) {
|
||||||
|
return HasParametersIF::INVALID_VALUE;
|
||||||
|
}
|
||||||
|
parameterWrapper->set(skipSupvCommandingToOn);
|
||||||
|
return returnvalue::OK;
|
||||||
|
}
|
||||||
|
return DeviceHandlerBase::getParameter(domainId, uniqueId, parameterWrapper, newValues,
|
||||||
|
startAtIndex);
|
||||||
|
}
|
||||||
|
@ -201,6 +201,8 @@ class PlocMpsocHandler : public DeviceHandlerBase, public CommandsActionsIF {
|
|||||||
|
|
||||||
PowerState powerState = PowerState::IDLE;
|
PowerState powerState = PowerState::IDLE;
|
||||||
|
|
||||||
|
uint8_t skipSupvCommandingToOn = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Handles events received from the PLOC MPSoC helper
|
* @brief Handles events received from the PLOC MPSoC helper
|
||||||
*/
|
*/
|
||||||
@ -316,6 +318,9 @@ class PlocMpsocHandler : public DeviceHandlerBase, public CommandsActionsIF {
|
|||||||
pwrctrl::EnablePl enablePl = pwrctrl::EnablePl(objects::POWER_CONTROLLER);
|
pwrctrl::EnablePl enablePl = pwrctrl::EnablePl(objects::POWER_CONTROLLER);
|
||||||
ReturnValue_t checkModeCommand(Mode_t commandedMode, Submode_t commandedSubmode,
|
ReturnValue_t checkModeCommand(Mode_t commandedMode, Submode_t commandedSubmode,
|
||||||
uint32_t* msToReachTheMode) override;
|
uint32_t* msToReachTheMode) override;
|
||||||
|
|
||||||
|
ReturnValue_t getParameter(uint8_t domainId, uint8_t uniqueId, ParameterWrapper* parameterWrapper,
|
||||||
|
const ParameterWrapper* newValues, uint16_t startAtIndex) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* BSP_Q7S_DEVICES_PLOC_PLOCMPSOCHANDLER_H_ */
|
#endif /* BSP_Q7S_DEVICES_PLOC_PLOCMPSOCHANDLER_H_ */
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
|
|
||||||
namespace mpsoc {
|
namespace mpsoc {
|
||||||
|
|
||||||
|
enum ParamId : uint8_t { SKIP_SUPV_ON_COMMANDING = 0x01 };
|
||||||
|
|
||||||
enum FileAccessModes : uint8_t {
|
enum FileAccessModes : uint8_t {
|
||||||
// Opens a file, fails if the file does not exist.
|
// Opens a file, fails if the file does not exist.
|
||||||
OPEN_EXISTING = 0x00,
|
OPEN_EXISTING = 0x00,
|
||||||
|
@ -49,7 +49,7 @@ static const Event SUPV_EXE_ACK_UNKNOWN_COMMAND = MAKE_EVENT(10, severity::LOW);
|
|||||||
extern std::atomic_bool SUPV_ON;
|
extern std::atomic_bool SUPV_ON;
|
||||||
static constexpr uint32_t INTER_COMMAND_DELAY = 20;
|
static constexpr uint32_t INTER_COMMAND_DELAY = 20;
|
||||||
static constexpr uint32_t BOOT_TIMEOUT_MS = 4000;
|
static constexpr uint32_t BOOT_TIMEOUT_MS = 4000;
|
||||||
static constexpr uint32_t MAX_TRANSITION_TIME_TO_ON_MS = BOOT_TIMEOUT_MS + 2000;
|
static constexpr uint32_t MAX_TRANSITION_TIME_TO_ON_MS = BOOT_TIMEOUT_MS + 3000;
|
||||||
static constexpr uint32_t MAX_TRANSITION_TIME_TO_OFF_MS = 1000;
|
static constexpr uint32_t MAX_TRANSITION_TIME_TO_OFF_MS = 1000;
|
||||||
|
|
||||||
namespace result {
|
namespace result {
|
||||||
|
2
tmtc
2
tmtc
@ -1 +1 @@
|
|||||||
Subproject commit 747ad34eec5baa5199de49a1330687508c991550
|
Subproject commit bcdd12caf05b6a874b0d3ac2b9436c4061545312
|
Loading…
Reference in New Issue
Block a user