Merge pull request 'STR Auto Threshold Config' (#742) from str-auto-threshold-cfg into main
All checks were successful
EIVE/eive-obsw/pipeline/head This commit looks good
All checks were successful
EIVE/eive-obsw/pipeline/head This commit looks good
Reviewed-on: #742 Reviewed-by: Marius Eggert <eggertm@irs.uni-stuttgart.de>
This commit is contained in:
commit
19a86ac29e
@ -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
|
||||
|
||||
|
@ -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):
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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):
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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):
|
||||
|
@ -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"
|
||||
|
||||
|
@ -408,6 +408,10 @@ ReturnValue_t StarTrackerHandler::buildTransitionDeviceCommand(DeviceCommandId_t
|
||||
*id = startracker::DEBUG_CAMERA;
|
||||
return buildCommandFromCommand(
|
||||
*id, reinterpret_cast<const uint8_t*>(paramJsonFile.c_str()), paramJsonFile.size());
|
||||
case FwBootState::AUTO_THRESHOLD:
|
||||
*id = startracker::AUTO_THRESHOLD;
|
||||
return buildCommandFromCommand(
|
||||
*id, reinterpret_cast<const uint8_t*>(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;
|
||||
|
@ -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
|
||||
};
|
||||
|
@ -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_ */
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
*
|
||||
|
2
tmtc
2
tmtc
@ -1 +1 @@
|
||||
Subproject commit 26cf112121782e730057cda0766d435ee2077b6d
|
||||
Subproject commit 0b8bd61e8015d7145462ecbf9db5f302bc234b41
|
Loading…
Reference in New Issue
Block a user