diff --git a/.gitignore b/.gitignore
index cc672c2..47b4b46 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,8 @@
__pycache__
+/.idea
+/venv
+
log
/gps_log.txt
-
-.idea/*
-!.idea/runConfigurations
-
-*.json
-
-/venv
+/config/*.json
+tmtc_conf.json
diff --git a/.idea/runConfigurations/ACU.xml b/.run/ACU.run.xml
similarity index 100%
rename from .idea/runConfigurations/ACU.xml
rename to .run/ACU.run.xml
diff --git a/.idea/runConfigurations/BPX.xml b/.run/BPX.run.xml
similarity index 100%
rename from .idea/runConfigurations/BPX.xml
rename to .run/BPX.run.xml
diff --git a/.idea/runConfigurations/BPX_Request_HK.xml b/.run/BPX_Request_HK.run.xml
similarity index 100%
rename from .idea/runConfigurations/BPX_Request_HK.xml
rename to .run/BPX_Request_HK.run.xml
diff --git a/.idea/runConfigurations/BPX_Reset_Reboot_Counter.xml b/.run/BPX_Reset_Reboot_Counter.run.xml
similarity index 100%
rename from .idea/runConfigurations/BPX_Reset_Reboot_Counter.xml
rename to .run/BPX_Reset_Reboot_Counter.run.xml
diff --git a/.idea/runConfigurations/GPS_0.xml b/.run/GPS_0.run.xml
similarity index 100%
rename from .idea/runConfigurations/GPS_0.xml
rename to .run/GPS_0.run.xml
diff --git a/.idea/runConfigurations/GPS_1.xml b/.run/GPS_1.run.xml
similarity index 100%
rename from .idea/runConfigurations/GPS_1.xml
rename to .run/GPS_1.run.xml
diff --git a/.idea/runConfigurations/Heater_Test.xml b/.run/Heater_Test.run.xml
similarity index 100%
rename from .idea/runConfigurations/Heater_Test.xml
rename to .run/Heater_Test.run.xml
diff --git a/.idea/runConfigurations/IMTQ_Get_Commanded_Dipole.xml b/.run/IMTQ_Get_Commanded_Dipole.run.xml
similarity index 100%
rename from .idea/runConfigurations/IMTQ_Get_Commanded_Dipole.xml
rename to .run/IMTQ_Get_Commanded_Dipole.run.xml
diff --git a/.idea/runConfigurations/IMTQ_Neg_X_Test.xml b/.run/IMTQ_Neg_X_Test.run.xml
similarity index 100%
rename from .idea/runConfigurations/IMTQ_Neg_X_Test.xml
rename to .run/IMTQ_Neg_X_Test.run.xml
diff --git a/.idea/runConfigurations/IMTQ_Neg_Y_Test.xml b/.run/IMTQ_Neg_Y_Test.run.xml
similarity index 100%
rename from .idea/runConfigurations/IMTQ_Neg_Y_Test.xml
rename to .run/IMTQ_Neg_Y_Test.run.xml
diff --git a/.idea/runConfigurations/IMTQ_Neg_Z_Test.xml b/.run/IMTQ_Neg_Z_Test.run.xml
similarity index 100%
rename from .idea/runConfigurations/IMTQ_Neg_Z_Test.xml
rename to .run/IMTQ_Neg_Z_Test.run.xml
diff --git a/.idea/runConfigurations/IMTQ_Pos_X_Test.xml b/.run/IMTQ_Pos_X_Test.run.xml
similarity index 100%
rename from .idea/runConfigurations/IMTQ_Pos_X_Test.xml
rename to .run/IMTQ_Pos_X_Test.run.xml
diff --git a/.idea/runConfigurations/IMTQ_Pos_Y_Test.xml b/.run/IMTQ_Pos_Y_Test.run.xml
similarity index 100%
rename from .idea/runConfigurations/IMTQ_Pos_Y_Test.xml
rename to .run/IMTQ_Pos_Y_Test.run.xml
diff --git a/.idea/runConfigurations/IMTQ_Pos_Z_Test.xml b/.run/IMTQ_Pos_Z_Test.run.xml
similarity index 100%
rename from .idea/runConfigurations/IMTQ_Pos_Z_Test.xml
rename to .run/IMTQ_Pos_Z_Test.run.xml
diff --git a/.idea/runConfigurations/IMTQ_Test_UDP.xml b/.run/IMTQ_Test_UDP.run.xml
similarity index 100%
rename from .idea/runConfigurations/IMTQ_Test_UDP.xml
rename to .run/IMTQ_Test_UDP.run.xml
diff --git a/.idea/runConfigurations/P60_Dock_Commanding.xml b/.run/P60_Dock_Commanding.run.xml
similarity index 100%
rename from .idea/runConfigurations/P60_Dock_Commanding.xml
rename to .run/P60_Dock_Commanding.run.xml
diff --git a/.idea/runConfigurations/PDU1_Commanding.xml b/.run/PDU1_Commanding.run.xml
similarity index 100%
rename from .idea/runConfigurations/PDU1_Commanding.xml
rename to .run/PDU1_Commanding.run.xml
diff --git a/.idea/runConfigurations/PDU2_Commanding.xml b/.run/PDU2_Commanding.run.xml
similarity index 100%
rename from .idea/runConfigurations/PDU2_Commanding.xml
rename to .run/PDU2_Commanding.run.xml
diff --git a/.idea/runConfigurations/PLOC_MPSoC.xml b/.run/PLOC_MPSoC.run.xml
similarity index 100%
rename from .idea/runConfigurations/PLOC_MPSoC.xml
rename to .run/PLOC_MPSoC.run.xml
diff --git a/.idea/runConfigurations/PLOC_SUPV.xml b/.run/PLOC_SUPV.run.xml
similarity index 93%
rename from .idea/runConfigurations/PLOC_SUPV.xml
rename to .run/PLOC_SUPV.run.xml
index cc0ab09..e9877dc 100644
--- a/.idea/runConfigurations/PLOC_SUPV.xml
+++ b/.run/PLOC_SUPV.run.xml
@@ -13,7 +13,7 @@
-
+
diff --git a/.idea/runConfigurations/Ping_Command.xml b/.run/Ping_Command.run.xml
similarity index 100%
rename from .idea/runConfigurations/Ping_Command.xml
rename to .run/Ping_Command.run.xml
diff --git a/.idea/runConfigurations/RW1_Test.xml b/.run/RW1_Test.run.xml
similarity index 100%
rename from .idea/runConfigurations/RW1_Test.xml
rename to .run/RW1_Test.run.xml
diff --git a/.idea/runConfigurations/RW2_Test_.xml b/.run/RW2_Test_.run.xml
similarity index 100%
rename from .idea/runConfigurations/RW2_Test_.xml
rename to .run/RW2_Test_.run.xml
diff --git a/.idea/runConfigurations/RW3_Test_.xml b/.run/RW3_Test_.run.xml
similarity index 100%
rename from .idea/runConfigurations/RW3_Test_.xml
rename to .run/RW3_Test_.run.xml
diff --git a/.idea/runConfigurations/RW4_Test_.xml b/.run/RW4_Test_.run.xml
similarity index 100%
rename from .idea/runConfigurations/RW4_Test_.xml
rename to .run/RW4_Test_.run.xml
diff --git a/.idea/runConfigurations/Reboot_0_0.xml b/.run/Reboot_0_0.run.xml
similarity index 100%
rename from .idea/runConfigurations/Reboot_0_0.xml
rename to .run/Reboot_0_0.run.xml
diff --git a/.idea/runConfigurations/Reboot_0_1.xml b/.run/Reboot_0_1.run.xml
similarity index 100%
rename from .idea/runConfigurations/Reboot_0_1.xml
rename to .run/Reboot_0_1.run.xml
diff --git a/.idea/runConfigurations/Reboot_1_0.xml b/.run/Reboot_1_0.run.xml
similarity index 100%
rename from .idea/runConfigurations/Reboot_1_0.xml
rename to .run/Reboot_1_0.run.xml
diff --git a/.idea/runConfigurations/Reboot_1_1.xml b/.run/Reboot_1_1.run.xml
similarity index 100%
rename from .idea/runConfigurations/Reboot_1_1.xml
rename to .run/Reboot_1_1.run.xml
diff --git a/.idea/runConfigurations/Reboot_Prompt.xml b/.run/Reboot_Prompt.run.xml
similarity index 100%
rename from .idea/runConfigurations/Reboot_Prompt.xml
rename to .run/Reboot_Prompt.run.xml
diff --git a/.idea/runConfigurations/Reboot_Self.xml b/.run/Reboot_Self.run.xml
similarity index 100%
rename from .idea/runConfigurations/Reboot_Self.xml
rename to .run/Reboot_Self.run.xml
diff --git a/.idea/runConfigurations/S_A_Deployment_Test.xml b/.run/S_A_Deployment_Test.run.xml
similarity index 100%
rename from .idea/runConfigurations/S_A_Deployment_Test.xml
rename to .run/S_A_Deployment_Test.run.xml
diff --git a/.idea/runConfigurations/Star_Tracker.xml b/.run/Star_Tracker.run.xml
similarity index 100%
rename from .idea/runConfigurations/Star_Tracker.xml
rename to .run/Star_Tracker.run.xml
diff --git a/.idea/runConfigurations/Syrlinks.xml b/.run/Syrlinks.run.xml
similarity index 100%
rename from .idea/runConfigurations/Syrlinks.xml
rename to .run/Syrlinks.run.xml
diff --git a/.idea/runConfigurations/Syrlinks_Test_UDP.xml b/.run/Syrlinks_Test_UDP.run.xml
similarity index 100%
rename from .idea/runConfigurations/Syrlinks_Test_UDP.xml
rename to .run/Syrlinks_Test_UDP.run.xml
diff --git a/.idea/runConfigurations/TMP1075_1_Dock_Test_UDP.xml b/.run/TMP1075_1_Dock_Test_UDP.run.xml
similarity index 100%
rename from .idea/runConfigurations/TMP1075_1_Dock_Test_UDP.xml
rename to .run/TMP1075_1_Dock_Test_UDP.run.xml
diff --git a/.idea/runConfigurations/TMP1075_2_Dock_Test_UDP.xml b/.run/TMP1075_2_Dock_Test_UDP.run.xml
similarity index 100%
rename from .idea/runConfigurations/TMP1075_2_Dock_Test_UDP.xml
rename to .run/TMP1075_2_Dock_Test_UDP.run.xml
diff --git a/.idea/runConfigurations/Unittests_in_spacepackets.xml b/.run/Unittests_in_spacepackets.run.xml
similarity index 100%
rename from .idea/runConfigurations/Unittests_in_spacepackets.xml
rename to .run/Unittests_in_spacepackets.run.xml
diff --git a/.idea/runConfigurations/Unittests_in_tmtccmd.xml b/.run/Unittests_in_tmtccmd.run.xml
similarity index 100%
rename from .idea/runConfigurations/Unittests_in_tmtccmd.xml
rename to .run/Unittests_in_tmtccmd.run.xml
diff --git a/.idea/runConfigurations/_IMTQ_Command_Dipole.xml b/.run/_IMTQ_Command_Dipole.run.xml
similarity index 100%
rename from .idea/runConfigurations/_IMTQ_Command_Dipole.xml
rename to .run/_IMTQ_Command_Dipole.run.xml
diff --git a/.idea/runConfigurations/ccsds_handler.xml b/.run/ccsds_handler.run.xml
similarity index 100%
rename from .idea/runConfigurations/ccsds_handler.xml
rename to .run/ccsds_handler.run.xml
diff --git a/.idea/runConfigurations/pdec_handler.xml b/.run/pdec_handler.run.xml
similarity index 100%
rename from .idea/runConfigurations/pdec_handler.xml
rename to .run/pdec_handler.run.xml
diff --git a/.idea/runConfigurations/tmtcc_Service_17.xml b/.run/tmtcc_Service_17.run.xml
similarity index 100%
rename from .idea/runConfigurations/tmtcc_Service_17.xml
rename to .run/tmtcc_Service_17.run.xml
diff --git a/.idea/runConfigurations/tmtcc_Service_2.xml b/.run/tmtcc_Service_2.run.xml
similarity index 100%
rename from .idea/runConfigurations/tmtcc_Service_2.xml
rename to .run/tmtcc_Service_2.run.xml
diff --git a/.idea/runConfigurations/tmtcc_Service_200.xml b/.run/tmtcc_Service_200.run.xml
similarity index 100%
rename from .idea/runConfigurations/tmtcc_Service_200.xml
rename to .run/tmtcc_Service_200.run.xml
diff --git a/.idea/runConfigurations/tmtcc_Service_3.xml b/.run/tmtcc_Service_3.run.xml
similarity index 100%
rename from .idea/runConfigurations/tmtcc_Service_3.xml
rename to .run/tmtcc_Service_3.run.xml
diff --git a/.idea/runConfigurations/tmtcc_Service_8.xml b/.run/tmtcc_Service_8.run.xml
similarity index 100%
rename from .idea/runConfigurations/tmtcc_Service_8.xml
rename to .run/tmtcc_Service_8.run.xml
diff --git a/.idea/runConfigurations/tmtccli.xml b/.run/tmtccli.run.xml
similarity index 100%
rename from .idea/runConfigurations/tmtccli.xml
rename to .run/tmtccli.run.xml
diff --git a/.idea/runConfigurations/tmtccli_example.xml b/.run/tmtccli_example.run.xml
similarity index 100%
rename from .idea/runConfigurations/tmtccli_example.xml
rename to .run/tmtccli_example.run.xml
diff --git a/.idea/runConfigurations/tmtcclient_Help.xml b/.run/tmtcclient_Help.run.xml
similarity index 100%
rename from .idea/runConfigurations/tmtcclient_Help.xml
rename to .run/tmtcclient_Help.run.xml
diff --git a/.idea/runConfigurations/tmtccmd_Listener_Mode.xml b/.run/tmtccmd_Listener_Mode.run.xml
similarity index 100%
rename from .idea/runConfigurations/tmtccmd_Listener_Mode.xml
rename to .run/tmtccmd_Listener_Mode.run.xml
diff --git a/.idea/runConfigurations/tmtcgui.xml b/.run/tmtcgui.run.xml
similarity index 100%
rename from .idea/runConfigurations/tmtcgui.xml
rename to .run/tmtcgui.run.xml
diff --git a/.idea/runConfigurations/tmtcgui_example.xml b/.run/tmtcgui_example.run.xml
similarity index 100%
rename from .idea/runConfigurations/tmtcgui_example.xml
rename to .run/tmtcgui_example.run.xml
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..e4ef937
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,21 @@
+Change Log
+=======
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/).
+
+The [milestone](https://egit.irs.uni-stuttgart.de/eive/eive-obsw/milestones)
+list yields a list of all related PRs for each release.
+
+# [unreleased]
+
+# [v1.11.0]
+
+# [v1.10.0 and before]
+
+- Add additional heater commands to command health states
+- Extended heater commands for more informative output which component is heated
+
+See [milestones](https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/milestones)
+and [releases](https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/releases)
\ No newline at end of file
diff --git a/config/definitions.py b/config/definitions.py
index 476e8e4..80a7ddb 100644
--- a/config/definitions.py
+++ b/config/definitions.py
@@ -45,3 +45,4 @@ class CustomServiceList(enum.Enum):
ACS_ASS = "acs-ass"
SUS_ASS = "sus-ass"
TCS_ASS = "tcs-ass"
+ TIME = "time"
diff --git a/config/events.csv b/config/events.csv
index 994e751..939e786 100644
--- a/config/events.csv
+++ b/config/events.csv
@@ -77,104 +77,112 @@
8901;0x22c5;CLOCK_SET_FAILURE;LOW;;fsfw/src/fsfw/pus/Service9TimeManagement.h
9700;0x25e4;TEST;INFO;;fsfw/src/fsfw/pus/Service17Test.h
10600;0x2968;CHANGE_OF_SETUP_PARAMETER;LOW;;fsfw/hal/src/fsfw_hal/devicehandlers/MgmLIS3MDLHandler.h
-10800;0x2a30;SWITCH_CMD_SENT;INFO;Indicates that a FSFW object requested setting a switch P1: 1 if on was requested, 0 for off | P2: Switch Index;mission/devices/devicedefinitions/powerDefinitions.h
-10801;0x2a31;SWITCH_HAS_CHANGED;INFO;Indicated that a swithc state has changed P1: New switch state, 1 for on, 0 for off | P2: Switch Index;mission/devices/devicedefinitions/powerDefinitions.h
-10802;0x2a32;SWITCHING_Q7S_DENIED;MEDIUM;;mission/devices/devicedefinitions/powerDefinitions.h
-10900;0x2a94;GPIO_PULL_HIGH_FAILED;LOW;;mission/devices/HeaterHandler.h
-10901;0x2a95;GPIO_PULL_LOW_FAILED;LOW;;mission/devices/HeaterHandler.h
-10902;0x2a96;SWITCH_ALREADY_ON;LOW;;mission/devices/HeaterHandler.h
-10903;0x2a97;SWITCH_ALREADY_OFF;LOW;;mission/devices/HeaterHandler.h
-10904;0x2a98;MAIN_SWITCH_TIMEOUT;LOW;;mission/devices/HeaterHandler.h
-11000;0x2af8;MAIN_SWITCH_ON_TIMEOUT;LOW;;mission/devices/SolarArrayDeploymentHandler.h
-11001;0x2af9;MAIN_SWITCH_OFF_TIMEOUT;LOW;;mission/devices/SolarArrayDeploymentHandler.h
-11002;0x2afa;DEPLOYMENT_FAILED;HIGH;;mission/devices/SolarArrayDeploymentHandler.h
-11003;0x2afb;DEPL_SA1_GPIO_SWTICH_ON_FAILED;HIGH;;mission/devices/SolarArrayDeploymentHandler.h
-11004;0x2afc;DEPL_SA2_GPIO_SWTICH_ON_FAILED;HIGH;;mission/devices/SolarArrayDeploymentHandler.h
-11101;0x2b5d;MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC crc failure in telemetry packet;linux/devices/ploc/PlocMPSoCHandler.h
-11102;0x2b5e;ACK_FAILURE;LOW;PLOC receive acknowledgment failure report P1: Command Id which leads the acknowledgment failure report P2: The status field inserted by the MPSoC into the data field;linux/devices/ploc/PlocMPSoCHandler.h
-11103;0x2b5f;EXE_FAILURE;LOW;PLOC receive execution failure report P1: Command Id which leads the execution failure report P2: The status field inserted by the MPSoC into the data field;linux/devices/ploc/PlocMPSoCHandler.h
-11104;0x2b60;MPSOC_HANDLER_CRC_FAILURE;LOW;PLOC reply has invalid crc;linux/devices/ploc/PlocMPSoCHandler.h
-11105;0x2b61;MPSOC_HANDLER_SEQ_CNT_MISMATCH;LOW;Packet sequence count in received space packet does not match expected count P1: Expected sequence count P2: Received sequence count;linux/devices/ploc/PlocMPSoCHandler.h
-11201;0x2bc1;SELF_TEST_I2C_FAILURE;LOW;Get self test result returns I2C failure P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/IMTQHandler.h
-11202;0x2bc2;SELF_TEST_SPI_FAILURE;LOW;Get self test result returns SPI failure. This concerns the MTM connectivity. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/IMTQHandler.h
-11203;0x2bc3;SELF_TEST_ADC_FAILURE;LOW;Get self test result returns failure in measurement of current and temperature. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/IMTQHandler.h
-11204;0x2bc4;SELF_TEST_PWM_FAILURE;LOW;Get self test result returns PWM failure which concerns the coil actuation. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/IMTQHandler.h
-11205;0x2bc5;SELF_TEST_TC_FAILURE;LOW;Get self test result returns TC failure (system failure) P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/IMTQHandler.h
-11206;0x2bc6;SELF_TEST_MTM_RANGE_FAILURE;LOW;Get self test result returns failure that MTM values were outside of the expected range. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/IMTQHandler.h
-11207;0x2bc7;SELF_TEST_COIL_CURRENT_FAILURE;LOW;Get self test result returns failure indicating that the coil current was outside of the expected range P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/IMTQHandler.h
-11208;0x2bc8;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;mission/devices/IMTQHandler.h
-11301;0x2c25;ERROR_STATE;HIGH;Reaction wheel signals an error state;mission/devices/RwHandler.h
-11401;0x2c89;BOOTING_FIRMWARE_FAILED;LOW;Failed to boot firmware;linux/devices/startracker/StarTrackerHandler.h
-11402;0x2c8a;BOOTING_BOOTLOADER_FAILED;LOW;Failed to boot star tracker into bootloader mode;linux/devices/startracker/StarTrackerHandler.h
-11501;0x2ced;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;linux/devices/ploc/PlocSupervisorHandler.h
-11502;0x2cee;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;linux/devices/ploc/PlocSupervisorHandler.h
-11503;0x2cef;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report;linux/devices/ploc/PlocSupervisorHandler.h
-11504;0x2cf0;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;linux/devices/ploc/PlocSupervisorHandler.h
-11600;0x2d50;SANITIZATION_FAILED;LOW;;bsp_q7s/memory/SdCardManager.h
-11601;0x2d51;MOUNTED_SD_CARD;INFO;;bsp_q7s/memory/SdCardManager.h
-11700;0x2db4;UPDATE_FILE_NOT_EXISTS;LOW;;linux/devices/ploc/PlocUpdater.h
-11701;0x2db5;ACTION_COMMANDING_FAILED;LOW;Failed to send command to supervisor handler P1: Return value of CommandActionHelper::commandAction P2: Action ID of command to send;linux/devices/ploc/PlocUpdater.h
-11702;0x2db6;UPDATE_AVAILABLE_FAILED;LOW;Supervisor handler replied action message indicating a command execution failure of the update available command;linux/devices/ploc/PlocUpdater.h
-11703;0x2db7;UPDATE_TRANSFER_FAILED;LOW;Supervisor handler failed to transfer an update space packet. P1: Parameter holds the number of update packets already sent (inclusive the failed packet);linux/devices/ploc/PlocUpdater.h
-11704;0x2db8;UPDATE_VERIFY_FAILED;LOW;Supervisor failed to execute the update verify command.;linux/devices/ploc/PlocUpdater.h
-11705;0x2db9;UPDATE_FINISHED;INFO;MPSoC update successful completed;linux/devices/ploc/PlocUpdater.h
-11800;0x2e18;SEND_MRAM_DUMP_FAILED;LOW;Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command;linux/devices/ploc/PlocMemoryDumper.h
-11801;0x2e19;MRAM_DUMP_FAILED;LOW;Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command;linux/devices/ploc/PlocMemoryDumper.h
-11802;0x2e1a;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;linux/devices/ploc/PlocMemoryDumper.h
-11901;0x2e7d;INVALID_TC_FRAME;HIGH;;linux/obc/PdecHandler.h
-11902;0x2e7e;INVALID_FAR;HIGH;Read invalid FAR from PDEC after startup;linux/obc/PdecHandler.h
-11903;0x2e7f;CARRIER_LOCK;INFO;Carrier lock detected;linux/obc/PdecHandler.h
-11904;0x2e80;BIT_LOCK_PDEC;INFO;Bit lock detected (data valid);linux/obc/PdecHandler.h
-12000;0x2ee0;IMAGE_UPLOAD_FAILED;LOW;Image upload failed;linux/devices/startracker/StrHelper.h
-12001;0x2ee1;IMAGE_DOWNLOAD_FAILED;LOW;Image download failed;linux/devices/startracker/StrHelper.h
-12002;0x2ee2;IMAGE_UPLOAD_SUCCESSFUL;LOW;Uploading image to star tracker was successfulop;linux/devices/startracker/StrHelper.h
-12003;0x2ee3;IMAGE_DOWNLOAD_SUCCESSFUL;LOW;Image download was successful;linux/devices/startracker/StrHelper.h
-12004;0x2ee4;FLASH_WRITE_SUCCESSFUL;LOW;Finished flash write procedure successfully;linux/devices/startracker/StrHelper.h
-12005;0x2ee5;FLASH_READ_SUCCESSFUL;LOW;Finished flash read procedure successfully;linux/devices/startracker/StrHelper.h
-12006;0x2ee6;FLASH_READ_FAILED;LOW;Flash read procedure failed;linux/devices/startracker/StrHelper.h
-12007;0x2ee7;FIRMWARE_UPDATE_SUCCESSFUL;LOW;Firmware update was successful;linux/devices/startracker/StrHelper.h
-12008;0x2ee8;FIRMWARE_UPDATE_FAILED;LOW;Firmware update failed;linux/devices/startracker/StrHelper.h
-12009;0x2ee9;STR_HELPER_READING_REPLY_FAILED;LOW;Failed to read communication interface reply data P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/devices/startracker/StrHelper.h
-12010;0x2eea;STR_HELPER_COM_ERROR;LOW;Unexpected stop of decoding sequence P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/devices/startracker/StrHelper.h
-12011;0x2eeb;STR_HELPER_NO_REPLY;LOW;Star tracker did not send replies (maybe device is powered off) P1: Position of upload or download packet for which no reply was sent;linux/devices/startracker/StrHelper.h
-12012;0x2eec;STR_HELPER_DEC_ERROR;LOW;Error during decoding of received reply occurred P1: Return value of decoding function P2: Position of upload/download packet, or address of flash write/read request;linux/devices/startracker/StrHelper.h
-12013;0x2eed;POSITION_MISMATCH;LOW;Position mismatch P1: The expected position and thus the position for which the image upload/download failed;linux/devices/startracker/StrHelper.h
-12014;0x2eee;STR_HELPER_FILE_NOT_EXISTS;LOW;Specified file does not exist P1: Internal state of str helper;linux/devices/startracker/StrHelper.h
-12015;0x2eef;STR_HELPER_SENDING_PACKET_FAILED;LOW;;linux/devices/startracker/StrHelper.h
-12016;0x2ef0;STR_HELPER_REQUESTING_MSG_FAILED;LOW;;linux/devices/startracker/StrHelper.h
-12100;0x2f44;MPSOC_FLASH_WRITE_FAILED;LOW;Flash write fails;linux/devices/ploc/PlocMPSoCHelper.h
-12101;0x2f45;MPSOC_FLASH_WRITE_SUCCESSFUL;LOW;Flash write successful;linux/devices/ploc/PlocMPSoCHelper.h
-12102;0x2f46;SENDING_COMMAND_FAILED;LOW;;linux/devices/ploc/PlocMPSoCHelper.h
-12103;0x2f47;MPSOC_HELPER_REQUESTING_REPLY_FAILED;LOW;Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
-12104;0x2f48;MPSOC_HELPER_READING_REPLY_FAILED;LOW;Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
-12105;0x2f49;MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
-12106;0x2f4a;MISSING_EXE;LOW;Did not receive execution report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
-12107;0x2f4b;ACK_FAILURE_REPORT;LOW;Received acknowledgement failure report P1: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
-12108;0x2f4c;EXE_FAILURE_REPORT;LOW;Received execution failure report P1: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
-12109;0x2f4d;ACK_INVALID_APID;LOW;Expected acknowledgement report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
-12110;0x2f4e;EXE_INVALID_APID;LOW;Expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
-12111;0x2f4f;MPSOC_HELPER_SEQ_CNT_MISMATCH;LOW;Received sequence count does not match expected sequence count P1: Expected sequence count P2: Received sequence count;linux/devices/ploc/PlocMPSoCHelper.h
-12200;0x2fa8;TRANSITION_BACK_TO_OFF;MEDIUM;Could not transition properly and went back to ALL OFF;mission/devices/PayloadPcduHandler.h
-12201;0x2fa9;NEG_V_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
-12202;0x2faa;U_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
-12203;0x2fab;I_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
-12204;0x2fac;U_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
-12205;0x2fad;I_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
-12206;0x2fae;U_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
-12207;0x2faf;I_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
-12208;0x2fb0;U_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
-12209;0x2fb1;I_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
-12210;0x2fb2;U_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
-12211;0x2fb3;I_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
-12300;0x300c;TRANSITION_OTHER_SIDE_FAILED;HIGH;;mission/system/AcsBoardAssembly.h
-12301;0x300d;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;;mission/system/AcsBoardAssembly.h
-12302;0x300e;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;;mission/system/AcsBoardAssembly.h
-12303;0x300f;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/AcsBoardAssembly.h
-12400;0x3070;TRANSITION_OTHER_SIDE_FAILED;HIGH;;mission/system/SusAssembly.h
-12401;0x3071;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;;mission/system/SusAssembly.h
-12402;0x3072;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;;mission/system/SusAssembly.h
-12403;0x3073;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/SusAssembly.h
-12500;0x30d4;CHILDREN_LOST_MODE;MEDIUM;;mission/system/TcsBoardAssembly.h
+11300;0x2c24;SWITCH_CMD_SENT;INFO;Indicates that a FSFW object requested setting a switch P1: 1 if on was requested, 0 for off | P2: Switch Index;mission/devices/devicedefinitions/powerDefinitions.h
+11301;0x2c25;SWITCH_HAS_CHANGED;INFO;Indicated that a swithc state has changed P1: New switch state, 1 for on, 0 for off | P2: Switch Index;mission/devices/devicedefinitions/powerDefinitions.h
+11302;0x2c26;SWITCHING_Q7S_DENIED;MEDIUM;;mission/devices/devicedefinitions/powerDefinitions.h
+11303;0x2c27;FDIR_REACTION_IGNORED;MEDIUM;;mission/devices/devicedefinitions/powerDefinitions.h
+11400;0x2c88;GPIO_PULL_HIGH_FAILED;LOW;;mission/devices/HeaterHandler.h
+11401;0x2c89;GPIO_PULL_LOW_FAILED;LOW;;mission/devices/HeaterHandler.h
+11402;0x2c8a;HEATER_WENT_ON;INFO;;mission/devices/HeaterHandler.h
+11403;0x2c8b;HEATER_WENT_OFF;INFO;;mission/devices/HeaterHandler.h
+11404;0x2c8c;SWITCH_ALREADY_ON;LOW;;mission/devices/HeaterHandler.h
+11405;0x2c8d;SWITCH_ALREADY_OFF;LOW;;mission/devices/HeaterHandler.h
+11406;0x2c8e;MAIN_SWITCH_TIMEOUT;MEDIUM;;mission/devices/HeaterHandler.h
+11500;0x2cec;MAIN_SWITCH_ON_TIMEOUT;LOW;;mission/devices/SolarArrayDeploymentHandler.h
+11501;0x2ced;MAIN_SWITCH_OFF_TIMEOUT;LOW;;mission/devices/SolarArrayDeploymentHandler.h
+11502;0x2cee;DEPLOYMENT_FAILED;HIGH;;mission/devices/SolarArrayDeploymentHandler.h
+11503;0x2cef;DEPL_SA1_GPIO_SWTICH_ON_FAILED;HIGH;;mission/devices/SolarArrayDeploymentHandler.h
+11504;0x2cf0;DEPL_SA2_GPIO_SWTICH_ON_FAILED;HIGH;;mission/devices/SolarArrayDeploymentHandler.h
+11601;0x2d51;MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC crc failure in telemetry packet;linux/devices/ploc/PlocMPSoCHandler.h
+11602;0x2d52;ACK_FAILURE;LOW;PLOC receive acknowledgment failure report P1: Command Id which leads the acknowledgment failure report P2: The status field inserted by the MPSoC into the data field;linux/devices/ploc/PlocMPSoCHandler.h
+11603;0x2d53;EXE_FAILURE;LOW;PLOC receive execution failure report P1: Command Id which leads the execution failure report P2: The status field inserted by the MPSoC into the data field;linux/devices/ploc/PlocMPSoCHandler.h
+11604;0x2d54;MPSOC_HANDLER_CRC_FAILURE;LOW;PLOC reply has invalid crc;linux/devices/ploc/PlocMPSoCHandler.h
+11605;0x2d55;MPSOC_HANDLER_SEQ_CNT_MISMATCH;LOW;Packet sequence count in received space packet does not match expected count P1: Expected sequence count P2: Received sequence count;linux/devices/ploc/PlocMPSoCHandler.h
+11606;0x2d56;MPSOC_SHUTDOWN_FAILED;HIGH;Supervisor fails to shutdown MPSoC. Requires to power off the PLOC and thus also to shutdown the supervisor.;linux/devices/ploc/PlocMPSoCHandler.h
+11701;0x2db5;SELF_TEST_I2C_FAILURE;LOW;Get self test result returns I2C failure P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/IMTQHandler.h
+11702;0x2db6;SELF_TEST_SPI_FAILURE;LOW;Get self test result returns SPI failure. This concerns the MTM connectivity. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/IMTQHandler.h
+11703;0x2db7;SELF_TEST_ADC_FAILURE;LOW;Get self test result returns failure in measurement of current and temperature. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/IMTQHandler.h
+11704;0x2db8;SELF_TEST_PWM_FAILURE;LOW;Get self test result returns PWM failure which concerns the coil actuation. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/IMTQHandler.h
+11705;0x2db9;SELF_TEST_TC_FAILURE;LOW;Get self test result returns TC failure (system failure) P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/IMTQHandler.h
+11706;0x2dba;SELF_TEST_MTM_RANGE_FAILURE;LOW;Get self test result returns failure that MTM values were outside of the expected range. P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/IMTQHandler.h
+11707;0x2dbb;SELF_TEST_COIL_CURRENT_FAILURE;LOW;Get self test result returns failure indicating that the coil current was outside of the expected range P1: Indicates on which axis the failure occurred. 0 -> INIT, 1 -> +X, 2 -> -X, 3 -> +Y, 4 -> -Y, 5 -> +Z, 6 -> -Z, 7 -> FINA;mission/devices/IMTQHandler.h
+11708;0x2dbc;INVALID_ERROR_BYTE;LOW;Received invalid error byte. This indicates an error of the communication link between IMTQ and OBC.;mission/devices/IMTQHandler.h
+11801;0x2e19;ERROR_STATE;HIGH;Reaction wheel signals an error state;mission/devices/RwHandler.h
+11901;0x2e7d;BOOTING_FIRMWARE_FAILED;LOW;Failed to boot firmware;linux/devices/startracker/StarTrackerHandler.h
+11902;0x2e7e;BOOTING_BOOTLOADER_FAILED;LOW;Failed to boot star tracker into bootloader mode;linux/devices/startracker/StarTrackerHandler.h
+12001;0x2ee1;SUPV_MEMORY_READ_RPT_CRC_FAILURE;LOW;PLOC supervisor crc failure in telemetry packet;linux/devices/ploc/PlocSupervisorHandler.h
+12002;0x2ee2;SUPV_ACK_FAILURE;LOW;PLOC supervisor received acknowledgment failure report;linux/devices/ploc/PlocSupervisorHandler.h
+12003;0x2ee3;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report;linux/devices/ploc/PlocSupervisorHandler.h
+12004;0x2ee4;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;linux/devices/ploc/PlocSupervisorHandler.h
+12100;0x2f44;SANITIZATION_FAILED;LOW;;bsp_q7s/memory/SdCardManager.h
+12101;0x2f45;MOUNTED_SD_CARD;INFO;;bsp_q7s/memory/SdCardManager.h
+12200;0x2fa8;UPDATE_FILE_NOT_EXISTS;LOW;;linux/devices/ploc/PlocUpdater.h
+12201;0x2fa9;ACTION_COMMANDING_FAILED;LOW;Failed to send command to supervisor handler P1: Return value of CommandActionHelper::commandAction P2: Action ID of command to send;linux/devices/ploc/PlocUpdater.h
+12202;0x2faa;UPDATE_AVAILABLE_FAILED;LOW;Supervisor handler replied action message indicating a command execution failure of the update available command;linux/devices/ploc/PlocUpdater.h
+12203;0x2fab;UPDATE_TRANSFER_FAILED;LOW;Supervisor handler failed to transfer an update space packet. P1: Parameter holds the number of update packets already sent (inclusive the failed packet);linux/devices/ploc/PlocUpdater.h
+12204;0x2fac;UPDATE_VERIFY_FAILED;LOW;Supervisor failed to execute the update verify command.;linux/devices/ploc/PlocUpdater.h
+12205;0x2fad;UPDATE_FINISHED;INFO;MPSoC update successful completed;linux/devices/ploc/PlocUpdater.h
+12300;0x300c;SEND_MRAM_DUMP_FAILED;LOW;Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command;linux/devices/ploc/PlocMemoryDumper.h
+12301;0x300d;MRAM_DUMP_FAILED;LOW;Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command;linux/devices/ploc/PlocMemoryDumper.h
+12302;0x300e;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;linux/devices/ploc/PlocMemoryDumper.h
+12401;0x3071;INVALID_TC_FRAME;HIGH;;linux/obc/PdecHandler.h
+12402;0x3072;INVALID_FAR;HIGH;Read invalid FAR from PDEC after startup;linux/obc/PdecHandler.h
+12403;0x3073;CARRIER_LOCK;INFO;Carrier lock detected;linux/obc/PdecHandler.h
+12404;0x3074;BIT_LOCK_PDEC;INFO;Bit lock detected (data valid);linux/obc/PdecHandler.h
+12500;0x30d4;IMAGE_UPLOAD_FAILED;LOW;Image upload failed;linux/devices/startracker/StrHelper.h
+12501;0x30d5;IMAGE_DOWNLOAD_FAILED;LOW;Image download failed;linux/devices/startracker/StrHelper.h
+12502;0x30d6;IMAGE_UPLOAD_SUCCESSFUL;LOW;Uploading image to star tracker was successfulop;linux/devices/startracker/StrHelper.h
+12503;0x30d7;IMAGE_DOWNLOAD_SUCCESSFUL;LOW;Image download was successful;linux/devices/startracker/StrHelper.h
+12504;0x30d8;FLASH_WRITE_SUCCESSFUL;LOW;Finished flash write procedure successfully;linux/devices/startracker/StrHelper.h
+12505;0x30d9;FLASH_READ_SUCCESSFUL;LOW;Finished flash read procedure successfully;linux/devices/startracker/StrHelper.h
+12506;0x30da;FLASH_READ_FAILED;LOW;Flash read procedure failed;linux/devices/startracker/StrHelper.h
+12507;0x30db;FIRMWARE_UPDATE_SUCCESSFUL;LOW;Firmware update was successful;linux/devices/startracker/StrHelper.h
+12508;0x30dc;FIRMWARE_UPDATE_FAILED;LOW;Firmware update failed;linux/devices/startracker/StrHelper.h
+12509;0x30dd;STR_HELPER_READING_REPLY_FAILED;LOW;Failed to read communication interface reply data P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/devices/startracker/StrHelper.h
+12510;0x30de;STR_HELPER_COM_ERROR;LOW;Unexpected stop of decoding sequence P1: Return code of failed communication interface read call P1: Upload/download position for which the read call failed;linux/devices/startracker/StrHelper.h
+12511;0x30df;STR_HELPER_NO_REPLY;LOW;Star tracker did not send replies (maybe device is powered off) P1: Position of upload or download packet for which no reply was sent;linux/devices/startracker/StrHelper.h
+12512;0x30e0;STR_HELPER_DEC_ERROR;LOW;Error during decoding of received reply occurred P1: Return value of decoding function P2: Position of upload/download packet, or address of flash write/read request;linux/devices/startracker/StrHelper.h
+12513;0x30e1;POSITION_MISMATCH;LOW;Position mismatch P1: The expected position and thus the position for which the image upload/download failed;linux/devices/startracker/StrHelper.h
+12514;0x30e2;STR_HELPER_FILE_NOT_EXISTS;LOW;Specified file does not exist P1: Internal state of str helper;linux/devices/startracker/StrHelper.h
+12515;0x30e3;STR_HELPER_SENDING_PACKET_FAILED;LOW;;linux/devices/startracker/StrHelper.h
+12516;0x30e4;STR_HELPER_REQUESTING_MSG_FAILED;LOW;;linux/devices/startracker/StrHelper.h
+12600;0x3138;MPSOC_FLASH_WRITE_FAILED;LOW;Flash write fails;linux/devices/ploc/PlocMPSoCHelper.h
+12601;0x3139;MPSOC_FLASH_WRITE_SUCCESSFUL;LOW;Flash write successful;linux/devices/ploc/PlocMPSoCHelper.h
+12602;0x313a;SENDING_COMMAND_FAILED;LOW;;linux/devices/ploc/PlocMPSoCHelper.h
+12603;0x313b;MPSOC_HELPER_REQUESTING_REPLY_FAILED;LOW;Request receive message of communication interface failed P1: Return value returned by the communication interface requestReceiveMessage function P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
+12604;0x313c;MPSOC_HELPER_READING_REPLY_FAILED;LOW;Reading receive message of communication interface failed P1: Return value returned by the communication interface readingReceivedMessage function P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
+12605;0x313d;MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
+12606;0x313e;MISSING_EXE;LOW;Did not receive execution report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocMPSoCHelper.h
+12607;0x313f;ACK_FAILURE_REPORT;LOW;Received acknowledgement failure report P1: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
+12608;0x3140;EXE_FAILURE_REPORT;LOW;Received execution failure report P1: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
+12609;0x3141;ACK_INVALID_APID;LOW;Expected acknowledgement report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
+12610;0x3142;EXE_INVALID_APID;LOW;Expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of MPSoC;linux/devices/ploc/PlocMPSoCHelper.h
+12611;0x3143;MPSOC_HELPER_SEQ_CNT_MISMATCH;LOW;Received sequence count does not match expected sequence count P1: Expected sequence count P2: Received sequence count;linux/devices/ploc/PlocMPSoCHelper.h
+12700;0x319c;TRANSITION_BACK_TO_OFF;MEDIUM;Could not transition properly and went back to ALL OFF;mission/devices/PayloadPcduHandler.h
+12701;0x319d;NEG_V_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
+12702;0x319e;U_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
+12703;0x319f;I_DRO_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
+12704;0x31a0;U_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
+12705;0x31a1;I_X8_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
+12706;0x31a2;U_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
+12707;0x31a3;I_TX_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
+12708;0x31a4;U_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
+12709;0x31a5;I_MPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
+12710;0x31a6;U_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
+12711;0x31a7;I_HPA_OUT_OF_BOUNDS;MEDIUM;P1: 0 -> too low, 1 -> too high P2: Float value;mission/devices/PayloadPcduHandler.h
+12800;0x3200;TRANSITION_OTHER_SIDE_FAILED;HIGH;;mission/system/AcsBoardAssembly.h
+12801;0x3201;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;;mission/system/AcsBoardAssembly.h
+12802;0x3202;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;;mission/system/AcsBoardAssembly.h
+12803;0x3203;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/AcsBoardAssembly.h
+12900;0x3264;TRANSITION_OTHER_SIDE_FAILED;HIGH;;mission/system/SusAssembly.h
+12901;0x3265;NOT_ENOUGH_DEVICES_DUAL_MODE;HIGH;;mission/system/SusAssembly.h
+12902;0x3266;POWER_STATE_MACHINE_TIMEOUT;MEDIUM;;mission/system/SusAssembly.h
+12903;0x3267;SIDE_SWITCH_TRANSITION_NOT_ALLOWED;LOW;Not implemented, would increase already high complexity. Operator should instead command the assembly off first and then command the assembly on into the desired mode/submode combination;mission/system/SusAssembly.h
+13000;0x32c8;CHILDREN_LOST_MODE;MEDIUM;;mission/system/TcsBoardAssembly.h
+13100;0x332c;GPS_FIX_CHANGE;INFO;Fix has changed. P1: Old fix. P2: New fix 0: Not seen, 1: No Fix, 2: 2D-Fix, 3: 3D-Fix;mission/devices/devicedefinitions/GPSDefinitions.h
+13200;0x3390;P60_BOOT_COUNT;INFO;P60 boot count is broadcasted once at SW startup. P1: Boot count;mission/devices/P60DockHandler.h
+13201;0x3391;BATT_MODE;INFO;Battery mode is broadcasted at startup. P1: Mode;mission/devices/P60DockHandler.h
+13202;0x3392;BATT_MODE_CHANGED;MEDIUM;Battery mode has changed. P1: Old mode. P2: New mode;mission/devices/P60DockHandler.h
13600;0x3520;ALLOC_FAILURE;MEDIUM;;bsp_q7s/core/CoreController.h
13601;0x3521;REBOOT_SW;MEDIUM; Software reboot occured. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy;bsp_q7s/core/CoreController.h
13602;0x3522;REBOOT_MECHANISM_TRIGGERED;MEDIUM;The reboot mechanism was triggered. P1: First 16 bits: Last Chip, Last 16 bits: Last Copy, P2: Each byte is the respective reboot count for the slots;bsp_q7s/core/CoreController.h
diff --git a/config/hook_implementations.py b/config/hook_implementations.py
index aa7bdf8..c7bc489 100644
--- a/config/hook_implementations.py
+++ b/config/hook_implementations.py
@@ -1,23 +1,17 @@
-import argparse
-from typing import Union, Dict
+from typing import Union
from tmtccmd.config.definitions import (
ServiceOpCodeDictT,
- HkReplyUnpacked,
- DataReplyUnpacked,
)
-from tmtccmd.tm.service_3_base import Service3Base
from tmtccmd.tc.definitions import TcQueueT
from tmtccmd.utility.retval import RetvalDictT
from tmtccmd.pus.obj_id import ObjectIdDictT
from tmtccmd.com_if.com_interface_base import CommunicationInterface
from tmtccmd.core.backend import TmTcHandler
from tmtccmd.config.hook import TmTcHookBase
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
-from tmtccmd.config.globals import OpCodeDictKeys
-from config.definitions import CustomServiceList
from config.retvals import get_retval_dict
+from pus_tc.cmd_definitions import get_eive_service_op_code_dict
class EiveHookObject(TmTcHookBase):
@@ -61,290 +55,3 @@ class EiveHookObject(TmTcHookBase):
def get_retval_dict(self) -> RetvalDictT:
return get_retval_dict()
-
-
-def get_eive_service_op_code_dict(service_op_code_dict: ServiceOpCodeDictT):
- from pus_tc.cmd_definitions import (
- add_bpx_cmd_definitions,
- add_core_controller_definitions,
- add_pcdu_cmds,
- add_pl_pcdu_cmds,
- add_imtq_cmds,
- add_rw_cmds,
- add_rad_sens_cmds,
- add_ploc_mpsoc_cmds,
- add_ploc_supv_cmds,
- add_system_cmds,
- )
- from pus_tc.devs.gps import GpsOpCodes
-
- add_bpx_cmd_definitions(cmd_dict=service_op_code_dict)
- add_core_controller_definitions(cmd_dict=service_op_code_dict)
- add_pl_pcdu_cmds(cmd_dict=service_op_code_dict)
- add_pcdu_cmds(cmd_dict=service_op_code_dict)
- add_imtq_cmds(cmd_dict=service_op_code_dict)
- add_rad_sens_cmds(cmd_dict=service_op_code_dict)
- add_rw_cmds(cmd_dict=service_op_code_dict)
- add_ploc_mpsoc_cmds(cmd_dict=service_op_code_dict)
- add_ploc_supv_cmds(cmd_dict=service_op_code_dict)
- add_system_cmds(cmd_dict=service_op_code_dict)
-
- op_code_dict = {
- GpsOpCodes.RESET_GNSS.value: ("Reset GPS", {OpCodeDictKeys.TIMEOUT: 2.0})
- }
- service_tuple = ("GPS 0", op_code_dict)
- service_op_code_dict[CustomServiceList.GPS_0.value] = service_tuple
- service_op_code_dict[CustomServiceList.GPS_1.value] = service_tuple
-
- op_code_dict = {
- "0": ("ACU: Tests", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "51": ("ACU: Print channel statistics", {OpCodeDictKeys.TIMEOUT: 2.0}),
- }
- service_tuple = ("ACU Devices", op_code_dict)
- service_op_code_dict[CustomServiceList.ACU.value] = service_tuple
-
- op_code_dict = {
- "0": ("TMP1075 Tests", {OpCodeDictKeys.TIMEOUT: 2.2}),
- }
- service_tuple = ("TMP1075 1", op_code_dict)
- service_op_code_dict[CustomServiceList.TMP1075_1.value] = service_tuple
- service_tuple = ("TMP1075 2", op_code_dict)
- service_op_code_dict[CustomServiceList.TMP1075_2.value] = service_tuple
-
- op_code_dict_srv_heater = {
- "0": ("Heater Tests", {OpCodeDictKeys.TIMEOUT: 2.0}),
- }
- service_heater_tuple = ("Heater Device", op_code_dict_srv_heater)
-
- op_code_dict_srv_star_tracker = {
- "0": (
- "Star Tracker: Mode On, Submode Bootloader",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "1": ("Star Tracker: Mode On, Submode Firmware", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "2": ("Star Tracker: Mode Normal", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "3": ("Star Tracker: Mode Off", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "4": ("Star Tracker: Mode Raw", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "5": ("Star Tracker: Ping", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "6": (
- "Star Tracker: Switch to bootloader program",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "7": ("Star Tracker: Request temperature", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "8": ("Star Tracker: Request version", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "9": ("Star Tracker: Request interface", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "10": ("Star Tracker: Request power", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "11": (
- "Star Tracker: Set subscription parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "12": (
- "Star Tracker: Boot image (requires bootloader mode)",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "13": ("Star Tracker: Request time", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "14": ("Star Tracker: Request solution", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "15": ("Star Tracker: Upload image", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "16": ("Star Tracker: Download image", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "17": ("Star Tracker: Set limit parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "18": ("Star Tracker: Set tracking parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "19": ("Star Tracker: Set mounting parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "20": ("Star Tracker: Set camera parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "22": (
- "Star Tracker: Set centroiding parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "23": ("Star Tracker: Set LISA parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "24": ("Star Tracker: Set matching parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "25": (
- "Star Tracker: Set validation parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "26": ("Star Tracker: Set algo parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "27": ("Star Tracker: Take image", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "28": ("Star Tracker: Stop str helper", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "30": (
- "Star Tracker: Set name of download image",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "31": ("Star Tracker: Request histogram", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "32": ("Star Tracker: Request contrast", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "33": ("Star Tracker: Set json filename", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "35": ("Star Tracker: Flash read", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "36": ("Star Tracker: Set flash read filename", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "37": ("Star Tracker: Get checksum", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "49": ("Star Tracker: Request camera parameter", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "50": ("Star Tracker: Request limits", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "51": (
- "Star Tracker: Set image processor parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "52": (
- "Star Tracker: (EGSE only) Load camera ground config ",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "53": (
- "Star Tracker: (EGSE only) Load camera flight config",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "54": (
- "Star Tracker: Request log level parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "55": (
- "Star Tracker: Request mounting parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "56": (
- "Star Tracker: Request image processor parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "57": (
- "Star Tracker: Request centroiding parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "58": ("Star Tracker: Request lisa parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "59": (
- "Star Tracker: Request matching parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "60": (
- "Star Tracker: Request tracking parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "61": (
- "Star Tracker: Request validation parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "62": ("Star Tracker: Request algo parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "63": (
- "Star Tracker: Request subscription parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "64": (
- "Star Tracker: Request log subscription parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "65": (
- "Star Tracker: Request debug camera parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "66": ("Star Tracker: Set log level parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "67": (
- "Star Tracker: Set log subscription parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "68": (
- "Star Tracker: Set debug camera parameters",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "69": ("Star Tracker: Firmware update", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "70": (
- "Star Tracker: Disable timestamp generation",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "71": (
- "Star Tracker: Enable timestamp generation",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- }
- service_star_tracker_tuple = ("Star tracker", op_code_dict_srv_star_tracker)
-
- op_code_dict_srv_ccsds_handler = {
- "0": ("CCSDS Handler: Set low rate", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "1": ("CCSDS Handler: Set high rate", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "2": ("CCSDS Handler: Enable transmitter", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "3": ("CCSDS Handler: Disable transmitter", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "4": ("CCSDS Handler: Set arbitrary bitrate", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "5": (
- "CCSDS Handler: Enable tx clock manipulator",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "6": (
- "CCSDS Handler: Disable tx clock manipulator",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "7": (
- "CCSDS Handler: Update tx data on rising edge",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "8": (
- "CCSDS Handler: Update tx data on falling edge",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- }
- service_ccsds_handler_tuple = ("CCSDS Handler", op_code_dict_srv_ccsds_handler)
-
- op_code_dict_srv_pdec_handler = {
- "0": ("PDEC Handler: Print CLCW", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "1": ("PDEC Handler: Print PDEC monitor", {OpCodeDictKeys.TIMEOUT: 2.0}),
- }
- service_pdec_handler_tuple = ("PDEC Handler", op_code_dict_srv_pdec_handler)
-
- op_code_dict_srv_syrlinks_handler = {
- "0": ("Syrlinks Handler: Set mode off", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "1": ("Syrlinks Handler: Set mode on", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "2": ("Syrlinks Handler: Set mode normal", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "3": ("Syrlinks Handler: Set TX standby", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "4": ("Syrlinks Handler: Set TX modulation", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "5": ("Syrlinks Handler: Set TX carrier wave", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "6": ("Syrlinks Handler: Read TX status", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "7": ("Syrlinks Handler: Read TX waveform", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "8": (
- "Syrlinks Handler: Read TX AGC value high byte ",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "9": (
- "Syrlinks Handler: Read TX AGC value low byte ",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "12": (
- "Syrlinks Handler: Write LCL config",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "13": (
- "Syrlinks Handler: Read RX status registers",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "14": (
- "Syrlinks Handler: Read LCL config register",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "15": (
- "Syrlinks Handler: Set waveform OQPSK",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "16": (
- "Syrlinks Handler: Set waveform BPSK",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "17": (
- "Syrlinks Handler: Set second config",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "18": (
- "Syrlinks Handler: Enable debug output",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "19": (
- "Syrlinks Handler: Disable debug output",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- }
- service_syrlinks_handler_tuple = (
- "Syrlinks Handler",
- op_code_dict_srv_syrlinks_handler,
- )
- service_op_code_dict[CustomServiceList.HEATER.value] = service_heater_tuple
- service_op_code_dict[
- CustomServiceList.STAR_TRACKER.value
- ] = service_star_tracker_tuple
- service_op_code_dict[
- CustomServiceList.CCSDS_HANDLER.value
- ] = service_ccsds_handler_tuple
- service_op_code_dict[
- CustomServiceList.PDEC_HANDLER.value
- ] = service_pdec_handler_tuple
- service_op_code_dict[
- CustomServiceList.SYRLINKS.value
- ] = service_syrlinks_handler_tuple
diff --git a/config/object_ids.py b/config/object_ids.py
index a70adb6..9b0709e 100644
--- a/config/object_ids.py
+++ b/config/object_ids.py
@@ -55,7 +55,7 @@ IMTQ_HANDLER_ID = bytes([0x44, 0x14, 0x00, 0x14])
PUS_SERVICE_17_ID = bytes([0x53, 0x00, 0x00, 0x17])
TEST_DEVICE_ID = bytes([0x54, 0x00, 0xAF, 0xFE])
CCSDS_HANDLER_ID = bytes([0x50, 0x00, 0x08, 0x00])
-PDEC_HANDLER_ID = bytes([0x50, 0x00, 0x07, 0x04])
+PDEC_HANDLER_ID = bytes([0x50, 0x00, 0x07, 0x00])
# Payload Object IDs
STAR_TRACKER_ID = bytes([0x44, 0x13, 0x00, 0x1])
@@ -67,6 +67,16 @@ STR_IMG_HELPER_ID = bytes([0x44, 0x33, 0x00, 0x02])
PLOC_MPSOC_ID = bytes([0x44, 0x33, 0x00, 0x15])
PL_PCDU_ID = bytes([0x44, 0x30, 0x00, 0x00])
+# Other
+HEATER_0_OBC_BRD = bytes([0x60, 0x00, 0x00, 0x00])
+HEATER_1_PLOC_PROC_BRD = bytes([0x60, 0x00, 0x00, 0x01])
+HEATER_2_ACS_BRD = bytes([0x60, 0x00, 0x00, 0x02])
+HEATER_3_PCDU_BRD = bytes([0x60, 0x00, 0x00, 0x03])
+HEATER_4_CAMERA = bytes([0x60, 0x00, 0x00, 0x04])
+HEATER_5_STR = bytes([0x60, 0x00, 0x00, 0x05])
+HEATER_6_DRO = bytes([0x60, 0x00, 0x00, 0x06])
+HEATER_7_HPA = bytes([0x60, 0x00, 0x00, 0x07])
+
# System and Assembly Objects
ACS_BOARD_ASS_ID = bytes([0x73, 0x00, 0x00, 0x01])
SUS_BOARD_ASS_ID = bytes([0x73, 0x00, 0x00, 0x02])
diff --git a/config/objects.csv b/config/objects.csv
index a19c8e7..674a4ca 100644
--- a/config/objects.csv
+++ b/config/objects.csv
@@ -109,6 +109,14 @@
0x5400CAFE;DUMMY_INTERFACE
0x54123456;LIBGPIOD_TEST
0x54694269;TEST_TASK
+0x60000000;HEATER_0
+0x60000001;HEATER_1
+0x60000002;HEATER_2
+0x60000003;HEATER_3
+0x60000004;HEATER_4
+0x60000005;HEATER_5
+0x60000006;HEATER_6
+0x60000007;HEATER_7
0x73000001;ACS_BOARD_ASS
0x73000002;SUS_BOARD_ASS
0x73000003;TCS_BOARD_ASS
diff --git a/config/returnvalues.csv b/config/returnvalues.csv
index 01b2f67..eb63b10 100644
--- a/config/returnvalues.csv
+++ b/config/returnvalues.csv
@@ -1,13 +1,12 @@
0x0;OK;System-wide code for ok.;RETURN_OK;HasReturnvaluesIF.h;HasReturnvaluesIF
0x1;Failed;Unspecified system-wide code for failed.;RETURN_FAILED;HasReturnvaluesIF.h;HasReturnvaluesIF
0x62a0;CCSDS_CommandNotImplemented;Received action message with unknown action id;0xA0;mission/tmtc/CCSDSHandler.h;CCSDS_HANDLER
-0x68a0;SADPL_CommandNotSupported;;0xA0;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
-0x68a1;SADPL_DeploymentAlreadyExecuting;;0xA1;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
-0x68a2;SADPL_MainSwitchTimeoutFailure;;0xA2;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
-0x68a3;SADPL_SwitchingDeplSa1Failed;;0xA3;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
-0x68a4;SADPL_SwitchingDeplSa2Failed;;0xA4;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
-0x5aa0;SUSS_ErrorUnlockMutex;;0xA0;mission/devices/SusHandler.h;SUS_HANDLER
-0x5aa1;SUSS_ErrorLockMutex;;0xA1;mission/devices/SusHandler.h;SUS_HANDLER
+0x5f00;GOMS_PacketTooLong;;0;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
+0x5f01;GOMS_InvalidTableId;;1;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
+0x5f02;GOMS_InvalidAddress;;2;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
+0x5f03;GOMS_InvalidParamSize;;3;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
+0x5f04;GOMS_InvalidPayloadSize;;4;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
+0x5f05;GOMS_UnknownReplyId;;5;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
0x55b0;RWHA_SpiWriteFailure;;0xB0;mission/devices/RwHandler.h;RW_HANDLER
0x55b1;RWHA_SpiReadFailure;Used by the spi send function to tell a failing read call;0xB1;mission/devices/RwHandler.h;RW_HANDLER
0x55b2;RWHA_MissingStartSign;Can be used by the HDLC decoding mechanism to inform about a missing start sign 0x7E;0xB2;mission/devices/RwHandler.h;RW_HANDLER
@@ -20,6 +19,13 @@
0x55a2;RWHA_SetSpeedCommandInvalidLength;Received set speed command has invalid length. Should be 6.;0xA2;mission/devices/RwHandler.h;RW_HANDLER
0x55a3;RWHA_ExecutionFailed;Command execution failed;0xA3;mission/devices/RwHandler.h;RW_HANDLER
0x55a4;RWHA_CrcError;Reaction wheel reply has invalid crc;0xA4;mission/devices/RwHandler.h;RW_HANDLER
+0x52a1;HEATER_CommandNotSupported;;0xA1;mission/devices/HeaterHandler.h;HEATER_HANDLER
+0x52a2;HEATER_InitFailed;;0xA2;mission/devices/HeaterHandler.h;HEATER_HANDLER
+0x52a3;HEATER_InvalidSwitchNr;;0xA3;mission/devices/HeaterHandler.h;HEATER_HANDLER
+0x52a4;HEATER_MainSwitchSetTimeout;;0xA4;mission/devices/HeaterHandler.h;HEATER_HANDLER
+0x52a5;HEATER_CommandAlreadyWaiting;;0xA5;mission/devices/HeaterHandler.h;HEATER_HANDLER
+0x5aa0;SUSS_ErrorUnlockMutex;;0xA0;mission/devices/SusHandler.h;SUS_HANDLER
+0x5aa1;SUSS_ErrorLockMutex;;0xA1;mission/devices/SusHandler.h;SUS_HANDLER
0x54a0;IMTQ_InvalidCommandCode;;0xA0;mission/devices/IMTQHandler.h;IMTQ_HANDLER
0x54a1;IMTQ_ParameterMissing;;0xA1;mission/devices/IMTQHandler.h;IMTQ_HANDLER
0x54a2;IMTQ_ParameterInvalid;;0xA2;mission/devices/IMTQHandler.h;IMTQ_HANDLER
@@ -28,17 +34,6 @@
0x54a5;IMTQ_RejectedWithoutReason;;0xA5;mission/devices/IMTQHandler.h;IMTQ_HANDLER
0x54a6;IMTQ_CmdErrUnknown;;0xA6;mission/devices/IMTQHandler.h;IMTQ_HANDLER
0x54a7;IMTQ_UnexpectedSelfTestReply;The status reply to a self test command was received but no self test command has been sent. This should normally never happen.;0xA7;mission/devices/IMTQHandler.h;IMTQ_HANDLER
-0x52a1;HEATER_CommandNotSupported;;0xA1;mission/devices/HeaterHandler.h;HEATER_HANDLER
-0x52a2;HEATER_InitFailed;;0xA2;mission/devices/HeaterHandler.h;HEATER_HANDLER
-0x52a3;HEATER_InvalidSwitchNr;;0xA3;mission/devices/HeaterHandler.h;HEATER_HANDLER
-0x52a4;HEATER_MainSwitchSetTimeout;;0xA4;mission/devices/HeaterHandler.h;HEATER_HANDLER
-0x52a5;HEATER_CommandAlreadyWaiting;;0xA5;mission/devices/HeaterHandler.h;HEATER_HANDLER
-0x5f00;GOMS_PacketTooLong;;0;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
-0x5f01;GOMS_InvalidTableId;;1;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
-0x5f02;GOMS_InvalidAddress;;2;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
-0x5f03;GOMS_InvalidParamSize;;3;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
-0x5f04;GOMS_InvalidPayloadSize;;4;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
-0x5f05;GOMS_UnknownReplyId;;5;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
0x53a0;SYRLINKS_CrcFailure;;0xA0;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
0x53a1;SYRLINKS_UartFraminOrParityErrorAck;;0xA1;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
0x53a2;SYRLINKS_BadCharacterAck;;0xA2;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
@@ -48,10 +43,15 @@
0x53a6;SYRLINKS_BadCrcAck;;0xA6;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
0x53a7;SYRLINKS_ReplyWrongSize;;0xA7;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
0x53a8;SYRLINKS_MissingStartFrameCharacter;;0xA8;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
+0x68a0;SADPL_CommandNotSupported;;0xA0;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
+0x68a1;SADPL_DeploymentAlreadyExecuting;;0xA1;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
+0x68a2;SADPL_MainSwitchTimeoutFailure;;0xA2;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
+0x68a3;SADPL_SwitchingDeplSa1Failed;;0xA3;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
+0x68a4;SADPL_SwitchingDeplSa2Failed;;0xA4;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
0x65a0;NVMB_KeyNotExists;Specified key does not exist in json file;0xA0;mission/memory/NVMParameterBase.h;NVM_PARAM_BASE
-0x4300; HSPI_OpeningFileFailed;;0;fsfw/hal/src/fsfw_hal/linux/spi/SpiComIF.h;HAL_SPI
-0x4301; HSPI_FullDuplexTransferFailed;;1;fsfw/hal/src/fsfw_hal/linux/spi/SpiComIF.h;HAL_SPI
-0x4302; HSPI_HalfDuplexTransferFailed;;2;fsfw/hal/src/fsfw_hal/linux/spi/SpiComIF.h;HAL_SPI
+0x4300; HSPI_HalTimeoutRetval;;0;fsfw/hal/src/fsfw_hal/stm32h7/spi/spiDefinitions.h;HAL_SPI
+0x4301; HSPI_HalBusyRetval;;1;fsfw/hal/src/fsfw_hal/stm32h7/spi/spiDefinitions.h;HAL_SPI
+0x4302; HSPI_HalErrorRetval;;2;fsfw/hal/src/fsfw_hal/stm32h7/spi/spiDefinitions.h;HAL_SPI
0x4401; HURT_UartReadFailure;;1;fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART
0x4402; HURT_UartReadSizeMissmatch;;2;fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART
0x4403; HURT_UartRxBufferTooSmall;;3;fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART
@@ -60,125 +60,43 @@
0x4603; HGIO_GpioTypeFailure;;3;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
0x4604; HGIO_GpioInvalidInstance;;4;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
0x4605; HGIO_GpioDuplicateDetected;;5;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
+0x4606; HGIO_GpioInitFailed;;6;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
0x4200; UXOS_ExecutionFinished;Execution of the current command has finished;0;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL
0x4201; UXOS_CommandPending;Command is pending. This will also be returned if the user tries to load another command but a command is still pending;1;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL
0x4202; UXOS_BytesRead;Some bytes have been read from the executing process;2;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL
0x4203; UXOS_CommandError;Command execution failed;3;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL
0x4204; UXOS_NoCommandLoadedOrPending;;4;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL
0x4206; UXOS_PcloseCallError;;6;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL
-0x3b00; LPIF_PoolEntryNotFound;;0x00;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h;LOCAL_POOL_OWNER_IF
-0x3b01; LPIF_PoolEntryTypeConflict;;0x01;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h;LOCAL_POOL_OWNER_IF
-0x3d00; HKM_QueueOrDestinationInvalid;;0;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
-0x3d01; HKM_WrongHkPacketType;;1;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
-0x3d02; HKM_ReportingStatusUnchanged;;2;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
-0x3d03; HKM_PeriodicHelperInvalid;;3;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
-0x3d04; HKM_PoolobjectNotFound;;4;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
-0x3d05; HKM_DatasetNotFound;;5;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
-0x3501; CFDP_InvalidTlvType;;1;fsfw/src/fsfw/cfdp/definitions.h;CFDP
-0x3502; CFDP_InvalidDirectiveFields;;2;fsfw/src/fsfw/cfdp/definitions.h;CFDP
-0x3503; CFDP_InvalidPduDatafieldLen;;3;fsfw/src/fsfw/cfdp/definitions.h;CFDP
-0x3504; CFDP_InvalidAckDirectiveFields;;4;fsfw/src/fsfw/cfdp/definitions.h;CFDP
-0x3505; CFDP_MetadataCantParseOptions;;5;fsfw/src/fsfw/cfdp/definitions.h;CFDP
-0x3506; CFDP_FinishedCantParseFsResponses;;6;fsfw/src/fsfw/cfdp/definitions.h;CFDP
-0x3508; CFDP_FilestoreRequiresSecondFile;;8;fsfw/src/fsfw/cfdp/definitions.h;CFDP
-0x3509; CFDP_FilestoreResponseCantParseFsMessage;;9;fsfw/src/fsfw/cfdp/definitions.h;CFDP
-0x3101; CF_ObjectHasNoFunctions;;1;fsfw/src/fsfw/action/CommandsActionsIF.h;COMMANDS_ACTIONS_IF
-0x3102; CF_AlreadyCommanding;;2;fsfw/src/fsfw/action/CommandsActionsIF.h;COMMANDS_ACTIONS_IF
-0x3201; HF_IsBusy;;1;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
-0x3202; HF_InvalidParameters;;2;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
-0x3203; HF_ExecutionFinished;;3;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
-0x3204; HF_InvalidActionId;;4;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
-0x2d01; HPA_InvalidIdentifierId;;0x01;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
-0x2d02; HPA_InvalidDomainId;;0x02;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
-0x2d03; HPA_InvalidValue;;0x03;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
-0x2d05; HPA_ReadOnly;;0x05;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
-0x2c01; PAW_UnknownDatatype;;0x01;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
-0x2c02; PAW_DatatypeMissmatch;;0x02;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
-0x2c03; PAW_Readonly;;0x03;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
-0x2c04; PAW_TooBig;;0x04;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
-0x2c05; PAW_SourceNotSet;;0x05;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
-0x2c06; PAW_OutOfBounds;;0x06;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
-0x2c07; PAW_NotSet;;0x07;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
-0x2c08; PAW_ColumnOrRowsZero;;0x08;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
-0x1701; HHI_ObjectNotHealthy;;1;fsfw/src/fsfw/health/HasHealthIF.h;HAS_HEALTH_IF
-0x1702; HHI_InvalidHealthState;;2;fsfw/src/fsfw/health/HasHealthIF.h;HAS_HEALTH_IF
-0x2701; SM_DataTooLarge;;1;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
-0x2702; SM_DataStorageFull;;2;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
-0x2703; SM_IllegalStorageId;;3;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
-0x2704; SM_DataDoesNotExist;;4;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
-0x2705; SM_IllegalAddress;;5;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
-0x2706; SM_PoolTooLarge;;6;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
-0x2301; MT_TooDetailedRequest;;1;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
-0x2302; MT_TooGeneralRequest;;2;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
-0x2303; MT_NoMatch;;3;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
-0x2304; MT_Full;;4;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
-0x2305; MT_NewNodeCreated;;5;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
-0x3e01; DLEE_StreamTooShort;;0x01;fsfw/src/fsfw/globalfunctions/DleEncoder.h;DLE_ENCODER
-0x3e02; DLEE_DecodingError;;0x02;fsfw/src/fsfw/globalfunctions/DleEncoder.h;DLE_ENCODER
-0x2e01; ASC_TooLongForTargetType;;1;fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER
-0x2e02; ASC_InvalidCharacters;;2;fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER
-0x2e03; ASC_BufferTooSmall;;0x3;fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER
-0x1c01; TCD_PacketLost;;1;fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION
-0x1c02; TCD_DestinationNotFound;;2;fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION
-0x1c03; TCD_ServiceIdAlreadyExists;;3;fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION
-0x1b00; TCC_IllegalApid;;0;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK
-0x1b01; TCC_IncompletePacket;;1;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK
-0x1b02; TCC_IncorrectChecksum;;2;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK
-0x1b03; TCC_IllegalPacketType;;3;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK
-0x1b04; TCC_IllegalPacketSubtype;;4;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK
-0x1b05; TCC_IncorrectPrimaryHeader;;5;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK
-0x1b06; TCC_IncorrectSecondaryHeader;;6;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK
-0x3901; MQI_Empty;;1;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
-0x3902; MQI_Full;No space left for more messages;2;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
-0x3903; MQI_NoReplyPartner;Returned if a reply method was called without partner;3;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
-0x3904; MQI_DestinationInvalid;Returned if the target destination is invalid.;4;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
-0xf01; CM_UnknownCommand;;1;fsfw/src/fsfw/ipc/CommandMessageIF.h;COMMAND_MESSAGE
-0x3801; MUX_NotEnoughResources;;1;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
-0x3802; MUX_InsufficientMemory;;2;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
-0x3803; MUX_NoPrivilege;;3;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
-0x3804; MUX_WrongAttributeSetting;;4;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
-0x3805; MUX_MutexAlreadyLocked;;5;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
-0x3806; MUX_MutexNotFound;;6;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
-0x3807; MUX_MutexMaxLocks;;7;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
-0x3808; MUX_CurrThreadAlreadyOwnsMutex;;8;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
-0x3809; MUX_CurrThreadDoesNotOwnMutex;;9;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
-0x380a; MUX_MutexTimeout;;10;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
-0x380b; MUX_MutexInvalidId;;11;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
-0x380c; MUX_MutexDestroyedWhileWaiting;;12;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
-0x2801; TC_InvalidTargetState;;1;fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF
-0x28f1; TC_AboveOperationalLimit;;0xF1;fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF
-0x28f2; TC_BelowOperationalLimit;;0xF2;fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF
-0x801; DPS_InvalidParameterDefinition;;1;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
-0x802; DPS_SetWasAlreadyRead;;2;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
-0x803; DPS_CommitingWithoutReading;;3;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
-0x804; DPS_DataSetUninitialised;;4;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
-0x805; DPS_DataSetFull;;5;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
-0x806; DPS_PoolVarNull;;6;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
-0x3ca0; PVA_InvalidReadWriteMode;;0xA0;fsfw/src/fsfw/datapool/PoolVariableIF.h;POOL_VARIABLE_IF
-0x3ca1; PVA_InvalidPoolEntry;;0xA1;fsfw/src/fsfw/datapool/PoolVariableIF.h;POOL_VARIABLE_IF
-0xc02; MS_InvalidEntry;;0x02;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF
-0xc03; MS_TooManyElements;;0x03;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF
-0xc04; MS_CantStoreEmpty;;0x04;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF
-0xd01; SS_SequenceAlreadyExists;;0x01;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
-0xd02; SS_TableAlreadyExists;;0x02;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
-0xd03; SS_TableDoesNotExist;;0x03;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
-0xd04; SS_TableOrSequenceLengthInvalid;;0x04;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
-0xd05; SS_SequenceDoesNotExist;;0x05;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
-0xd06; SS_TableContainsInvalidObjectId;;0x06;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
-0xd07; SS_FallbackSequenceDoesNotExist;;0x07;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
-0xd08; SS_NoTargetTable;;0x08;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
-0xd09; SS_SequenceOrTableTooLong;;0x09;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
-0xd0b; SS_IsFallbackSequence;;0x0B;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
-0xd0c; SS_AccessDenied;;0x0C;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
-0xd0e; SS_TableInUse;;0x0E;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
-0xda1; SS_TargetTableNotReached;;0xA1;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
-0xda2; SS_TableCheckFailed;;0xA2;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
-0xb01; SB_ChildNotFound;;0x01;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
-0xb02; SB_ChildInfoUpdated;;0x02;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
-0xb03; SB_ChildDoesntHaveModes;;0x03;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
-0xb04; SB_CouldNotInsertChild;;0x04;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
-0xb05; SB_TableContainsInvalidObjectId;;0x05;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
-0xb00; SB_ConnBroken;;0;fsfw/src/fsfw/osal/common/TcpTmTcServer.h;SUBSYSTEM_BASE
+0x2b01; CCS_BcIsSetVrCommand;;0x01;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2b02; CCS_BcIsUnlockCommand;;0x02;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bb0; CCS_BcIllegalCommand;;0xB0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bb1; CCS_BoardReadingNotFinished;;0xB1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bf0; CCS_NsPositiveW;;0xF0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bf1; CCS_NsNegativeW;;0xF1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bf2; CCS_NsLockout;;0xF2;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bf3; CCS_FarmInLockout;;0xF3;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bf4; CCS_FarmInWait;;0xF4;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2be0; CCS_WrongSymbol;;0xE0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2be1; CCS_DoubleStart;;0xE1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2be2; CCS_StartSymbolMissed;;0xE2;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2be3; CCS_EndWithoutStart;;0xE3;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2be4; CCS_TooLarge;;0xE4;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2be5; CCS_TooShort;;0xE5;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2be6; CCS_WrongTfVersion;;0xE6;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2be7; CCS_WrongSpacecraftId;;0xE7;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2be8; CCS_NoValidFrameType;;0xE8;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2be9; CCS_CrcFailed;;0xE9;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bea; CCS_VcNotFound;;0xEA;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2beb; CCS_ForwardingFailed;;0xEB;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bec; CCS_ContentTooLarge;;0xEC;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bed; CCS_ResidualData;;0xED;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bee; CCS_DataCorrupted;;0xEE;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bef; CCS_IllegalSegmentationFlag;;0xEF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bd0; CCS_IllegalFlagCombination;;0xD0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bd1; CCS_ShorterThanHeader;;0xD1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bd2; CCS_TooShortBlockedPacket;;0xD2;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2bd3; CCS_TooShortMapExtraction;;0xD3;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x3a00; SPH_ConnBroken;;0;fsfw/src/fsfw/osal/common/TcpTmTcServer.h;SEMAPHORE_IF
0x2901; IEC_NoConfigurationTable;;0x01;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
0x2902; IEC_NoCpuTable;;0x02;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
0x2903; IEC_InvalidWorkspaceAddress;;0x03;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
@@ -200,26 +118,69 @@
0x2913; IEC_ImplementationBlockingOperationCancel;;0x13;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
0x2914; IEC_MutexObtainFromBadState;;0x14;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
0x2915; IEC_UnlimitedAndMaximumIs0;;0x15;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x1401; SE_BufferTooShort;;1;fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF
-0x1402; SE_StreamTooShort;;2;fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF
-0x1403; SE_TooManyElements;;3;fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF
-0x4a00; SPPA_NoPacketFound;;0x00;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h;SPACE_PACKET_PARSER
-0x4a01; SPPA_SplitPacket;;0x01;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h;SPACE_PACKET_PARSER
-0x1d01; PUS_ActivityStarted;;1;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
-0x1d02; PUS_InvalidSubservice;;2;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
-0x1d03; PUS_IllegalApplicationData;;3;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
-0x1d04; PUS_SendTmFailed;;4;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
-0x1d05; PUS_Timeout;;5;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
-0x1f01; CSB_ExecutionComplete;;1;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
-0x1f02; CSB_NoStepMessage;;2;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
-0x1f03; CSB_ObjectBusy;;3;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
-0x1f04; CSB_Busy;;4;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
-0x1f05; CSB_InvalidTc;;5;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
-0x1f06; CSB_InvalidObject;;6;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
-0x1f07; CSB_InvalidReply;;7;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
+0xe01; HM_InvalidMode;;0x01;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF
+0xe02; HM_TransNotAllowed;;0x02;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF
+0xe03; HM_InTransition;;0x03;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF
+0xe04; HM_InvalidSubmode;;0x04;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF
+0x2d01; HPA_InvalidIdentifierId;;0x01;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
+0x2d02; HPA_InvalidDomainId;;0x02;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
+0x2d03; HPA_InvalidValue;;0x03;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
+0x2d05; HPA_ReadOnly;;0x05;fsfw/src/fsfw/parameters/HasParametersIF.h;HAS_PARAMETERS_IF
+0x2c01; PAW_UnknownDatatype;;0x01;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
+0x2c02; PAW_DatatypeMissmatch;;0x02;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
+0x2c03; PAW_Readonly;;0x03;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
+0x2c04; PAW_TooBig;;0x04;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
+0x2c05; PAW_SourceNotSet;;0x05;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
+0x2c06; PAW_OutOfBounds;;0x06;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
+0x2c07; PAW_NotSet;;0x07;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
+0x2c08; PAW_ColumnOrRowsZero;;0x08;fsfw/src/fsfw/parameters/ParameterWrapper.h;PARAMETER_WRAPPER
+0x3101; CF_ObjectHasNoFunctions;;1;fsfw/src/fsfw/action/CommandsActionsIF.h;COMMANDS_ACTIONS_IF
+0x3102; CF_AlreadyCommanding;;2;fsfw/src/fsfw/action/CommandsActionsIF.h;COMMANDS_ACTIONS_IF
+0x3201; HF_IsBusy;;1;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
+0x3202; HF_InvalidParameters;;2;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
+0x3203; HF_ExecutionFinished;;3;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
+0x3204; HF_InvalidActionId;;4;fsfw/src/fsfw/action/HasActionsIF.h;HAS_ACTIONS_IF
+0x201; OM_InsertionFailed;;1;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
+0x202; OM_NotFound;;2;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
+0x203; OM_ChildInitFailed;;3;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
+0x204; OM_InternalErrReporterUninit;;4;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
0x2500; FDI_YourFault;;0;fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF
0x2501; FDI_MyFault;;1;fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF
0x2502; FDI_ConfirmLater;;2;fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h;HANDLES_FAILURES_IF
+0x2101; TMF_Busy;;1;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
+0x2102; TMF_LastPacketFound;;2;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
+0x2103; TMF_StopFetch;;3;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
+0x2104; TMF_Timeout;;4;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
+0x2105; TMF_TmChannelFull;;5;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
+0x2106; TMF_NotStored;;6;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
+0x2107; TMF_AllDeleted;;7;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
+0x2108; TMF_InvalidData;;8;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
+0x2109; TMF_NotReady;;9;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
+0x2001; TMB_Busy;;1;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x2002; TMB_Full;;2;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x2003; TMB_Empty;;3;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x2004; TMB_NullRequested;;4;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x2005; TMB_TooLarge;;5;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x2006; TMB_NotReady;;6;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x2007; TMB_DumpError;;7;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x2008; TMB_CrcError;;8;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x2009; TMB_Timeout;;9;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x200a; TMB_IdlePacketFound;;10;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x200b; TMB_TelecommandFound;;11;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x200c; TMB_NoPusATm;;12;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x200d; TMB_TooSmall;;13;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x200e; TMB_BlockNotFound;;14;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x200f; TMB_InvalidRequest;;15;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
+0x1c01; TCD_PacketLost;;1;fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION
+0x1c02; TCD_DestinationNotFound;;2;fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION
+0x1c03; TCD_ServiceIdAlreadyExists;;3;fsfw/src/fsfw/tcdistribution/TcDistributor.h;PACKET_DISTRIBUTION
+0x1b00; TCC_IllegalApid;;0;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK
+0x1b01; TCC_IncompletePacket;;1;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK
+0x1b02; TCC_IncorrectChecksum;;2;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK
+0x1b03; TCC_IllegalPacketType;;3;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK
+0x1b04; TCC_IllegalPacketSubtype;;4;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK
+0x1b05; TCC_IncorrectPrimaryHeader;;5;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK
+0x1b06; TCC_IncorrectSecondaryHeader;;6;fsfw/src/fsfw/tcdistribution/TcPacketCheckPUS.h;TC_PACKET_CHECK
0x4e1; RMP_CommandNoDescriptorsAvailable;;0xE1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
0x4e2; RMP_CommandBufferFull;;0xE2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
0x4e3; RMP_CommandChannelOutOfRange;;0xE3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
@@ -260,35 +221,12 @@
0x40a; RMP_ReplyCommandNotImplementedOrNotAuthorised;;10;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
0x40b; RMP_ReplyRmwDataLengthError;;11;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
0x40c; RMP_ReplyInvalidTargetLogicalAddress;;12;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x2b01; CCS_BcIsSetVrCommand;;0x01;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2b02; CCS_BcIsUnlockCommand;;0x02;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bb0; CCS_BcIllegalCommand;;0xB0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bb1; CCS_BoardReadingNotFinished;;0xB1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bf0; CCS_NsPositiveW;;0xF0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bf1; CCS_NsNegativeW;;0xF1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bf2; CCS_NsLockout;;0xF2;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bf3; CCS_FarmInLockout;;0xF3;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bf4; CCS_FarmInWait;;0xF4;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2be0; CCS_WrongSymbol;;0xE0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2be1; CCS_DoubleStart;;0xE1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2be2; CCS_StartSymbolMissed;;0xE2;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2be3; CCS_EndWithoutStart;;0xE3;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2be4; CCS_TooLarge;;0xE4;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2be5; CCS_TooShort;;0xE5;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2be6; CCS_WrongTfVersion;;0xE6;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2be7; CCS_WrongSpacecraftId;;0xE7;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2be8; CCS_NoValidFrameType;;0xE8;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2be9; CCS_CrcFailed;;0xE9;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bea; CCS_VcNotFound;;0xEA;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2beb; CCS_ForwardingFailed;;0xEB;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bec; CCS_ContentTooLarge;;0xEC;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bed; CCS_ResidualData;;0xED;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bee; CCS_DataCorrupted;;0xEE;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bef; CCS_IllegalSegmentationFlag;;0xEF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bd0; CCS_IllegalFlagCombination;;0xD0;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bd1; CCS_ShorterThanHeader;;0xD1;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bd2; CCS_TooShortBlockedPacket;;0xD2;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
-0x2bd3; CCS_TooShortMapExtraction;;0xD3;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h;CCSDS_HANDLER_IF
+0x2701; SM_DataTooLarge;;1;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
+0x2702; SM_DataStorageFull;;2;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
+0x2703; SM_IllegalStorageId;;3;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
+0x2704; SM_DataDoesNotExist;;4;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
+0x2705; SM_IllegalAddress;;5;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
+0x2706; SM_PoolTooLarge;;6;fsfw/src/fsfw/storagemanager/StorageManagerIF.h;STORAGE_MANAGER_IF
0x37a1; SGP4_InvalidEccentricity;;0xA1;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
0x37a2; SGP4_InvalidMeanMotion;;0xA2;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
0x37a3; SGP4_InvalidPerturbationElements;;0xA3;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
@@ -297,10 +235,142 @@
0x37a6; SGP4_SatelliteHasDecayed;;0xA6;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
0x37b1; SGP4_TleTooOld;;0xB1;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
0x37b2; SGP4_TleNotInitialized;;0xB2;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
-0x13e0; MH_UnknownCmd;;0xE0;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER
-0x13e1; MH_InvalidAddress;;0xE1;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER
-0x13e2; MH_InvalidSize;;0xE2;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER
-0x13e3; MH_StateMismatch;;0xE3;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER
+0x2301; MT_TooDetailedRequest;;1;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
+0x2302; MT_TooGeneralRequest;;2;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
+0x2303; MT_NoMatch;;3;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
+0x2304; MT_Full;;4;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
+0x2305; MT_NewNodeCreated;;5;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h;MATCH_TREE_CLASS
+0x3e01; DLEE_StreamTooShort;;0x01;fsfw/src/fsfw/globalfunctions/DleEncoder.h;DLE_ENCODER
+0x3e02; DLEE_DecodingError;;0x02;fsfw/src/fsfw/globalfunctions/DleEncoder.h;DLE_ENCODER
+0x2e01; ASC_TooLongForTargetType;;1;fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER
+0x2e02; ASC_InvalidCharacters;;2;fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER
+0x2e03; ASC_BufferTooSmall;;0x3;fsfw/src/fsfw/globalfunctions/AsciiConverter.h;ASCII_CONVERTER
+0xf01; CM_UnknownCommand;;1;fsfw/src/fsfw/ipc/CommandMessageIF.h;COMMAND_MESSAGE
+0x3901; MQI_Empty;;1;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
+0x3902; MQI_Full;No space left for more messages;2;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
+0x3903; MQI_NoReplyPartner;Returned if a reply method was called without partner;3;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
+0x3904; MQI_DestinationInvalid;Returned if the target destination is invalid.;4;fsfw/src/fsfw/ipc/MessageQueueIF.h;MESSAGE_QUEUE_IF
+0x3801; MUX_NotEnoughResources;;1;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
+0x3802; MUX_InsufficientMemory;;2;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
+0x3803; MUX_NoPrivilege;;3;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
+0x3804; MUX_WrongAttributeSetting;;4;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
+0x3805; MUX_MutexAlreadyLocked;;5;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
+0x3806; MUX_MutexNotFound;;6;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
+0x3807; MUX_MutexMaxLocks;;7;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
+0x3808; MUX_CurrThreadAlreadyOwnsMutex;;8;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
+0x3809; MUX_CurrThreadDoesNotOwnMutex;;9;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
+0x380a; MUX_MutexTimeout;;10;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
+0x380b; MUX_MutexInvalidId;;11;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
+0x380c; MUX_MutexDestroyedWhileWaiting;;12;fsfw/src/fsfw/ipc/MutexIF.h;MUTEX_IF
+0x3a01; SPH_SemaphoreTimeout;;1;fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF
+0x3a02; SPH_SemaphoreNotOwned;;2;fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF
+0x3a03; SPH_SemaphoreInvalid;;3;fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF
+0x3501; CFDP_InvalidTlvType;;1;fsfw/src/fsfw/cfdp/definitions.h;CFDP
+0x3502; CFDP_InvalidDirectiveFields;;2;fsfw/src/fsfw/cfdp/definitions.h;CFDP
+0x3503; CFDP_InvalidPduDatafieldLen;;3;fsfw/src/fsfw/cfdp/definitions.h;CFDP
+0x3504; CFDP_InvalidAckDirectiveFields;;4;fsfw/src/fsfw/cfdp/definitions.h;CFDP
+0x3505; CFDP_MetadataCantParseOptions;;5;fsfw/src/fsfw/cfdp/definitions.h;CFDP
+0x3506; CFDP_FinishedCantParseFsResponses;;6;fsfw/src/fsfw/cfdp/definitions.h;CFDP
+0x3508; CFDP_FilestoreRequiresSecondFile;;8;fsfw/src/fsfw/cfdp/definitions.h;CFDP
+0x3509; CFDP_FilestoreResponseCantParseFsMessage;;9;fsfw/src/fsfw/cfdp/definitions.h;CFDP
+0x2801; TC_InvalidTargetState;;1;fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF
+0x28f1; TC_AboveOperationalLimit;;0xF1;fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF
+0x28f2; TC_BelowOperationalLimit;;0xF2;fsfw/src/fsfw/thermal/ThermalComponentIF.h;THERMAL_COMPONENT_IF
+0xc02; MS_InvalidEntry;;0x02;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF
+0xc03; MS_TooManyElements;;0x03;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF
+0xc04; MS_CantStoreEmpty;;0x04;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h;MODE_STORE_IF
+0xd01; SS_SequenceAlreadyExists;;0x01;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
+0xd02; SS_TableAlreadyExists;;0x02;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
+0xd03; SS_TableDoesNotExist;;0x03;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
+0xd04; SS_TableOrSequenceLengthInvalid;;0x04;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
+0xd05; SS_SequenceDoesNotExist;;0x05;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
+0xd06; SS_TableContainsInvalidObjectId;;0x06;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
+0xd07; SS_FallbackSequenceDoesNotExist;;0x07;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
+0xd08; SS_NoTargetTable;;0x08;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
+0xd09; SS_SequenceOrTableTooLong;;0x09;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
+0xd0b; SS_IsFallbackSequence;;0x0B;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
+0xd0c; SS_AccessDenied;;0x0C;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
+0xd0e; SS_TableInUse;;0x0E;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
+0xda1; SS_TargetTableNotReached;;0xA1;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
+0xda2; SS_TableCheckFailed;;0xA2;fsfw/src/fsfw/subsystem/Subsystem.h;SUBSYSTEM
+0xb01; SB_ChildNotFound;;0x01;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
+0xb02; SB_ChildInfoUpdated;;0x02;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
+0xb03; SB_ChildDoesntHaveModes;;0x03;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
+0xb04; SB_CouldNotInsertChild;;0x04;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
+0xb05; SB_TableContainsInvalidObjectId;;0x05;fsfw/src/fsfw/subsystem/SubsystemBase.h;SUBSYSTEM_BASE
+0x3d00; HKM_QueueOrDestinationInvalid;;0;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
+0x3d01; HKM_WrongHkPacketType;;1;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
+0x3d02; HKM_ReportingStatusUnchanged;;2;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
+0x3d03; HKM_PeriodicHelperInvalid;;3;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
+0x3d04; HKM_PoolobjectNotFound;;4;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
+0x3d05; HKM_DatasetNotFound;;5;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h;HOUSEKEEPING_MANAGER
+0x3b00; LPIF_PoolEntryNotFound;;0x00;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h;LOCAL_POOL_OWNER_IF
+0x3b01; LPIF_PoolEntryTypeConflict;;0x01;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h;LOCAL_POOL_OWNER_IF
+0x3ca0; PVA_InvalidReadWriteMode;;0xA0;fsfw/src/fsfw/datapool/PoolVariableIF.h;POOL_VARIABLE_IF
+0x3ca1; PVA_InvalidPoolEntry;;0xA1;fsfw/src/fsfw/datapool/PoolVariableIF.h;POOL_VARIABLE_IF
+0x801; DPS_InvalidParameterDefinition;;1;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
+0x802; DPS_SetWasAlreadyRead;;2;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
+0x803; DPS_CommitingWithoutReading;;3;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
+0x804; DPS_DataSetUninitialised;;4;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
+0x805; DPS_DataSetFull;;5;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
+0x806; DPS_PoolVarNull;;6;fsfw/src/fsfw/datapool/DataSetIF.h;DATA_SET_CLASS
+0x1000; TIM_UnsupportedTimeFormat;;0;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
+0x1001; TIM_NotEnoughInformationForTargetFormat;;1;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
+0x1002; TIM_LengthMismatch;;2;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
+0x1003; TIM_InvalidTimeFormat;;3;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
+0x1004; TIM_InvalidDayOfYear;;4;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
+0x1005; TIM_TimeDoesNotFitFormat;;5;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
+0x3601; TSI_BadTimestamp;;1;fsfw/src/fsfw/timemanager/TimeStamperIF.h;TIME_STAMPER_IF
+0x1d01; PUS_ActivityStarted;;1;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
+0x1d02; PUS_InvalidSubservice;;2;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
+0x1d03; PUS_IllegalApplicationData;;3;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
+0x1d04; PUS_SendTmFailed;;4;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
+0x1d05; PUS_Timeout;;5;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h;ACCEPTS_TELECOMMANDS_IF
+0x4a00; SPPA_NoPacketFound;;0x00;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h;SPACE_PACKET_PARSER
+0x4a01; SPPA_SplitPacket;;0x01;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h;SPACE_PACKET_PARSER
+0x1f01; CSB_ExecutionComplete;;1;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
+0x1f02; CSB_NoStepMessage;;2;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
+0x1f03; CSB_ObjectBusy;;3;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
+0x1f04; CSB_Busy;;4;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
+0x1f05; CSB_InvalidTc;;5;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
+0x1f06; CSB_InvalidObject;;6;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
+0x1f07; CSB_InvalidReply;;7;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h;COMMAND_SERVICE_BASE
+0x1101; AL_Full;;0x01;fsfw/src/fsfw/container/ArrayList.h;ARRAY_LIST
+0x1801; FF_Full;;1;fsfw/src/fsfw/container/FIFOBase.h;FIFO_CLASS
+0x1802; FF_Empty;;2;fsfw/src/fsfw/container/FIFOBase.h;FIFO_CLASS
+0x1601; FMM_MapFull;;0x01;fsfw/src/fsfw/container/FixedOrderedMultimap.h;FIXED_MULTIMAP
+0x1602; FMM_KeyDoesNotExist;;0x02;fsfw/src/fsfw/container/FixedOrderedMultimap.h;FIXED_MULTIMAP
+0x1501; FM_KeyAlreadyExists;;0x01;fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP
+0x1502; FM_MapFull;;0x02;fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP
+0x1503; FM_KeyDoesNotExist;;0x03;fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP
+0x2401; EV_ListenerNotFound;;1;fsfw/src/fsfw/events/EventManagerIF.h;EVENT_MANAGER_IF
+0x1701; HHI_ObjectNotHealthy;;1;fsfw/src/fsfw/health/HasHealthIF.h;HAS_HEALTH_IF
+0x1702; HHI_InvalidHealthState;;2;fsfw/src/fsfw/health/HasHealthIF.h;HAS_HEALTH_IF
+0x2f01; POS_InPowerTransition;;1;fsfw/src/fsfw/power/PowerSwitcher.h;POWER_SWITCHER
+0x2f02; POS_SwitchStateMismatch;;2;fsfw/src/fsfw/power/PowerSwitcher.h;POWER_SWITCHER
+0x501; PS_SwitchOn;;1;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
+0x500; PS_SwitchOff;;0;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
+0x502; PS_SwitchTimeout;;2;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
+0x503; PS_FuseOn;;3;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
+0x504; PS_FuseOff;;4;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
+0x1a01; TRC_NotEnoughSensors;;1;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
+0x1a02; TRC_LowestValueOol;;2;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
+0x1a03; TRC_HighestValueOol;;3;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
+0x1a04; TRC_BothValuesOol;;4;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
+0x1a05; TRC_DuplexOol;;5;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
+0x3001; LIM_Unchecked;;1;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
+0x3002; LIM_Invalid;;2;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
+0x3003; LIM_Unselected;;3;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
+0x3004; LIM_BelowLowLimit;;4;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
+0x3005; LIM_AboveHighLimit;;5;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
+0x3006; LIM_UnexpectedValue;;6;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
+0x3007; LIM_OutOfRange;;7;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
+0x30a0; LIM_FirstSample;;0xA0;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
+0x30e0; LIM_InvalidSize;;0xE0;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
+0x30e1; LIM_WrongType;;0xE1;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
+0x30e2; LIM_WrongPid;;0xE2;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
+0x30e3; LIM_WrongLimitId;;0xE3;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
+0x30ee; LIM_MonitorNotFound;;0xEE;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
0x4100; FILS_GenericFileError;;0;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
0x4101; FILS_IsBusy;;1;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
0x4102; FILS_InvalidParameters;;2;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
@@ -326,60 +396,16 @@
0x6e2; PP_InvalidContent;;0xE2;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
0x6e3; PP_UnalignedAccess;;0xE3;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
0x6e4; PP_WriteProtected;;0xE4;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
-0x201; OM_InsertionFailed;;1;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
-0x202; OM_NotFound;;2;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
-0x203; OM_ChildInitFailed;;3;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
-0x204; OM_InternalErrReporterUninit;;4;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h;OBJECT_MANAGER_IF
-0x501; PS_SwitchOn;;1;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
-0x500; PS_SwitchOff;;0;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
-0x502; PS_SwitchTimeout;;2;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
-0x503; PS_FuseOn;;3;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
-0x504; PS_FuseOff;;4;fsfw/src/fsfw/power/PowerSwitchIF.h;POWER_SWITCH_IF
-0x2f01; POS_InPowerTransition;;1;fsfw/src/fsfw/power/PowerSwitcher.h;POWER_SWITCHER
-0x2f02; POS_SwitchStateMismatch;;2;fsfw/src/fsfw/power/PowerSwitcher.h;POWER_SWITCHER
-0x1000; TIM_UnsupportedTimeFormat;;0;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
-0x1001; TIM_NotEnoughInformationForTargetFormat;;1;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
-0x1002; TIM_LengthMismatch;;2;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
-0x1003; TIM_InvalidTimeFormat;;3;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
-0x1004; TIM_InvalidDayOfYear;;4;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
-0x1005; TIM_TimeDoesNotFitFormat;;5;fsfw/src/fsfw/timemanager/CCSDSTime.h;CCSDS_TIME_HELPER_CLASS
-0x3601; TSI_BadTimestamp;;1;fsfw/src/fsfw/timemanager/TimeStamperIF.h;TIME_STAMPER_IF
-0x2101; TMF_Busy;;1;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
-0x2102; TMF_LastPacketFound;;2;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
-0x2103; TMF_StopFetch;;3;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
-0x2104; TMF_Timeout;;4;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
-0x2105; TMF_TmChannelFull;;5;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
-0x2106; TMF_NotStored;;6;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
-0x2107; TMF_AllDeleted;;7;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
-0x2108; TMF_InvalidData;;8;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
-0x2109; TMF_NotReady;;9;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h;TM_STORE_FRONTEND_IF
-0x2001; TMB_Busy;;1;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0x2002; TMB_Full;;2;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0x2003; TMB_Empty;;3;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0x2004; TMB_NullRequested;;4;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0x2005; TMB_TooLarge;;5;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0x2006; TMB_NotReady;;6;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0x2007; TMB_DumpError;;7;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0x2008; TMB_CrcError;;8;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0x2009; TMB_Timeout;;9;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0x200a; TMB_IdlePacketFound;;10;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0x200b; TMB_TelecommandFound;;11;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0x200c; TMB_NoPusATm;;12;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0x200d; TMB_TooSmall;;13;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0x200e; TMB_BlockNotFound;;14;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0x200f; TMB_InvalidRequest;;15;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h;TM_STORE_BACKEND_IF
-0xe01; HM_InvalidMode;;0x01;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF
-0xe02; HM_TransNotAllowed;;0x02;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF
-0xe03; HM_InTransition;;0x03;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF
-0xe04; HM_InvalidSubmode;;0x04;fsfw/src/fsfw/modes/HasModesIF.h;HAS_MODES_IF
-0x1501; FM_KeyAlreadyExists;;0x01;fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP
-0x1502; FM_MapFull;;0x02;fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP
-0x1503; FM_KeyDoesNotExist;;0x03;fsfw/src/fsfw/container/FixedMap.h;FIXED_MAP
-0x1101; AL_Full;;0x01;fsfw/src/fsfw/container/ArrayList.h;ARRAY_LIST
-0x1601; FMM_MapFull;;0x01;fsfw/src/fsfw/container/FixedOrderedMultimap.h;FIXED_MULTIMAP
-0x1602; FMM_KeyDoesNotExist;;0x02;fsfw/src/fsfw/container/FixedOrderedMultimap.h;FIXED_MULTIMAP
-0x1801; FF_Full;;1;fsfw/src/fsfw/container/FIFOBase.h;FIFO_CLASS
-0x1802; FF_Empty;;2;fsfw/src/fsfw/container/FIFOBase.h;FIFO_CLASS
+0x13e0; MH_UnknownCmd;;0xE0;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER
+0x13e1; MH_InvalidAddress;;0xE1;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER
+0x13e2; MH_InvalidSize;;0xE2;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER
+0x13e3; MH_StateMismatch;;0xE3;fsfw/src/fsfw/memory/MemoryHelper.h;MEMORY_HELPER
+0x1201; AB_NeedSecondStep;;0x01;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
+0x1202; AB_NeedToReconfigure;;0x02;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
+0x1203; AB_ModeFallback;;0x03;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
+0x1204; AB_ChildNotCommandable;;0x04;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
+0x1205; AB_NeedToChangeHealth;;0x05;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
+0x12a1; AB_NotEnoughChildrenInCorrectState;;0xa1;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
0x3a0; DHB_InvalidChannel;;0xA0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
0x3b0; DHB_AperiodicReply;;0xB0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
0x3b1; DHB_IgnoreReplyData;;0xB1;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
@@ -389,12 +415,12 @@
0x3d0; DHB_NoSwitch;;0xD0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
0x3e0; DHB_ChildTimeout;;0xE0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
0x3e1; DHB_SwitchFailed;;0xE1;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
-0x1201; AB_NeedSecondStep;;0x01;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
-0x1202; AB_NeedToReconfigure;;0x02;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
-0x1203; AB_ModeFallback;;0x03;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
-0x1204; AB_ChildNotCommandable;;0x04;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
-0x1205; AB_NeedToChangeHealth;;0x05;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
-0x12a1; AB_NotEnoughChildrenInCorrectState;;0xa1;fsfw/src/fsfw/devicehandlers/AssemblyBase.h;ASSEMBLY_BASE
+0x3301; DC_NoReplyReceived;;0x01;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
+0x3302; DC_ProtocolError;;0x02;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
+0x3303; DC_Nullpointer;;0x03;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
+0x3304; DC_InvalidCookieType;;0x04;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
+0x3305; DC_NotActive;;0x05;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
+0x3306; DC_TooMuchData;;0x06;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
0x26a0; DHI_NoCommandData;;0xA0;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
0x26a1; DHI_CommandNotSupported;;0xA1;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
0x26a2; DHI_CommandAlreadySent;;0xA2;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
@@ -416,34 +442,11 @@
0x26c3; DHI_DeviceReplyInvalid;;0xC3;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
0x26d0; DHI_InvalidCommandParameter;;0xD0;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
0x26d1; DHI_InvalidNumberOrLengthOfParameters;;0xD1;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x3301; DC_NoReplyReceived;;0x01;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
-0x3302; DC_ProtocolError;;0x02;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
-0x3303; DC_Nullpointer;;0x03;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
-0x3304; DC_InvalidCookieType;;0x04;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
-0x3305; DC_NotActive;;0x05;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
-0x3306; DC_TooMuchData;;0x06;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h;DEVICE_COMMUNICATION_IF
-0x2401; EV_ListenerNotFound;;1;fsfw/src/fsfw/events/EventManagerIF.h;EVENT_MANAGER_IF
-0x1a01; TRC_NotEnoughSensors;;1;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
-0x1a02; TRC_LowestValueOol;;2;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
-0x1a03; TRC_HighestValueOol;;3;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
-0x1a04; TRC_BothValuesOol;;4;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
-0x1a05; TRC_DuplexOol;;5;fsfw/src/fsfw/monitoring/TriplexMonitor.h;TRIPLE_REDUNDACY_CHECK
-0x3001; LIM_Unchecked;;1;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
-0x3002; LIM_Invalid;;2;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
-0x3003; LIM_Unselected;;3;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
-0x3004; LIM_BelowLowLimit;;4;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
-0x3005; LIM_AboveHighLimit;;5;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
-0x3006; LIM_UnexpectedValue;;6;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
-0x3007; LIM_OutOfRange;;7;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
-0x30a0; LIM_FirstSample;;0xA0;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
-0x30e0; LIM_InvalidSize;;0xE0;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
-0x30e1; LIM_WrongType;;0xE1;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
-0x30e2; LIM_WrongPid;;0xE2;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
-0x30e3; LIM_WrongLimitId;;0xE3;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
-0x30ee; LIM_MonitorNotFound;;0xEE;fsfw/src/fsfw/monitoring/MonitoringIF.h;LIMITS_IF
-0x3a01; SPH_SemaphoreTimeout;;1;fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF
-0x3a02; SPH_SemaphoreNotOwned;;2;fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF
-0x3a03; SPH_SemaphoreInvalid;;3;fsfw/src/fsfw/tasks/SemaphoreIF.h;SEMAPHORE_IF
+0x1401; SE_BufferTooShort;;1;fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF
+0x1402; SE_StreamTooShort;;2;fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF
+0x1403; SE_TooManyElements;;3;fsfw/src/fsfw/serialize/SerializeIF.h;SERIALIZE_IF
+0x66a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;0xA0;bsp_q7s/memory/FilesystemHelper.h;FILE_SYSTEM_HELPER
+0x66a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;bsp_q7s/memory/FilesystemHelper.h;FILE_SYSTEM_HELPER
0x7000; SDMA_OpOngoing;;0;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
0x7001; SDMA_AlreadyOn;;1;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
0x7002; SDMA_AlreadyMounted;;2;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
@@ -455,26 +458,6 @@
0x700e; SDMA_SystemCallError;;14;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
0x700f; SDMA_PopenCallError;;15;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
0x7100; SCBU_KeyNotFound;;0;bsp_q7s/memory/scratchApi.h;SCRATCH_BUFFER
-0x66a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;0xA0;bsp_q7s/memory/FilesystemHelper.h;FILE_SYSTEM_HELPER
-0x66a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;bsp_q7s/memory/FilesystemHelper.h;FILE_SYSTEM_HELPER
-0x69a0;MPSOCRTVIF_CrcFailure;Space Packet received from PLOC has invalid CRC;0xA0;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x69a1;MPSOCRTVIF_ReceivedAckFailure;Received ACK failure reply from PLOC;0xA1;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x69a2;MPSOCRTVIF_ReceivedExeFailure;Received execution failure reply from PLOC;0xA2;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x69a3;MPSOCRTVIF_InvalidApid;Received space packet with invalid APID from PLOC;0xA3;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x69a4;MPSOCRTVIF_InvalidLength;Received command with invalid length;0xA4;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x69a5;MPSOCRTVIF_FilenameTooLong;Filename of file in OBC filesystem is too long;0xA5;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x69a6;MPSOCRTVIF_MpsocHelperExecuting;MPSoC helper is currently executing a command;0xA6;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x69a7;MPSOCRTVIF_MpsocFilenameTooLong;Filename of MPSoC file is to long (max. 256 bytes);0xA7;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x69a8;MPSOCRTVIF_InvalidParameter;Command has invalid parameter;0xA8;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x57e0;DWLPWRON_InvalidMode;Received command has invalid JESD mode (valid modes are 0 - 5);0xE0;linux/devices/devicedefinitions/PlocMPSoCDefinitions.h;DWLPWRON_CMD
-0x57e1;DWLPWRON_InvalidLaneRate;Received command has invalid lane rate (valid lane rate are 0 - 9);0xE1;linux/devices/devicedefinitions/PlocMPSoCDefinitions.h;DWLPWRON_CMD
-0x60a0;PLMEMDUMP_MramAddressTooHigh;The capacity of the MRAM amounts to 512 kB. Thus the maximum address must not be higher than 0x7d000.;0xA0;linux/devices/ploc/PlocMemoryDumper.h;PLOC_MEMORY_DUMPER
-0x60a1;PLMEMDUMP_MramInvalidAddressCombination;The specified end address is lower than the start address;0xA1;linux/devices/ploc/PlocMemoryDumper.h;PLOC_MEMORY_DUMPER
-0x67a0; PLMPHLP_FileClosedAccidentally;File accidentally close;0xA0;linux/devices/ploc/PlocMPSoCHelper.h;PLOC_MPSOC_HELPER
-0x5da0;PLUD_UpdaterBusy;Updater is already performing an update;0xA0;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER
-0x5da1;PLUD_NameTooLong;Received update command with invalid path string (too long).;0xA1;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER
-0x5da2;PLUD_SdNotMounted;Received command to initiate update but SD card with update image not mounted.;0xA2;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER
-0x5da3;PLUD_FileNotExists;Update file received with update command does not exist.;0xA3;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER
0x59a0;PLSV_CrcFailure;Space Packet received from PLOC supervisor has invalid CRC;0xA0;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
0x59a1;PLSV_ReceivedAckFailure;Received ACK failure reply from PLOC supervisor;0xA1;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
0x59a2;PLSV_ReceivedExeFailure;Received execution failure reply from PLOC supervisor;0xA2;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
@@ -490,13 +473,19 @@
0x59ac;PLSV_NoMramPacket;Expect reception of an MRAM dump packet but received space packet with other apid.;0xAC;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
0x59ad;PLSV_PathDoesNotExist;Path to PLOC directory on SD card does not exist;0xAD;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
0x59ae;PLSV_MramFileNotExists;MRAM dump file does not exists. The file should actually already have been created with the reception of the first dump packet.;0xAE;linux/devices/ploc/PlocSupervisorHandler.h;PLOC_SUPERVISOR_HANDLER
-0x59d0;PLSV_NameTooLong;Received command has file string with invalid length;0xD0;linux/devices/ploc/PlocMPSoCHandler.h;PLOC_SUPERVISOR_HANDLER
-0x6401;JSONBASE_JsonFileNotExists;Specified json file does not exist;1;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE
-0x6402;JSONBASE_SetNotExists;Requested set does not exist in json file;2;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE
-0x6403;JSONBASE_ParamNotExists;Requested parameter does not exist in json file;3;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE
+0x67a0; PLMPHLP_FileClosedAccidentally;File accidentally close;0xA0;linux/devices/ploc/PlocMPSoCHelper.h;PLOC_MPSOC_HELPER
+0x60a0;PLMEMDUMP_MramAddressTooHigh;The capacity of the MRAM amounts to 512 kB. Thus the maximum address must not be higher than 0x7d000.;0xA0;linux/devices/ploc/PlocMemoryDumper.h;PLOC_MEMORY_DUMPER
+0x60a1;PLMEMDUMP_MramInvalidAddressCombination;The specified end address is lower than the start address;0xA1;linux/devices/ploc/PlocMemoryDumper.h;PLOC_MEMORY_DUMPER
+0x5da0;PLUD_UpdaterBusy;Updater is already performing an update;0xA0;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER
+0x5da1;PLUD_NameTooLong;Received update command with invalid path string (too long).;0xA1;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER
+0x5da2;PLUD_SdNotMounted;Received command to initiate update but SD card with update image not mounted.;0xA2;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER
+0x5da3;PLUD_FileNotExists;Update file received with update command does not exist.;0xA3;linux/devices/ploc/PlocUpdater.h;PLOC_UPDATER
0x56a0;STRH_TemperatureReqFailed;Status in temperature reply signals error;0xA0;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
0x56a1;STRH_PingFailed;Ping command failed;0xA1;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
0x56a2;STRH_VersionReqFailed;Status in version reply signals error;0xA2;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
+0x6401;JSONBASE_JsonFileNotExists;Specified json file does not exist;1;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE
+0x6402;JSONBASE_SetNotExists;Requested set does not exist in json file;2;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE
+0x6403;JSONBASE_ParamNotExists;Requested parameter does not exist in json file;3;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE
0x56a3;STRH_InterfaceReqFailed;Status in interface reply signals error;0xA3;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
0x56a4;STRH_PowerReqFailed;Status in power reply signals error;0xA4;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
0x56a5;STRH_SetParamFailed;Status of reply to parameter set command signals error;0xA5;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
@@ -528,12 +517,20 @@
0x5ea6;STRHLP_LengthMismatch;Length in flash write/read reply does not match expected length;0xA6;linux/devices/startracker/StrHelper.h;STR_HELPER
0x5ea7;STRHLP_StatusError;Status field in reply signals error;0xA7;linux/devices/startracker/StrHelper.h;STR_HELPER
0x5ea8;STRHLP_InvalidTypeId;Reply has invalid type ID (should be of action reply type);0xA8;linux/devices/startracker/StrHelper.h;STR_HELPER
+0x69a0;MPSOCRTVIF_CrcFailure;Space Packet received from PLOC has invalid CRC;0xA0;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
+0x69a1;MPSOCRTVIF_ReceivedAckFailure;Received ACK failure reply from PLOC;0xA1;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
+0x69a2;MPSOCRTVIF_ReceivedExeFailure;Received execution failure reply from PLOC;0xA2;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
+0x69a3;MPSOCRTVIF_InvalidApid;Received space packet with invalid APID from PLOC;0xA3;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
+0x69a4;MPSOCRTVIF_InvalidLength;Received command with invalid length;0xA4;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
+0x69a5;MPSOCRTVIF_FilenameTooLong;Filename of file in OBC filesystem is too long;0xA5;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
+0x69a6;MPSOCRTVIF_MpsocHelperExecuting;MPSoC helper is currently executing a command;0xA6;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
+0x69a7;MPSOCRTVIF_MpsocFilenameTooLong;Filename of MPSoC file is to long (max. 256 bytes);0xA7;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
+0x69a8;MPSOCRTVIF_InvalidParameter;Command has invalid parameter;0xA8;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
+0x69a9;MPSOCRTVIF_NameTooLong;Received command has file string with invalid length;0xA9;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
+0x57e0;DWLPWRON_InvalidMode;Received command has invalid JESD mode (valid modes are 0 - 5);0xE0;linux/devices/devicedefinitions/PlocMPSoCDefinitions.h;DWLPWRON_CMD
+0x57e1;DWLPWRON_InvalidLaneRate;Received command has invalid lane rate (valid lane rate are 0 - 9);0xE1;linux/devices/devicedefinitions/PlocMPSoCDefinitions.h;DWLPWRON_CMD
0x5ba0;IPCI_PapbBusy;;0xA0;linux/obc/PapbVcInterface.h;CCSDS_IP_CORE_BRIDGE
0x5ca0;PTME_UnknownVcId;;0xA0;linux/obc/Ptme.h;PTME
-0x63a0;RS_RateNotSupported;The commanded rate is not supported by the current FPGA design;0xA0;linux/obc/PtmeConfig.h;RATE_SETTER
-0x63a1;RS_BadBitRate;Bad bitrate has been commanded (e.g. 0);0xA1;linux/obc/PtmeConfig.h;RATE_SETTER
-0x63a2;RS_ClkInversionFailed;Failed to invert clock and thus change the time the data is updated with respect to the tx clock;0xA2;linux/obc/PtmeConfig.h;RATE_SETTER
-0x63a3;RS_TxManipulatorConfigFailed;Failed to change configuration bit of tx clock manipulator;0xA3;linux/obc/PtmeConfig.h;RATE_SETTER
0x61a0;PDEC_AbandonedCltu;;0xA0;linux/obc/PdecHandler.h;PDEC_HANDLER
0x61a1;PDEC_FrameDirty;;0xA1;linux/obc/PdecHandler.h;PDEC_HANDLER
0x61a2;PDEC_FrameIllegalMultipleReasons;;0xA2;linux/obc/PdecHandler.h;PDEC_HANDLER
@@ -549,3 +546,7 @@
0x61ab;PDEC_InvalidVcIdLsb;;0xAB;linux/obc/PdecHandler.h;PDEC_HANDLER
0x61ac;PDEC_NsNotZero;;0xAC;linux/obc/PdecHandler.h;PDEC_HANDLER
0x61ae;PDEC_InvalidBcCc;;0xAE;linux/obc/PdecHandler.h;PDEC_HANDLER
+0x63a0;RS_RateNotSupported;The commanded rate is not supported by the current FPGA design;0xA0;linux/obc/PtmeConfig.h;RATE_SETTER
+0x63a1;RS_BadBitRate;Bad bitrate has been commanded (e.g. 0);0xA1;linux/obc/PtmeConfig.h;RATE_SETTER
+0x63a2;RS_ClkInversionFailed;Failed to invert clock and thus change the time the data is updated with respect to the tx clock;0xA2;linux/obc/PtmeConfig.h;RATE_SETTER
+0x63a3;RS_TxManipulatorConfigFailed;Failed to change configuration bit of tx clock manipulator;0xA3;linux/obc/PtmeConfig.h;RATE_SETTER
diff --git a/gomspace/gomspace_common.py b/gomspace/gomspace_common.py
index 546730f..c8741c1 100644
--- a/gomspace/gomspace_common.py
+++ b/gomspace/gomspace_common.py
@@ -25,16 +25,25 @@ class GomspaceDeviceActionIds(enum.IntEnum):
class GomspaceOpCodes:
# Request HK
- REQUEST_HK_ONCE = ["req-hk-once", "128"]
- PRINT_SWITCH_V_I = ["print-switch-vi", "129"]
- PRINT_LATCHUPS = ["print-latchups", "130"]
+ REQUEST_CORE_HK_ONCE = ["hk-core", "128"]
+ REQUEST_AUX_HK_ONCE = ["hk-aux", "129"]
+ PRINT_SWITCH_V_I = ["print-switch-vi", "130"]
+ PRINT_LATCHUPS = ["print-latchups", "131"]
+
+
+class Info:
+ REQUEST_CORE_HK_ONCE = "Requesting Core HK once"
+ REQUEST_AUX_HK_ONCE = "Requesting Aux HK once"
class SetIds:
- PDU_1 = 0x01
- PDU_2 = 0x02
- P60_DOCK = 0x03
- ACU = 0x04
+ PDU_1_CORE = 1
+ PDU_1_AUX = 2
+ PDU_2_CORE = 3
+ PDU_2_AUX = 4
+ P60_CORE = 5
+ P60_AUX = 6
+ ACU = 7
class TableIds:
diff --git a/pus_tc/cmd_definitions.py b/pus_tc/cmd_definitions.py
index fafaa78..17b68eb 100644
--- a/pus_tc/cmd_definitions.py
+++ b/pus_tc/cmd_definitions.py
@@ -1,3 +1,4 @@
+from pus_tc.devs.gps import GpsOpCodes
from tmtccmd.config import (
add_op_code_entry,
add_service_op_code_entry,
@@ -6,9 +7,282 @@ from tmtccmd.config import (
OpCodeDictKeys,
)
from config.definitions import CustomServiceList
+from pus_tc.devs.heater import add_heater_cmds
from pus_tc.devs.bpx_batt import BpxOpCodes
+def get_eive_service_op_code_dict(service_op_code_dict: ServiceOpCodeDictT):
+ add_bpx_cmd_definitions(cmd_dict=service_op_code_dict)
+ add_core_controller_definitions(cmd_dict=service_op_code_dict)
+ add_pl_pcdu_cmds(cmd_dict=service_op_code_dict)
+ add_pcdu_cmds(cmd_dict=service_op_code_dict)
+ add_imtq_cmds(cmd_dict=service_op_code_dict)
+ add_rad_sens_cmds(cmd_dict=service_op_code_dict)
+ add_rw_cmds(cmd_dict=service_op_code_dict)
+ add_ploc_mpsoc_cmds(cmd_dict=service_op_code_dict)
+ add_ploc_supv_cmds(cmd_dict=service_op_code_dict)
+ add_system_cmds(cmd_dict=service_op_code_dict)
+ add_time_cmds(cmd_dict=service_op_code_dict)
+ add_syrlinks_cmds(cmd_dict=service_op_code_dict)
+ add_gps_cmds(cmd_dict=service_op_code_dict)
+ add_str_cmds(cmd_dict=service_op_code_dict)
+ add_ccsds_cmds(cmd_dict=service_op_code_dict)
+ add_pdec_cmds(cmd_dict=service_op_code_dict)
+ add_heater_cmds(cmd_dict=service_op_code_dict)
+ add_tmp_sens_cmds(cmd_dict=service_op_code_dict)
+
+
+def add_tmp_sens_cmds(cmd_dict: ServiceOpCodeDictT):
+ op_code_dict = {
+ "0": ("TMP1075 Tests", {OpCodeDictKeys.TIMEOUT: 2.2}),
+ }
+ service_tuple = ("TMP1075 1", op_code_dict)
+ cmd_dict[CustomServiceList.TMP1075_1.value] = service_tuple
+ service_tuple = ("TMP1075 2", op_code_dict)
+ cmd_dict[CustomServiceList.TMP1075_2.value] = service_tuple
+
+
+def add_pdec_cmds(cmd_dict: ServiceOpCodeDictT):
+ op_code_dict_srv_pdec_handler = {
+ "0": ("PDEC Handler: Print CLCW", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "1": ("PDEC Handler: Print PDEC monitor", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ }
+ service_pdec_handler_tuple = ("PDEC Handler", op_code_dict_srv_pdec_handler)
+ cmd_dict[CustomServiceList.PDEC_HANDLER.value] = service_pdec_handler_tuple
+
+
+def add_ccsds_cmds(cmd_dict: ServiceOpCodeDictT):
+ op_code_dict_srv_ccsds_handler = {
+ "0": ("CCSDS Handler: Set low rate", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "1": ("CCSDS Handler: Set high rate", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "2": ("CCSDS Handler: Enable transmitter", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "3": ("CCSDS Handler: Disable transmitter", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "4": ("CCSDS Handler: Set arbitrary bitrate", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "5": (
+ "CCSDS Handler: Enable tx clock manipulator",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "6": (
+ "CCSDS Handler: Disable tx clock manipulator",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "7": (
+ "CCSDS Handler: Update tx data on rising edge",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "8": (
+ "CCSDS Handler: Update tx data on falling edge",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ }
+ service_ccsds_handler_tuple = ("CCSDS Handler", op_code_dict_srv_ccsds_handler)
+ cmd_dict[CustomServiceList.CCSDS_HANDLER.value] = service_ccsds_handler_tuple
+
+
+def add_gps_cmds(cmd_dict: ServiceOpCodeDictT):
+ op_code_dict = {
+ GpsOpCodes.RESET_GNSS.value: ("Reset GPS", {OpCodeDictKeys.TIMEOUT: 2.0})
+ }
+ service_tuple = ("GPS 0", op_code_dict)
+ cmd_dict[CustomServiceList.GPS_0.value] = service_tuple
+ cmd_dict[CustomServiceList.GPS_1.value] = service_tuple
+
+
+def add_str_cmds(cmd_dict: ServiceOpCodeDictT):
+ op_code_dict_srv_star_tracker = {
+ "0": (
+ "Star Tracker: Mode On, Submode Bootloader",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "1": ("Star Tracker: Mode On, Submode Firmware", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "2": ("Star Tracker: Mode Normal", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "3": ("Star Tracker: Mode Off", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "4": ("Star Tracker: Mode Raw", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "5": ("Star Tracker: Ping", {OpCodeDictKeys.TIMEOUT: 5.0}),
+ "6": (
+ "Star Tracker: Switch to bootloader program",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "7": ("Star Tracker: Request temperature", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "8": ("Star Tracker: Request version", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "9": ("Star Tracker: Request interface", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "10": ("Star Tracker: Request power", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "11": (
+ "Star Tracker: Set subscription parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "12": (
+ "Star Tracker: Boot image (requires bootloader mode)",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "13": ("Star Tracker: Request time", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "14": ("Star Tracker: Request solution", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "15": ("Star Tracker: Upload image", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "16": ("Star Tracker: Download image", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "17": ("Star Tracker: Set limit parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "18": ("Star Tracker: Set tracking parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "19": ("Star Tracker: Set mounting parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "20": ("Star Tracker: Set camera parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "22": (
+ "Star Tracker: Set centroiding parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "23": ("Star Tracker: Set LISA parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "24": ("Star Tracker: Set matching parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "25": (
+ "Star Tracker: Set validation parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "26": ("Star Tracker: Set algo parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "27": ("Star Tracker: Take image", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "28": ("Star Tracker: Stop str helper", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "30": (
+ "Star Tracker: Set name of download image",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "31": ("Star Tracker: Request histogram", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "32": ("Star Tracker: Request contrast", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "33": ("Star Tracker: Set json filename", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "35": ("Star Tracker: Flash read", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "36": ("Star Tracker: Set flash read filename", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "37": ("Star Tracker: Get checksum", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "49": ("Star Tracker: Request camera parameter", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "50": ("Star Tracker: Request limits", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "51": (
+ "Star Tracker: Set image processor parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "52": (
+ "Star Tracker: (EGSE only) Load camera ground config ",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "53": (
+ "Star Tracker: (EGSE only) Load camera flight config",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "54": (
+ "Star Tracker: Request log level parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "55": (
+ "Star Tracker: Request mounting parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "56": (
+ "Star Tracker: Request image processor parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "57": (
+ "Star Tracker: Request centroiding parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "58": ("Star Tracker: Request lisa parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "59": (
+ "Star Tracker: Request matching parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "60": (
+ "Star Tracker: Request tracking parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "61": (
+ "Star Tracker: Request validation parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "62": ("Star Tracker: Request algo parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "63": (
+ "Star Tracker: Request subscription parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "64": (
+ "Star Tracker: Request log subscription parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "65": (
+ "Star Tracker: Request debug camera parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "66": ("Star Tracker: Set log level parameters", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "67": (
+ "Star Tracker: Set log subscription parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "68": (
+ "Star Tracker: Set debug camera parameters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "69": ("Star Tracker: Firmware update", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "70": (
+ "Star Tracker: Disable timestamp generation",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "71": (
+ "Star Tracker: Enable timestamp generation",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ }
+ service_star_tracker_tuple = ("Star tracker", op_code_dict_srv_star_tracker)
+ cmd_dict[CustomServiceList.STAR_TRACKER.value] = service_star_tracker_tuple
+
+
+def add_syrlinks_cmds(cmd_dict: ServiceOpCodeDictT):
+ op_code_dict_srv_syrlinks_handler = {
+ "0": ("Syrlinks Handler: Set mode off", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "1": ("Syrlinks Handler: Set mode on", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "2": ("Syrlinks Handler: Set mode normal", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "3": ("Syrlinks Handler: Set TX standby", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "4": ("Syrlinks Handler: Set TX modulation", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "5": ("Syrlinks Handler: Set TX carrier wave", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "6": ("Syrlinks Handler: Read TX status", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "7": ("Syrlinks Handler: Read TX waveform", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "8": (
+ "Syrlinks Handler: Read TX AGC value high byte ",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "9": (
+ "Syrlinks Handler: Read TX AGC value low byte ",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "12": (
+ "Syrlinks Handler: Write LCL config",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "13": (
+ "Syrlinks Handler: Read RX status registers",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "14": (
+ "Syrlinks Handler: Read LCL config register",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "15": (
+ "Syrlinks Handler: Set waveform OQPSK",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "16": (
+ "Syrlinks Handler: Set waveform BPSK",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "17": (
+ "Syrlinks Handler: Set second config",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "18": (
+ "Syrlinks Handler: Enable debug output",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "19": (
+ "Syrlinks Handler: Disable debug output",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ }
+ service_syrlinks_handler_tuple = (
+ "Syrlinks Handler",
+ op_code_dict_srv_syrlinks_handler,
+ )
+ cmd_dict[CustomServiceList.SYRLINKS.value] = service_syrlinks_handler_tuple
+
+
def add_bpx_cmd_definitions(cmd_dict: ServiceOpCodeDictT):
op_code_dict = dict()
add_op_code_entry(
@@ -179,10 +453,28 @@ def add_pl_pcdu_cmds(cmd_dict: ServiceOpCodeDictT):
)
+def add_time_cmds(cmd_dict: ServiceOpCodeDictT):
+ from pus_tc.system.time import OpCodes, Info
+
+ op_code_dict = dict()
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=OpCodes.SET_CURRENT_TIME,
+ info=Info.SET_CURRENT_TIME,
+ )
+ add_service_op_code_entry(
+ srv_op_code_dict=cmd_dict,
+ name=CustomServiceList.TIME.value,
+ info="Time Service",
+ op_code_entry=op_code_dict,
+ )
+
+
def add_pcdu_cmds(cmd_dict: ServiceOpCodeDictT):
from pus_tc.devs.p60dock import P60OpCodes, GomspaceOpCodes, Info
from pus_tc.devs.pdu1 import Pdu1OpCodes
from pus_tc.devs.pdu2 import Pdu2OpCodes
+ from gomspace.gomspace_common import Info as GsInfo
op_code_dict = dict()
add_op_code_entry(
@@ -207,8 +499,13 @@ def add_pcdu_cmds(cmd_dict: ServiceOpCodeDictT):
)
add_op_code_entry(
op_code_dict=op_code_dict,
- keys=GomspaceOpCodes.REQUEST_HK_ONCE,
- info="P60 Dock: Request HK once",
+ keys=GomspaceOpCodes.REQUEST_CORE_HK_ONCE,
+ info=GsInfo.REQUEST_CORE_HK_ONCE,
+ )
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=GomspaceOpCodes.REQUEST_AUX_HK_ONCE,
+ info=GsInfo.REQUEST_AUX_HK_ONCE,
)
add_op_code_entry(
op_code_dict=op_code_dict,
@@ -311,8 +608,13 @@ def add_pcdu_cmds(cmd_dict: ServiceOpCodeDictT):
)
add_op_code_entry(
op_code_dict=op_code_dict,
- keys=GomspaceOpCodes.REQUEST_HK_ONCE,
- info="PDU1: Request HK once",
+ keys=GomspaceOpCodes.REQUEST_CORE_HK_ONCE,
+ info=GsInfo.REQUEST_CORE_HK_ONCE,
+ )
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=GomspaceOpCodes.REQUEST_AUX_HK_ONCE,
+ info=GsInfo.REQUEST_AUX_HK_ONCE,
)
add_op_code_entry(
op_code_dict=op_code_dict,
@@ -418,8 +720,13 @@ def add_pcdu_cmds(cmd_dict: ServiceOpCodeDictT):
)
add_op_code_entry(
op_code_dict=op_code_dict,
- keys=GomspaceOpCodes.REQUEST_HK_ONCE,
- info="PDU2: Request HK once",
+ keys=GomspaceOpCodes.REQUEST_CORE_HK_ONCE,
+ info=GsInfo.REQUEST_CORE_HK_ONCE,
+ )
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=GomspaceOpCodes.REQUEST_AUX_HK_ONCE,
+ info=GsInfo.REQUEST_AUX_HK_ONCE,
)
add_op_code_entry(
op_code_dict=op_code_dict,
@@ -438,6 +745,12 @@ def add_pcdu_cmds(cmd_dict: ServiceOpCodeDictT):
info="PDU2 Device",
op_code_entry=op_code_dict,
)
+ op_code_dict = {
+ "0": ("ACU: Tests", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "51": ("ACU: Print channel statistics", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ }
+ service_tuple = ("ACU Devices", op_code_dict)
+ cmd_dict[CustomServiceList.ACU.value] = service_tuple
def add_imtq_cmds(cmd_dict: ServiceOpCodeDictT):
@@ -506,6 +819,8 @@ def add_ploc_mpsoc_cmds(cmd_dict: ServiceOpCodeDictT):
"12": ("Ploc MPSoC: OBSW reset sequence count", {OpCodeDictKeys.TIMEOUT: 2.0}),
"13": ("Ploc MPSoC: Read DEADBEEF address", {OpCodeDictKeys.TIMEOUT: 2.0}),
"14": ("Ploc MPSoC: Mode replay", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "15": ("Ploc MPSoC: Mode idle", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "16": ("Ploc MPSoC: Tc cam command send", {OpCodeDictKeys.TIMEOUT: 2.0}),
}
service_ploc_mpsoc_tuple = ("Ploc MPSoC", op_code_dict_srv_ploc_mpsoc)
cmd_dict[CustomServiceList.PLOC_MPSOC.value] = service_ploc_mpsoc_tuple
@@ -525,7 +840,6 @@ def add_ploc_supv_cmds(cmd_dict: ServiceOpCodeDictT):
"1": ("PLOC Supervisor: Set mode on", {OpCodeDictKeys.TIMEOUT: 2.0}),
"2": ("PLOC Supervisor: Set mode normal", {OpCodeDictKeys.TIMEOUT: 2.0}),
"3": ("PLOC Supervisor: Get HK Report", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "4": ("PLOC Supervisor: Restart MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}),
"5": ("PLOC Supervisor: Start MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}),
"6": ("PLOC Supervisor: Shutdown MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}),
"7": (
@@ -541,18 +855,9 @@ def add_ploc_supv_cmds(cmd_dict: ServiceOpCodeDictT):
"PLOC Supervisor: Request boot status report",
{OpCodeDictKeys.TIMEOUT: 2.0},
),
- "14": ("PLOC Supervisor: Update available", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "15": ("PLOC Supervisor: Watchdogs enable", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "16": (
- "PLOC Supervisor: Watchdog Configure Timeout",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
"17": ("PLOC Supervisor: Enable latchup alert", {OpCodeDictKeys.TIMEOUT: 2.0}),
"18": ("PLOC Supervisor: Disable latchup alert", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "19": ("PLOC Supervisor: Auto calibrate alert", {OpCodeDictKeys.TIMEOUT: 2.0}),
"20": ("PLOC Supervisor: Set alert limit", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "21": ("PLOC Supervisor: Set alert irq filter", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "22": ("PLOC Supervisor: Set ADC sweep period", {OpCodeDictKeys.TIMEOUT: 2.0}),
"23": (
"PLOC Supervisor: Set ADC enabled channels",
{OpCodeDictKeys.TIMEOUT: 2.0},
@@ -567,15 +872,8 @@ def add_ploc_supv_cmds(cmd_dict: ServiceOpCodeDictT):
{OpCodeDictKeys.TIMEOUT: 2.0},
),
"27": ("PLOC Supervisor: Copy ADC data to MRAM", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "28": (
- "PLOC Supervisor: Enable/Disable NVM0/1/3",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "29": ("PLOC Supervisor: Select NVM", {OpCodeDictKeys.TIMEOUT: 2.0}),
"30": ("PLOC Supervisor: Run auto EM tests", {OpCodeDictKeys.TIMEOUT: 2.0}),
"31": ("PLOC Supervisor: MRAM Wipe", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "33": ("PLOC Supervisor: Print CPU stats", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "34": ("PLOC Supervisor: Set debug verbosity", {OpCodeDictKeys.TIMEOUT: 2.0}),
"35": ("PLOC Supervisor: Set GPIO", {OpCodeDictKeys.TIMEOUT: 2.0}),
"36": ("PLOC Supervisor: Read GPIO", {OpCodeDictKeys.TIMEOUT: 2.0}),
"37": ("PLOC Supervisor: Restart supervisor", {OpCodeDictKeys.TIMEOUT: 2.0}),
@@ -591,7 +889,31 @@ def add_ploc_supv_cmds(cmd_dict: ServiceOpCodeDictT):
"PLOC Supervisor: Factory reset clear circular entries",
{OpCodeDictKeys.TIMEOUT: 2.0},
),
- "41": ("PLOC Supervisor: CAN loopback test", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "42": ("PLOC Supervisor: Perform update", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "43": (
+ "PLOC Supervisor: Terminate supervisor process",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "44": ("PLOC Supervisor: Start MPSoC quiet", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "45": ("PLOC Supervisor: Set shutdown timeout", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "46": ("PLOC Supervisor: Factory flash", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "47": ("PLOC Supervisor: Enable auto TM", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "48": ("PLOC Supervisor: Disable auto TM", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "51": (
+ "PLOC Supervisor: Logging request event buffers",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "52": (
+ "PLOC Supervisor: Logging clear counters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "53": ("PLOC Supervisor: Logging set topic", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "54": (
+ "PLOC Supervisor: Logging request counters",
+ {OpCodeDictKeys.TIMEOUT: 2.0},
+ ),
+ "55": ("PLOC Supervisor: Request ADC Report", {OpCodeDictKeys.TIMEOUT: 2.0}),
+ "56": ("PLOC Supervisor: Reset PL", {OpCodeDictKeys.TIMEOUT: 2.0}),
}
service_ploc_supv_tuple = ("PLOC Supervisor", op_code_dict_srv_ploc_supv)
diff --git a/pus_tc/devs/heater.py b/pus_tc/devs/heater.py
index e04b5b0..ef28b35 100644
--- a/pus_tc/devs/heater.py
+++ b/pus_tc/devs/heater.py
@@ -1,59 +1,207 @@
# -*- coding: utf-8 -*-
-"""
-@file tmtcc_tc_heater.py
-@brief Command sequence to test the HeaterHandler
+"""Command sequence to test the HeaterHandler
@author J. Meier
@date 30.01.2021
"""
-from tmtccmd.config.definitions import QueueCommands
+import enum
+
+from config.definitions import CustomServiceList
+from config.object_ids import get_object_ids
+from tmtccmd.pus.obj_id import ObjectIdDictT, ObjectId
+from tmtccmd.config.definitions import QueueCommands, ServiceOpCodeDictT
+from tmtccmd.tc.pus_201_fsfw_health import pack_set_health_cmd_data, FsfwHealth, Subservices
+from tmtccmd.tc.service_8_functional_cmd import generate_action_command
+from tmtccmd.config.globals import add_service_op_code_entry, add_op_code_entry
from tmtccmd.tc.packer import TcQueueT
from spacepackets.ecss.tc import PusTelecommand
class SwitchNumbers:
- HEATER_0 = 0
- HEATER_1 = 1
- HEATER_2 = 2
- HEATER_3 = 3
- HEATER_4 = 4
- HEATER_5 = 5
- HEATER_6 = 6
- HEATER_7 = 7
+ HEATER_0_OBC_BRD = 0
+ HEATER_1_PLOC_PROC_BRD = 1
+ HEATER_2_ACS_BRD = 2
+ HEATER_3_PCDU_PDU = 3
+ HEATER_4_CAMERA = 4
+ HEATER_5_STR = 5
+ HEATER_6_DRO = 6
+ HEATER_7_HPA = 7
NUMBER_OF_SWITCHES = 8
-class ActionIds:
- SWITCH_HEATER = bytearray([0x0, 0x0, 0x0, 0x0])
+class OpCodes:
+ HEATER_CMD = ["0", "switch-cmd"]
+ HEATER_EXT_CTRL = ["1", "set-ext-ctrl"]
+ HEATER_FAULTY_CMD = ["2", "set-faulty"]
+ HEATER_HEALTHY_CMD = ["3", "set-healthy"]
-def pack_heater_test_into(object_id: bytearray, tc_queue: TcQueueT):
- tc_queue.appendleft((QueueCommands.PRINT, "Testing Heater Switching"))
+class Info:
+ HEATER_CMD = "Heater Switch Command"
+ HEATER_EXT_CTRL = "Set to external control"
+ HEATER_FAULTY_CMD = "Set to faulty"
+ HEATER_HEALTHY_CMD = "Set to healthy"
- heater_number = int(input("Type number of heater to switch [0-7]: "))
- if heater_number >= SwitchNumbers.NUMBER_OF_SWITCHES or heater_number < 0:
- print("Invalid heater switch number")
- return
- action = int(input("Turn switch on or off? (0 - off, 1 - on): "))
- if action != 0 and action != 1:
- print("Invalid action defined. Must be 0 (off) or 1 (on")
- debug_string = "Switching heater " + str(heater_number)
- tc_queue.appendleft((QueueCommands.PRINT, debug_string))
- command = pack_switch_heater_command(object_id, heater_number, action)
- command = PusTelecommand(service=8, subservice=128, ssc=300, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+
+class ActionIds(enum.IntEnum):
+ SWITCH_HEATER = 0
+
+
+def add_heater_cmds(cmd_dict: ServiceOpCodeDictT):
+ op_code_dict = dict()
+ add_op_code_entry(
+ op_code_dict=op_code_dict, keys=OpCodes.HEATER_CMD, info=Info.HEATER_CMD
+ )
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=OpCodes.HEATER_HEALTHY_CMD,
+ info=Info.HEATER_HEALTHY_CMD,
+ )
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=OpCodes.HEATER_EXT_CTRL,
+ info=Info.HEATER_EXT_CTRL,
+ )
+ add_op_code_entry(
+ op_code_dict=op_code_dict,
+ keys=OpCodes.HEATER_FAULTY_CMD,
+ info=Info.HEATER_FAULTY_CMD,
+ )
+ add_service_op_code_entry(
+ srv_op_code_dict=cmd_dict,
+ name=CustomServiceList.HEATER.value,
+ info="Heater Device",
+ op_code_entry=op_code_dict,
+ )
+
+
+def pack_heater_cmds(object_id: bytearray, op_code: str, tc_queue: TcQueueT):
+ if op_code in OpCodes.HEATER_CMD:
+ tc_queue.appendleft((QueueCommands.PRINT, "Heater Switching"))
+ heater_number = prompt_heater()
+ while True:
+ action = input("Turn switch on or off? (0 - off, 1 - on): ")
+ if not action.isdigit():
+ print("Switch action not valid")
+ continue
+ action = int(action)
+ if action != 0 and action != 1:
+ print("Invalid action defined. Must be 0 (off) or 1 (on")
+ continue
+ break
+ if action == 1:
+ act_str = "on"
+ else:
+ act_str = "off"
+ debug_string = f"Switching heater {heater_number} {act_str}"
+ tc_queue.appendleft((QueueCommands.PRINT, debug_string))
+ command = pack_switch_heater_command(object_id, heater_number, action)
+ tc_queue.appendleft(command.pack_command_tuple())
+ if op_code in OpCodes.HEATER_EXT_CTRL:
+ heater_number = prompt_heater()
+ obj_id = heater_idx_to_obj(heater_number)
+ health_cmd(
+ tc_queue=tc_queue,
+ object_id=obj_id,
+ health=FsfwHealth.EXTERNAL_CTRL,
+ health_str="External Control",
+ heater_idx=heater_number,
+ )
+ if op_code in OpCodes.HEATER_FAULTY_CMD:
+ heater_number = prompt_heater()
+ obj_id = heater_idx_to_obj(heater_number)
+ health_cmd(
+ tc_queue=tc_queue,
+ object_id=obj_id,
+ health=FsfwHealth.FAULTY,
+ health_str="Faulty",
+ heater_idx=heater_number,
+ )
+ if op_code in OpCodes.HEATER_HEALTHY_CMD:
+ heater_number = prompt_heater()
+ obj_id = heater_idx_to_obj(heater_number)
+ health_cmd(
+ tc_queue=tc_queue,
+ object_id=obj_id,
+ health=FsfwHealth.HEALTHY,
+ health_str="Healthy",
+ heater_idx=heater_number,
+ )
+
+
+def heater_idx_to_obj(heater: int) -> ObjectId:
+ from config.object_ids import (
+ HEATER_0_OBC_BRD,
+ HEATER_1_PLOC_PROC_BRD,
+ HEATER_2_ACS_BRD,
+ HEATER_3_PCDU_BRD,
+ HEATER_4_CAMERA,
+ HEATER_5_STR,
+ HEATER_6_DRO,
+ HEATER_7_HPA,
+ )
+
+ obj_id_array = [
+ HEATER_0_OBC_BRD,
+ HEATER_1_PLOC_PROC_BRD,
+ HEATER_2_ACS_BRD,
+ HEATER_3_PCDU_BRD,
+ HEATER_4_CAMERA,
+ HEATER_5_STR,
+ HEATER_6_DRO,
+ HEATER_7_HPA,
+ ]
+ obj_dict = get_object_ids()
+ obj_id_obj = obj_dict.get(obj_id_array[heater])
+ if obj_id_obj is None:
+ return ObjectId.from_bytes(obj_id_array[heater])
+ return obj_id_obj
+
+
+def prompt_heater() -> int:
+ while True:
+ heater_number = input("Type number of heater to switch [0-7]: ")
+ if not heater_number.isdigit():
+ print("Heater number not a digit")
+ continue
+ heater_number = int(heater_number)
+ if heater_number >= SwitchNumbers.NUMBER_OF_SWITCHES or heater_number < 0:
+ print("Invalid heater switch number")
+ continue
+ break
+ return heater_number
+
+
+def health_cmd(
+ tc_queue: TcQueueT,
+ heater_idx: int,
+ object_id: ObjectId,
+ health: FsfwHealth,
+ health_str: str,
+):
+ tc_queue.appendleft(
+ (
+ QueueCommands.PRINT,
+ f"Setting Heater {heater_idx} {object_id} to {health_str}",
+ )
+ )
+ app_data = pack_set_health_cmd_data(object_id=object_id.as_bytes, health=health)
+ cmd = PusTelecommand(
+ service=201, subservice=Subservices.TC_SET_HEALTH, app_data=app_data
+ )
+ tc_queue.appendleft(cmd.pack_command_tuple())
def pack_switch_heater_command(
- object_id: bytearray, switch_nr: int, switch_action: int
-) -> bytearray:
- """Function to generate the command switch a heater
- @param object_id The object id of the HeaterHandler object.
- @param switch_nr The switch number identifying the heater to switch
- @param switch_action Action to perform. 0 - Sets switch off, 1 - Sets switch on.
+ object_id: bytes, switch_nr: int, switch_action: int
+) -> PusTelecommand:
+ """Function to generate a heater switch command.
+ :param object_id: The object id of the HeaterHandler object.
+ :param switch_nr: The switch number identifying the heater to switch
+ :param switch_action: Action to perform. 0 - Sets switch off, 1 - Sets switch on.
"""
- action_id = ActionIds.SWITCH_HEATER
command = bytearray()
- command += object_id + action_id
command.append(switch_nr)
command.append(switch_action)
- return command
+ return generate_action_command(
+ object_id=object_id, action_id=ActionIds.SWITCH_HEATER, app_data=command
+ )
diff --git a/pus_tc/devs/p60dock.py b/pus_tc/devs/p60dock.py
index 2f358ca..dbdc59a 100644
--- a/pus_tc/devs/p60dock.py
+++ b/pus_tc/devs/p60dock.py
@@ -90,7 +90,7 @@ class P60DockHkTable:
wdt_gnd_left = TableEntry(bytearray([0x00, 0xA8]), TableEntry.uint32_size)
-def pack_p60dock_test_into(object_id: bytearray, tc_queue: TcQueueT, op_code: str):
+def pack_p60dock_cmds(object_id: bytearray, tc_queue: TcQueueT, op_code: str):
if op_code in P60OpCodes.STACK_3V3_ON:
tc_queue.appendleft((QueueCommands.PRINT, Info.STACK_3V3_ON))
command = pack_set_param_command(
@@ -127,9 +127,18 @@ def pack_p60dock_test_into(object_id: bytearray, tc_queue: TcQueueT, op_code: st
Channel.off,
)
tc_queue.appendleft(command.pack_command_tuple())
- if op_code in GomspaceOpCodes.REQUEST_HK_ONCE:
- tc_queue.appendleft((QueueCommands.PRINT, "P60 Dock: Requesting HK Table Once"))
- hk_sid = make_sid(object_id=P60_DOCK_HANDLER, set_id=SetIds.P60_DOCK)
+ if op_code in GomspaceOpCodes.REQUEST_CORE_HK_ONCE:
+ tc_queue.appendleft(
+ (QueueCommands.PRINT, "P60 Dock: Requesting HK Core HK Once")
+ )
+ hk_sid = make_sid(object_id=P60_DOCK_HANDLER, set_id=SetIds.P60_CORE)
+ command = generate_one_hk_command(sid=hk_sid, ssc=0)
+ tc_queue.appendleft(command.pack_command_tuple())
+ if op_code in GomspaceOpCodes.REQUEST_AUX_HK_ONCE:
+ tc_queue.appendleft(
+ (QueueCommands.PRINT, "P60 Dock: Requesting HK Aux HK Once")
+ )
+ hk_sid = make_sid(object_id=P60_DOCK_HANDLER, set_id=SetIds.P60_AUX)
command = generate_one_hk_command(sid=hk_sid, ssc=0)
tc_queue.appendleft(command.pack_command_tuple())
if op_code in GomspaceOpCodes.PRINT_SWITCH_V_I:
diff --git a/pus_tc/devs/pdu1.py b/pus_tc/devs/pdu1.py
index 80e3696..2028639 100644
--- a/pus_tc/devs/pdu1.py
+++ b/pus_tc/devs/pdu1.py
@@ -5,7 +5,11 @@
"""
from tmtccmd.config.definitions import QueueCommands
from tmtccmd.tc.packer import TcQueueT
-from tmtccmd.tc.service_3_housekeeping import generate_one_hk_command, make_sid
+from tmtccmd.tc.service_3_housekeeping import (
+ generate_one_hk_command,
+ make_sid,
+ generate_one_diag_command,
+)
from gomspace.gomspace_common import *
from gomspace.gomspace_pdu_definitions import *
from config.object_ids import PDU_1_HANDLER_ID
@@ -210,9 +214,14 @@ def pack_pdu1_commands(object_id: bytearray, tc_queue: TcQueueT, op_code: str):
Channel.off,
)
tc_queue.appendleft(command.pack_command_tuple())
- if op_code in GomspaceOpCodes.REQUEST_HK_ONCE:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Requesting HK Table Once"))
- hk_sid = make_sid(object_id=PDU_1_HANDLER_ID, set_id=SetIds.PDU_1)
+ if op_code in GomspaceOpCodes.REQUEST_CORE_HK_ONCE:
+ tc_queue.appendleft((QueueCommands.PRINT, f"PDU1: {Info.REQUEST_CORE_HK_ONCE}"))
+ hk_sid = make_sid(object_id=PDU_1_HANDLER_ID, set_id=SetIds.PDU_1_CORE)
+ command = generate_one_diag_command(sid=hk_sid, ssc=0)
+ tc_queue.appendleft(command.pack_command_tuple())
+ if op_code in GomspaceOpCodes.REQUEST_AUX_HK_ONCE:
+ tc_queue.appendleft((QueueCommands.PRINT, f"PDU1: {Info.REQUEST_AUX_HK_ONCE}"))
+ hk_sid = make_sid(object_id=PDU_1_HANDLER_ID, set_id=SetIds.PDU_1_AUX)
command = generate_one_hk_command(sid=hk_sid, ssc=0)
tc_queue.appendleft(command.pack_command_tuple())
if op_code in GomspaceOpCodes.PRINT_SWITCH_V_I:
diff --git a/pus_tc/devs/pdu2.py b/pus_tc/devs/pdu2.py
index 5ac74af..c4e3623 100644
--- a/pus_tc/devs/pdu2.py
+++ b/pus_tc/devs/pdu2.py
@@ -8,7 +8,11 @@
"""
from tmtccmd.config.definitions import QueueCommands
from tmtccmd.tc.packer import TcQueueT
-from tmtccmd.tc.service_3_housekeeping import generate_one_hk_command, make_sid
+from tmtccmd.tc.service_3_housekeeping import (
+ generate_one_hk_command,
+ generate_one_diag_command,
+ make_sid,
+)
from gomspace.gomspace_common import *
from gomspace.gomspace_pdu_definitions import *
from config.object_ids import PDU_2_HANDLER_ID
@@ -232,9 +236,14 @@ def pack_pdu2_commands(object_id: bytearray, tc_queue: TcQueueT, op_code: str):
Channel.off,
)
tc_queue.appendleft(command.pack_command_tuple())
- if op_code in GomspaceOpCodes.REQUEST_HK_ONCE:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Requesting HK Table Once"))
- hk_sid = make_sid(object_id=PDU_2_HANDLER_ID, set_id=SetIds.PDU_2)
+ if op_code in GomspaceOpCodes.REQUEST_CORE_HK_ONCE:
+ tc_queue.appendleft((QueueCommands.PRINT, f"PDU2: {Info.REQUEST_CORE_HK_ONCE}"))
+ hk_sid = make_sid(object_id=PDU_2_HANDLER_ID, set_id=SetIds.PDU_2_CORE)
+ command = generate_one_diag_command(sid=hk_sid, ssc=0)
+ tc_queue.appendleft(command.pack_command_tuple())
+ if op_code in GomspaceOpCodes.REQUEST_AUX_HK_ONCE:
+ tc_queue.appendleft((QueueCommands.PRINT, f"PDU2: {Info.REQUEST_AUX_HK_ONCE}"))
+ hk_sid = make_sid(object_id=PDU_2_HANDLER_ID, set_id=SetIds.PDU_2_AUX)
command = generate_one_hk_command(sid=hk_sid, ssc=0)
tc_queue.appendleft(command.pack_command_tuple())
if op_code in GomspaceOpCodes.PRINT_SWITCH_V_I:
diff --git a/pus_tc/devs/ploc_mpsoc.py b/pus_tc/devs/ploc_mpsoc.py
index 4806e15..da81496 100644
--- a/pus_tc/devs/ploc_mpsoc.py
+++ b/pus_tc/devs/ploc_mpsoc.py
@@ -36,6 +36,8 @@ sequence_file_dict = {
"3": ["0:/EQ04/E-75", "0:/EQ04/E-75"],
}
+CARRIAGE_RETURN = 0xD
+
class CommandIds(enum.IntEnum):
TC_MEM_WRITE = 1
@@ -49,14 +51,17 @@ class CommandIds(enum.IntEnum):
TC_DOWNLINK_PWR_OFF = 15
OBSW_RESET_SEQ_COUNT = 50
TC_MODE_REPLAY = 16
+ TC_CAM_CMD_SEND = 17
+ TC_MODE_IDLE = 18
class MemAddresses(enum.IntEnum):
DEADBEEF = 0x40000004
-class PlocReplyIds:
- tm_mem_read_report = 6
+class PlocReplyIds(enum.IntEnum):
+ TM_MEM_READ_RPT = 6
+ TM_CAM_CMD_RPT = 19
def pack_ploc_mpsoc_commands(
@@ -160,6 +165,21 @@ def pack_ploc_mpsoc_commands(
command = object_id + struct.pack("!I", CommandIds.TC_MODE_REPLAY)
command = PusTelecommand(service=8, subservice=128, ssc=30, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
+ elif op_code == "15":
+ tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Tc mode idle"))
+ command = object_id + struct.pack("!I", CommandIds.TC_MODE_IDLE)
+ command = PusTelecommand(service=8, subservice=128, ssc=31, app_data=command)
+ tc_queue.appendleft(command.pack_command_tuple())
+ elif op_code == "16":
+ tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Tc cam command send"))
+ cam_cmd = input("Specify cam command string: ")
+ command = (
+ object_id
+ + struct.pack("!I", CommandIds.TC_CAM_CMD_SEND)
+ + bytearray(cam_cmd, "utf-8")
+ )
+ command = PusTelecommand(service=8, subservice=128, ssc=32, app_data=command)
+ tc_queue.appendleft(command.pack_command_tuple())
return tc_queue
diff --git a/pus_tc/devs/ploc_supervisor.py b/pus_tc/devs/ploc_supervisor.py
index 25fb543..34cfa7b 100644
--- a/pus_tc/devs/ploc_supervisor.py
+++ b/pus_tc/devs/ploc_supervisor.py
@@ -13,6 +13,7 @@ from tmtccmd.config.definitions import QueueCommands
from tmtccmd.tc.packer import TcQueueT
from tmtccmd.logging import get_console_logger
from tmtccmd.tc.service_200_mode import pack_mode_data, Modes
+from utility.input_helper import InputHelper
LOGGER = get_console_logger()
@@ -26,10 +27,29 @@ latchup_id_dict = {
"6": "SAFECOTS",
}
+MANUAL_INPUT = "1"
+
+update_file_dict = {
+ MANUAL_INPUT: ["manual input", ""],
+ "2": ["/mnt/sd0/ploc/supervisor/update.bin", "/mnt/sd0/ploc/supervisor/update.bin"],
+ "3": [
+ "/mnt/sd0/ploc/supervisor/update-large.bin",
+ "/mnt/sd0/ploc/supervisor/update-large.bin",
+ ],
+ "4": [
+ "/mnt/sd0/ploc/supervisor/update-small.bin",
+ "/mnt/sd0/ploc/supervisor/update-small.bin",
+ ],
+}
+
+event_buffer_path_dict = {
+ MANUAL_INPUT: ["manual input", ""],
+ "2": ["/mnt/sd0/ploc/supervisor", "/mnt/sd0/ploc/supervisor"],
+}
+
class SupvActionIds:
HK_REPORT = 1
- RESTART_MPSOC = 2
START_MPSOC = 3
SHUTWOWN_MPSOC = 4
SEL_MPSOC_BOOT_IMAGE = 5
@@ -40,35 +60,39 @@ class SupvActionIds:
DISABLE_HK = 10
GET_BOOT_STATUS_REPORT = 11
UPDATE_AVAILABLE = 12
- WATCHDOGS_ENABLE = 13
- WATCHDOGS_CONFIG_TIMEOUT = 14
ENABLE_LATCHUP_ALERT = 15
DISABLE_LATCHUP_ALERT = 16
- AUTO_CALIBRATE_ALERT = 17
SET_ALERT_LIMIT = 18
- SET_ALERT_IRQ_FILTER = 19
SET_ADC_SWEEP_PERIOD = 20
SET_ADC_ENABLED_CHANNELS = 21
SET_ADC_WINDOW_AND_STRIDE = 22
SET_ADC_THRESHOLD = 23
GET_LATCHUP_STATUS_REPORT = 24
COPY_ADC_DATA_TO_MRAM = 25
- ENABLE_NVMS = 26
SELECT_NVM = 27
RUN_AUTO_EM_TESTS = 28
WIPE_MRAM = 29
DUMP_MRAM = 30
- SET_DBG_VERBOSITY = 31
- CAN_LOOPBACK_TEST = 32
- PRINT_CPU_STATS = 33
SET_GPIO = 34
READ_GPIO = 35
RESTART_SUPERVISOR = 36
FACTORY_RESET_CLEAR_ALL = 37
- REQUEST_LOGGING_DATA = 38
+ LOGGING_REQUEST_COUNTERS = 38
UPDATE_IMAGE_DATA = 39
FACTORY_RESET_CLEAR_MIRROR = 40
FACTORY_RESET_CLEAR_CIRCULAR = 41
+ START_MPSOC_QUIET = 45
+ SET_SHUTDOWN_TIMEOUT = 46
+ FACTORY_FLASH = 47
+ PERFORM_UPDATE = 48
+ TERMINATE_SUPV_HELPER = 49
+ ENABLE_AUTO_TM = 50
+ DISABLE_AUTO_TM = 51
+ LOGGING_REQUEST_EVENT_BUFFERS = 54
+ LOGGING_CLEAR_COUNTERS = 55
+ LOGGING_SET_TOPIC = 56
+ REQUEST_ADC_REPORT = 57
+ RESET_PL = 58
class SupvHkIds:
@@ -105,11 +129,6 @@ def pack_ploc_supv_commands(
command = object_id + struct.pack("!I", SupvActionIds.HK_REPORT)
command = PusTelecommand(service=8, subservice=128, ssc=20, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "4":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Restart MPSoC"))
- command = object_id + struct.pack("!I", SupvActionIds.RESTART_MPSOC)
- command = PusTelecommand(service=8, subservice=128, ssc=21, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
elif op_code == "5":
tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Start MPSoC"))
command = object_id + struct.pack("!I", SupvActionIds.START_MPSOC)
@@ -124,10 +143,10 @@ def pack_ploc_supv_commands(
tc_queue.appendleft(
(QueueCommands.PRINT, "PLOC Supervisor: Select MPSoC boot image")
)
- mem = int(input("MEM (NVM0 - 0 or NVM1 - 1):"))
- bp0 = int(input("BP0 (0 or 1):"))
- bp1 = int(input("BP1 (0 or 1):"))
- bp2 = int(input("BP2 (0 or 1):"))
+ mem = int(input("MEM (NVM0 - 0 or NVM1 - 1): "))
+ bp0 = int(input("BP0 (0 or 1): "))
+ bp1 = int(input("BP1 (0 or 1): "))
+ bp2 = int(input("BP2 (0 or 1): "))
command = pack_sel_boot_image_cmd(object_id, mem, bp0, bp1, bp2)
command = PusTelecommand(service=8, subservice=128, ssc=24, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
@@ -135,7 +154,7 @@ def pack_ploc_supv_commands(
tc_queue.appendleft(
(QueueCommands.PRINT, "PLOC Supervisor: Set max restart tries")
)
- restart_tries = int(input("Set maximum restart tries:"))
+ restart_tries = int(input("Specify maximum restart tries: "))
command = (
object_id
+ struct.pack("!I", SupvActionIds.SET_MAX_RESTART_TRIES)
@@ -157,7 +176,7 @@ def pack_ploc_supv_commands(
tc_queue.appendleft(command.pack_command_tuple())
elif op_code == "11":
tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Set boot timeout"))
- boot_timeout = int(input("Specify boot timeout [ms]:"))
+ boot_timeout = int(input("Specify boot timeout [ms]: "))
command = (
object_id
+ struct.pack("!I", SupvActionIds.SET_BOOT_TIMEOUT)
@@ -177,23 +196,6 @@ def pack_ploc_supv_commands(
command = object_id + struct.pack("!I", SupvActionIds.GET_BOOT_STATUS_REPORT)
command = PusTelecommand(service=8, subservice=128, ssc=30, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "14":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Update available"))
- command = pack_update_available_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=31, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "15":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Watchdogs Enable"))
- command = pack_watchdogs_enable_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=32, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "16":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Watchdog configure timeout")
- )
- command = pack_watchdog_config_timeout_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=33, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
elif op_code == "17":
tc_queue.appendleft(
(QueueCommands.PRINT, "PLOC Supervisor: Enable latchup alert")
@@ -208,32 +210,11 @@ def pack_ploc_supv_commands(
command = pack_lachtup_alert_cmd(object_id, False)
command = PusTelecommand(service=8, subservice=128, ssc=35, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "19":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Auto calibrate alert")
- )
- command = pack_auto_calibrate_alert_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=36, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
elif op_code == "20":
tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Set alert limit"))
command = pack_set_alert_limit_cmd(object_id)
command = PusTelecommand(service=8, subservice=128, ssc=37, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "21":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Set alert irq filter")
- )
- command = pack_set_alert_irq_filter_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=38, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "22":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Set ADC sweep period")
- )
- command = pack_set_adc_sweep_period_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=39, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
elif op_code == "23":
tc_queue.appendleft(
(QueueCommands.PRINT, "PLOC Supervisor: Set ADC enabled channels")
@@ -267,18 +248,6 @@ def pack_ploc_supv_commands(
command = object_id + struct.pack("!I", SupvActionIds.COPY_ADC_DATA_TO_MRAM)
command = PusTelecommand(service=8, subservice=128, ssc=44, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "28":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Enalbe/Disable NVMs")
- )
- command = pack_enable_nvms_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=45, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "29":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Select NVM"))
- command = pack_select_nvm_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=45, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
elif op_code == "30":
tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Run auto EM tests"))
command = pack_auto_em_tests_cmd(object_id)
@@ -289,18 +258,6 @@ def pack_ploc_supv_commands(
command = pack_mram_wipe_cmd(object_id)
command = PusTelecommand(service=8, subservice=128, ssc=46, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "33":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Print CPU stats"))
- command = pack_print_cpu_stats_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=48, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "34":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Set debug verbosity")
- )
- command = pack_set_debug_verbosity_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=49, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
elif op_code == "35":
tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Set GPIO command"))
command = pack_set_gpio_cmd(object_id)
@@ -333,7 +290,7 @@ def pack_ploc_supv_commands(
tc_queue.appendleft(
(QueueCommands.PRINT, "PLOC Supervisor: Factory reset clear mirror entries")
)
- command = command = object_id + struct.pack(
+ command = object_id + struct.pack(
"!I", SupvActionIds.FACTORY_RESET_CLEAR_MIRROR
)
command = PusTelecommand(service=8, subservice=128, ssc=54, app_data=command)
@@ -350,12 +307,82 @@ def pack_ploc_supv_commands(
)
command = PusTelecommand(service=8, subservice=128, ssc=55, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "41":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: CAN loopback test"))
- command = command = object_id + struct.pack(
- "!I", SupvActionIds.CAN_LOOPBACK_TEST
+ elif op_code == "42":
+ tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Perform update"))
+ command = pack_update_command(object_id)
+ command = PusTelecommand(service=8, subservice=128, ssc=57, app_data=command)
+ tc_queue.appendleft(command.pack_command_tuple())
+ elif op_code == "43":
+ tc_queue.appendleft(
+ (QueueCommands.PRINT, "PLOC Supervisor: Terminate supervisor process")
)
- command = PusTelecommand(service=8, subservice=128, ssc=56, app_data=command)
+ command = object_id + struct.pack("!I", SupvActionIds.TERMINATE_SUPV_HELPER)
+ command = PusTelecommand(service=8, subservice=128, ssc=58, app_data=command)
+ tc_queue.appendleft(command.pack_command_tuple())
+ elif op_code == "44":
+ tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Start MPSoC quiet"))
+ command = object_id + struct.pack("!I", SupvActionIds.START_MPSOC_QUIET)
+ command = PusTelecommand(service=8, subservice=128, ssc=59, app_data=command)
+ tc_queue.appendleft(command.pack_command_tuple())
+ elif op_code == "45":
+ tc_queue.appendleft(
+ (QueueCommands.PRINT, "PLOC Supervisor: Set shutdown timeout")
+ )
+ command = pack_set_shutdown_timeout_command(object_id)
+ command = PusTelecommand(service=8, subservice=128, ssc=60, app_data=command)
+ tc_queue.appendleft(command.pack_command_tuple())
+ elif op_code == "46":
+ tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Factory flash"))
+ command = object_id + struct.pack("!I", SupvActionIds.FACTORY_FLASH)
+ command = PusTelecommand(service=8, subservice=128, ssc=61, app_data=command)
+ tc_queue.appendleft(command.pack_command_tuple())
+ elif op_code == "47":
+ tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Enable auto TM"))
+ command = object_id + struct.pack("!I", SupvActionIds.ENABLE_AUTO_TM)
+ command = PusTelecommand(service=8, subservice=128, ssc=62, app_data=command)
+ tc_queue.appendleft(command.pack_command_tuple())
+ elif op_code == "48":
+ tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Disable auto TM"))
+ command = object_id + struct.pack("!I", SupvActionIds.DISABLE_AUTO_TM)
+ command = PusTelecommand(service=8, subservice=128, ssc=63, app_data=command)
+ tc_queue.appendleft(command.pack_command_tuple())
+ elif op_code == "51":
+ tc_queue.appendleft(
+ (QueueCommands.PRINT, "PLOC Supervisor: Logging request event buffers")
+ )
+ command = pack_logging_buffer_request(object_id)
+ command = PusTelecommand(service=8, subservice=128, ssc=66, app_data=command)
+ tc_queue.appendleft(command.pack_command_tuple())
+ elif op_code == "52":
+ tc_queue.appendleft(
+ (QueueCommands.PRINT, "PLOC Supervisor: Logging clear counters")
+ )
+ command = object_id + struct.pack("!I", SupvActionIds.LOGGING_CLEAR_COUNTERS)
+ command = PusTelecommand(service=8, subservice=128, ssc=67, app_data=command)
+ tc_queue.appendleft(command.pack_command_tuple())
+ elif op_code == "53":
+ tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Logging set topic"))
+ command = pack_logging_set_topic(object_id)
+ command = PusTelecommand(service=8, subservice=128, ssc=68, app_data=command)
+ tc_queue.appendleft(command.pack_command_tuple())
+ elif op_code == "54":
+ tc_queue.appendleft(
+ (QueueCommands.PRINT, "PLOC Supervisor: Logging request counters")
+ )
+ command = object_id + struct.pack("!I", SupvActionIds.LOGGING_REQUEST_COUNTERS)
+ command = PusTelecommand(service=8, subservice=128, ssc=69, app_data=command)
+ tc_queue.appendleft(command.pack_command_tuple())
+ elif op_code == "55":
+ tc_queue.appendleft(
+ (QueueCommands.PRINT, "PLOC Supervisor: Request ADC report")
+ )
+ command = object_id + struct.pack("!I", SupvActionIds.REQUEST_ADC_REPORT)
+ command = PusTelecommand(service=8, subservice=128, ssc=70, app_data=command)
+ tc_queue.appendleft(command.pack_command_tuple())
+ elif op_code == "56":
+ tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Reset PL"))
+ command = object_id + struct.pack("!I", SupvActionIds.RESET_PL)
+ command = PusTelecommand(service=8, subservice=128, ssc=71, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
return tc_queue
@@ -371,7 +398,6 @@ def pack_sel_boot_image_cmd(
@param bp1 Partition pin 1
@param bp2 Partition pin 2
"""
- command = bytearray()
command = object_id + struct.pack("!I", SupvActionIds.SEL_MPSOC_BOOT_IMAGE)
command = command + struct.pack("!B", mem)
command = command + struct.pack("!B", bp0)
@@ -390,7 +416,6 @@ def pack_update_available_cmd(object_id: bytearray) -> bytearray:
image_size = 222
image_crc = 0x0
number_of_packets = 150
- command = bytearray()
command = object_id + struct.pack("!I", SupvActionIds.UPDATE_AVAILABLE)
command = command + struct.pack("!B", image_select)
command = command + struct.pack("!B", image_partition)
@@ -453,7 +478,7 @@ def pack_auto_calibrate_alert_cmd(object_id: bytearray) -> bytearray:
@param object_id The object id of the PLOC supervisor handler.
"""
latchup_id = get_latchup_id()
- mg = int(input("Specify MG:"))
+ mg = int(input("Specify MG: "))
command = bytearray()
command = object_id + struct.pack("!I", SupvActionIds.AUTO_CALIBRATE_ALERT)
command = command + struct.pack("!B", latchup_id)
@@ -474,7 +499,7 @@ def get_latchup_id() -> int:
key_string = key.ljust(key_column_width)
description_string = latchup_id_dict[key].ljust(description_column_width)
print(f"{key_string} | {description_string}")
- return int(input("Specify latchup ID:"))
+ return int(input("Specify latchup ID: "))
def pack_set_alert_limit_cmd(object_id: bytearray) -> bytearray:
@@ -483,7 +508,7 @@ def pack_set_alert_limit_cmd(object_id: bytearray) -> bytearray:
@param object_id The object id of the PLOC supervisor handler.
"""
latchup_id = get_latchup_id()
- dutycycle = int(input("Specify dutycycle:"))
+ dutycycle = int(input("Specify dutycycle: "))
command = bytearray()
command = object_id + struct.pack("!I", SupvActionIds.SET_ALERT_LIMIT)
command = command + struct.pack("!B", latchup_id)
@@ -491,49 +516,20 @@ def pack_set_alert_limit_cmd(object_id: bytearray) -> bytearray:
return command
-def pack_set_alert_irq_filter_cmd(object_id: bytearray) -> bytearray:
- """
- @brief This function packs the command to configure the latchup alert irq filter.
- @param object_id The object id of the PLOC supervisor handler.
- """
- latchup_id = get_latchup_id()
- tp = int(input("Specify filter type (TP):"))
- div = int(input("Specify clock divider (DIV):"))
- command = bytearray()
- command = object_id + struct.pack("!I", SupvActionIds.SET_ALERT_IRQ_FILTER)
- command = command + struct.pack("!B", latchup_id)
- command = command + struct.pack("!B", tp)
- command = command + struct.pack("!B", div)
- return command
-
-
-def pack_set_adc_sweep_period_cmd(object_id: bytearray) -> bytearray:
- """
- @brief This function packs the command to set the limit of a latchup alert.
- @param object_id The object id of the PLOC supervisor handler.
- """
- sweep_period = int(input("Specify sweep period (min 21 us):"))
- command = bytearray()
- command = object_id + struct.pack("!I", SupvActionIds.SET_ADC_SWEEP_PERIOD)
- command = command + struct.pack("!I", sweep_period)
- return command
-
-
def pack_set_adc_enabled_channels_cmd(object_id: bytearray) -> bytearray:
"""
@brief This function packs the command to enable or disable channels of the ADC.
@param object_id The object id of the PLOC supervisor handler.
"""
- ch = int(input("Specify ch:"))
- command = bytearray()
- command = object_id + struct.pack("!I", SupvActionIds.SET_ADC_ENABLED_CHANNELS)
- command = command + struct.pack("!H", ch)
- return command
+ ch = int(input("Specify ch: 0x"), 16)
+ cmd = object_id + struct.pack("!I", SupvActionIds.SET_ADC_ENABLED_CHANNELS)
+ cmd = cmd + struct.pack("!H", ch)
+ return cmd
def pack_set_adc_window_and_stride_cmd(object_id: bytearray) -> bytearray:
- window_size = int(input("Specify window size:"))
- striding_step_size = int(input("Specify striding step size:"))
+ window_size = int(input("Specify window size: "))
+ striding_step_size = int(input("Specify striding step size: "))
command = bytearray()
command = object_id + struct.pack("!I", SupvActionIds.SET_ADC_WINDOW_AND_STRIDE)
command = command + struct.pack("!H", window_size)
@@ -542,25 +538,15 @@ def pack_set_adc_window_and_stride_cmd(object_id: bytearray) -> bytearray:
def pack_set_adc_threshold_cmd(object_id: bytearray) -> bytearray:
- threshold = int(input("Specify threshold:"))
+ threshold = int(input("Specify threshold: "))
command = bytearray()
command = object_id + struct.pack("!I", SupvActionIds.SET_ADC_THRESHOLD)
command = command + struct.pack("!I", threshold)
return command
-def pack_enable_nvms_cmd(object_id: bytearray) -> bytearray:
- n01 = int(input("NVM0/1 (0 - off, 1 - on):"))
- n3 = int(input("NVM3 (0 - off, 1 - on):"))
- command = bytearray()
- command = object_id + struct.pack("!I", SupvActionIds.ENABLE_NVMS)
- command = command + struct.pack("!B", n01)
- command = command + struct.pack("!B", n3)
- return command
-
-
def pack_select_nvm_cmd(object_id: bytearray) -> bytearray:
- mem = int(input("Specify NVM (0 - NVM0, 1 - MVM1):"))
+ mem = int(input("Specify NVM (0 - NVM0, 1 - MVM1): "))
command = bytearray()
command = object_id + struct.pack("!I", SupvActionIds.SELECT_NVM)
command = command + struct.pack("!B", mem)
@@ -568,7 +554,7 @@ def pack_select_nvm_cmd(object_id: bytearray) -> bytearray:
def pack_auto_em_tests_cmd(object_id: bytearray) -> bytearray:
- test = int(input("Specify test (1 - complete, 2 - short):"))
+ test = int(input("Specify test (1 - complete, 2 - short): "))
command = bytearray()
command = object_id + struct.pack("!I", SupvActionIds.RUN_AUTO_EM_TESTS)
command = command + struct.pack("!B", test)
@@ -585,52 +571,43 @@ def pack_mram_wipe_cmd(object_id: bytearray) -> bytearray:
return command
-def pack_print_cpu_stats_cmd(object_id: bytearray) -> bytearray:
- en = 1
+def pack_update_command(object_id: bytearray) -> bytearray:
command = bytearray()
- command = object_id + struct.pack("!I", SupvActionIds.PRINT_CPU_STATS)
- command = command + struct.pack("!B", en)
+ memory_id = int(input("Specify memory ID: "))
+ start_address = int(input("Specify start address: 0x"), 16)
+ update_file = get_update_file()
+ command += object_id
+ command += struct.pack("!I", SupvActionIds.PERFORM_UPDATE)
+ command += bytearray(update_file, "utf-8")
+ # Adding null terminator
+ command += struct.pack("!B", 0)
+ command += struct.pack("!B", memory_id)
+ command += struct.pack("!I", start_address)
return command
-def pack_set_debug_verbosity_cmd(object_id: bytearray) -> bytearray:
+def pack_set_shutdown_timeout_command(object_id: bytearray) -> bytearray:
command = bytearray()
- verbosity = get_debug_verbosity()
- command = object_id + struct.pack("!I", SupvActionIds.SET_DBG_VERBOSITY)
- command = command + struct.pack("!B", verbosity)
+ command += object_id
+ command += struct.pack("!I", SupvActionIds.SET_SHUTDOWN_TIMEOUT)
+ timeout = int(input("Specify shutdown timeout (ms): "))
+ command += struct.pack("!I", timeout)
return command
-def get_debug_verbosity() -> int:
- tries = 0
- while tries < 3:
- try:
- print("Debug verbosity options")
- verbosity_options_dict = {
- 0: "None",
- 1: "Error",
- 2: "Warn",
- 3: "Info",
- }
- print("{:<6} | {}".format("Key", "Description"))
- for entry in verbosity_options_dict.items():
- print("{:<6} | {}".format(entry[0], entry[1]))
- verbosity = int(input("Specify verbosity key: "))
- if verbosity > len(verbosity_options_dict) - 1:
- raise ValueError
- return verbosity
- except ValueError:
- LOGGER.warning("Invalid verbosity key specified")
- tries = tries + 1
- LOGGER.error("get_debug_verbosity: Exceeded max tries to input verbosity key")
- quit()
+def pack_logging_buffer_request(object_id: bytearray) -> bytearray:
+ command = bytearray()
+ command += object_id
+ command += struct.pack("!I", SupvActionIds.LOGGING_REQUEST_EVENT_BUFFERS)
+ path = get_event_buffer_path()
+ command += bytearray(path, "utf-8")
+ return command
def pack_set_gpio_cmd(object_id: bytearray) -> bytearray:
- port = int(input("Specify port: "))
- pin = int(input("Specify pin: "))
- val = int(input("Specify val: "))
- command = bytearray()
+ port = int(input("Specify port : 0x"), 16)
+ pin = int(input("Specify pin: 0x"), 16)
+ val = int(input("Specify val: 0x"), 16)
command = object_id + struct.pack("!I", SupvActionIds.SET_GPIO)
command = command + struct.pack("!B", port)
command = command + struct.pack("!B", pin)
@@ -639,10 +616,38 @@ def pack_set_gpio_cmd(object_id: bytearray) -> bytearray:
def pack_read_gpio_cmd(object_id: bytearray) -> bytearray:
- port = int(input("Specify port: "))
- pin = int(input("Specify pin: "))
- command = bytearray()
+ port = int(input("Specify port: 0x"), 16)
+ pin = int(input("Specify pin: 0x"), 16)
command = object_id + struct.pack("!I", SupvActionIds.READ_GPIO)
command = command + struct.pack("!B", port)
command = command + struct.pack("!B", pin)
return command
+
+
+def pack_logging_set_topic(objetc_id: bytearray) -> bytearray:
+ command = objetc_id + struct.pack("!I", SupvActionIds.LOGGING_SET_TOPIC)
+ tpc = int(input("Specify logging topic: "))
+ command += struct.pack("!B", tpc)
+ return command
+
+
+def get_update_file() -> str:
+ LOGGER.info("Specify update file ")
+ input_helper = InputHelper(update_file_dict)
+ key = input_helper.get_key()
+ if key == MANUAL_INPUT:
+ file = input("Ploc Supervisor: Specify absolute name of update file: ")
+ else:
+ file = update_file_dict[key][1]
+ return file
+
+
+def get_event_buffer_path() -> str:
+ LOGGER.info("Specify path where to store event buffer file ")
+ input_helper = InputHelper(event_buffer_path_dict)
+ key = input_helper.get_key()
+ if key == MANUAL_INPUT:
+ file = input("Ploc Supervisor: Specify path: ")
+ else:
+ file = event_buffer_path_dict[key][1]
+ return file
diff --git a/pus_tc/devs/plpcdu.py b/pus_tc/devs/plpcdu.py
index 7fddabc..dd6f027 100644
--- a/pus_tc/devs/plpcdu.py
+++ b/pus_tc/devs/plpcdu.py
@@ -225,7 +225,7 @@ def pack_failure_injection_cmd(tc_queue: TcQueueT, param_id: int, print_str: str
tc_queue.appendleft(cmd.pack_command_tuple())
-def pack_pl_pcdu_mode_cmd(tc_queue: TcQueueT, info: str, mode: int, submode: int):
+def pack_pl_pcdu_mode_cmd(tc_queue: TcQueueT, info: str, mode: Modes, submode: int):
tc_queue.appendleft(
(
QueueCommands.PRINT,
diff --git a/pus_tc/devs/star_tracker.py b/pus_tc/devs/star_tracker.py
index 47a06b0..f8df76d 100644
--- a/pus_tc/devs/star_tracker.py
+++ b/pus_tc/devs/star_tracker.py
@@ -146,9 +146,7 @@ class Submode:
FIRMWARE = 2
-def pack_star_tracker_commands(
- object_id: bytearray, tc_queue: TcQueueT, op_code: str
-) -> TcQueueT:
+def pack_star_tracker_commands(object_id: bytearray, tc_queue: TcQueueT, op_code: str):
tc_queue.appendleft(
(
QueueCommands.PRINT,
diff --git a/pus_tc/devs/syrlinks_hk_handler.py b/pus_tc/devs/syrlinks_hk_handler.py
index 382177b..0e4848c 100644
--- a/pus_tc/devs/syrlinks_hk_handler.py
+++ b/pus_tc/devs/syrlinks_hk_handler.py
@@ -64,17 +64,17 @@ def pack_syrlinks_command(
tc_queue.appendleft(command.pack_command_tuple())
if op_code == "3":
tc_queue.appendleft((QueueCommands.PRINT, "syrlinks: Set TX mode standby"))
- command = object_id + CommandIds.SET_TX_MODE_STANDBY
+ command = object_id + struct.pack("!I", CommandIds.SET_TX_MODE_STANDBY)
command = PusTelecommand(service=8, subservice=128, ssc=10, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
if op_code == "4":
tc_queue.appendleft((QueueCommands.PRINT, "syrlinks: Set TX mode modulation"))
- command = object_id + CommandIds.SET_TX_MODE_MODULATION
+ command = object_id + struct.pack("!I", CommandIds.SET_TX_MODE_MODULATION)
command = PusTelecommand(service=8, subservice=128, ssc=11, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
if op_code == "5":
tc_queue.appendleft((QueueCommands.PRINT, "syrlinks: Set TX mode CW"))
- command = object_id + CommandIds.SET_TX_MODE_CW
+ command = object_id + struct.pack("!I", CommandIds.SET_TX_MODE_CW)
command = PusTelecommand(service=8, subservice=128, ssc=12, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
if op_code == "6":
@@ -89,26 +89,26 @@ def pack_syrlinks_command(
tc_queue.appendleft(command.pack_command_tuple())
if op_code == "8":
tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Read TX status"))
- command = object_id + CommandIds.READ_TX_STATUS
+ command = object_id + struct.pack("!I", CommandIds.READ_TX_STATUS)
command = PusTelecommand(service=8, subservice=128, ssc=13, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
if op_code == "9":
tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Read TX waveform"))
- command = object_id + CommandIds.READ_TX_WAVEFORM
+ command = object_id + struct.pack("!I", CommandIds.READ_TX_WAVEFORM)
command = PusTelecommand(service=8, subservice=128, ssc=14, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
if op_code == "10":
tc_queue.appendleft(
(QueueCommands.PRINT, "Syrlinks: Read TX AGC value high byte")
)
- command = object_id + CommandIds.READ_TX_AGC_VALUE_HIGH_BYTE
+ command = object_id + struct.pack("!I", CommandIds.READ_TX_AGC_VALUE_HIGH_BYTE)
command = PusTelecommand(service=8, subservice=128, ssc=15, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
if op_code == "11":
tc_queue.appendleft(
(QueueCommands.PRINT, "Syrlinks: Read TX AGC value low byte")
)
- command = object_id + CommandIds.READ_TX_AGC_VALUE_LOW_BYTE
+ command = object_id + struct.pack("!I", CommandIds.READ_TX_AGC_VALUE_LOW_BYTE)
command = PusTelecommand(service=8, subservice=128, ssc=16, app_data=command)
tc_queue.appendleft(command.pack_command_tuple())
if op_code == "12":
diff --git a/pus_tc/system/time.py b/pus_tc/system/time.py
new file mode 100644
index 0000000..c66bc17
--- /dev/null
+++ b/pus_tc/system/time.py
@@ -0,0 +1,28 @@
+from datetime import datetime
+
+from spacepackets.ecss import PusTelecommand
+from tmtccmd.config import QueueCommands
+from tmtccmd.tc.definitions import TcQueueT
+
+from tmtccmd.logging import get_console_logger
+
+LOGGER = get_console_logger()
+
+
+class OpCodes:
+ SET_CURRENT_TIME = ["0", "set-curr-time"]
+
+
+class Info:
+ SET_CURRENT_TIME = "Setting current time in ASCII format"
+
+
+def pack_set_current_time_ascii_command(tc_queue: TcQueueT, ssc: int):
+ time_test_current_time = datetime.utcnow().isoformat() + "Z" + "\0"
+ current_time_ascii = time_test_current_time.encode("ascii")
+ LOGGER.info(f"Current time in ASCII format: {current_time_ascii}")
+ tc_queue.appendleft((QueueCommands.PRINT, Info.SET_CURRENT_TIME))
+ command = PusTelecommand(
+ service=9, subservice=128, ssc=ssc, app_data=current_time_ascii
+ )
+ tc_queue.appendleft(command.pack_command_tuple())
diff --git a/pus_tc/tc_packer_hook.py b/pus_tc/tc_packer_hook.py
index c53c6bb..25bcd28 100644
--- a/pus_tc/tc_packer_hook.py
+++ b/pus_tc/tc_packer_hook.py
@@ -16,7 +16,7 @@ from tmtccmd.pus.service_17_test import pack_service_17_ping_command
from tmtccmd.logging import get_current_time_string
from pus_tc.service_200_mode import pack_service200_test_into
-from pus_tc.devs.p60dock import pack_p60dock_test_into
+from pus_tc.devs.p60dock import pack_p60dock_cmds
from pus_tc.devs.pdu2 import pack_pdu2_commands
from pus_tc.devs.pdu1 import pack_pdu1_commands
from pus_tc.devs.bpx_batt import pack_bpx_commands
@@ -26,7 +26,7 @@ from pus_tc.devs.imtq import pack_imtq_test_into
from pus_tc.devs.tmp1075 import pack_tmp1075_test_into
from pus_tc.devs.ploc_mpsoc import pack_ploc_mpsoc_commands
from pus_tc.devs.ploc_supervisor import pack_ploc_supv_commands
-from pus_tc.devs.heater import pack_heater_test_into
+from pus_tc.devs.heater import pack_heater_cmds
from pus_tc.devs.reaction_wheels import pack_single_rw_test_into
from pus_tc.devs.rad_sensor import pack_rad_sensor_test_into
from pus_tc.devs.ploc_upater import pack_ploc_updater_test_into
@@ -36,6 +36,7 @@ from pus_tc.system.core import pack_core_commands
from pus_tc.devs.star_tracker import pack_star_tracker_commands
from pus_tc.devs.syrlinks_hk_handler import pack_syrlinks_command
from pus_tc.devs.gps import pack_gps_command
+from pus_tc.system.time import pack_set_current_time_ascii_command
from pus_tc.system.acs import pack_acs_command, pack_sus_cmds
from pus_tc.devs.plpcdu import pack_pl_pcdu_commands
from pus_tc.devs.str_img_helper import pack_str_img_helper_command
@@ -101,7 +102,7 @@ def pack_service_queue_user(
return pack_service200_test_into(tc_queue=service_queue)
if service == CustomServiceList.P60DOCK.value:
object_id = P60_DOCK_HANDLER
- return pack_p60dock_test_into(
+ return pack_p60dock_cmds(
object_id=object_id, tc_queue=service_queue, op_code=op_code
)
if service == CustomServiceList.PDU1.value:
@@ -133,7 +134,9 @@ def pack_service_queue_user(
)
if service == CustomServiceList.HEATER.value:
object_id = HEATER_ID
- return pack_heater_test_into(object_id=object_id, tc_queue=service_queue)
+ return pack_heater_cmds(
+ object_id=object_id, tc_queue=service_queue, op_code=op_code
+ )
if service == CustomServiceList.IMTQ.value:
object_id = IMTQ_HANDLER_ID
return pack_imtq_test_into(
@@ -230,6 +233,8 @@ def pack_service_queue_user(
return pack_acs_command(tc_queue=service_queue, op_code=op_code)
if service == CustomServiceList.TCS_ASS.value:
return pack_tcs_sys_commands(tc_queue=service_queue, op_code=op_code)
+ if service == CustomServiceList.TIME.value:
+ return pack_set_current_time_ascii_command(tc_queue=service_queue, ssc=0)
LOGGER.warning("Invalid Service !")
diff --git a/pus_tm/action_reply_handler.py b/pus_tm/action_reply_handler.py
index cee50e1..cd35815 100644
--- a/pus_tm/action_reply_handler.py
+++ b/pus_tm/action_reply_handler.py
@@ -20,7 +20,7 @@ def handle_action_reply(
"""
tm_packet = Service8FsfwTm.unpack(raw_telemetry=raw_tm)
printer.handle_long_tm_print(packet_if=tm_packet, info_if=tm_packet)
- object_id = obj_id_dict.get(tm_packet.source_object_id)
+ object_id = obj_id_dict.get(tm_packet.source_object_id_as_bytes)
custom_data = tm_packet.custom_data
action_id = tm_packet.action_id
generic_print_str = printer.generic_action_packet_tm_print(
@@ -28,13 +28,13 @@ def handle_action_reply(
)
print(generic_print_str)
printer.file_logger.info(generic_print_str)
- if object_id == IMTQ_HANDLER_ID:
+ if object_id.as_bytes == IMTQ_HANDLER_ID:
return handle_imtq_replies(action_id, printer, custom_data)
- elif object_id == PLOC_MPSOC_ID:
+ elif object_id.as_bytes == PLOC_MPSOC_ID:
return handle_ploc_replies(action_id, printer, custom_data)
- elif object_id == PLOC_SUPV_ID:
+ elif object_id.as_bytes == PLOC_SUPV_ID:
return handle_supervisor_replies(action_id, printer, custom_data)
- elif object_id == STAR_TRACKER_ID:
+ elif object_id.as_bytes == STAR_TRACKER_ID:
return handle_startracker_replies(action_id, printer, custom_data)
@@ -58,7 +58,7 @@ def handle_imtq_replies(
def handle_ploc_replies(
action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray
):
- if action_id == PlocReplyIds.tm_mem_read_report:
+ if action_id == PlocReplyIds.TM_MEM_READ_RPT:
header_list = [
"PLOC Memory Address",
"PLOC Mem Len",
@@ -73,6 +73,16 @@ def handle_ploc_replies(
print(content_list)
printer.file_logger.info(header_list)
printer.file_logger.info(content_list)
+ elif action_id == PlocReplyIds.TM_CAM_CMD_RPT:
+ header_list = ["Camera reply string", "ACK"]
+ content_list = [
+ custom_data[: len(custom_data) - 1].decode("utf-8"),
+ hex(custom_data[-1]),
+ ]
+ print(header_list)
+ print(content_list)
+ printer.file_logger.info(header_list)
+ printer.file_logger.info(content_list)
def handle_supervisor_replies(
@@ -86,6 +96,13 @@ def handle_supervisor_replies(
print(content_list)
printer.file_logger.info(header_list)
printer.file_logger.info(content_list)
+ elif action_id == SupvActionIds.READ_GPIO:
+ header_list = ["GPIO state"]
+ content_list = [struct.unpack("!H", custom_data[:2])[0]]
+ print(header_list)
+ print(content_list)
+ printer.file_logger.info(header_list)
+ printer.file_logger.info(content_list)
def handle_startracker_replies(
diff --git a/pus_tm/hk_handling.py b/pus_tm/hk_handling.py
index 7fb2103..0902f36 100644
--- a/pus_tm/hk_handling.py
+++ b/pus_tm/hk_handling.py
@@ -13,18 +13,11 @@ from tmtccmd.tm.service_3_fsfw_housekeeping import (
from tmtccmd.logging import get_console_logger
from pus_tc.devs.bpx_batt import BpxSetIds
from pus_tc.devs.syrlinks_hk_handler import SetIds
+from pus_tc.devs.p60dock import SetIds
from pus_tc.devs.imtq import ImtqSetIds
from tmtccmd.pus.obj_id import ObjectId, ObjectIdDictT
-from config.object_ids import (
- SYRLINKS_HANDLER_ID,
- IMTQ_HANDLER_ID,
- GPS_HANDLER_0_ID,
- GPS_HANDLER_1_ID,
- BPX_HANDLER_ID,
- CORE_CONTROLLER_ID,
- P60_DOCK_HANDLER,
- PL_PCDU_ID
-)
+import config.object_ids as obj_ids
+
LOGGER = get_console_logger()
@@ -65,29 +58,37 @@ def handle_regular_hk_print(
object_id = object_id.as_bytes
set_id = hk_packet.set_id
"""This function is called when a Service 3 Housekeeping packet is received."""
- if object_id == SYRLINKS_HANDLER_ID:
+ if object_id == obj_ids.SYRLINKS_HANDLER_ID:
if set_id == SetIds.RX_REGISTERS_DATASET:
return handle_syrlinks_rx_registers_dataset(printer, hk_data)
elif set_id == SetIds.TX_REGISTERS_DATASET:
return handle_syrlinks_tx_registers_dataset(printer, hk_data)
else:
LOGGER.info("Service 3 TM: Syrlinks handler reply with unknown set id")
- elif object_id == IMTQ_HANDLER_ID:
+ elif object_id == obj_ids.IMTQ_HANDLER_ID:
if (set_id >= ImtqSetIds.POSITIVE_X_TEST) and (
set_id <= ImtqSetIds.NEGATIVE_Z_TEST
):
return handle_self_test_data(printer, hk_data)
else:
LOGGER.info("Service 3 TM: Syrlinks handler reply with unknown set id")
- elif object_id == GPS_HANDLER_0_ID or object_id == GPS_HANDLER_1_ID:
+ elif object_id == obj_ids.GPS_HANDLER_0_ID or object_id == obj_ids.GPS_HANDLER_1_ID:
handle_gps_data(printer=printer, hk_data=hk_data)
- elif object_id == BPX_HANDLER_ID:
+ elif object_id == obj_ids.BPX_HANDLER_ID:
handle_bpx_hk_data(hk_data=hk_data, set_id=set_id, printer=printer)
- elif object_id == CORE_CONTROLLER_ID:
+ elif object_id == obj_ids.CORE_CONTROLLER_ID:
return handle_core_hk_data(printer=printer, hk_data=hk_data)
- elif object_id == P60_DOCK_HANDLER:
- handle_p60_hk_data(printer=printer, hk_data=hk_data)
- elif object_id == PL_PCDU_ID:
+ elif object_id == obj_ids.PDU_1_HANDLER_ID:
+ return handle_pdu_data(
+ printer=printer, pdu_idx=1, set_id=set_id, hk_data=hk_data
+ )
+ elif object_id == obj_ids.PDU_2_HANDLER_ID:
+ return handle_pdu_data(
+ printer=printer, pdu_idx=2, set_id=set_id, hk_data=hk_data
+ )
+ elif object_id == obj_ids.P60_DOCK_HANDLER:
+ handle_p60_hk_data(printer=printer, set_id=set_id, hk_data=hk_data)
+ elif object_id == obj_ids.PL_PCDU_ID:
log_to_both(printer, "Received PL PCDU HK data")
else:
LOGGER.info("Service 3 TM: Parsing for this SID has not been implemented.")
@@ -428,134 +429,277 @@ P60_INDEX_LIST = [
WDT_LIST = ["GND", "I2C", "CAN", "CSP0", "CSP1"]
+PDU1_CHANNELS_NAMES = [
+ "TCS Board",
+ "Syrlinks",
+ "Startracker",
+ "MGT",
+ "SUS Nominal",
+ "SCEX",
+ "PLOC",
+ "ACS A Side",
+ "Unused Channel 8",
+]
-def handle_p60_hk_data(printer: FsfwTmTcPrinter, hk_data: bytes):
+PDU2_CHANNELS_NAMES = [
+ "Q7S",
+ "Payload PCDU CH1",
+ "RW",
+ "TCS Heater In",
+ "SUS Redundant",
+ "Deployment Mechanism",
+ "Payload PCDU CH6",
+ "ACS B Side",
+ "Payload Camera",
+]
+
+PDU_CHANNEL_NAMES = [PDU1_CHANNELS_NAMES, PDU2_CHANNELS_NAMES]
+
+
+class WdtInfo:
+ def __init__(self):
+ self.wdt_reboots_list = []
+ self.time_pings_left_list = []
+
+ def print(self, printer: FsfwTmTcPrinter):
+ wdt_info = "WDT Type | Reboots | Time or Pings left (CSP only)"
+ log_to_both(printer, wdt_info)
+ for idx in range(len(self.wdt_reboots_list)):
+ log_to_both(
+ printer,
+ f"{WDT_LIST[idx].ljust(5)} | "
+ f"{self.wdt_reboots_list[idx]:010} | {self.time_pings_left_list[idx]:010}",
+ )
+
+ def parse(self, wdt_data: bytes, current_idx: int) -> int:
+ priv_idx = 0
+ self.wdt_reboots_list = []
+ self.time_pings_left_list = []
+ for idx in range(5):
+ self.wdt_reboots_list.append(
+ struct.unpack("!I", wdt_data[priv_idx : priv_idx + 4])[0]
+ )
+ priv_idx += 4
+ current_idx += 4
+ for idx in range(3):
+ self.time_pings_left_list.append(
+ struct.unpack("!I", wdt_data[priv_idx : priv_idx + 4])[0]
+ )
+ priv_idx += 4
+ current_idx += 4
+ for idx in range(2):
+ self.time_pings_left_list.append(wdt_data[priv_idx])
+ current_idx += 1
+ priv_idx += 1
+ return current_idx
+
+
+def handle_pdu_data(
+ printer: FsfwTmTcPrinter, pdu_idx: int, set_id: int, hk_data: bytes
+):
current_idx = 0
- current_list = []
- for idx in range(13):
- current_list.append(
- struct.unpack("!h", hk_data[current_idx : current_idx + 2])[0]
+ priv_idx = pdu_idx - 1
+ if set_id == SetIds.PDU_1_AUX or set_id == SetIds.PDU_2_AUX:
+ fmt_str = "!hhBBBIIH"
+ inc_len = struct.calcsize(fmt_str)
+ (
+ vcc,
+ vbat,
+ conv_enb_0,
+ conv_enb_1,
+ conv_enb_2,
+ boot_cause,
+ uptime,
+ reset_cause,
+ ) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
+ log_to_both(printer, f"VCC {vcc} mV | VBAT {vbat} mV")
+ log_to_both(
+ printer, f"Converter Enables [{conv_enb_0},{conv_enb_1},{conv_enb_2}]"
)
- current_idx += 2
- voltage_list = []
- for idx in range(13):
- voltage_list.append(
- struct.unpack("!H", hk_data[current_idx : current_idx + 2])[0]
- )
- current_idx += 2
- out_enb_list = []
- for idx in range(13):
- out_enb_list.append(hk_data[current_idx])
- current_idx += 1
- header_str = f"{'Name'.ljust(24)} | OutEnb | U [mV] | I [mA]"
- print(header_str)
- printer.file_logger.info(header_str)
- for idx in range(13):
- out_enb = f"{out_enb_list[idx]}".ljust(6)
- content_line = (
- f"{P60_INDEX_LIST[idx].ljust(24)} | {out_enb} | "
- f"{voltage_list[idx]:05} | {current_list[idx]:04}"
- )
- print(content_line)
- printer.file_logger.info(content_line)
- fmt_str = "!hhIIIhBBB"
- inc_len = struct.calcsize(fmt_str)
- (
- temp0,
- temp1,
- boot_cause,
- boot_count,
- uptime,
- reset_cause,
- batt_mode,
- heater_on,
- conv_5v_on,
- ) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
- current_idx += inc_len
- util_info = (
- f"Batt Mode {batt_mode} | Boot Count {boot_count} | Heater On {heater_on}"
- )
- util_info2 = (
- f"Reset Cause {reset_cause} | Boot Cause {boot_cause} | Uptime {uptime} | "
- f"Conv 5V on {conv_5v_on}"
- )
- print(util_info)
- print(util_info2)
- printer.file_logger.info(util_info)
- printer.file_logger.info(util_info2)
- latchup_list = []
- for idx in range(0, 13):
- latchup_list.append(
- struct.unpack("!H", hk_data[current_idx : current_idx + 2])[0]
- )
- current_idx += 2
- fmt_str = "!HhhHhh"
- inc_len = struct.calcsize(fmt_str)
- (
- dock_vbat,
- dock_vcc_current,
- batt_current,
- batt_voltage,
- batt_temp_0,
- batt_temp_1,
- ) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
- current_idx += inc_len
- device_types = []
- device_statuses = []
- for idx in range(8):
- device_types.append(hk_data[current_idx])
- current_idx += 1
- for idx in range(8):
- device_statuses.append(hk_data[current_idx])
- current_idx += 1
- dearm_status = hk_data[current_idx]
- current_idx += 1
- wdt_reboots_list = []
- for idx in range(5):
- wdt_reboots_list.append(
- struct.unpack("!I", hk_data[current_idx : current_idx + 4])[0]
- )
- current_idx += 4
- time_pings_left_list = []
- for idx in range(3):
- time_pings_left_list.append(
- struct.unpack("!I", hk_data[current_idx : current_idx + 4])[0]
- )
- current_idx += 4
- for idx in range(2):
- time_pings_left_list.append(hk_data[current_idx])
- current_idx += 1
- batt_charge_current = struct.unpack("!h", hk_data[current_idx : current_idx + 2])[0]
- current_idx += 2
- batt_discharge_current = struct.unpack(
- "!h", hk_data[current_idx : current_idx + 2]
- )[0]
- current_idx += 2
- ant6_depl_status = struct.unpack("!b", hk_data[current_idx : current_idx + 1])[0]
- current_idx += 1
- ar6_depl_status = struct.unpack("!b", hk_data[current_idx : current_idx + 1])[0]
- current_idx += 1
- wdt_info = "WDT Type | Reboots | Time or Pings left (CSP only)"
- log_to_both(printer, wdt_info)
- for idx in range(len(wdt_reboots_list)):
log_to_both(
printer,
- f"{WDT_LIST[idx].ljust(5)} | "
- f"{wdt_reboots_list[idx]:010} | {time_pings_left_list[idx]:010}",
+ f"Boot Cause {boot_cause} | Uptime {uptime} | Reset Cause {reset_cause}",
+ )
+ current_idx += inc_len
+ latchup_list = []
+ log_to_both(printer, "Latchups")
+ for idx in range(len(PDU1_CHANNELS_NAMES)):
+ latchup_list.append(
+ struct.unpack("!H", hk_data[current_idx : current_idx + 2])[0]
+ )
+ content_line = (
+ f"{PDU_CHANNEL_NAMES[priv_idx][idx].ljust(24)} | {latchup_list[idx]}"
+ )
+ log_to_both(printer, content_line)
+ current_idx += 2
+ device_types = []
+ for idx in range(len(PDU1_CHANNELS_NAMES)):
+ device_types.append(hk_data[current_idx])
+ current_idx += 1
+ device_statuses = []
+ for idx in range(len(PDU1_CHANNELS_NAMES)):
+ device_statuses.append(hk_data[current_idx])
+ current_idx += 1
+ wdt = WdtInfo()
+ current_idx = wdt.parse(wdt_data=hk_data[current_idx:], current_idx=current_idx)
+ wdt.print(printer=printer)
+ if set_id == SetIds.PDU_1_CORE or set_id == SetIds.PDU_2_CORE:
+ log_to_both(printer, f"Received PDU HK from PDU {pdu_idx}")
+ current_list = []
+ for idx in range(len(PDU1_CHANNELS_NAMES)):
+ current_list.append(
+ struct.unpack("!h", hk_data[current_idx : current_idx + 2])[0]
+ )
+ current_idx += 2
+ voltage_list = []
+ for idx in range(len(PDU1_CHANNELS_NAMES)):
+ voltage_list.append(
+ struct.unpack("!H", hk_data[current_idx : current_idx + 2])[0]
+ )
+ current_idx += 2
+ output_enb_list = []
+ for idx in range(len(PDU1_CHANNELS_NAMES)):
+ output_enb_list.append(hk_data[current_idx])
+ current_idx += 1
+ header_str = f"{'Name'.ljust(24)} | OutEnb | U [mV] | I [mA]"
+ print(header_str)
+ printer.file_logger.info(header_str)
+ for idx in range(len(PDU1_CHANNELS_NAMES)):
+ out_enb = f"{output_enb_list[idx]}".ljust(6)
+ content_line = (
+ f"{PDU_CHANNEL_NAMES[priv_idx][idx].ljust(24)} | {out_enb} | "
+ f"{voltage_list[idx]:05} | {current_list[idx]:04}"
+ )
+ log_to_both(printer, content_line)
+ fmt_str = "!IBh"
+ inc_len = struct.calcsize(fmt_str)
+ (boot_count, batt_mode, temperature) = struct.unpack(
+ fmt_str, hk_data[current_idx : current_idx + inc_len]
+ )
+ info = (
+ f"Boot Count {boot_count} | Battery Mode {batt_mode} | "
+ f"Temperature {temperature / 10.0}"
+ )
+ log_to_both(printer, info)
+
+
+def handle_p60_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
+ if set_id == SetIds.P60_CORE:
+ log_to_both(printer, "Received P60 Core HK. Voltages in mV, currents in mA")
+ current_idx = 0
+ current_list = []
+ for idx in range(13):
+ current_list.append(
+ struct.unpack("!h", hk_data[current_idx : current_idx + 2])[0]
+ )
+ current_idx += 2
+ voltage_list = []
+ for idx in range(13):
+ voltage_list.append(
+ struct.unpack("!H", hk_data[current_idx : current_idx + 2])[0]
+ )
+ current_idx += 2
+ out_enb_list = []
+ for idx in range(13):
+ out_enb_list.append(hk_data[current_idx])
+ current_idx += 1
+ header_str = f"{'Name'.ljust(24)} | OutEnb | U [mV] | I [mA]"
+ print(header_str)
+ printer.file_logger.info(header_str)
+ for idx in range(13):
+ out_enb = f"{out_enb_list[idx]}".ljust(6)
+ content_line = (
+ f"{P60_INDEX_LIST[idx].ljust(24)} | {out_enb} | "
+ f"{voltage_list[idx]:05} | {current_list[idx]:04}"
+ )
+ log_to_both(printer, content_line)
+ fmt_str = "!IBhHhh"
+ inc_len = struct.calcsize(fmt_str)
+ (
+ boot_count,
+ batt_mode,
+ batt_current,
+ batt_voltage,
+ temp_0,
+ temp_1,
+ ) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
+ current_idx += inc_len
+ batt_info = (
+ f"Batt: Mode {batt_mode} | Boot Count {boot_count} | "
+ f"Charge current {batt_current} | Voltage {batt_voltage}"
+ )
+ temps = f"In C: Temp 0 {temp_0 / 10.0} | Temp 1 {temp_1 / 10.0} | "
+ log_to_both(printer, temps)
+ log_to_both(printer, batt_info)
+ printer.print_validity_buffer(validity_buffer=hk_data[current_idx:], num_vars=9)
+ if set_id == SetIds.P60_AUX:
+ log_to_both(printer, "Received P60 AUX HK. Voltages in mV, currents in mA")
+ current_idx = 0
+ latchup_list = []
+ log_to_both(printer, "P60 Dock Latchups")
+ for idx in range(0, 13):
+ latchup_list.append(
+ struct.unpack("!H", hk_data[current_idx : current_idx + 2])[0]
+ )
+ content_line = f"{P60_INDEX_LIST[idx].ljust(24)} | {latchup_list[idx]}"
+ log_to_both(printer, content_line)
+ current_idx += 2
+ fmt_str = "!IIHBBHHhhB"
+ inc_len = struct.calcsize(fmt_str)
+ (
+ boot_cause,
+ uptime,
+ reset_cause,
+ heater_on,
+ conv_5v_on,
+ dock_vbat,
+ dock_vcc_c,
+ batt_temp_0,
+ batt_temp_1,
+ dearm_status,
+ ) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
+ current_idx += inc_len
+ wdt = WdtInfo()
+ current_idx = wdt.parse(wdt_data=hk_data[current_idx:], current_idx=current_idx)
+ fmt_str = "!hhbb"
+ inc_len = struct.calcsize(fmt_str)
+ (
+ batt_charge_current,
+ batt_discharge_current,
+ ant6_depl,
+ ar6_depl,
+ ) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
+ current_idx += inc_len
+ device_types = []
+ device_statuses = []
+ for idx in range(8):
+ device_types.append(hk_data[current_idx])
+ current_idx += 1
+ for idx in range(8):
+ device_statuses.append(hk_data[current_idx])
+ current_idx += 1
+ util_info = (
+ f"Reset Cause {reset_cause} | Boot Cause {boot_cause} | Uptime {uptime}"
+ )
+ util_info_2 = (
+ f"Conv 5V on {conv_5v_on} | Heater On {heater_on} | "
+ f"Dock VBAT {dock_vbat} | DOCK VCC Current {dock_vcc_c}"
+ )
+ log_to_both(printer, util_info)
+ log_to_both(printer, util_info_2)
+ wdt.print(printer)
+ misc_info = (
+ f"Dearm {dearm_status} | ANT6 Depl {ant6_depl} | AR6 Deply {ar6_depl}"
+ )
+ log_to_both(printer, misc_info)
+ batt_info = (
+ f"Batt Temp 0 {batt_temp_0 / 10.0} | Batt Temp 1 {batt_temp_1 / 10.0} | "
+ f"Charge Current {batt_charge_current} | Discharge Current {batt_discharge_current}"
+ )
+ log_to_both(printer, batt_info)
+ printer.print_validity_buffer(
+ validity_buffer=hk_data[current_idx:], num_vars=27
)
- temps = (
- f"In C: Temp 0 {temp0 / 10.0} | Temp 1 {temp1 / 10.0} | "
- f"Batt Temp 0 {batt_temp_0 / 10.0} | Batt Temp 1 {batt_temp_1 / 10.0}"
- )
- batt_info = (
- f"Batt: Current {batt_current} | Volt {batt_voltage} | "
- f"Charge Current {batt_charge_current} | Discharge Current {batt_discharge_current}"
- )
- log_to_both(printer, temps)
- log_to_both(printer, batt_info)
- misc_info = f"Dearm {dearm_status} | ANT6 Depl {ant6_depl_status} | AR6 Deply {ar6_depl_status}"
- log_to_both(printer, misc_info)
- printer.print_validity_buffer(validity_buffer=hk_data[current_idx:], num_vars=36)
def log_to_both(printer: FsfwTmTcPrinter, string: str):
diff --git a/spacepackets b/spacepackets
index 0501a26..522b021 160000
--- a/spacepackets
+++ b/spacepackets
@@ -1 +1 @@
-Subproject commit 0501a26b6f347cf48e0875658ac4eaca8cc7d819
+Subproject commit 522b021ba5690f97a4b74ae8b110762a32eb9b19
diff --git a/tmtccli.py b/tmtccli.py
index 0ae3990..c80e4ac 100755
--- a/tmtccli.py
+++ b/tmtccli.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python3
+#!/usr/bin/env python3
"""
@brief TMTC Commander entry point for command line mode.
@details
diff --git a/tmtccmd b/tmtccmd
index 48b6b83..18912c1 160000
--- a/tmtccmd
+++ b/tmtccmd
@@ -1 +1 @@
-Subproject commit 48b6b8396eb3ea5ec4527ccb96f5909a29cd95f6
+Subproject commit 18912c1e906bf9a997a5e927a36df6ef38874d17