diff --git a/CHANGELOG.md b/CHANGELOG.md index 3db916c2..aca4dffe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,9 @@ will consitute of a breaking change warranting a new major release: ## Added - Set STR time in configuration sequence to firmware mode. +- The STR `AutoThreshold` parameters are now set from the configuration JSON file at STR + startup. +- The STR handler can now handle the COM error reply and triggers an low severity event accordingly. # [v6.1.0] 2023-07-13 diff --git a/bsp_hosted/fsfwconfig/events/translateEvents.cpp b/bsp_hosted/fsfwconfig/events/translateEvents.cpp index b98926e5..ff9e0a2c 100644 --- a/bsp_hosted/fsfwconfig/events/translateEvents.cpp +++ b/bsp_hosted/fsfwconfig/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 299 translations. + * @brief Auto-generated event translation file. Contains 300 translations. * @details - * Generated on: 2023-07-07 12:06:06 + * Generated on: 2023-07-13 21:09:02 */ #include "translateEvents.h" @@ -139,6 +139,7 @@ const char *ERROR_STATE_STRING = "ERROR_STATE"; const char *RESET_OCCURED_STRING = "RESET_OCCURED"; const char *BOOTING_FIRMWARE_FAILED_EVENT_STRING = "BOOTING_FIRMWARE_FAILED_EVENT"; const char *BOOTING_BOOTLOADER_FAILED_EVENT_STRING = "BOOTING_BOOTLOADER_FAILED_EVENT"; +const char *COM_ERROR_REPLY_RECEIVED_STRING = "COM_ERROR_REPLY_RECEIVED"; const char *SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING = "SUPV_MEMORY_READ_RPT_CRC_FAILURE"; const char *SUPV_UNKNOWN_TM_STRING = "SUPV_UNKNOWN_TM"; const char *SUPV_UNINIMPLEMENTED_TM_STRING = "SUPV_UNINIMPLEMENTED_TM"; @@ -575,6 +576,8 @@ const char *translateEvents(Event event) { return BOOTING_FIRMWARE_FAILED_EVENT_STRING; case (11902): return BOOTING_BOOTLOADER_FAILED_EVENT_STRING; + case (11903): + return COM_ERROR_REPLY_RECEIVED_STRING; case (12001): return SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING; case (12002): diff --git a/bsp_hosted/fsfwconfig/objects/translateObjects.cpp b/bsp_hosted/fsfwconfig/objects/translateObjects.cpp index 458081f9..97b912f9 100644 --- a/bsp_hosted/fsfwconfig/objects/translateObjects.cpp +++ b/bsp_hosted/fsfwconfig/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 171 translations. - * Generated on: 2023-07-07 12:06:06 + * Generated on: 2023-07-13 21:09:02 */ #include "translateObjects.h" diff --git a/generators/bsp_hosted_events.csv b/generators/bsp_hosted_events.csv index 3f1bbb77..228b75bd 100644 --- a/generators/bsp_hosted_events.csv +++ b/generators/bsp_hosted_events.csv @@ -133,6 +133,7 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path 11802;0x2e1a;RESET_OCCURED;LOW;No description;mission/acs/rwHelpers.h 11901;0x2e7d;BOOTING_FIRMWARE_FAILED_EVENT;LOW;Failed to boot firmware;mission/acs/str/StarTrackerHandler.h 11902;0x2e7e;BOOTING_BOOTLOADER_FAILED_EVENT;LOW;Failed to boot star tracker into bootloader mode;mission/acs/str/StarTrackerHandler.h +11903;0x2e7f;COM_ERROR_REPLY_RECEIVED;LOW;Received COM error. P1: Communication Error ID (datasheet p32);mission/acs/str/StarTrackerHandler.h 12001;0x2ee1;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;linux/payload/PlocSupervisorHandler.h 12002;0x2ee2;SUPV_UNKNOWN_TM;LOW;Unhandled event. P1: APID, P2: Service ID;linux/payload/PlocSupervisorHandler.h 12003;0x2ee3;SUPV_UNINIMPLEMENTED_TM;LOW;No description;linux/payload/PlocSupervisorHandler.h diff --git a/generators/bsp_q7s_events.csv b/generators/bsp_q7s_events.csv index 3f1bbb77..228b75bd 100644 --- a/generators/bsp_q7s_events.csv +++ b/generators/bsp_q7s_events.csv @@ -133,6 +133,7 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path 11802;0x2e1a;RESET_OCCURED;LOW;No description;mission/acs/rwHelpers.h 11901;0x2e7d;BOOTING_FIRMWARE_FAILED_EVENT;LOW;Failed to boot firmware;mission/acs/str/StarTrackerHandler.h 11902;0x2e7e;BOOTING_BOOTLOADER_FAILED_EVENT;LOW;Failed to boot star tracker into bootloader mode;mission/acs/str/StarTrackerHandler.h +11903;0x2e7f;COM_ERROR_REPLY_RECEIVED;LOW;Received COM error. P1: Communication Error ID (datasheet p32);mission/acs/str/StarTrackerHandler.h 12001;0x2ee1;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;linux/payload/PlocSupervisorHandler.h 12002;0x2ee2;SUPV_UNKNOWN_TM;LOW;Unhandled event. P1: APID, P2: Service ID;linux/payload/PlocSupervisorHandler.h 12003;0x2ee3;SUPV_UNINIMPLEMENTED_TM;LOW;No description;linux/payload/PlocSupervisorHandler.h diff --git a/generators/events/translateEvents.cpp b/generators/events/translateEvents.cpp index b98926e5..ff9e0a2c 100644 --- a/generators/events/translateEvents.cpp +++ b/generators/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 299 translations. + * @brief Auto-generated event translation file. Contains 300 translations. * @details - * Generated on: 2023-07-07 12:06:06 + * Generated on: 2023-07-13 21:09:02 */ #include "translateEvents.h" @@ -139,6 +139,7 @@ const char *ERROR_STATE_STRING = "ERROR_STATE"; const char *RESET_OCCURED_STRING = "RESET_OCCURED"; const char *BOOTING_FIRMWARE_FAILED_EVENT_STRING = "BOOTING_FIRMWARE_FAILED_EVENT"; const char *BOOTING_BOOTLOADER_FAILED_EVENT_STRING = "BOOTING_BOOTLOADER_FAILED_EVENT"; +const char *COM_ERROR_REPLY_RECEIVED_STRING = "COM_ERROR_REPLY_RECEIVED"; const char *SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING = "SUPV_MEMORY_READ_RPT_CRC_FAILURE"; const char *SUPV_UNKNOWN_TM_STRING = "SUPV_UNKNOWN_TM"; const char *SUPV_UNINIMPLEMENTED_TM_STRING = "SUPV_UNINIMPLEMENTED_TM"; @@ -575,6 +576,8 @@ const char *translateEvents(Event event) { return BOOTING_FIRMWARE_FAILED_EVENT_STRING; case (11902): return BOOTING_BOOTLOADER_FAILED_EVENT_STRING; + case (11903): + return COM_ERROR_REPLY_RECEIVED_STRING; case (12001): return SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING; case (12002): diff --git a/generators/objects/translateObjects.cpp b/generators/objects/translateObjects.cpp index 5a9af4d7..f4124f28 100644 --- a/generators/objects/translateObjects.cpp +++ b/generators/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 175 translations. - * Generated on: 2023-07-07 12:06:06 + * Generated on: 2023-07-13 21:09:02 */ #include "translateObjects.h" diff --git a/linux/fsfwconfig/events/translateEvents.cpp b/linux/fsfwconfig/events/translateEvents.cpp index b98926e5..ff9e0a2c 100644 --- a/linux/fsfwconfig/events/translateEvents.cpp +++ b/linux/fsfwconfig/events/translateEvents.cpp @@ -1,7 +1,7 @@ /** - * @brief Auto-generated event translation file. Contains 299 translations. + * @brief Auto-generated event translation file. Contains 300 translations. * @details - * Generated on: 2023-07-07 12:06:06 + * Generated on: 2023-07-13 21:09:02 */ #include "translateEvents.h" @@ -139,6 +139,7 @@ const char *ERROR_STATE_STRING = "ERROR_STATE"; const char *RESET_OCCURED_STRING = "RESET_OCCURED"; const char *BOOTING_FIRMWARE_FAILED_EVENT_STRING = "BOOTING_FIRMWARE_FAILED_EVENT"; const char *BOOTING_BOOTLOADER_FAILED_EVENT_STRING = "BOOTING_BOOTLOADER_FAILED_EVENT"; +const char *COM_ERROR_REPLY_RECEIVED_STRING = "COM_ERROR_REPLY_RECEIVED"; const char *SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING = "SUPV_MEMORY_READ_RPT_CRC_FAILURE"; const char *SUPV_UNKNOWN_TM_STRING = "SUPV_UNKNOWN_TM"; const char *SUPV_UNINIMPLEMENTED_TM_STRING = "SUPV_UNINIMPLEMENTED_TM"; @@ -575,6 +576,8 @@ const char *translateEvents(Event event) { return BOOTING_FIRMWARE_FAILED_EVENT_STRING; case (11902): return BOOTING_BOOTLOADER_FAILED_EVENT_STRING; + case (11903): + return COM_ERROR_REPLY_RECEIVED_STRING; case (12001): return SUPV_MEMORY_READ_RPT_CRC_FAILURE_STRING; case (12002): diff --git a/linux/fsfwconfig/objects/translateObjects.cpp b/linux/fsfwconfig/objects/translateObjects.cpp index 5a9af4d7..f4124f28 100644 --- a/linux/fsfwconfig/objects/translateObjects.cpp +++ b/linux/fsfwconfig/objects/translateObjects.cpp @@ -2,7 +2,7 @@ * @brief Auto-generated object translation file. * @details * Contains 175 translations. - * Generated on: 2023-07-07 12:06:06 + * Generated on: 2023-07-13 21:09:02 */ #include "translateObjects.h" diff --git a/mission/acs/str/StarTrackerHandler.cpp b/mission/acs/str/StarTrackerHandler.cpp index ca11a11c..a6091d7c 100644 --- a/mission/acs/str/StarTrackerHandler.cpp +++ b/mission/acs/str/StarTrackerHandler.cpp @@ -408,6 +408,10 @@ ReturnValue_t StarTrackerHandler::buildTransitionDeviceCommand(DeviceCommandId_t *id = startracker::DEBUG_CAMERA; return buildCommandFromCommand( *id, reinterpret_cast(paramJsonFile.c_str()), paramJsonFile.size()); + case FwBootState::AUTO_THRESHOLD: + *id = startracker::AUTO_THRESHOLD; + return buildCommandFromCommand( + *id, reinterpret_cast(paramJsonFile.c_str()), paramJsonFile.size()); default: { sif::error << "STR: Unexpected boot state" << (int)bootState << std::endl; return NOTHING_TO_SEND; @@ -556,6 +560,11 @@ ReturnValue_t StarTrackerHandler::buildCommandFromCommand(DeviceCommandId_t devi result = prepareParamCommand(commandData, commandDataLen, jcfgs.logLevel, reinitNextSetParam); return result; } + case (startracker::AUTO_THRESHOLD): { + result = + prepareParamCommand(commandData, commandDataLen, jcfgs.autoThreshold, reinitNextSetParam); + return result; + } case (startracker::LOGSUBSCRIPTION): { result = prepareParamCommand(commandData, commandDataLen, jcfgs.logSubscription, reinitNextSetParam); @@ -668,6 +677,8 @@ void StarTrackerHandler::fillCommandAndReplyMap() { startracker::MAX_FRAME_SIZE * 2 + 2); this->insertInCommandAndReplyMap(startracker::LIMITS, 3, nullptr, startracker::MAX_FRAME_SIZE * 2 + 2); + this->insertInCommandAndReplyMap(startracker::AUTO_THRESHOLD, 2, nullptr, + startracker::MAX_FRAME_SIZE * 2 + 2); this->insertInCommandAndReplyMap(startracker::MOUNTING, 3, nullptr, startracker::MAX_FRAME_SIZE * 2 + 2); this->insertInCommandAndReplyMap(startracker::IMAGE_PROCESSOR, 3, nullptr, @@ -845,6 +856,7 @@ void StarTrackerHandler::setUpJsonCfgs(JsonConfigs& cfgs, const char* paramJsonF cfgs.mounting.init(paramJsonFile); cfgs.limits.init(paramJsonFile); cfgs.subscription.init(paramJsonFile); + cfgs.autoThreshold.init(paramJsonFile); JCFG_DONE = true; } @@ -868,13 +880,20 @@ ReturnValue_t StarTrackerHandler::scanForReply(const uint8_t* start, size_t rema *foundLen = remainingSize; return returnvalue::OK; } - if (remainingSize < 3) { - sif::error << "StarTrackerHandler: Reply packet with length less than 3 is invalid" + if (remainingSize < 2) { + sif::error << "StarTrackerHandler: Reply packet with length " << remainingSize + << " less than " + "2 is invalid" << std::endl; return returnvalue::FAILED; } switch (startracker::getReplyFrameType(start)) { + case TMTC_COMM_ERROR: { + *foundLen = remainingSize; + triggerEvent(COM_ERROR_REPLY_RECEIVED, start[1]); + break; + } case TMTC_ACTIONREPLY: { *foundLen = remainingSize; return scanForActionReply(startracker::getId(start), foundId); @@ -972,7 +991,8 @@ ReturnValue_t StarTrackerHandler::interpretDeviceReply(DeviceCommandId_t id, case (startracker::TRACKING): case (startracker::VALIDATION): case (startracker::IMAGE_PROCESSOR): - case (startracker::ALGO): { + case (startracker::ALGO): + case (startracker::AUTO_THRESHOLD): { result = handleSetParamReply(packet); break; } @@ -1450,6 +1470,10 @@ ReturnValue_t StarTrackerHandler::scanForSetParameterReply(uint8_t replyId, *foundId = startracker::DEBUG_CAMERA; break; } + case (startracker::ID::AUTO_THRESHOLD): { + *foundId = startracker::AUTO_THRESHOLD; + break; + } case (startracker::ID::LOG_SUBSCRIPTION): { *foundId = startracker::LOGSUBSCRIPTION; break; @@ -2138,6 +2162,10 @@ void StarTrackerHandler::handleStartup(uint8_t tmType, uint8_t parameterId) { break; } case (startracker::ID::DEBUG_CAMERA): { + bootState = FwBootState::AUTO_THRESHOLD; + break; + } + case (startracker::ID::AUTO_THRESHOLD): { bootState = FwBootState::NONE; internalState = InternalState::DONE; break; diff --git a/mission/acs/str/StarTrackerHandler.h b/mission/acs/str/StarTrackerHandler.h index 34a10746..1e790695 100644 --- a/mission/acs/str/StarTrackerHandler.h +++ b/mission/acs/str/StarTrackerHandler.h @@ -144,6 +144,8 @@ class StarTrackerHandler : public DeviceHandlerBase { static const Event BOOTING_FIRMWARE_FAILED_EVENT = MAKE_EVENT(1, severity::LOW); //! [EXPORT] : [COMMENT] Failed to boot star tracker into bootloader mode static const Event BOOTING_BOOTLOADER_FAILED_EVENT = MAKE_EVENT(2, severity::LOW); + //! [EXPORT] : [COMMENT] Received COM error. P1: Communication Error ID (datasheet p32) + static constexpr Event COM_ERROR_REPLY_RECEIVED = MAKE_EVENT(3, severity::LOW); static const uint8_t STATUS_OFFSET = 2; static const uint8_t PARAMS_OFFSET = 2; @@ -227,6 +229,7 @@ class StarTrackerHandler : public DeviceHandlerBase { Mounting mounting; Limits limits; Subscription subscription; + AutoThreshold autoThreshold; }; JsonConfigs jcfgs; Countdown jcfgCountdown = Countdown(250); @@ -280,6 +283,7 @@ class StarTrackerHandler : public DeviceHandlerBase { ALGO, LOG_SUBSCRIPTION, DEBUG_CAMERA, + AUTO_THRESHOLD, WAIT_FOR_EXECUTION, RETRY_CFG_CMD }; diff --git a/mission/acs/str/arcsecJsonKeys.h b/mission/acs/str/arcsecJsonKeys.h index f9e2f4f1..c44ece9f 100644 --- a/mission/acs/str/arcsecJsonKeys.h +++ b/mission/acs/str/arcsecJsonKeys.h @@ -176,6 +176,13 @@ static const char DEBUG_CAMERA[] = "DebugCamera"; static const char TIMING[] = "timing"; static const char TEST[] = "test"; +static constexpr char AUTO_THRESHOLD[] = "AutoThreshold"; +static constexpr char AT_MODE[] = "mode"; +static constexpr char AT_DESIRED_BLOB_COUNTS[] = "desiredBlobsCount"; +static constexpr char AT_MIN_THRESHOLD[] = "minThreshold"; +static constexpr char AT_MAX_THRESHOLD[] = "maxThreshold"; +static constexpr char AT_THRESHOLD_KP[] = "thresholdKp"; + } // namespace arcseckeys #endif /* BSP_Q7S_DEVICES_DEVICEDEFINITIONS_ARCSECJSONKEYS_H_ */ diff --git a/mission/acs/str/strHelpers.h b/mission/acs/str/strHelpers.h index 894ceac5..c6336186 100644 --- a/mission/acs/str/strHelpers.h +++ b/mission/acs/str/strHelpers.h @@ -327,6 +327,7 @@ static const DeviceCommandId_t FIRMWARE_UPDATE = 84; static const DeviceCommandId_t DISABLE_TIMESTAMP_GENERATION = 85; static const DeviceCommandId_t ENABLE_TIMESTAMP_GENERATION = 86; static constexpr DeviceCommandId_t SET_TIME_FROM_SYS_TIME = 87; +static constexpr DeviceCommandId_t AUTO_THRESHOLD = 88; static const DeviceCommandId_t NONE = 0xFFFFFFFF; static const uint32_t VERSION_SET_ID = REQ_VERSION; @@ -410,6 +411,7 @@ static const uint8_t TAKE_IMAGE = 15; static const uint8_t LOG_LEVEL = 3; static const uint8_t LOG_SUBSCRIPTION = 19; static const uint8_t DEBUG_CAMERA = 20; +static const uint8_t AUTO_THRESHOLD = 23; } // namespace ID namespace Program { @@ -441,6 +443,21 @@ static const uint32_t secret[16]{ REGION_12_SECRET, REGION_13_SECRET, REGION_14_SECRET, REGION_15_SECRET}; } // namespace region_secrets +namespace comError { +enum Id { + BAD_CRC = 1, + UNKNOWN_TM_ID = 2, + UNKNOWN_PARAM_ID = 3, + UNKNOWN_ACTION_REQ = 4, + INVALID_TM_SIZE = 5, + INVALID_PARAM_SIZE = 6, + INVALID_ACTION_REQ_SIZE = 7, + FRAME_TOO_SHORT = 8, + INVALID_FRAME_TYPE = 9, + UNKNOWN_ERROR = 10 +}; +} + enum class FlashSections : uint8_t { BOOTLOADER_SECTION = 0, MAIN_FIRMWARE_SECTION = 1, diff --git a/mission/acs/str/strJsonCommands.cpp b/mission/acs/str/strJsonCommands.cpp index 134a00a0..5a910f87 100644 --- a/mission/acs/str/strJsonCommands.cpp +++ b/mission/acs/str/strJsonCommands.cpp @@ -916,3 +916,45 @@ ReturnValue_t DebugCamera::createCommand(uint8_t* buffer) { adduint32(param, buffer + offset); return returnvalue::OK; } + +AutoThreshold::AutoThreshold() : ArcsecJsonParamBase(arcseckeys::AUTO_THRESHOLD) {} + +size_t AutoThreshold::getSize() { return COMMAND_SIZE; } + +ReturnValue_t AutoThreshold::createCommand(uint8_t* buffer) { + ReturnValue_t result = returnvalue::OK; + uint8_t offset = 0; + std::string param; + addSetParamHeader(buffer, startracker::ID::AUTO_THRESHOLD); + offset = 2; + result = getParam(arcseckeys::AT_MODE, param); + if (result != returnvalue::OK) { + return result; + } + adduint8(param, buffer + offset); + offset += 1; + result = getParam(arcseckeys::AT_DESIRED_BLOB_COUNTS, param); + if (result != returnvalue::OK) { + return result; + } + adduint8(param, buffer + offset); + offset += 1; + result = getParam(arcseckeys::AT_MIN_THRESHOLD, param); + if (result != returnvalue::OK) { + return result; + } + adduint16(param, buffer + offset); + offset += 2; + result = getParam(arcseckeys::AT_MAX_THRESHOLD, param); + if (result != returnvalue::OK) { + return result; + } + adduint16(param, buffer + offset); + offset += 2; + result = getParam(arcseckeys::AT_THRESHOLD_KP, param); + if (result != returnvalue::OK) { + return result; + } + addfloat(param, buffer + offset); + return returnvalue::OK; +} diff --git a/mission/acs/str/strJsonCommands.h b/mission/acs/str/strJsonCommands.h index 99588f9c..7e75c0b1 100644 --- a/mission/acs/str/strJsonCommands.h +++ b/mission/acs/str/strJsonCommands.h @@ -222,6 +222,22 @@ class LogSubscription : public ArcsecJsonParamBase { ReturnValue_t createCommand(uint8_t* buffer) override; }; +/** + * @brief Generates command to set log subscription parameters. + * + */ +class AutoThreshold : public ArcsecJsonParamBase { + public: + AutoThreshold(); + + size_t getSize(); + + private: + static const size_t COMMAND_SIZE = 12; + + ReturnValue_t createCommand(uint8_t* buffer) override; +}; + /** * @brief Generates command to set debug camera parameters * diff --git a/tmtc b/tmtc index 26cf1121..0b8bd61e 160000 --- a/tmtc +++ b/tmtc @@ -1 +1 @@ -Subproject commit 26cf112121782e730057cda0766d435ee2077b6d +Subproject commit 0b8bd61e8015d7145462ecbf9db5f302bc234b41