From 7870a2015eed994ad55723f47d036ce39a451030 Mon Sep 17 00:00:00 2001
From: Robin Mueller <robin.mueller.m@gmail.com>
Date: Thu, 13 Jul 2023 20:49:42 +0200
Subject: [PATCH 1/7] add auto threshold config

---
 mission/acs/str/StarTrackerHandler.cpp | 23 +++++++++++++-
 mission/acs/str/StarTrackerHandler.h   |  2 ++
 mission/acs/str/arcsecJsonKeys.h       |  7 ++++
 mission/acs/str/strHelpers.h           |  2 ++
 mission/acs/str/strJsonCommands.cpp    | 44 ++++++++++++++++++++++++++
 mission/acs/str/strJsonCommands.h      | 16 ++++++++++
 tmtc                                   |  2 +-
 7 files changed, 94 insertions(+), 2 deletions(-)

diff --git a/mission/acs/str/StarTrackerHandler.cpp b/mission/acs/str/StarTrackerHandler.cpp
index ca11a11c..04b5b103 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<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;
 }
 
@@ -972,7 +984,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 +1463,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 +2155,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..57553286 100644
--- a/mission/acs/str/StarTrackerHandler.h
+++ b/mission/acs/str/StarTrackerHandler.h
@@ -227,6 +227,7 @@ class StarTrackerHandler : public DeviceHandlerBase {
     Mounting mounting;
     Limits limits;
     Subscription subscription;
+    AutoThreshold autoThreshold;
   };
   JsonConfigs jcfgs;
   Countdown jcfgCountdown = Countdown(250);
@@ -280,6 +281,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..1c4b37cf 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 {
diff --git a/mission/acs/str/strJsonCommands.cpp b/mission/acs/str/strJsonCommands.cpp
index 134a00a0..522bb040 100644
--- a/mission/acs/str/strJsonCommands.cpp
+++ b/mission/acs/str/strJsonCommands.cpp
@@ -916,3 +916,47 @@ 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) {
+  sif::debug << "creating auto threshold command" << std::endl;
+  ReturnValue_t result = returnvalue::OK;
+  uint8_t offset = 0;
+  std::string param;
+  addSetParamHeader(buffer, startracker::ID::LOG_SUBSCRIPTION);
+  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);
+  offset += 4;
+  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..c6e2e2de 160000
--- a/tmtc
+++ b/tmtc
@@ -1 +1 @@
-Subproject commit 26cf112121782e730057cda0766d435ee2077b6d
+Subproject commit c6e2e2de49e3d49fed1b5a43a94528c0c4aceafe
-- 
2.43.0


From 9a451e3d5f587ec9c31a5e7e582f518c46ba1e54 Mon Sep 17 00:00:00 2001
From: Robin Mueller <robin.mueller.m@gmail.com>
Date: Thu, 13 Jul 2023 21:09:27 +0200
Subject: [PATCH 2/7] COM error event

---
 bsp_hosted/fsfwconfig/events/translateEvents.cpp  |  7 +++++--
 .../fsfwconfig/objects/translateObjects.cpp       |  2 +-
 generators/bsp_hosted_events.csv                  |  1 +
 generators/bsp_q7s_events.csv                     |  1 +
 generators/events/translateEvents.cpp             |  7 +++++--
 generators/objects/translateObjects.cpp           |  2 +-
 linux/acs/StrComHandler.cpp                       |  2 +-
 linux/fsfwconfig/events/translateEvents.cpp       |  7 +++++--
 linux/fsfwconfig/objects/translateObjects.cpp     |  2 +-
 mission/acs/str/StarTrackerHandler.cpp            | 11 +++++++++--
 mission/acs/str/StarTrackerHandler.h              |  2 ++
 mission/acs/str/strHelpers.h                      | 15 +++++++++++++++
 mission/acs/str/strJsonCommands.cpp               |  1 -
 tmtc                                              |  2 +-
 14 files changed, 48 insertions(+), 14 deletions(-)

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/acs/StrComHandler.cpp b/linux/acs/StrComHandler.cpp
index 2db73f35..50e890d5 100644
--- a/linux/acs/StrComHandler.cpp
+++ b/linux/acs/StrComHandler.cpp
@@ -24,7 +24,7 @@ extern "C" {
 
 using namespace returnvalue;
 
-static constexpr bool PACKET_WIRETAPPING = false;
+static constexpr bool PACKET_WIRETAPPING = true;
 
 StrComHandler::StrComHandler(object_id_t objectId) : SystemObject(objectId) {
   lock = MutexFactory::instance()->createMutex();
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 04b5b103..a6091d7c 100644
--- a/mission/acs/str/StarTrackerHandler.cpp
+++ b/mission/acs/str/StarTrackerHandler.cpp
@@ -880,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);
diff --git a/mission/acs/str/StarTrackerHandler.h b/mission/acs/str/StarTrackerHandler.h
index 57553286..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;
diff --git a/mission/acs/str/strHelpers.h b/mission/acs/str/strHelpers.h
index 1c4b37cf..c6336186 100644
--- a/mission/acs/str/strHelpers.h
+++ b/mission/acs/str/strHelpers.h
@@ -443,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 522bb040..81c2fa5c 100644
--- a/mission/acs/str/strJsonCommands.cpp
+++ b/mission/acs/str/strJsonCommands.cpp
@@ -957,6 +957,5 @@ ReturnValue_t AutoThreshold::createCommand(uint8_t* buffer) {
     return result;
   }
   addfloat(param, buffer + offset);
-  offset += 4;
   return returnvalue::OK;
 }
diff --git a/tmtc b/tmtc
index c6e2e2de..380a02ee 160000
--- a/tmtc
+++ b/tmtc
@@ -1 +1 @@
-Subproject commit c6e2e2de49e3d49fed1b5a43a94528c0c4aceafe
+Subproject commit 380a02ee94b0413744ba82f08397c1f354bd0c0e
-- 
2.43.0


From 16dbba6545c917b1a714ed39844cea0f882a2650 Mon Sep 17 00:00:00 2001
From: Robin Mueller <robin.mueller.m@gmail.com>
Date: Thu, 13 Jul 2023 21:14:39 +0200
Subject: [PATCH 3/7] done

---
 mission/acs/str/strJsonCommands.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/mission/acs/str/strJsonCommands.cpp b/mission/acs/str/strJsonCommands.cpp
index 81c2fa5c..5a910f87 100644
--- a/mission/acs/str/strJsonCommands.cpp
+++ b/mission/acs/str/strJsonCommands.cpp
@@ -922,11 +922,10 @@ AutoThreshold::AutoThreshold() : ArcsecJsonParamBase(arcseckeys::AUTO_THRESHOLD)
 size_t AutoThreshold::getSize() { return COMMAND_SIZE; }
 
 ReturnValue_t AutoThreshold::createCommand(uint8_t* buffer) {
-  sif::debug << "creating auto threshold command" << std::endl;
   ReturnValue_t result = returnvalue::OK;
   uint8_t offset = 0;
   std::string param;
-  addSetParamHeader(buffer, startracker::ID::LOG_SUBSCRIPTION);
+  addSetParamHeader(buffer, startracker::ID::AUTO_THRESHOLD);
   offset = 2;
   result = getParam(arcseckeys::AT_MODE, param);
   if (result != returnvalue::OK) {
-- 
2.43.0


From 93ea8519b06466f502b634ddafce4892498c92cd Mon Sep 17 00:00:00 2001
From: Robin Mueller <robin.mueller.m@gmail.com>
Date: Thu, 13 Jul 2023 21:19:30 +0200
Subject: [PATCH 4/7] works

---
 linux/acs/StrComHandler.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/linux/acs/StrComHandler.cpp b/linux/acs/StrComHandler.cpp
index 50e890d5..2db73f35 100644
--- a/linux/acs/StrComHandler.cpp
+++ b/linux/acs/StrComHandler.cpp
@@ -24,7 +24,7 @@ extern "C" {
 
 using namespace returnvalue;
 
-static constexpr bool PACKET_WIRETAPPING = true;
+static constexpr bool PACKET_WIRETAPPING = false;
 
 StrComHandler::StrComHandler(object_id_t objectId) : SystemObject(objectId) {
   lock = MutexFactory::instance()->createMutex();
-- 
2.43.0


From 4e58614c56150caf5f7386c91b2d400020eeb244 Mon Sep 17 00:00:00 2001
From: Robin Mueller <robin.mueller.m@gmail.com>
Date: Thu, 13 Jul 2023 21:21:42 +0200
Subject: [PATCH 5/7] changelog

---
 CHANGELOG.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3db916c2..1fb46022 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -25,6 +25,8 @@ 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.
 
 # [v6.1.0] 2023-07-13
 
-- 
2.43.0


From f1028eb1d99bd0f4e093d4997e78fc4c5989e84a Mon Sep 17 00:00:00 2001
From: Robin Mueller <robin.mueller.m@gmail.com>
Date: Fri, 14 Jul 2023 12:47:35 +0200
Subject: [PATCH 6/7] bump tmtc

---
 tmtc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tmtc b/tmtc
index 380a02ee..0b8bd61e 160000
--- a/tmtc
+++ b/tmtc
@@ -1 +1 @@
-Subproject commit 380a02ee94b0413744ba82f08397c1f354bd0c0e
+Subproject commit 0b8bd61e8015d7145462ecbf9db5f302bc234b41
-- 
2.43.0


From 1d4e2a70a22da1ea5062cf9451df3890afa066ee Mon Sep 17 00:00:00 2001
From: Robin Mueller <robin.mueller.m@gmail.com>
Date: Fri, 14 Jul 2023 12:49:24 +0200
Subject: [PATCH 7/7] changelog

---
 CHANGELOG.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1fb46022..aca4dffe 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -27,6 +27,7 @@ will consitute of a breaking change warranting a new major release:
 - 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
 
-- 
2.43.0