diff --git a/.gitignore b/.gitignore
index 47b4b46..9e397a4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,4 +5,7 @@ __pycache__
log
/gps_log.txt
/config/*.json
-tmtc_conf.json
+
+/scex_conf.json
+/tmtc_conf.json
+/seqcnt.txt
diff --git a/.gitmodules b/.gitmodules
index 477ffc1..8cb1486 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,7 +1,7 @@
[submodule "tmtccmd"]
- path = tmtccmd
+ path = deps/tmtccmd
url = https://github.com/robamu-org/tmtccmd.git
[submodule "spacepackets"]
- path = spacepackets
+ path = deps/spacepackets
url = https://github.com/robamu-org/py-spacepackets.git
diff --git a/.run/ACU.run.xml b/.run/ACU.run.xml
index 2898755..92b80ba 100644
--- a/.run/ACU.run.xml
+++ b/.run/ACU.run.xml
@@ -6,14 +6,14 @@
-
+
-
+
-
-
+
+
diff --git a/.run/BPX_Request_HK.run.xml b/.run/BPX Request HK.run.xml
similarity index 82%
rename from .run/BPX_Request_HK.run.xml
rename to .run/BPX Request HK.run.xml
index 9783034..4cfa26c 100644
--- a/.run/BPX_Request_HK.run.xml
+++ b/.run/BPX Request HK.run.xml
@@ -12,10 +12,10 @@
-
-
+
+
-
+
diff --git a/.run/BPX.run.xml b/.run/BPX.run.xml
index a1fc5d3..ece69a3 100644
--- a/.run/BPX.run.xml
+++ b/.run/BPX.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/BPX_Reset_Reboot_Counter.run.xml b/.run/BPX_Reset_Reboot_Counter.run.xml
index 6d0b32d..4f1ec75 100644
--- a/.run/BPX_Reset_Reboot_Counter.run.xml
+++ b/.run/BPX_Reset_Reboot_Counter.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/GPS_0.run.xml b/.run/GPS_0.run.xml
index 02dbeef..ca7a172 100644
--- a/.run/GPS_0.run.xml
+++ b/.run/GPS_0.run.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/.run/GPS_1.run.xml b/.run/GPS_1.run.xml
index d6e6330..58cbf82 100644
--- a/.run/GPS_1.run.xml
+++ b/.run/GPS_1.run.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/.run/Heater_Test.run.xml b/.run/Heater_Test.run.xml
index 65618ba..c23e25b 100644
--- a/.run/Heater_Test.run.xml
+++ b/.run/Heater_Test.run.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/.run/IMTQ_Get_Commanded_Dipole.run.xml b/.run/IMTQ_Get_Commanded_Dipole.run.xml
index 5b55db0..789e88f 100644
--- a/.run/IMTQ_Get_Commanded_Dipole.run.xml
+++ b/.run/IMTQ_Get_Commanded_Dipole.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/IMTQ_Neg_X_Test.run.xml b/.run/IMTQ_Neg_X_Test.run.xml
index 765c429..1330fa2 100644
--- a/.run/IMTQ_Neg_X_Test.run.xml
+++ b/.run/IMTQ_Neg_X_Test.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/IMTQ_Neg_Y_Test.run.xml b/.run/IMTQ_Neg_Y_Test.run.xml
index f1ef122..3f98518 100644
--- a/.run/IMTQ_Neg_Y_Test.run.xml
+++ b/.run/IMTQ_Neg_Y_Test.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/IMTQ_Neg_Z_Test.run.xml b/.run/IMTQ_Neg_Z_Test.run.xml
index feb7304..8af92f6 100644
--- a/.run/IMTQ_Neg_Z_Test.run.xml
+++ b/.run/IMTQ_Neg_Z_Test.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/IMTQ_Pos_X_Test.run.xml b/.run/IMTQ_Pos_X_Test.run.xml
index c17ae6c..63ab5f4 100644
--- a/.run/IMTQ_Pos_X_Test.run.xml
+++ b/.run/IMTQ_Pos_X_Test.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/IMTQ_Pos_Y_Test.run.xml b/.run/IMTQ_Pos_Y_Test.run.xml
index f375dc1..3226197 100644
--- a/.run/IMTQ_Pos_Y_Test.run.xml
+++ b/.run/IMTQ_Pos_Y_Test.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/IMTQ_Pos_Z_Test.run.xml b/.run/IMTQ_Pos_Z_Test.run.xml
index 594c1bb..0961704 100644
--- a/.run/IMTQ_Pos_Z_Test.run.xml
+++ b/.run/IMTQ_Pos_Z_Test.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/IMTQ_Test_UDP.run.xml b/.run/IMTQ_Test_UDP.run.xml
index 13810ef..06b2555 100644
--- a/.run/IMTQ_Test_UDP.run.xml
+++ b/.run/IMTQ_Test_UDP.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/MGM Disable HK.run.xml b/.run/MGM Disable HK.run.xml
new file mode 100644
index 0000000..04e92c3
--- /dev/null
+++ b/.run/MGM Disable HK.run.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/MGM Enable HK.run.xml b/.run/MGM Enable HK.run.xml
new file mode 100644
index 0000000..b4cf587
--- /dev/null
+++ b/.run/MGM Enable HK.run.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/MGM HK Once.run.xml b/.run/MGM HK Once.run.xml
new file mode 100644
index 0000000..1d8aff0
--- /dev/null
+++ b/.run/MGM HK Once.run.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/P60_Dock_Commanding.run.xml b/.run/P60_Dock_Commanding.run.xml
index 4631d45..ffe2539 100644
--- a/.run/P60_Dock_Commanding.run.xml
+++ b/.run/P60_Dock_Commanding.run.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/.run/PDU1_Commanding.run.xml b/.run/PDU1_Commanding.run.xml
index 28f9c0d..0611495 100644
--- a/.run/PDU1_Commanding.run.xml
+++ b/.run/PDU1_Commanding.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/PDU2_Commanding.run.xml b/.run/PDU2_Commanding.run.xml
index 7b73bd9..4615b19 100644
--- a/.run/PDU2_Commanding.run.xml
+++ b/.run/PDU2_Commanding.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/PLOC SUPV Normal.run.xml b/.run/PLOC SUPV Normal.run.xml
new file mode 100644
index 0000000..c6d87b6
--- /dev/null
+++ b/.run/PLOC SUPV Normal.run.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/PLOC SUPV On.run.xml b/.run/PLOC SUPV On.run.xml
new file mode 100644
index 0000000..e5da12a
--- /dev/null
+++ b/.run/PLOC SUPV On.run.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/PLOC SUPV.run.xml b/.run/PLOC SUPV.run.xml
new file mode 100644
index 0000000..1153bf9
--- /dev/null
+++ b/.run/PLOC SUPV.run.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/PLOC_MPSoC.run.xml b/.run/PLOC_MPSoC.run.xml
index e58826d..1afae3c 100644
--- a/.run/PLOC_MPSoC.run.xml
+++ b/.run/PLOC_MPSoC.run.xml
@@ -1,5 +1,5 @@
-
+
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/PLOC_SUPV.run.xml b/.run/PLOC_SUPV.run.xml
index e9877dc..472a471 100644
--- a/.run/PLOC_SUPV.run.xml
+++ b/.run/PLOC_SUPV.run.xml
@@ -1,5 +1,5 @@
-
+
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/tmtccmd_Listener_Mode.run.xml b/.run/Ping Command.run.xml
similarity index 77%
rename from .run/tmtccmd_Listener_Mode.run.xml
rename to .run/Ping Command.run.xml
index a7b05bf..d51f8cc 100644
--- a/.run/tmtccmd_Listener_Mode.run.xml
+++ b/.run/Ping Command.run.xml
@@ -1,5 +1,5 @@
-
+
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/RW1_Test.run.xml b/.run/RW1_Test.run.xml
index fe1186c..317430b 100644
--- a/.run/RW1_Test.run.xml
+++ b/.run/RW1_Test.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/RW2_Test_.run.xml b/.run/RW2_Test_.run.xml
index b03dd54..aa5efc1 100644
--- a/.run/RW2_Test_.run.xml
+++ b/.run/RW2_Test_.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/RW3_Test_.run.xml b/.run/RW3_Test_.run.xml
index a5f9530..4eaa954 100644
--- a/.run/RW3_Test_.run.xml
+++ b/.run/RW3_Test_.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/RW4_Test_.run.xml b/.run/RW4_Test_.run.xml
index 83f1612..7e1bd8d 100644
--- a/.run/RW4_Test_.run.xml
+++ b/.run/RW4_Test_.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/Reboot_0_0.run.xml b/.run/Reboot_0_0.run.xml
index 2a7ce9c..0d694a6 100644
--- a/.run/Reboot_0_0.run.xml
+++ b/.run/Reboot_0_0.run.xml
@@ -13,7 +13,7 @@
-
+
diff --git a/.run/Reboot_0_1.run.xml b/.run/Reboot_0_1.run.xml
index 6eada4d..4caf0e3 100644
--- a/.run/Reboot_0_1.run.xml
+++ b/.run/Reboot_0_1.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/Reboot_1_0.run.xml b/.run/Reboot_1_0.run.xml
index a70dc74..a187704 100644
--- a/.run/Reboot_1_0.run.xml
+++ b/.run/Reboot_1_0.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/Reboot_1_1.run.xml b/.run/Reboot_1_1.run.xml
index 394f6d0..1d1cbfa 100644
--- a/.run/Reboot_1_1.run.xml
+++ b/.run/Reboot_1_1.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/Reboot_Prompt.run.xml b/.run/Reboot_Prompt.run.xml
index af3adf1..cc63d12 100644
--- a/.run/Reboot_Prompt.run.xml
+++ b/.run/Reboot_Prompt.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/Reboot_Self.run.xml b/.run/Reboot_Self.run.xml
index 4243632..2389759 100644
--- a/.run/Reboot_Self.run.xml
+++ b/.run/Reboot_Self.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/Service 17.run.xml b/.run/SCEX .run.xml
similarity index 77%
rename from .run/Service 17.run.xml
rename to .run/SCEX .run.xml
index db07be1..af5d790 100644
--- a/.run/Service 17.run.xml
+++ b/.run/SCEX .run.xml
@@ -1,5 +1,5 @@
-
+
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/Ping_Command.run.xml b/.run/SCEX Ping.run.xml
similarity index 82%
rename from .run/Ping_Command.run.xml
rename to .run/SCEX Ping.run.xml
index c62c2fb..0231b50 100644
--- a/.run/Ping_Command.run.xml
+++ b/.run/SCEX Ping.run.xml
@@ -1,5 +1,5 @@
-
+
@@ -13,7 +13,7 @@
-
+
diff --git a/.run/SCEX oneCell.run.xml b/.run/SCEX oneCell.run.xml
new file mode 100644
index 0000000..b3ea03f
--- /dev/null
+++ b/.run/SCEX oneCell.run.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/S_A_Deployment_Test.run.xml b/.run/S_A_Deployment_Test.run.xml
index 8b8caa3..72ef348 100644
--- a/.run/S_A_Deployment_Test.run.xml
+++ b/.run/S_A_Deployment_Test.run.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/.run/Star_Tracker.run.xml b/.run/Star_Tracker.run.xml
index 982c4d8..c29dffa 100644
--- a/.run/Star_Tracker.run.xml
+++ b/.run/Star_Tracker.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/Syrlinks.run.xml b/.run/Syrlinks.run.xml
index d5a3454..faf34bd 100644
--- a/.run/Syrlinks.run.xml
+++ b/.run/Syrlinks.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/Syrlinks_Test_UDP.run.xml b/.run/Syrlinks_Test_UDP.run.xml
index 30088f2..f78b058 100644
--- a/.run/Syrlinks_Test_UDP.run.xml
+++ b/.run/Syrlinks_Test_UDP.run.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/.run/TMP1075_1_Dock_Test_UDP.run.xml b/.run/TMP1075_1_Dock_Test_UDP.run.xml
index 7ba359f..af7616e 100644
--- a/.run/TMP1075_1_Dock_Test_UDP.run.xml
+++ b/.run/TMP1075_1_Dock_Test_UDP.run.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/.run/TMP1075_2_Dock_Test_UDP.run.xml b/.run/TMP1075_2_Dock_Test_UDP.run.xml
index 1239074..2ce5ab9 100644
--- a/.run/TMP1075_2_Dock_Test_UDP.run.xml
+++ b/.run/TMP1075_2_Dock_Test_UDP.run.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/.run/tmtcc_Service_17.run.xml b/.run/TV Test.run.xml
similarity index 76%
rename from .run/tmtcc_Service_17.run.xml
rename to .run/TV Test.run.xml
index 65ae35b..ac75038 100644
--- a/.run/tmtcc_Service_17.run.xml
+++ b/.run/TV Test.run.xml
@@ -1,5 +1,5 @@
-
+
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/Test Service w Listener.run.xml b/.run/Test Service w Listener.run.xml
new file mode 100644
index 0000000..e6c8b0d
--- /dev/null
+++ b/.run/Test Service w Listener.run.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/Test Service.run.xml b/.run/Test Service.run.xml
new file mode 100644
index 0000000..1c76d11
--- /dev/null
+++ b/.run/Test Service.run.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/Unittests_in_spacepackets.run.xml b/.run/Unittests_in_spacepackets.run.xml
deleted file mode 100644
index bf17647..0000000
--- a/.run/Unittests_in_spacepackets.run.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.run/Unittests_in_tmtccmd.run.xml b/.run/Unittests_in_tmtccmd.run.xml
deleted file mode 100644
index 5cdbb08..0000000
--- a/.run/Unittests_in_tmtccmd.run.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.run/_IMTQ_Command_Dipole.run.xml b/.run/_IMTQ_Command_Dipole.run.xml
index 9f28ecc..665ec2a 100644
--- a/.run/_IMTQ_Command_Dipole.run.xml
+++ b/.run/_IMTQ_Command_Dipole.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/ccsds_handler.run.xml b/.run/ccsds_handler.run.xml
index 5e506bb..b77efdb 100644
--- a/.run/ccsds_handler.run.xml
+++ b/.run/ccsds_handler.run.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/.run/pdec_handler.run.xml b/.run/pdec_handler.run.xml
index cedb49e..a9a2d20 100644
--- a/.run/pdec_handler.run.xml
+++ b/.run/pdec_handler.run.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/.run/tmtc listener.run.xml b/.run/tmtc listener.run.xml
new file mode 100644
index 0000000..fa4a84a
--- /dev/null
+++ b/.run/tmtc listener.run.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.run/tmtcc_Service_2.run.xml b/.run/tmtcc_Service_2.run.xml
index ac7fd3f..1f3c415 100644
--- a/.run/tmtcc_Service_2.run.xml
+++ b/.run/tmtcc_Service_2.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/tmtcc_Service_200.run.xml b/.run/tmtcc_Service_200.run.xml
index b1eba62..199f141 100644
--- a/.run/tmtcc_Service_200.run.xml
+++ b/.run/tmtcc_Service_200.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/tmtcc_Service_3.run.xml b/.run/tmtcc_Service_3.run.xml
index 09ca934..8db761d 100644
--- a/.run/tmtcc_Service_3.run.xml
+++ b/.run/tmtcc_Service_3.run.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/.run/tmtcc_Service_8.run.xml b/.run/tmtcc_Service_8.run.xml
index 0052698..adba1d1 100644
--- a/.run/tmtcc_Service_8.run.xml
+++ b/.run/tmtcc_Service_8.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/tmtccli.run.xml b/.run/tmtccli.run.xml
index 1b4b29b..1a86d29 100644
--- a/.run/tmtccli.run.xml
+++ b/.run/tmtccli.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/.run/tmtcclient_Help.run.xml b/.run/tmtcclient_Help.run.xml
index 8ff85eb..2b345c4 100644
--- a/.run/tmtcclient_Help.run.xml
+++ b/.run/tmtcclient_Help.run.xml
@@ -12,7 +12,7 @@
-
+
diff --git a/.run/tmtcgui.run.xml b/.run/tmtcgui.run.xml
index 845b1c6..7de7fbd 100644
--- a/.run/tmtcgui.run.xml
+++ b/.run/tmtcgui.run.xml
@@ -12,8 +12,8 @@
-
-
+
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5c49783..a6bc0e4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,9 +10,25 @@ list yields a list of all related PRs for each release.
# [unreleased]
-# [v1.12.0]
+# [v1.13.0]
+- Major Update for `tmtccmd` and `spacepackets` dependencies which improves user API significantly.
+ PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/102
+- Add commands to request MGM HK or enable/disable periodic HK for it
+- Update power commands: Extend param get and set to all
+ gomspace devices.
+ PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/108
+- Update PLOC supervisor commands
+ PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/107
+
+# [v1.12.0] 05.07.2022
+
+- Update GPS HK Parsing
+ PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/86
+- PL PCDU HK Parsing
+ PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/87
- Add full regular reboot command
+ PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/85
- Add Rad Sensor HK parsing
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/81
- Add procedures, parser functions and general application functionalities
diff --git a/config/custom_hooks.py b/config/custom_hooks.py
deleted file mode 100644
index 450de42..0000000
--- a/config/custom_hooks.py
+++ /dev/null
@@ -1,14 +0,0 @@
-"""
-@brief This file exposes hook functions to the user.
-@details Template configuration file. Copy this folder to the TMTC commander root and adapt
- it to your needs.
-"""
-from spacepackets.ecss.tc import PusTelecommand
-
-
-def command_preparation_hook() -> PusTelecommand:
- """
- Can be used to pack user-defined commands by generating and returning a PusTelecommand
- class instance
- """
- return PusTelecommand(service=17, subservice=1, ssc=20)
diff --git a/config/custom_mode_op.py b/config/custom_mode_op.py
index 64b9033..7981371 100644
--- a/config/custom_mode_op.py
+++ b/config/custom_mode_op.py
@@ -5,7 +5,7 @@
"""
import enum
-from tmtccmd.core.backend import TmTcHandler
+from tmtccmd import CcsdsTmtcBackend
from tmtccmd.logging import get_console_logger
LOGGER = get_console_logger()
@@ -15,5 +15,5 @@ class CustomModeList(enum.IntEnum):
pass
-def custom_mode_operation(tmtc_backend: TmTcHandler, mode: int):
+def custom_mode_operation(_tmtc_backend: CcsdsTmtcBackend, _mode: int):
pass
diff --git a/config/definitions.py b/config/definitions.py
index 5aa4174..8e2c76e 100644
--- a/config/definitions.py
+++ b/config/definitions.py
@@ -11,11 +11,14 @@ PUS_APID = 0x65
SPACE_PACKET_IDS = (0x08 << 8 | PUS_APID,)
-class CustomServiceList(enum.Enum):
+class CustomServiceList(str, enum.Enum):
+ value: str
+
TEST_DEVICE = "test"
P60DOCK = "p60dock"
PDU1 = "pdu1"
PDU2 = "pdu2"
+ POWER = "power"
ACU = "acu"
ACS = "acs"
BPX_BATTERY = "bpx"
@@ -34,8 +37,7 @@ class CustomServiceList(enum.Enum):
REACTION_WHEEL_4 = "rw-4"
RW_ASSEMBLY = "rw-ass"
RAD_SENSOR = "rad_sensor"
- GPS_0 = "gps0"
- GPS_1 = "gps1"
+ GPS_CTRL = "gnss-ctrl"
PLOC_MEMORY_DUMPER = "ploc_memory_dumper"
CORE = "core"
STAR_TRACKER = "star_tracker"
@@ -43,11 +45,14 @@ class CustomServiceList(enum.Enum):
PDEC_HANDLER = "pdec_handler"
STR_IMG_HELPER = "str_img_helper"
SYRLINKS = "syrlinks"
+ ACS_CTRL = "acs-ctrl"
ACS_ASS = "acs-ass"
SUS_ASS = "sus-ass"
+ TCS = "tcs"
TCS_ASS = "tcs-ass"
TIME = "time"
PROCEDURE = "proc"
RTD = "rtd"
TVTTESTPROCEDURE = "tvtestproc"
CONTROLLERS = "controllers"
+ SCEX = "scex"
diff --git a/config/events.csv b/config/events.csv
index f3793f8..d425873 100644
--- a/config/events.csv
+++ b/config/events.csv
@@ -1,3 +1,4 @@
+Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
2200;0x0898;STORE_SEND_WRITE_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2201;0x0899;STORE_WRITE_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
2202;0x089a;STORE_SEND_READ_FAILED;LOW;;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
@@ -77,7 +78,7 @@
8901;0x22c5;CLOCK_SET_FAILURE;LOW;;fsfw/src/fsfw/pus/Service9TimeManagement.h
9100;0x238c;TC_DELETION_FAILED;MEDIUM;Deletion of a TC from the map failed. P1: First 32 bit of request ID, P2. Last 32 bit of Request ID;fsfw/src/fsfw/pus/Service11TelecommandScheduling.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
+10600;0x2968;CHANGE_OF_SETUP_PARAMETER;LOW;;fsfw/src/fsfw_hal/devicehandlers/MgmLIS3MDLHandler.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 switch 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
@@ -127,6 +128,8 @@
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
+12405;0x3075;LOST_CARRIER_LOCK_PDEC;INFO;Lost carrier lock;linux/obc/PdecHandler.h
+12406;0x3076;LOST_BIT_LOCK_PDEC;INFO;Lost bit lock;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
@@ -156,6 +159,8 @@
12609;0x3141;MPSOC_ACK_INVALID_APID;LOW;Expected acknowledgment 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;MPSOC_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
+12612;0x3144;MPSOC_TM_SIZE_ERROR;LOW;;linux/devices/ploc/PlocMPSoCHelper.h
+12613;0x3145;MPSOC_TM_CRC_MISSMATCH;LOW;;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
@@ -189,18 +194,23 @@
13605;0x3525;SUPV_EVENT_BUFFER_REQUEST_SUCCESSFUL;LOW;Requesting event buffer was successful;linux/devices/ploc/PlocSupvHelper.h
13606;0x3526;SUPV_EVENT_BUFFER_REQUEST_FAILED;LOW;Requesting event buffer failed;linux/devices/ploc/PlocSupvHelper.h
13607;0x3527;SUPV_EVENT_BUFFER_REQUEST_TERMINATED;LOW;Terminated event buffer request by command P1: Number of packets read before process was terminated;linux/devices/ploc/PlocSupvHelper.h
-13608;0x3528;SUPV_SENDING_COMMAND_FAILED;LOW;;linux/devices/ploc/PlocSupvHelper.h
-13609;0x3529;SUPV_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 supervisor helper;linux/devices/ploc/PlocSupvHelper.h
-13610;0x352a;SUPV_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 supervisor helper;linux/devices/ploc/PlocSupvHelper.h
-13611;0x352b;SUPV_MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocSupvHelper.h
-13612;0x352c;SUPV_MISSING_EXE;LOW;Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvHelper.h
-13613;0x352d;SUPV_ACK_FAILURE_REPORT;LOW;Supervisor received acknowledgment failure report P1: Internal state of supervisor helper;linux/devices/ploc/PlocSupvHelper.h
-13614;0x352e;SUPV_EXE_FAILURE_REPORT;LOW;Execution report failure P1:;linux/devices/ploc/PlocSupvHelper.h
-13615;0x352f;SUPV_ACK_INVALID_APID;LOW;Supervisor expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvHelper.h
-13616;0x3530;SUPV_EXE_INVALID_APID;LOW;Supervisor helper expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvHelper.h
-13617;0x3531;ACK_RECEPTION_FAILURE;LOW;Failed to receive acknowledgment report P1: Return value P2: Apid of command for which the reception of the acknowledgment report failed;linux/devices/ploc/PlocSupvHelper.h
-13618;0x3532;EXE_RECEPTION_FAILURE;LOW;Failed to receive execution report P1: Return value P2: Apid of command for which the reception of the execution report failed;linux/devices/ploc/PlocSupvHelper.h
-13619;0x3533;WRITE_MEMORY_FAILED;LOW;Update procedure failed when sending packet with number P1 P1: Packet number for which the memory write command fails;linux/devices/ploc/PlocSupvHelper.h
+13608;0x3528;SUPV_MEM_CHECK_OK;INFO;;linux/devices/ploc/PlocSupvHelper.h
+13609;0x3529;SUPV_MEM_CHECK_FAIL;INFO;;linux/devices/ploc/PlocSupvHelper.h
+13616;0x3530;SUPV_SENDING_COMMAND_FAILED;LOW;;linux/devices/ploc/PlocSupvHelper.h
+13617;0x3531;SUPV_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 supervisor helper;linux/devices/ploc/PlocSupvHelper.h
+13618;0x3532;SUPV_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 supervisor helper;linux/devices/ploc/PlocSupvHelper.h
+13619;0x3533;SUPV_MISSING_ACK;LOW;Did not receive acknowledgement report P1: Number of bytes missing P2: Internal state of MPSoC helper;linux/devices/ploc/PlocSupvHelper.h
+13620;0x3534;SUPV_MISSING_EXE;LOW;Supervisor did not receive execution report P1: Number of bytes missing P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvHelper.h
+13621;0x3535;SUPV_ACK_FAILURE_REPORT;LOW;Supervisor received acknowledgment failure report P1: Internal state of supervisor helper;linux/devices/ploc/PlocSupvHelper.h
+13622;0x3536;SUPV_EXE_FAILURE_REPORT;LOW;Execution report failure P1:;linux/devices/ploc/PlocSupvHelper.h
+13623;0x3537;SUPV_ACK_INVALID_APID;LOW;Supervisor expected acknowledgment report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvHelper.h
+13624;0x3538;SUPV_EXE_INVALID_APID;LOW;Supervisor helper expected execution report but received space packet with other apid P1: Apid of received space packet P2: Internal state of supervisor helper;linux/devices/ploc/PlocSupvHelper.h
+13625;0x3539;ACK_RECEPTION_FAILURE;LOW;Failed to receive acknowledgment report P1: Return value P2: Apid of command for which the reception of the acknowledgment report failed;linux/devices/ploc/PlocSupvHelper.h
+13626;0x353a;EXE_RECEPTION_FAILURE;LOW;Failed to receive execution report P1: Return value P2: Apid of command for which the reception of the execution report failed;linux/devices/ploc/PlocSupvHelper.h
+13627;0x353b;WRITE_MEMORY_FAILED;LOW;Update procedure failed when sending packet. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written;linux/devices/ploc/PlocSupvHelper.h
+13628;0x353c;SUPV_REPLY_SIZE_MISSMATCH;LOW;;linux/devices/ploc/PlocSupvHelper.h
+13629;0x353d;SUPV_REPLY_CRC_MISSMATCH;LOW;;linux/devices/ploc/PlocSupvHelper.h
+13630;0x353e;SUPV_UPDATE_PROGRESS;INFO;Will be triggered every 5 percent of the update progress. P1: First byte percent, third and fourth byte Sequence Count, P2: Bytes written;linux/devices/ploc/PlocSupvHelper.h
13700;0x3584;ALLOC_FAILURE;MEDIUM;;bsp_q7s/core/CoreController.h
13701;0x3585;REBOOT_SW;MEDIUM; Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy;bsp_q7s/core/CoreController.h
13702;0x3586;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.py b/config/hook.py
new file mode 100644
index 0000000..ca16430
--- /dev/null
+++ b/config/hook.py
@@ -0,0 +1,44 @@
+from typing import Optional
+
+from config.definitions import SPACE_PACKET_IDS
+from tmtccmd import TmTcCfgHookBase, CcsdsTmtcBackend
+from tmtccmd.com_if import ComInterface
+from tmtccmd.config import TmtcDefinitionWrapper
+
+from config.retvals import get_retval_dict
+from pus_tc.cmd_definitions import get_eive_service_op_code_dict
+from tmtccmd.util import ObjectIdDictT, RetvalDictT
+
+
+class EiveHookObject(TmTcCfgHookBase):
+ def __init__(self, json_cfg_path: str):
+ super().__init__(json_cfg_path=json_cfg_path)
+
+ def get_tmtc_definitions(self) -> TmtcDefinitionWrapper:
+ return get_eive_service_op_code_dict()
+
+ def assign_communication_interface(self, com_if_key: str) -> Optional[ComInterface]:
+ from tmtccmd.config.com_if import (
+ create_com_interface_default,
+ create_com_interface_cfg_default,
+ )
+
+ cfg = create_com_interface_cfg_default(
+ com_if_key=com_if_key,
+ json_cfg_path=self.json_cfg_path,
+ space_packet_ids=SPACE_PACKET_IDS,
+ )
+ return create_com_interface_default(cfg)
+
+ def perform_mode_operation(self, tmtc_backend: CcsdsTmtcBackend, mode: int):
+ from config.custom_mode_op import custom_mode_operation
+
+ custom_mode_operation(tmtc_backend, mode)
+
+ def get_object_ids(self) -> ObjectIdDictT:
+ from config.object_ids import get_object_ids
+
+ return get_object_ids()
+
+ def get_retval_dict(self) -> RetvalDictT:
+ return get_retval_dict()
diff --git a/config/hook_implementations.py b/config/hook_implementations.py
deleted file mode 100644
index bf6a715..0000000
--- a/config/hook_implementations.py
+++ /dev/null
@@ -1,54 +0,0 @@
-from typing import Union
-
-from config.definitions import SPACE_PACKET_IDS
-from tmtccmd.config.definitions import (
- ServiceOpCodeDictT,
-)
-from tmtccmd.tc.definitions import TcQueueT
-from tmtccmd.utility.retval import RetvalDictT
-from tmtccmd.utility.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 config.retvals import get_retval_dict
-from pus_tc.cmd_definitions import get_eive_service_op_code_dict
-
-
-class EiveHookObject(TmTcHookBase):
- def __init__(self, json_cfg_path: str):
- super().__init__(json_cfg_path=json_cfg_path)
-
- def get_service_op_code_dictionary(self) -> ServiceOpCodeDictT:
- return get_eive_service_op_code_dict()
-
- def assign_communication_interface(
- self, com_if_key: str
- ) -> Union[CommunicationInterface, None]:
- from tmtccmd.config.com_if import create_communication_interface_default
-
- return create_communication_interface_default(
- com_if_key=com_if_key,
- json_cfg_path=self.json_cfg_path,
- space_packet_ids=SPACE_PACKET_IDS,
- )
-
- def perform_mode_operation(self, tmtc_backend: TmTcHandler, mode: int):
- from config.custom_mode_op import custom_mode_operation
-
- custom_mode_operation(mode=mode, tmtc_backend=tmtc_backend)
-
- def pack_service_queue(self, service: int, op_code: str, service_queue: TcQueueT):
- from pus_tc.tc_packer_hook import pack_service_queue_user
-
- pack_service_queue_user(
- service=service, op_code=op_code, service_queue=service_queue
- )
-
- def get_object_ids(self) -> ObjectIdDictT:
- from config.object_ids import get_object_ids
-
- return get_object_ids()
-
- def get_retval_dict(self) -> RetvalDictT:
- return get_retval_dict()
diff --git a/config/object_ids.py b/config/object_ids.py
index fcd9e9c..180dbd8 100644
--- a/config/object_ids.py
+++ b/config/object_ids.py
@@ -4,7 +4,7 @@
it to your needs.
"""
import os.path
-from tmtccmd.utility.obj_id import ObjectIdDictT
+from tmtccmd.util.obj_id import ObjectIdDictT
from tmtccmd.fsfw import parse_fsfw_objects_csv
from tmtccmd.logging import get_console_logger
@@ -15,7 +15,6 @@ __OBJECT_ID_DICT = None
# Core Object IDs
-CORE_CONTROLLER_ID = bytes([0x43, 0x00, 0x00, 0x03])
SOLAR_ARRAY_DEPLOYMENT_ID = bytes([0x44, 0x41, 0x00, 0xA2])
# Power Object IDs
@@ -25,6 +24,7 @@ PDU_1_HANDLER_ID = bytes([0x44, 0x25, 0x00, 0x01])
PDU_2_HANDLER_ID = bytes([0x44, 0x25, 0x00, 0x02])
ACU_HANDLER_ID = bytes([0x44, 0x25, 0x00, 0x03])
BPX_HANDLER_ID = bytes([0x44, 0x26, 0x00, 0x00])
+SCEX_HANDLER_ID = bytes([0x44, 0x33, 0x00, 0x32])
# Thermal Object IDs
THERMAL_CONTROLLER_ID = bytes([0x43, 0x40, 0x00, 0x01])
@@ -45,7 +45,6 @@ GYRO_1_L3G_HANDLER_ID = bytes([0x44, 0x12, 0x01, 0x11])
GYRO_2_ADIS_HANDLER_ID = bytes([0x44, 0x12, 0x02, 0x12])
GYRO_3_L3G_HANDLER_ID = bytes([0x44, 0x12, 0x03, 0x13])
GPS_CONTROLLER = bytes([0x44, 0x13, 0x00, 0x45])
-GPS_HANDLER_1_ID = bytes([0x44, 0x13, 0x01, 0x46])
RW1_ID = bytes([0x44, 0x12, 0x00, 0x47])
RW2_ID = bytes([0x44, 0x12, 0x01, 0x48])
RW3_ID = bytes([0x44, 0x12, 0x02, 0x49])
@@ -128,6 +127,11 @@ SUS_BOARD_ASS_ID = bytes([0x73, 0x00, 0x00, 0x02])
TCS_BOARD_ASS_ID = bytes([0x73, 0x00, 0x00, 0x03])
RW_ASSEMBLY = bytes([0x73, 0x00, 0x00, 0x04])
+# Controllers
+TCS_CONTROLLER = bytes([0x43, 0x40, 0x00, 0x01])
+ACS_CONTROLLER = bytes([0x43, 0x00, 0x00, 0x02])
+CORE_CONTROLLER_ID = bytes([0x43, 0x00, 0x00, 0x03])
+
def get_object_ids() -> ObjectIdDictT:
global __OBJECT_ID_DICT
diff --git a/config/objects.csv b/config/objects.csv
index f0d29ee..53ddb3a 100644
--- a/config/objects.csv
+++ b/config/objects.csv
@@ -1,6 +1,6 @@
0x00005060;P60DOCK_TEST_TASK
+0x43000002;ACS_CONTROLLER
0x43000003;CORE_CONTROLLER
-0x43100002;ACS_CONTROLLER
0x43400001;THERMAL_CONTROLLER
0x44120006;MGM_0_LIS3_HANDLER
0x44120010;GYRO_0_ADIS_HANDLER
@@ -106,10 +106,12 @@
0x534f0200;TM_STORE
0x534f0300;IPC_STORE
0x53500010;TIME_STAMPER
+0x53500020;VERIFICATION_REPORTER
0x53ffffff;FSFW_OBJECTS_END
0x54000010;SPI_TEST
0x54000020;UART_TEST
0x54000030;I2C_TEST
+0x54000040;DUMMY_COM_IF
0x5400AFFE;DUMMY_HANDLER
0x5400CAFE;DUMMY_INTERFACE
0x54123456;LIBGPIOD_TEST
diff --git a/config/returnvalues.csv b/config/returnvalues.csv
index c59e257..ab19629 100644
--- a/config/returnvalues.csv
+++ b/config/returnvalues.csv
@@ -1,562 +1,471 @@
-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
-0x67a0; NVMB_KeyNotExists;Specified key does not exist in json file;0xA0;mission/memory/NVMParameterBase.h;NVM_PARAM_BASE
-0x5ca0; SUSS_ErrorUnlockMutex;;0xA0;mission/devices/SusHandler.h;SUS_HANDLER
-0x5ca1; SUSS_ErrorLockMutex;;0xA1;mission/devices/SusHandler.h;SUS_HANDLER
-0x6aa0; SADPL_CommandNotSupported;;0xA0;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
-0x6aa1; SADPL_DeploymentAlreadyExecuting;;0xA1;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
-0x6aa2; SADPL_MainSwitchTimeoutFailure;;0xA2;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
-0x6aa3; SADPL_SwitchingDeplSa1Failed;;0xA3;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
-0x6aa4; SADPL_SwitchingDeplSa2Failed;;0xA4;mission/devices/SolarArrayDeploymentHandler.h;SA_DEPL_HANDLER
-0x56b0; RWHA_SpiWriteFailure;;0xB0;mission/devices/RwHandler.h;RW_HANDLER
-0x56b1; RWHA_SpiReadFailure;Used by the spi send function to tell a failing read call;0xB1;mission/devices/RwHandler.h;RW_HANDLER
-0x56b2; 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
-0x56b3; RWHA_InvalidSubstitute;Can be used by the HDLC decoding mechanism to inform about an invalid substitution combination;0xB3;mission/devices/RwHandler.h;RW_HANDLER
-0x56b4; RWHA_MissingEndSign;HDLC decoding mechanism never receives the end sign 0x7E;0xB4;mission/devices/RwHandler.h;RW_HANDLER
-0x56b5; RWHA_NoReply;Reaction wheel only responds with empty frames.;0xB5;mission/devices/RwHandler.h;RW_HANDLER
-0x56b6; RWHA_NoStartMarker;Expected a start marker as first byte;0xB6;mission/devices/RwHandler.h;RW_HANDLER
-0x56a0; RWHA_InvalidSpeed;Action Message with invalid speed was received. Valid speeds must be in the range of [-65000; 1000] or [1000; 65000];0xA0;mission/devices/RwHandler.h;RW_HANDLER
-0x56a1; RWHA_InvalidRampTime;Action Message with invalid ramp time was received.;0xA1;mission/devices/RwHandler.h;RW_HANDLER
-0x56a2; RWHA_SetSpeedCommandInvalidLength;Received set speed command has invalid length. Should be 6.;0xA2;mission/devices/RwHandler.h;RW_HANDLER
-0x56a3; RWHA_ExecutionFailed;Command execution failed;0xA3;mission/devices/RwHandler.h;RW_HANDLER
-0x56a4; RWHA_CrcError;Reaction wheel reply has invalid crc;0xA4;mission/devices/RwHandler.h;RW_HANDLER
-0x6100; GOMS_PacketTooLong;;0;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
-0x6101; GOMS_InvalidTableId;;1;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
-0x6102; GOMS_InvalidAddress;;2;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
-0x6103; GOMS_InvalidParamSize;;3;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
-0x6104; GOMS_InvalidPayloadSize;;4;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
-0x6105; GOMS_UnknownReplyId;;5;mission/devices/GomspaceDeviceHandler.h;GOM_SPACE_HANDLER
-0x55a0; IMTQ_InvalidCommandCode;;0xA0;mission/devices/IMTQHandler.h;IMTQ_HANDLER
-0x55a1; IMTQ_ParameterMissing;;0xA1;mission/devices/IMTQHandler.h;IMTQ_HANDLER
-0x55a2; IMTQ_ParameterInvalid;;0xA2;mission/devices/IMTQHandler.h;IMTQ_HANDLER
-0x55a3; IMTQ_CcUnavailable;;0xA3;mission/devices/IMTQHandler.h;IMTQ_HANDLER
-0x55a4; IMTQ_InternalProcessingError;;0xA4;mission/devices/IMTQHandler.h;IMTQ_HANDLER
-0x55a5; IMTQ_RejectedWithoutReason;;0xA5;mission/devices/IMTQHandler.h;IMTQ_HANDLER
-0x55a6; IMTQ_CmdErrUnknown;;0xA6;mission/devices/IMTQHandler.h;IMTQ_HANDLER
-0x55a7; 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
-0x54a0; SYRLINKS_CrcFailure;;0xA0;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
-0x54a1; SYRLINKS_UartFraminOrParityErrorAck;;0xA1;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
-0x54a2; SYRLINKS_BadCharacterAck;;0xA2;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
-0x54a3; SYRLINKS_BadParameterValueAck;;0xA3;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
-0x54a4; SYRLINKS_BadEndOfFrameAck;;0xA4;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
-0x54a5; SYRLINKS_UnknownCommandIdAck;;0xA5;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
-0x54a6; SYRLINKS_BadCrcAck;;0xA6;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
-0x54a7; SYRLINKS_ReplyWrongSize;;0xA7;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
-0x54a8; SYRLINKS_MissingStartFrameCharacter;;0xA8;mission/devices/SyrlinksHkHandler.h;SYRLINKS_HANDLER
-0x53a1; HEATER_CommandNotSupported;;0xA1;mission/devices/HeaterHandler.h;HEATER_HANDLER
-0x53a2; HEATER_InitFailed;;0xA2;mission/devices/HeaterHandler.h;HEATER_HANDLER
-0x53a3; HEATER_InvalidSwitchNr;;0xA3;mission/devices/HeaterHandler.h;HEATER_HANDLER
-0x53a4; HEATER_MainSwitchSetTimeout;;0xA4;mission/devices/HeaterHandler.h;HEATER_HANDLER
-0x53a5; HEATER_CommandAlreadyWaiting;;0xA5;mission/devices/HeaterHandler.h;HEATER_HANDLER
-0x64a0; CCSDS_CommandNotImplemented;Received action message with unknown action id;0xA0;mission/tmtc/CCSDSHandler.h;CCSDS_HANDLER
-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
-0x601; PP_DoItMyself;;1;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
-0x602; PP_PointsToVariable;;2;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
-0x603; PP_PointsToMemory;;3;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
-0x604; PP_ActivityCompleted;;4;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
-0x605; PP_PointsToVectorUint8;;5;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
-0x606; PP_PointsToVectorUint16;;6;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
-0x607; PP_PointsToVectorUint32;;7;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
-0x608; PP_PointsToVectorFloat;;8;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
-0x6a0; PP_DumpNotSupported;;0xA0;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
-0x6e0; PP_InvalidSize;;0xE0;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
-0x6e1; PP_InvalidAddress;;0xE1;fsfw/src/fsfw/memory/HasMemoryIF.h;HAS_MEMORY_IF
-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
-0x4200; FILS_GenericFileError;;0;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
-0x4201; FILS_IsBusy;;1;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
-0x4202; FILS_InvalidParameters;;2;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
-0x4205; FILS_FileDoesNotExist;;5;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
-0x4206; FILS_FileAlreadyExists;;6;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
-0x4207; FILS_FileLocked;;7;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
-0x420a; FILS_DirectoryDoesNotExist;;10;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
-0x420b; FILS_DirectoryAlreadyExists;;11;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
-0x420c; FILS_DirectoryNotEmpty;;12;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
-0x420f; FILS_SequencePacketMissingWrite;;15;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
-0x4210; FILS_SequencePacketMissingRead;;16;fsfw/src/fsfw/memory/HasFileSystemIF.h;FILE_SYSTEM
-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
-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
-0x37a4; SGP4_InvalidSemiLatusRectum;;0xA4;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
-0x37a5; SGP4_InvalidEpochElements;;0xA5;fsfw/src/fsfw/coordinates/Sgp4Propagator.h;SGP4PROPAGATOR_CLASS
-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
-0x1101; AL_Full;;0x01;fsfw/src/fsfw/container/ArrayList.h;ARRAY_LIST
-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
-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
-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
-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
-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
-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
-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
-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
-0x2401; EV_ListenerNotFound;;1;fsfw/src/fsfw/events/EventManagerIF.h;EVENT_MANAGER_IF
-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
-0x4e6; RMP_CommandChannelDeactivated;;0xE6;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4e7; RMP_CommandPortOutOfRange;;0xE7;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4e8; RMP_CommandPortInUse;;0xE8;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4e9; RMP_CommandNoChannel;;0xE9;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4ea; RMP_NoHwCrc;;0xEA;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4d0; RMP_ReplyNoReply;;0xD0;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4d1; RMP_ReplyNotSent;;0xD1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4d2; RMP_ReplyNotYetSent;;0xD2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4d3; RMP_ReplyMissmatch;;0xD3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4d4; RMP_ReplyTimeout;;0xD4;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4c0; RMP_ReplyInterfaceBusy;;0xC0;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4c1; RMP_ReplyTransmissionError;;0xC1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4c2; RMP_ReplyInvalidData;;0xC2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4c3; RMP_ReplyNotSupported;;0xC3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4f0; RMP_LinkDown;;0xF0;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4f1; RMP_SpwCredit;;0xF1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4f2; RMP_SpwEscape;;0xF2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4f3; RMP_SpwDisconnect;;0xF3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4f4; RMP_SpwParity;;0xF4;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4f5; RMP_SpwWriteSync;;0xF5;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4f6; RMP_SpwInvalidAddress;;0xF6;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4f7; RMP_SpwEarlyEop;;0xF7;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4f8; RMP_SpwDma;;0xF8;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x4f9; RMP_SpwLinkError;;0xF9;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x400; RMP_ReplyOk;;0;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x401; RMP_ReplyGeneralErrorCode;;1;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x402; RMP_ReplyUnusedPacketTypeOrCommandCode;;2;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x403; RMP_ReplyInvalidKey;;3;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x404; RMP_ReplyInvalidDataCrc;;4;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x405; RMP_ReplyEarlyEop;;5;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x406; RMP_ReplyTooMuchData;;6;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x407; RMP_ReplyEep;;7;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x408; RMP_ReplyReserved;;8;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-0x409; RMP_ReplyVerifyBufferOverrun;;9;fsfw/src/fsfw/rmap/RMAP.h;RMAP_CHANNEL
-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
-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
-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
-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
-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
-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
-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
-0x2904; IEC_TooLittleWorkspace;;0x04;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x2905; IEC_WorkspaceAllocation;;0x05;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x2906; IEC_InterruptStackTooSmall;;0x06;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x2907; IEC_ThreadExitted;;0x07;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x2908; IEC_InconsistentMpInformation;;0x08;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x2909; IEC_InvalidNode;;0x09;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x290a; IEC_NoMpci;;0x0a;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x290b; IEC_BadPacket;;0x0b;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x290c; IEC_OutOfPackets;;0x0c;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x290d; IEC_OutOfGlobalObjects;;0x0d;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x290e; IEC_OutOfProxies;;0x0e;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x290f; IEC_InvalidGlobalId;;0x0f;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x2910; IEC_BadStackHook;;0x10;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x2911; IEC_BadAttributes;;0x11;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-0x2912; IEC_ImplementationKeyCreateInconsistency;;0x12;fsfw/src/fsfw/osal/InternalErrorCodes.h;INTERNAL_ERROR_CODES
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-0x4101; PUS11_InvalidTypeTimeWindow;;1;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h;PUS_SERVICE_11
-0x4102; PUS11_TimeshiftingNotPossible;;2;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h;PUS_SERVICE_11
-0x4103; PUS11_InvalidRelativeTime;;3;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h;PUS_SERVICE_11
-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
-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
-0x3b2; DHB_IgnoreFullPacket;;0xB2;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
-0x3c0; DHB_NothingToSend;;0xC0;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
-0x3c2; DHB_CommandMapError;;0xC2;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h;DEVICE_HANDLER_BASE
-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
-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
-0x26a3; DHI_CommandWasNotSent;;0xA3;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x26a4; DHI_CantSwitchAddress;;0xA4;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x26a5; DHI_WrongModeForCommand;;0xA5;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x26a6; DHI_Timeout;;0xA6;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x26a7; DHI_Busy;;0xA7;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x26a8; DHI_NoReplyExpected;;0xA8;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x26a9; DHI_NonOpTemperature;;0xA9;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x26aa; DHI_CommandNotImplemented;;0xAA;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x26b0; DHI_ChecksumError;;0xB0;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x26b1; DHI_LengthMissmatch;;0xB1;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x26b2; DHI_InvalidData;;0xB2;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x26b3; DHI_ProtocolError;;0xB3;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x26c0; DHI_DeviceDidNotExecute;;0xC0;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x26c1; DHI_DeviceReportedError;;0xC1;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-0x26c2; DHI_UnknownDeviceReply;;0xC2;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h;DEVICE_HANDLER_IF
-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
-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
-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
-0x1703; HHI_IsExternallyControlled;;3;fsfw/src/fsfw/health/HasHealthIF.h;HAS_HEALTH_IF
-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
-0x3601; TSI_BadTimestamp;;1;fsfw/src/fsfw/timemanager/TimeStamperIF.h;TIME_STAMPER_IF
-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
-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
-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
-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
-0x4b00; SPPA_NoPacketFound;;0x00;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h;SPACE_PACKET_PARSER
-0x4b01; 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
-0x4400; HSPI_OpeningFileFailed;;0;fsfw/hal/src/fsfw_hal/linux/spi/SpiComIF.h;HAL_SPI
-0x4401; HSPI_FullDuplexTransferFailed;;1;fsfw/hal/src/fsfw_hal/linux/spi/SpiComIF.h;HAL_SPI
-0x4402; HSPI_HalfDuplexTransferFailed;;2;fsfw/hal/src/fsfw_hal/linux/spi/SpiComIF.h;HAL_SPI
-0x4701; HGIO_UnknownGpioId;;1;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
-0x4702; HGIO_DriveGpioFailure;;2;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
-0x4703; HGIO_GpioTypeFailure;;3;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
-0x4704; HGIO_GpioInvalidInstance;;4;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
-0x4705; HGIO_GpioDuplicateDetected;;5;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
-0x4706; HGIO_GpioInitFailed;;6;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
-0x4707; HGIO_GpioGetValueFailed;;7;fsfw/hal/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h;HAL_GPIO
-0x4501; HURT_UartReadFailure;;1;fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART
-0x4502; HURT_UartReadSizeMissmatch;;2;fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART
-0x4503; HURT_UartRxBufferTooSmall;;3;fsfw/hal/src/fsfw_hal/linux/uart/UartComIF.h;HAL_UART
-0x4300; UXOS_ExecutionFinished;Execution of the current command has finished;0;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL
-0x4301; 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
-0x4302; UXOS_BytesRead;Some bytes have been read from the executing process;2;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL
-0x4303; UXOS_CommandError;Command execution failed;3;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL
-0x4304; UXOS_NoCommandLoadedOrPending;;4;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL
-0x4306; UXOS_PcloseCallError;;6;fsfw/hal/src/fsfw_hal/linux/CommandExecutor.h;LINUX_OSAL
-0x7400; SCBU_KeyNotFound;;0;bsp_q7s/memory/scratchApi.h;SCRATCH_BUFFER
-0x68a0; FSHLP_SdNotMounted;SD card specified with path string not mounted;0xA0;bsp_q7s/memory/FilesystemHelper.h;FILE_SYSTEM_HELPER
-0x68a1; FSHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;bsp_q7s/memory/FilesystemHelper.h;FILE_SYSTEM_HELPER
-0x7300; SDMA_OpOngoing;;0;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
-0x7301; SDMA_AlreadyOn;;1;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
-0x7302; SDMA_AlreadyMounted;;2;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
-0x7303; SDMA_AlreadyOff;;3;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
-0x730a; SDMA_StatusFileNexists;;10;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
-0x730b; SDMA_StatusFileFormatInvalid;;11;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
-0x730c; SDMA_MountError;;12;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
-0x730d; SDMA_UnmountError;;13;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
-0x730e; SDMA_SystemCallError;;14;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
-0x730f; SDMA_PopenCallError;;15;bsp_q7s/memory/SdCardManager.h;SD_CARD_MANAGER
-0x69a0; PLMPHLP_FileClosedAccidentally;File accidentally close;0xA0;linux/devices/ploc/PlocMPSoCHelper.h;PLOC_MPSOC_HELPER
-0x62a0; 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
-0x62a1; PLMEMDUMP_MramInvalidAddressCombination;The specified end address is lower than the start address;0xA1;linux/devices/ploc/PlocMemoryDumper.h;PLOC_MEMORY_DUMPER
-0x5ba0; PLSPVhLP_FileClosedAccidentally;File accidentally close;0xA0;linux/devices/ploc/PlocSupvHelper.h;PLOC_SUPV_HELPER
-0x5ba1; PLSPVhLP_ProcessTerminated;Process has been terminated by command;0xA1;linux/devices/ploc/PlocSupvHelper.h;PLOC_SUPV_HELPER
-0x5ba2; PLSPVhLP_PathNotExists;Received command with invalid pathname;0xA2;linux/devices/ploc/PlocSupvHelper.h;PLOC_SUPV_HELPER
-0x5ba3; PLSPVhLP_EventBufferReplyInvalidApid;Expected event buffer TM but received space packet with other APID;0xA3;linux/devices/ploc/PlocSupvHelper.h;PLOC_SUPV_HELPER
-0x6ba0; MPSOCRTVIF_CrcFailure;Space Packet received from PLOC has invalid CRC;0xA0;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x6ba1; MPSOCRTVIF_ReceivedAckFailure;Received ACK failure reply from PLOC;0xA1;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x6ba2; MPSOCRTVIF_ReceivedExeFailure;Received execution failure reply from PLOC;0xA2;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x6ba3; MPSOCRTVIF_InvalidApid;Received space packet with invalid APID from PLOC;0xA3;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x6ba4; MPSOCRTVIF_InvalidLength;Received command with invalid length;0xA4;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x6ba5; MPSOCRTVIF_FilenameTooLong;Filename of file in OBC filesystem is too long;0xA5;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x6ba6; MPSOCRTVIF_MpsocHelperExecuting;MPSoC helper is currently executing a command;0xA6;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x6ba7; MPSOCRTVIF_MpsocFilenameTooLong;Filename of MPSoC file is to long (max. 256 bytes);0xA7;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x6ba8; MPSOCRTVIF_InvalidParameter;Command has invalid parameter;0xA8;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x6ba9; MPSOCRTVIF_NameTooLong;Received command has file string with invalid length;0xA9;linux/devices/devicedefinitions/MPSoCReturnValuesIF.h;MPSOC_RETURN_VALUES_IF
-0x6ca0; SPVRTVIF_CrcFailure;Space Packet received from PLOC supervisor has invalid CRC;0xA0;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6ca1; SPVRTVIF_ReceivedAckFailure;Received ACK failure reply from PLOC supervisor;0xA1;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6ca2; SPVRTVIF_ReceivedExeFailure;Received execution failure reply from PLOC supervisor;0xA2;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6ca3; SPVRTVIF_InvalidApid;Received space packet with invalid APID from PLOC supervisor;0xA3;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6ca4; SPVRTVIF_GetTimeFailure;Failed to read current system time;0xA4;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6ca5; SPVRTVIF_InvalidWatchdog;Received command with invalid watchdog parameter. Valid watchdogs are 0 for PS, 1 for PL and 2 for INT;0xA5;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6ca6; SPVRTVIF_InvalidWatchdogTimeout;Received watchdog timeout config command with invalid timeout. Valid timeouts must be in the range between 1000 and 360000 ms.;0xA6;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6ca7; SPVRTVIF_InvalidLatchupId;Received latchup config command with invalid latchup ID;0xA7;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6ca8; SPVRTVIF_SweepPeriodTooSmall;Received set adc sweep period command with invalid sweep period. Must be larger than 21.;0xA8;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6ca9; SPVRTVIF_InvalidTestParam;Receive auto EM test command with invalid test param. Valid params are 1 and 2.;0xA9;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6caa; SPVRTVIF_MramPacketParsingFailure;Returned when scanning for MRAM dump packets failed.;0xAA;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6cab; SPVRTVIF_InvalidMramAddresses;Returned when the start and stop addresses of the MRAM dump or MRAM wipe commands are invalid (e.g. start address bigger than stop address);0xAB;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6cac; SPVRTVIF_NoMramPacket;Expect reception of an MRAM dump packet but received space packet with other apid.;0xAC;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6cad; SPVRTVIF_PathDoesNotExist;Path to PLOC directory on SD card does not exist;0xAD;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6cae; SPVRTVIF_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/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6caf; SPVRTVIF_InvalidLength;Received action command has invalid length;0xAF;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6cb0; SPVRTVIF_FilenameTooLong;Filename too long;0xB0;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6cb1; SPVRTVIF_UpdateStatusReportInvalidLength;Received update status report with invalid packet length field;0xB1;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6cb2; SPVRTVIF_UpdateCrcFailure;Update status report does not contain expected CRC. There might be a bit flip in the update memory region.;0xB2;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x6cb3; SPVRTVIF_SupvHelperExecuting;Supervisor helper task ist currently executing a command (wait until helper tas has finished or interrupt by sending the terminate command);0xB3;linux/devices/devicedefinitions/SupvReturnValuesIF.h;SUPV_RETURN_VALUES_IF
-0x58e0; DWLPWRON_InvalidMode;Received command has invalid JESD mode (valid modes are 0 - 5);0xE0;linux/devices/devicedefinitions/PlocMPSoCDefinitions.h;DWLPWRON_CMD
-0x58e1; DWLPWRON_InvalidLaneRate;Received command has invalid lane rate (valid lane rate are 0 - 9);0xE1;linux/devices/devicedefinitions/PlocMPSoCDefinitions.h;DWLPWRON_CMD
-0x6601; JSONBASE_JsonFileNotExists;Specified json file does not exist;1;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE
-0x6602; JSONBASE_SetNotExists;Requested set does not exist in json file;2;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE
-0x6603; JSONBASE_ParamNotExists;Requested parameter does not exist in json file;3;linux/devices/startracker/ArcsecJsonParamBase.h;ARCSEC_JSON_BASE
-0x57a0; STRH_TemperatureReqFailed;Status in temperature reply signals error;0xA0;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57a1; STRH_PingFailed;Ping command failed;0xA1;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57a2; STRH_VersionReqFailed;Status in version reply signals error;0xA2;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x60a0; STRHLP_SdNotMounted;SD card specified in path string not mounted;0xA0;linux/devices/startracker/StrHelper.h;STR_HELPER
-0x60a1; STRHLP_FileNotExists;Specified file does not exist on filesystem;0xA1;linux/devices/startracker/StrHelper.h;STR_HELPER
-0x60a2; STRHLP_PathNotExists;Specified path does not exist;0xA2;linux/devices/startracker/StrHelper.h;STR_HELPER
-0x60a3; STRHLP_FileCreationFailed;Failed to create download image or read flash file;0xA3;linux/devices/startracker/StrHelper.h;STR_HELPER
-0x60a4; STRHLP_RegionMismatch;Region in flash write/read reply does not match expected region;0xA4;linux/devices/startracker/StrHelper.h;STR_HELPER
-0x60a5; STRHLP_AddressMismatch;Address in flash write/read reply does not match expected address;0xA5;linux/devices/startracker/StrHelper.h;STR_HELPER
-0x60a6; STRHLP_LengthMismatch;Length in flash write/read reply does not match expected length;0xA6;linux/devices/startracker/StrHelper.h;STR_HELPER
-0x60a7; STRHLP_StatusError;Status field in reply signals error;0xA7;linux/devices/startracker/StrHelper.h;STR_HELPER
-0x60a8; STRHLP_InvalidTypeId;Reply has invalid type ID (should be of action reply type);0xA8;linux/devices/startracker/StrHelper.h;STR_HELPER
-0x57a3; STRH_InterfaceReqFailed;Status in interface reply signals error;0xA3;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57a4; STRH_PowerReqFailed;Status in power reply signals error;0xA4;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57a5; STRH_SetParamFailed;Status of reply to parameter set command signals error;0xA5;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57a6; STRH_ActionFailed;Status of reply to action command signals error;0xA6;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57a7; STRH_FilePathTooLong;Received invalid path string. Exceeds allowed length;0xA7;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57a8; STRH_FilenameTooLong;Name of file received with command is too long;0xA8;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57a9; STRH_InvalidProgram;Received version reply with invalid program ID;0xA9;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57aa; STRH_ReplyError;Status field reply signals error;0xAA;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57ab; STRH_CommandTooShort;Received command which is too short (some data is missing for proper execution);0xAB;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57ac; STRH_InvalidLength;Received command with invalid length (too few or too many parameters);0xAC;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57ad; STRH_RegionMismatch;Region mismatch between send and received data;0xAD;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57ae; STRH_AddressMismatch;Address mismatch between send and received data;0xAE;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57af; STRH_LengthMismatch;Length field mismatch between send and received data;0xAF;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57b0; STRH_FileNotExists;Specified file does not exist;0xB0;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57b1; STRH_InvalidType;Download blob pixel command has invalid type field;0xB1;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57b2; STRH_InvalidId;Received FPGA action command with invalid ID;0xB2;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57b3; STRH_ReplyTooShort;Received reply is too short;0xB3;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57b4; STRH_CrcFailure;Received reply with invalid CRC;0xB4;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57b5; STRH_StrHelperExecuting;Star tracker handler currently executing a command and using the communication interface;0xB5;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57b6; STRH_StartrackerAlreadyBooted;Star tracker is already in firmware mode;0xB6;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57b7; STRH_StartrackerRunningFirmware;Star tracker is in firmware mode but must be in bootloader mode to execute this command;0xB7;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x57b8; STRH_StartrackerRunningBootloader;Star tracker is in bootloader mode but must be in firmware mode to execute this command;0xB8;linux/devices/startracker/StarTrackerHandler.h;STR_HANDLER
-0x5ea0; PTME_UnknownVcId;;0xA0;linux/obc/Ptme.h;PTME
-0x63a0; PDEC_AbandonedCltu;;0xA0;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x63a1; PDEC_FrameDirty;;0xA1;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x63a2; PDEC_FrameIllegalMultipleReasons;;0xA2;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x63a3; PDEC_AdDiscardedLockout;;0xA3;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x63a4; PDEC_AdDiscardedWait;;0xA4;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x63a5; PDEC_AdDiscardedNsVs;;0xA5;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x63b0; PDEC_CommandNotImplemented;Received action message with unknown action id;0xB0;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x63a6; PDEC_NoReport;;0xA6;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x63a7; PDEC_ErrorVersionNumber;;0xA7;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x63a8; PDEC_IllegalCombination;;0xA8;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x63a9; PDEC_InvalidScId;;0xA9;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x63aa; PDEC_InvalidVcIdMsb;;0xAA;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x63ab; PDEC_InvalidVcIdLsb;;0xAB;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x63ac; PDEC_NsNotZero;;0xAC;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x63ae; PDEC_InvalidBcCc;;0xAE;linux/obc/PdecHandler.h;PDEC_HANDLER
-0x65a0; RS_RateNotSupported;The commanded rate is not supported by the current FPGA design;0xA0;linux/obc/PtmeConfig.h;RATE_SETTER
-0x65a1; RS_BadBitRate;Bad bitrate has been commanded (e.g. 0);0xA1;linux/obc/PtmeConfig.h;RATE_SETTER
-0x65a2; 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
-0x65a3; RS_TxManipulatorConfigFailed;Failed to change configuration bit of tx clock manipulator;0xA3;linux/obc/PtmeConfig.h;RATE_SETTER
-0x5da0; IPCI_PapbBusy;;0xA0;linux/obc/PapbVcInterface.h;CCSDS_IP_CORE_BRIDGE
+Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
+0x0000;OK;System-wide code for ok.;0;HasReturnvaluesIF;fsfw/returnvalues/HasReturnvaluesIF.h
+0x0001;Failed;Unspecified system-wide code for failed.;1;HasReturnvaluesIF;fsfw/returnvalues/HasReturnvaluesIF.h
+0x63a0;NVMB_KeyNotExists;Specified key does not exist in json file;160;NVM_PARAM_BASE;mission/memory/NVMParameterBase.h
+0x58a0;SUSS_ErrorUnlockMutex;;160;SUS_HANDLER;mission/devices/SusHandler.h
+0x58a1;SUSS_ErrorLockMutex;;161;SUS_HANDLER;mission/devices/SusHandler.h
+0x66a0;SADPL_CommandNotSupported;;160;SA_DEPL_HANDLER;mission/devices/SolarArrayDeploymentHandler.h
+0x66a1;SADPL_DeploymentAlreadyExecuting;;161;SA_DEPL_HANDLER;mission/devices/SolarArrayDeploymentHandler.h
+0x66a2;SADPL_MainSwitchTimeoutFailure;;162;SA_DEPL_HANDLER;mission/devices/SolarArrayDeploymentHandler.h
+0x66a3;SADPL_SwitchingDeplSa1Failed;;163;SA_DEPL_HANDLER;mission/devices/SolarArrayDeploymentHandler.h
+0x66a4;SADPL_SwitchingDeplSa2Failed;;164;SA_DEPL_HANDLER;mission/devices/SolarArrayDeploymentHandler.h
+0x52b0;RWHA_SpiWriteFailure;;176;RW_HANDLER;mission/devices/RwHandler.h
+0x52b1;RWHA_SpiReadFailure;Used by the spi send function to tell a failing read call;177;RW_HANDLER;mission/devices/RwHandler.h
+0x52b2;RWHA_MissingStartSign;Can be used by the HDLC decoding mechanism to inform about a missing start sign 0x7E;178;RW_HANDLER;mission/devices/RwHandler.h
+0x52b3;RWHA_InvalidSubstitute;Can be used by the HDLC decoding mechanism to inform about an invalid substitution combination;179;RW_HANDLER;mission/devices/RwHandler.h
+0x52b4;RWHA_MissingEndSign;HDLC decoding mechanism never receives the end sign 0x7E;180;RW_HANDLER;mission/devices/RwHandler.h
+0x52b5;RWHA_NoReply;Reaction wheel only responds with empty frames.;181;RW_HANDLER;mission/devices/RwHandler.h
+0x52b6;RWHA_NoStartMarker;Expected a start marker as first byte;182;RW_HANDLER;mission/devices/RwHandler.h
+0x52a0;RWHA_InvalidSpeed;Action Message with invalid speed was received. Valid speeds must be in the range of [-65000, 1000] or [1000, 65000];160;RW_HANDLER;mission/devices/RwHandler.h
+0x52a1;RWHA_InvalidRampTime;Action Message with invalid ramp time was received.;161;RW_HANDLER;mission/devices/RwHandler.h
+0x52a2;RWHA_SetSpeedCommandInvalidLength;Received set speed command has invalid length. Should be 6.;162;RW_HANDLER;mission/devices/RwHandler.h
+0x52a3;RWHA_ExecutionFailed;Command execution failed;163;RW_HANDLER;mission/devices/RwHandler.h
+0x52a4;RWHA_CrcError;Reaction wheel reply has invalid crc;164;RW_HANDLER;mission/devices/RwHandler.h
+0x5d00;GOMS_PacketTooLong;;0;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
+0x5d01;GOMS_InvalidTableId;;1;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
+0x5d02;GOMS_InvalidAddress;;2;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
+0x5d03;GOMS_InvalidParamSize;;3;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
+0x5d04;GOMS_InvalidPayloadSize;;4;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
+0x5d05;GOMS_UnknownReplyId;;5;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
+0x51a0;IMTQ_InvalidCommandCode;;160;IMTQ_HANDLER;mission/devices/IMTQHandler.h
+0x51a1;IMTQ_ParameterMissing;;161;IMTQ_HANDLER;mission/devices/IMTQHandler.h
+0x51a2;IMTQ_ParameterInvalid;;162;IMTQ_HANDLER;mission/devices/IMTQHandler.h
+0x51a3;IMTQ_CcUnavailable;;163;IMTQ_HANDLER;mission/devices/IMTQHandler.h
+0x51a4;IMTQ_InternalProcessingError;;164;IMTQ_HANDLER;mission/devices/IMTQHandler.h
+0x51a5;IMTQ_RejectedWithoutReason;;165;IMTQ_HANDLER;mission/devices/IMTQHandler.h
+0x51a6;IMTQ_CmdErrUnknown;;166;IMTQ_HANDLER;mission/devices/IMTQHandler.h
+0x51a7;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.;167;IMTQ_HANDLER;mission/devices/IMTQHandler.h
+0x50a0;SYRLINKS_CrcFailure;;160;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h
+0x50a1;SYRLINKS_UartFraminOrParityErrorAck;;161;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h
+0x50a2;SYRLINKS_BadCharacterAck;;162;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h
+0x50a3;SYRLINKS_BadParameterValueAck;;163;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h
+0x50a4;SYRLINKS_BadEndOfFrameAck;;164;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h
+0x50a5;SYRLINKS_UnknownCommandIdAck;;165;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h
+0x50a6;SYRLINKS_BadCrcAck;;166;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h
+0x50a7;SYRLINKS_ReplyWrongSize;;167;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h
+0x50a8;SYRLINKS_MissingStartFrameCharacter;;168;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h
+0x4fa1;HEATER_CommandNotSupported;;161;HEATER_HANDLER;mission/devices/HeaterHandler.h
+0x4fa2;HEATER_InitFailed;;162;HEATER_HANDLER;mission/devices/HeaterHandler.h
+0x4fa3;HEATER_InvalidSwitchNr;;163;HEATER_HANDLER;mission/devices/HeaterHandler.h
+0x4fa4;HEATER_MainSwitchSetTimeout;;164;HEATER_HANDLER;mission/devices/HeaterHandler.h
+0x4fa5;HEATER_CommandAlreadyWaiting;;165;HEATER_HANDLER;mission/devices/HeaterHandler.h
+0x60a0;CCSDS_CommandNotImplemented;Received action message with unknown action id;160;CCSDS_HANDLER;mission/tmtc/CCSDSHandler.h
+0x4500;HSPI_OpeningFileFailed;;0;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
+0x4501;HSPI_FullDuplexTransferFailed;;1;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
+0x4502;HSPI_HalfDuplexTransferFailed;;2;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
+0x4801;HGIO_UnknownGpioId;;1;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
+0x4802;HGIO_DriveGpioFailure;;2;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
+0x4803;HGIO_GpioTypeFailure;;3;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
+0x4804;HGIO_GpioInvalidInstance;;4;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
+0x4805;HGIO_GpioDuplicateDetected;;5;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
+0x4806;HGIO_GpioInitFailed;;6;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
+0x4807;HGIO_GpioGetValueFailed;;7;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
+0x4601;HURT_UartReadFailure;;1;HAL_UART;fsfw/src/fsfw_hal/linux/uart/UartComIF.h
+0x4602;HURT_UartReadSizeMissmatch;;2;HAL_UART;fsfw/src/fsfw_hal/linux/uart/UartComIF.h
+0x4603;HURT_UartRxBufferTooSmall;;3;HAL_UART;fsfw/src/fsfw_hal/linux/uart/UartComIF.h
+0x4400;UXOS_ExecutionFinished;Execution of the current command has finished;0;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
+0x4401;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;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
+0x4402;UXOS_BytesRead;Some bytes have been read from the executing process;2;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
+0x4403;UXOS_CommandError;Command execution failed;3;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
+0x4404;UXOS_NoCommandLoadedOrPending;;4;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
+0x4406;UXOS_PcloseCallError;;6;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
+0x2801;SM_DataTooLarge;;1;STORAGE_MANAGER_IF;fsfw/src/fsfw/storagemanager/StorageManagerIF.h
+0x2802;SM_DataStorageFull;;2;STORAGE_MANAGER_IF;fsfw/src/fsfw/storagemanager/StorageManagerIF.h
+0x2803;SM_IllegalStorageId;;3;STORAGE_MANAGER_IF;fsfw/src/fsfw/storagemanager/StorageManagerIF.h
+0x2804;SM_DataDoesNotExist;;4;STORAGE_MANAGER_IF;fsfw/src/fsfw/storagemanager/StorageManagerIF.h
+0x2805;SM_IllegalAddress;;5;STORAGE_MANAGER_IF;fsfw/src/fsfw/storagemanager/StorageManagerIF.h
+0x2806;SM_PoolTooLarge;;6;STORAGE_MANAGER_IF;fsfw/src/fsfw/storagemanager/StorageManagerIF.h
+0x0601;PP_DoItMyself;;1;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
+0x0602;PP_PointsToVariable;;2;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
+0x0603;PP_PointsToMemory;;3;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
+0x0604;PP_ActivityCompleted;;4;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
+0x0605;PP_PointsToVectorUint8;;5;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
+0x0606;PP_PointsToVectorUint16;;6;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
+0x0607;PP_PointsToVectorUint32;;7;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
+0x0608;PP_PointsToVectorFloat;;8;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
+0x06a0;PP_DumpNotSupported;;160;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
+0x06e0;PP_InvalidSize;;224;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
+0x06e1;PP_InvalidAddress;;225;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
+0x06e2;PP_InvalidContent;;226;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
+0x06e3;PP_UnalignedAccess;;227;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
+0x06e4;PP_WriteProtected;;228;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
+0x4300;FILS_GenericFileError;;0;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
+0x4301;FILS_IsBusy;;1;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
+0x4302;FILS_InvalidParameters;;2;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
+0x4305;FILS_FileDoesNotExist;;5;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
+0x4306;FILS_FileAlreadyExists;;6;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
+0x4307;FILS_FileLocked;;7;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
+0x430a;FILS_DirectoryDoesNotExist;;10;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
+0x430b;FILS_DirectoryAlreadyExists;;11;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
+0x430c;FILS_DirectoryNotEmpty;;12;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
+0x430f;FILS_SequencePacketMissingWrite;;15;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
+0x4310;FILS_SequencePacketMissingRead;;16;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
+0x13e0;MH_UnknownCmd;;224;MEMORY_HELPER;fsfw/src/fsfw/memory/MemoryHelper.h
+0x13e1;MH_InvalidAddress;;225;MEMORY_HELPER;fsfw/src/fsfw/memory/MemoryHelper.h
+0x13e2;MH_InvalidSize;;226;MEMORY_HELPER;fsfw/src/fsfw/memory/MemoryHelper.h
+0x13e3;MH_StateMismatch;;227;MEMORY_HELPER;fsfw/src/fsfw/memory/MemoryHelper.h
+0x38a1;SGP4_InvalidEccentricity;;161;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
+0x38a2;SGP4_InvalidMeanMotion;;162;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
+0x38a3;SGP4_InvalidPerturbationElements;;163;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
+0x38a4;SGP4_InvalidSemiLatusRectum;;164;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
+0x38a5;SGP4_InvalidEpochElements;;165;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
+0x38a6;SGP4_SatelliteHasDecayed;;166;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
+0x38b1;SGP4_TleTooOld;;177;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
+0x38b2;SGP4_TleNotInitialized;;178;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
+0x1101;AL_Full;;1;ARRAY_LIST;fsfw/src/fsfw/container/ArrayList.h
+0x1501;FM_KeyAlreadyExists;;1;FIXED_MAP;fsfw/src/fsfw/container/FixedMap.h
+0x1502;FM_MapFull;;2;FIXED_MAP;fsfw/src/fsfw/container/FixedMap.h
+0x1503;FM_KeyDoesNotExist;;3;FIXED_MAP;fsfw/src/fsfw/container/FixedMap.h
+0x1801;FF_Full;;1;FIFO_CLASS;fsfw/src/fsfw/container/FIFOBase.h
+0x1802;FF_Empty;;2;FIFO_CLASS;fsfw/src/fsfw/container/FIFOBase.h
+0x1601;FMM_MapFull;;1;FIXED_MULTIMAP;fsfw/src/fsfw/container/FixedOrderedMultimap.h
+0x1602;FMM_KeyDoesNotExist;;2;FIXED_MULTIMAP;fsfw/src/fsfw/container/FixedOrderedMultimap.h
+0x3901;MUX_NotEnoughResources;;1;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
+0x3902;MUX_InsufficientMemory;;2;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
+0x3903;MUX_NoPrivilege;;3;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
+0x3904;MUX_WrongAttributeSetting;;4;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
+0x3905;MUX_MutexAlreadyLocked;;5;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
+0x3906;MUX_MutexNotFound;;6;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
+0x3907;MUX_MutexMaxLocks;;7;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
+0x3908;MUX_CurrThreadAlreadyOwnsMutex;;8;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
+0x3909;MUX_CurrThreadDoesNotOwnMutex;;9;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
+0x390a;MUX_MutexTimeout;;10;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
+0x390b;MUX_MutexInvalidId;;11;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
+0x390c;MUX_MutexDestroyedWhileWaiting;;12;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
+0x3a01;MQI_Empty;;1;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
+0x3a02;MQI_Full;No space left for more messages;2;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
+0x3a03;MQI_NoReplyPartner;Returned if a reply method was called without partner;3;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
+0x3a04;MQI_DestinationInvalid;Returned if the target destination is invalid.;4;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
+0x0f01;CM_UnknownCommand;;1;COMMAND_MESSAGE;fsfw/src/fsfw/ipc/CommandMessageIF.h
+0x0e01;HM_InvalidMode;;1;HAS_MODES_IF;fsfw/src/fsfw/modes/HasModesIF.h
+0x0e02;HM_TransNotAllowed;;2;HAS_MODES_IF;fsfw/src/fsfw/modes/HasModesIF.h
+0x0e03;HM_InTransition;;3;HAS_MODES_IF;fsfw/src/fsfw/modes/HasModesIF.h
+0x0e04;HM_InvalidSubmode;;4;HAS_MODES_IF;fsfw/src/fsfw/modes/HasModesIF.h
+0x0c02;MS_InvalidEntry;;2;MODE_STORE_IF;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h
+0x0c03;MS_TooManyElements;;3;MODE_STORE_IF;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h
+0x0c04;MS_CantStoreEmpty;;4;MODE_STORE_IF;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h
+0x0b01;SB_ChildNotFound;;1;SUBSYSTEM_BASE;fsfw/src/fsfw/subsystem/SubsystemBase.h
+0x0b02;SB_ChildInfoUpdated;;2;SUBSYSTEM_BASE;fsfw/src/fsfw/subsystem/SubsystemBase.h
+0x0b03;SB_ChildDoesntHaveModes;;3;SUBSYSTEM_BASE;fsfw/src/fsfw/subsystem/SubsystemBase.h
+0x0b04;SB_CouldNotInsertChild;;4;SUBSYSTEM_BASE;fsfw/src/fsfw/subsystem/SubsystemBase.h
+0x0b05;SB_TableContainsInvalidObjectId;;5;SUBSYSTEM_BASE;fsfw/src/fsfw/subsystem/SubsystemBase.h
+0x0d01;SS_SequenceAlreadyExists;;1;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
+0x0d02;SS_TableAlreadyExists;;2;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
+0x0d03;SS_TableDoesNotExist;;3;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
+0x0d04;SS_TableOrSequenceLengthInvalid;;4;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
+0x0d05;SS_SequenceDoesNotExist;;5;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
+0x0d06;SS_TableContainsInvalidObjectId;;6;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
+0x0d07;SS_FallbackSequenceDoesNotExist;;7;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
+0x0d08;SS_NoTargetTable;;8;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
+0x0d09;SS_SequenceOrTableTooLong;;9;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
+0x0d0b;SS_IsFallbackSequence;;11;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
+0x0d0c;SS_AccessDenied;;12;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
+0x0d0e;SS_TableInUse;;14;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
+0x0da1;SS_TargetTableNotReached;;161;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
+0x0da2;SS_TableCheckFailed;;162;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
+0x2501;EV_ListenerNotFound;;1;EVENT_MANAGER_IF;fsfw/src/fsfw/events/EventManagerIF.h
+0x04e1;RMP_CommandNoDescriptorsAvailable;;225;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04e2;RMP_CommandBufferFull;;226;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04e3;RMP_CommandChannelOutOfRange;;227;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04e6;RMP_CommandChannelDeactivated;;230;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04e7;RMP_CommandPortOutOfRange;;231;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04e8;RMP_CommandPortInUse;;232;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04e9;RMP_CommandNoChannel;;233;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04ea;RMP_NoHwCrc;;234;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04d0;RMP_ReplyNoReply;;208;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04d1;RMP_ReplyNotSent;;209;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04d2;RMP_ReplyNotYetSent;;210;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04d3;RMP_ReplyMissmatch;;211;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04d4;RMP_ReplyTimeout;;212;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04c0;RMP_ReplyInterfaceBusy;;192;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04c1;RMP_ReplyTransmissionError;;193;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04c2;RMP_ReplyInvalidData;;194;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04c3;RMP_ReplyNotSupported;;195;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04f0;RMP_LinkDown;;240;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04f1;RMP_SpwCredit;;241;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04f2;RMP_SpwEscape;;242;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04f3;RMP_SpwDisconnect;;243;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04f4;RMP_SpwParity;;244;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04f5;RMP_SpwWriteSync;;245;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04f6;RMP_SpwInvalidAddress;;246;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04f7;RMP_SpwEarlyEop;;247;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04f8;RMP_SpwDma;;248;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x04f9;RMP_SpwLinkError;;249;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x0400;RMP_ReplyOk;;0;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x0401;RMP_ReplyGeneralErrorCode;;1;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x0402;RMP_ReplyUnusedPacketTypeOrCommandCode;;2;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x0403;RMP_ReplyInvalidKey;;3;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x0404;RMP_ReplyInvalidDataCrc;;4;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x0405;RMP_ReplyEarlyEop;;5;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x0406;RMP_ReplyTooMuchData;;6;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x0407;RMP_ReplyEep;;7;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x0408;RMP_ReplyReserved;;8;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x0409;RMP_ReplyVerifyBufferOverrun;;9;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x040a;RMP_ReplyCommandNotImplementedOrNotAuthorised;;10;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x040b;RMP_ReplyRmwDataLengthError;;11;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x040c;RMP_ReplyInvalidTargetLogicalAddress;;12;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
+0x1401;SE_BufferTooShort;;1;SERIALIZE_IF;fsfw/src/fsfw/serialize/SerializeIF.h
+0x1402;SE_StreamTooShort;;2;SERIALIZE_IF;fsfw/src/fsfw/serialize/SerializeIF.h
+0x1403;SE_TooManyElements;;3;SERIALIZE_IF;fsfw/src/fsfw/serialize/SerializeIF.h
+0x3da0;PVA_InvalidReadWriteMode;;160;POOL_VARIABLE_IF;fsfw/src/fsfw/datapool/PoolVariableIF.h
+0x3da1;PVA_InvalidPoolEntry;;161;POOL_VARIABLE_IF;fsfw/src/fsfw/datapool/PoolVariableIF.h
+0x0801;DPS_InvalidParameterDefinition;;1;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h
+0x0802;DPS_SetWasAlreadyRead;;2;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h
+0x0803;DPS_CommitingWithoutReading;;3;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h
+0x0804;DPS_DataSetUninitialised;;4;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h
+0x0805;DPS_DataSetFull;;5;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h
+0x0806;DPS_PoolVarNull;;6;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h
+0x1c01;TCD_PacketLost;;1;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributor.h
+0x1c02;TCD_DestinationNotFound;;2;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributor.h
+0x1c03;TCD_ServiceIdAlreadyExists;;3;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributor.h
+0x1b00;TCC_InvalidCcsdsVersion;;0;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h
+0x1b01;TCC_InvalidApid;;1;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h
+0x1b02;TCC_InvalidPacketType;;2;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h
+0x1b03;TCC_InvalidSecHeaderField;;3;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h
+0x1b04;TCC_IncorrectPrimaryHeader;;4;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h
+0x1b05;TCC_IncompletePacket;;5;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h
+0x1b06;TCC_InvalidPusVersion;;6;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h
+0x1b07;TCC_IncorrectChecksum;;7;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h
+0x1b08;TCC_IllegalPacketSubtype;;8;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h
+0x1b09;TCC_IncorrectSecondaryHeader;;9;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h
+0x3001;POS_InPowerTransition;;1;POWER_SWITCHER;fsfw/src/fsfw/power/PowerSwitcher.h
+0x3002;POS_SwitchStateMismatch;;2;POWER_SWITCHER;fsfw/src/fsfw/power/PowerSwitcher.h
+0x0501;PS_SwitchOn;;1;POWER_SWITCH_IF;fsfw/src/fsfw/power/PowerSwitchIF.h
+0x0500;PS_SwitchOff;;0;POWER_SWITCH_IF;fsfw/src/fsfw/power/PowerSwitchIF.h
+0x0502;PS_SwitchTimeout;;2;POWER_SWITCH_IF;fsfw/src/fsfw/power/PowerSwitchIF.h
+0x0503;PS_FuseOn;;3;POWER_SWITCH_IF;fsfw/src/fsfw/power/PowerSwitchIF.h
+0x0504;PS_FuseOff;;4;POWER_SWITCH_IF;fsfw/src/fsfw/power/PowerSwitchIF.h
+0x3b00;SPH_ConnBroken;;0;SEMAPHORE_IF;fsfw/src/fsfw/osal/common/TcpTmTcServer.h
+0x2a01;IEC_NoConfigurationTable;;1;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a02;IEC_NoCpuTable;;2;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a03;IEC_InvalidWorkspaceAddress;;3;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a04;IEC_TooLittleWorkspace;;4;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a05;IEC_WorkspaceAllocation;;5;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a06;IEC_InterruptStackTooSmall;;6;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a07;IEC_ThreadExitted;;7;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a08;IEC_InconsistentMpInformation;;8;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a09;IEC_InvalidNode;;9;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a0a;IEC_NoMpci;;10;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a0b;IEC_BadPacket;;11;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a0c;IEC_OutOfPackets;;12;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a0d;IEC_OutOfGlobalObjects;;13;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a0e;IEC_OutOfProxies;;14;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a0f;IEC_InvalidGlobalId;;15;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a10;IEC_BadStackHook;;16;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a11;IEC_BadAttributes;;17;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a12;IEC_ImplementationKeyCreateInconsistency;;18;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a13;IEC_ImplementationBlockingOperationCancel;;19;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a14;IEC_MutexObtainFromBadState;;20;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2a15;IEC_UnlimitedAndMaximumIs0;;21;INTERNAL_ERROR_CODES;fsfw/src/fsfw/osal/InternalErrorCodes.h
+0x2600;FDI_YourFault;;0;HANDLES_FAILURES_IF;fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h
+0x2601;FDI_MyFault;;1;HANDLES_FAILURES_IF;fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h
+0x2602;FDI_ConfirmLater;;2;HANDLES_FAILURES_IF;fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h
+0x1e00;PUS_InvalidPusVersion;;0;PUS_IF;fsfw/src/fsfw/tmtcpacket/pus/PusIF.h
+0x1e01;PUS_InvalidCrc16;;1;PUS_IF;fsfw/src/fsfw/tmtcpacket/pus/PusIF.h
+0x0201;OM_InsertionFailed;;1;OBJECT_MANAGER_IF;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h
+0x0202;OM_NotFound;;2;OBJECT_MANAGER_IF;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h
+0x0203;OM_ChildInitFailed;;3;OBJECT_MANAGER_IF;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h
+0x0204;OM_InternalErrReporterUninit;;4;OBJECT_MANAGER_IF;fsfw/src/fsfw/objectmanager/ObjectManagerIF.h
+0x2201;TMF_Busy;;1;TM_STORE_FRONTEND_IF;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
+0x2202;TMF_LastPacketFound;;2;TM_STORE_FRONTEND_IF;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
+0x2203;TMF_StopFetch;;3;TM_STORE_FRONTEND_IF;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
+0x2204;TMF_Timeout;;4;TM_STORE_FRONTEND_IF;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
+0x2205;TMF_TmChannelFull;;5;TM_STORE_FRONTEND_IF;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
+0x2206;TMF_NotStored;;6;TM_STORE_FRONTEND_IF;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
+0x2207;TMF_AllDeleted;;7;TM_STORE_FRONTEND_IF;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
+0x2208;TMF_InvalidData;;8;TM_STORE_FRONTEND_IF;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
+0x2209;TMF_NotReady;;9;TM_STORE_FRONTEND_IF;fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
+0x2101;TMB_Busy;;1;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x2102;TMB_Full;;2;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x2103;TMB_Empty;;3;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x2104;TMB_NullRequested;;4;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x2105;TMB_TooLarge;;5;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x2106;TMB_NotReady;;6;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x2107;TMB_DumpError;;7;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x2108;TMB_CrcError;;8;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x2109;TMB_Timeout;;9;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x210a;TMB_IdlePacketFound;;10;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x210b;TMB_TelecommandFound;;11;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x210c;TMB_NoPusATm;;12;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x210d;TMB_TooSmall;;13;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x210e;TMB_BlockNotFound;;14;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x210f;TMB_InvalidRequest;;15;TM_STORE_BACKEND_IF;fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
+0x2d01;PAW_UnknownDatatype;;1;PARAMETER_WRAPPER;fsfw/src/fsfw/parameters/ParameterWrapper.h
+0x2d02;PAW_DatatypeMissmatch;;2;PARAMETER_WRAPPER;fsfw/src/fsfw/parameters/ParameterWrapper.h
+0x2d03;PAW_Readonly;;3;PARAMETER_WRAPPER;fsfw/src/fsfw/parameters/ParameterWrapper.h
+0x2d04;PAW_TooBig;;4;PARAMETER_WRAPPER;fsfw/src/fsfw/parameters/ParameterWrapper.h
+0x2d05;PAW_SourceNotSet;;5;PARAMETER_WRAPPER;fsfw/src/fsfw/parameters/ParameterWrapper.h
+0x2d06;PAW_OutOfBounds;;6;PARAMETER_WRAPPER;fsfw/src/fsfw/parameters/ParameterWrapper.h
+0x2d07;PAW_NotSet;;7;PARAMETER_WRAPPER;fsfw/src/fsfw/parameters/ParameterWrapper.h
+0x2d08;PAW_ColumnOrRowsZero;;8;PARAMETER_WRAPPER;fsfw/src/fsfw/parameters/ParameterWrapper.h
+0x2e01;HPA_InvalidIdentifierId;;1;HAS_PARAMETERS_IF;fsfw/src/fsfw/parameters/HasParametersIF.h
+0x2e02;HPA_InvalidDomainId;;2;HAS_PARAMETERS_IF;fsfw/src/fsfw/parameters/HasParametersIF.h
+0x2e03;HPA_InvalidValue;;3;HAS_PARAMETERS_IF;fsfw/src/fsfw/parameters/HasParametersIF.h
+0x2e05;HPA_ReadOnly;;5;HAS_PARAMETERS_IF;fsfw/src/fsfw/parameters/HasParametersIF.h
+0x3b01;SPH_SemaphoreTimeout;;1;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
+0x3b02;SPH_SemaphoreNotOwned;;2;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
+0x3b03;SPH_SemaphoreInvalid;;3;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h
+0x1a01;TRC_NotEnoughSensors;;1;TRIPLE_REDUNDACY_CHECK;fsfw/src/fsfw/monitoring/TriplexMonitor.h
+0x1a02;TRC_LowestValueOol;;2;TRIPLE_REDUNDACY_CHECK;fsfw/src/fsfw/monitoring/TriplexMonitor.h
+0x1a03;TRC_HighestValueOol;;3;TRIPLE_REDUNDACY_CHECK;fsfw/src/fsfw/monitoring/TriplexMonitor.h
+0x1a04;TRC_BothValuesOol;;4;TRIPLE_REDUNDACY_CHECK;fsfw/src/fsfw/monitoring/TriplexMonitor.h
+0x1a05;TRC_DuplexOol;;5;TRIPLE_REDUNDACY_CHECK;fsfw/src/fsfw/monitoring/TriplexMonitor.h
+0x3101;LIM_Unchecked;;1;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h
+0x3102;LIM_Invalid;;2;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h
+0x3103;LIM_Unselected;;3;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h
+0x3104;LIM_BelowLowLimit;;4;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h
+0x3105;LIM_AboveHighLimit;;5;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h
+0x3106;LIM_UnexpectedValue;;6;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h
+0x3107;LIM_OutOfRange;;7;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h
+0x31a0;LIM_FirstSample;;160;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h
+0x31e0;LIM_InvalidSize;;224;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h
+0x31e1;LIM_WrongType;;225;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h
+0x31e2;LIM_WrongPid;;226;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h
+0x31e3;LIM_WrongLimitId;;227;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h
+0x31ee;LIM_MonitorNotFound;;238;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h
+0x3601;CFDP_InvalidTlvType;;1;CFDP;fsfw/src/fsfw/cfdp/definitions.h
+0x3602;CFDP_InvalidDirectiveFields;;2;CFDP;fsfw/src/fsfw/cfdp/definitions.h
+0x3603;CFDP_InvalidPduDatafieldLen;;3;CFDP;fsfw/src/fsfw/cfdp/definitions.h
+0x3604;CFDP_InvalidAckDirectiveFields;;4;CFDP;fsfw/src/fsfw/cfdp/definitions.h
+0x3605;CFDP_MetadataCantParseOptions;;5;CFDP;fsfw/src/fsfw/cfdp/definitions.h
+0x3606;CFDP_FinishedCantParseFsResponses;;6;CFDP;fsfw/src/fsfw/cfdp/definitions.h
+0x3608;CFDP_FilestoreRequiresSecondFile;;8;CFDP;fsfw/src/fsfw/cfdp/definitions.h
+0x3609;CFDP_FilestoreResponseCantParseFsMessage;;9;CFDP;fsfw/src/fsfw/cfdp/definitions.h
+0x2c01;CCS_BcIsSetVrCommand;;1;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2c02;CCS_BcIsUnlockCommand;;2;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cb0;CCS_BcIllegalCommand;;176;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cb1;CCS_BoardReadingNotFinished;;177;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cf0;CCS_NsPositiveW;;240;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cf1;CCS_NsNegativeW;;241;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cf2;CCS_NsLockout;;242;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cf3;CCS_FarmInLockout;;243;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cf4;CCS_FarmInWait;;244;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2ce0;CCS_WrongSymbol;;224;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2ce1;CCS_DoubleStart;;225;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2ce2;CCS_StartSymbolMissed;;226;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2ce3;CCS_EndWithoutStart;;227;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2ce4;CCS_TooLarge;;228;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2ce5;CCS_TooShort;;229;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2ce6;CCS_WrongTfVersion;;230;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2ce7;CCS_WrongSpacecraftId;;231;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2ce8;CCS_NoValidFrameType;;232;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2ce9;CCS_CrcFailed;;233;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cea;CCS_VcNotFound;;234;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2ceb;CCS_ForwardingFailed;;235;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cec;CCS_ContentTooLarge;;236;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2ced;CCS_ResidualData;;237;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cee;CCS_DataCorrupted;;238;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cef;CCS_IllegalSegmentationFlag;;239;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cd0;CCS_IllegalFlagCombination;;208;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cd1;CCS_ShorterThanHeader;;209;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cd2;CCS_TooShortBlockedPacket;;210;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x2cd3;CCS_TooShortMapExtraction;;211;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
+0x4201;PUS11_InvalidTypeTimeWindow;;1;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
+0x4202;PUS11_TimeshiftingNotPossible;;2;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
+0x4203;PUS11_InvalidRelativeTime;;3;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
+0x3401;DC_NoReplyReceived;;1;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
+0x3402;DC_ProtocolError;;2;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
+0x3403;DC_Nullpointer;;3;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
+0x3404;DC_InvalidCookieType;;4;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
+0x3405;DC_NotActive;;5;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
+0x3406;DC_TooMuchData;;6;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
+0x03a0;DHB_InvalidChannel;;160;DEVICE_HANDLER_BASE;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h
+0x03b0;DHB_AperiodicReply;;176;DEVICE_HANDLER_BASE;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h
+0x03b1;DHB_IgnoreReplyData;;177;DEVICE_HANDLER_BASE;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h
+0x03b2;DHB_IgnoreFullPacket;;178;DEVICE_HANDLER_BASE;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h
+0x03c0;DHB_NothingToSend;;192;DEVICE_HANDLER_BASE;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h
+0x03c2;DHB_CommandMapError;;194;DEVICE_HANDLER_BASE;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h
+0x03d0;DHB_NoSwitch;;208;DEVICE_HANDLER_BASE;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h
+0x03e0;DHB_ChildTimeout;;224;DEVICE_HANDLER_BASE;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h
+0x03e1;DHB_SwitchFailed;;225;DEVICE_HANDLER_BASE;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h
+0x1201;AB_NeedSecondStep;;1;ASSEMBLY_BASE;fsfw/src/fsfw/devicehandlers/AssemblyBase.h
+0x1202;AB_NeedToReconfigure;;2;ASSEMBLY_BASE;fsfw/src/fsfw/devicehandlers/AssemblyBase.h
+0x1203;AB_ModeFallback;;3;ASSEMBLY_BASE;fsfw/src/fsfw/devicehandlers/AssemblyBase.h
+0x1204;AB_ChildNotCommandable;;4;ASSEMBLY_BASE;fsfw/src/fsfw/devicehandlers/AssemblyBase.h
+0x1205;AB_NeedToChangeHealth;;5;ASSEMBLY_BASE;fsfw/src/fsfw/devicehandlers/AssemblyBase.h
+0x12a1;AB_NotEnoughChildrenInCorrectState;;161;ASSEMBLY_BASE;fsfw/src/fsfw/devicehandlers/AssemblyBase.h
+0x27a0;DHI_NoCommandData;;160;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27a1;DHI_CommandNotSupported;;161;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27a2;DHI_CommandAlreadySent;;162;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27a3;DHI_CommandWasNotSent;;163;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27a4;DHI_CantSwitchAddress;;164;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27a5;DHI_WrongModeForCommand;;165;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27a6;DHI_Timeout;;166;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27a7;DHI_Busy;;167;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27a8;DHI_NoReplyExpected;;168;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27a9;DHI_NonOpTemperature;;169;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27aa;DHI_CommandNotImplemented;;170;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27b0;DHI_ChecksumError;;176;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27b1;DHI_LengthMissmatch;;177;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27b2;DHI_InvalidData;;178;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27b3;DHI_ProtocolError;;179;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27c0;DHI_DeviceDidNotExecute;;192;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27c1;DHI_DeviceReportedError;;193;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27c2;DHI_UnknownDeviceReply;;194;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27c3;DHI_DeviceReplyInvalid;;195;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27d0;DHI_InvalidCommandParameter;;208;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x27d1;DHI_InvalidNumberOrLengthOfParameters;;209;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
+0x2401;MT_TooDetailedRequest;;1;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
+0x2402;MT_TooGeneralRequest;;2;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
+0x2403;MT_NoMatch;;3;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
+0x2404;MT_Full;;4;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
+0x2405;MT_NewNodeCreated;;5;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
+0x3f01;DLEE_StreamTooShort;;1;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleEncoder.h
+0x3f02;DLEE_DecodingError;;2;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleEncoder.h
+0x2f01;ASC_TooLongForTargetType;;1;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/AsciiConverter.h
+0x2f02;ASC_InvalidCharacters;;2;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/AsciiConverter.h
+0x2f03;ASC_BufferTooSmall;;3;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/AsciiConverter.h
+0x1701;HHI_ObjectNotHealthy;;1;HAS_HEALTH_IF;fsfw/src/fsfw/health/HasHealthIF.h
+0x1702;HHI_InvalidHealthState;;2;HAS_HEALTH_IF;fsfw/src/fsfw/health/HasHealthIF.h
+0x1703;HHI_IsExternallyControlled;;3;HAS_HEALTH_IF;fsfw/src/fsfw/health/HasHealthIF.h
+0x3201;CF_ObjectHasNoFunctions;;1;COMMANDS_ACTIONS_IF;fsfw/src/fsfw/action/CommandsActionsIF.h
+0x3202;CF_AlreadyCommanding;;2;COMMANDS_ACTIONS_IF;fsfw/src/fsfw/action/CommandsActionsIF.h
+0x3301;HF_IsBusy;;1;HAS_ACTIONS_IF;fsfw/src/fsfw/action/HasActionsIF.h
+0x3302;HF_InvalidParameters;;2;HAS_ACTIONS_IF;fsfw/src/fsfw/action/HasActionsIF.h
+0x3303;HF_ExecutionFinished;;3;HAS_ACTIONS_IF;fsfw/src/fsfw/action/HasActionsIF.h
+0x3304;HF_InvalidActionId;;4;HAS_ACTIONS_IF;fsfw/src/fsfw/action/HasActionsIF.h
+0x1000;TIM_UnsupportedTimeFormat;;0;CCSDS_TIME_HELPER_CLASS;fsfw/src/fsfw/timemanager/CCSDSTime.h
+0x1001;TIM_NotEnoughInformationForTargetFormat;;1;CCSDS_TIME_HELPER_CLASS;fsfw/src/fsfw/timemanager/CCSDSTime.h
+0x1002;TIM_LengthMismatch;;2;CCSDS_TIME_HELPER_CLASS;fsfw/src/fsfw/timemanager/CCSDSTime.h
+0x1003;TIM_InvalidTimeFormat;;3;CCSDS_TIME_HELPER_CLASS;fsfw/src/fsfw/timemanager/CCSDSTime.h
+0x1004;TIM_InvalidDayOfYear;;4;CCSDS_TIME_HELPER_CLASS;fsfw/src/fsfw/timemanager/CCSDSTime.h
+0x1005;TIM_TimeDoesNotFitFormat;;5;CCSDS_TIME_HELPER_CLASS;fsfw/src/fsfw/timemanager/CCSDSTime.h
+0x3701;TSI_BadTimestamp;;1;TIME_STAMPER_IF;fsfw/src/fsfw/timemanager/TimeStampIF.h
+0x3c00;LPIF_PoolEntryNotFound;;0;LOCAL_POOL_OWNER_IF;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h
+0x3c01;LPIF_PoolEntryTypeConflict;;1;LOCAL_POOL_OWNER_IF;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h
+0x3e00;HKM_QueueOrDestinationInvalid;;0;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
+0x3e01;HKM_WrongHkPacketType;;1;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
+0x3e02;HKM_ReportingStatusUnchanged;;2;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
+0x3e03;HKM_PeriodicHelperInvalid;;3;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
+0x3e04;HKM_PoolobjectNotFound;;4;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
+0x3e05;HKM_DatasetNotFound;;5;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
+0x2901;TC_InvalidTargetState;;1;THERMAL_COMPONENT_IF;fsfw/src/fsfw/thermal/ThermalComponentIF.h
+0x29f1;TC_AboveOperationalLimit;;241;THERMAL_COMPONENT_IF;fsfw/src/fsfw/thermal/ThermalComponentIF.h
+0x29f2;TC_BelowOperationalLimit;;242;THERMAL_COMPONENT_IF;fsfw/src/fsfw/thermal/ThermalComponentIF.h
+0x2001;CSB_ExecutionComplete;;1;COMMAND_SERVICE_BASE;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
+0x2002;CSB_NoStepMessage;;2;COMMAND_SERVICE_BASE;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
+0x2003;CSB_ObjectBusy;;3;COMMAND_SERVICE_BASE;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
+0x2004;CSB_Busy;;4;COMMAND_SERVICE_BASE;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
+0x2005;CSB_InvalidTc;;5;COMMAND_SERVICE_BASE;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
+0x2006;CSB_InvalidObject;;6;COMMAND_SERVICE_BASE;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
+0x2007;CSB_InvalidReply;;7;COMMAND_SERVICE_BASE;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
+0x4c00;SPPA_NoPacketFound;;0;SPACE_PACKET_PARSER;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h
+0x4c01;SPPA_SplitPacket;;1;SPACE_PACKET_PARSER;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h
+0x1d01;ATC_ActivityStarted;;1;ACCEPTS_TELECOMMANDS_IF;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h
+0x1d02;ATC_InvalidSubservice;;2;ACCEPTS_TELECOMMANDS_IF;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h
+0x1d03;ATC_IllegalApplicationData;;3;ACCEPTS_TELECOMMANDS_IF;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h
+0x1d04;ATC_SendTmFailed;;4;ACCEPTS_TELECOMMANDS_IF;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h
+0x1d05;ATC_Timeout;;5;ACCEPTS_TELECOMMANDS_IF;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h
+0x6b00;SCBU_KeyNotFound;;0;SCRATCH_BUFFER;bsp_q7s/memory/scratchApi.h
+0x64a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;160;FILE_SYSTEM_HELPER;bsp_q7s/memory/FilesystemHelper.h
+0x64a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;161;FILE_SYSTEM_HELPER;bsp_q7s/memory/FilesystemHelper.h
+0x6a00;SDMA_OpOngoing;;0;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h
+0x6a01;SDMA_AlreadyOn;;1;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h
+0x6a02;SDMA_AlreadyMounted;;2;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h
+0x6a03;SDMA_AlreadyOff;;3;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h
+0x6a0a;SDMA_StatusFileNexists;;10;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h
+0x6a0b;SDMA_StatusFileFormatInvalid;;11;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h
+0x6a0c;SDMA_MountError;;12;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h
+0x6a0d;SDMA_UnmountError;;13;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h
+0x6a0e;SDMA_SystemCallError;;14;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h
+0x6a0f;SDMA_PopenCallError;;15;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h
diff --git a/deps/spacepackets b/deps/spacepackets
new file mode 160000
index 0000000..da28596
--- /dev/null
+++ b/deps/spacepackets
@@ -0,0 +1 @@
+Subproject commit da2859688bc36ac258f0d75edbc2768761f34f31
diff --git a/deps/tmtccmd b/deps/tmtccmd
new file mode 160000
index 0000000..30129ee
--- /dev/null
+++ b/deps/tmtccmd
@@ -0,0 +1 @@
+Subproject commit 30129ee38f0d1627ae0cb1a327a39ab4e3e2795f
diff --git a/gomspace/gomspace_common.py b/gomspace/gomspace_common.py
index 6e82950..e760849 100644
--- a/gomspace/gomspace_common.py
+++ b/gomspace/gomspace_common.py
@@ -7,10 +7,13 @@
@date 17.12.2020
"""
import enum
+import struct
+from typing import Union
-from tmtccmd.tc.pus_8_funccmd import generate_action_command
-from tmtccmd.tc.definitions import PusTelecommand
-from tmtccmd.utility import ObjectId
+from spacepackets.ecss import PusTelecommand
+from tmtccmd.tc import DefaultPusQueueHelper
+from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd
+from tmtccmd.util import ObjectIdU32
class GomspaceDeviceActionIds(enum.IntEnum):
@@ -26,15 +29,21 @@ class GomspaceDeviceActionIds(enum.IntEnum):
class GomspaceOpCodes:
# Request HK
- REQUEST_CORE_HK_ONCE = ["hk-core", "128"]
- REQUEST_AUX_HK_ONCE = ["hk-aux", "129"]
+ 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"]
+ GET_PARAM = ["get_param", "132"]
+ SET_PARAM = ["set_param", "133"]
-class Info:
+class GsInfo:
REQUEST_CORE_HK_ONCE = "Requesting Core HK once"
REQUEST_AUX_HK_ONCE = "Requesting Aux HK once"
+ PRINT_SWITCH_V_I = "Print Switch V I Info"
+ PRINT_LATCHUPS = "Print latchups"
+ GET_PARAMETER = "Get parameter"
+ SET_PARAMETER = "Set parameter"
class SetIds:
@@ -69,29 +78,35 @@ class Channel:
def pack_get_param_command(
- object_id: bytes, table_id: int, memory_address: bytearray, parameter_size: int
+ object_id: bytes,
+ table_id: int,
+ memory_address: Union[int, bytes],
+ parameter_size: int,
) -> PusTelecommand:
"""Function to generate a command to retrieve parameters like the temperature from a gomspace device.
@param object_id: The object id of the gomspace device handler.
@param table_id: The table id of the gomspace device
@param memory_address: Address offset within table of the value to read.
- @param parameter_size: Size of the value to read. E.g. temperature is uint16_t and thus parameter_size is 2
+ @param parameter_size: Size of the value to read. E.g. temperature is uint16_t and thus
+ parameter_size is 2
@return: The command as bytearray.
"""
- app_data = bytearray()
- app_data.append(table_id)
- app_data.extend(memory_address)
- app_data.append(parameter_size)
- return generate_action_command(
+ app_data = struct.pack("!B", table_id)
+ if isinstance(memory_address, int):
+ app_data += struct.pack("!H", memory_address)
+ else:
+ app_data += memory_address
+ app_data += struct.pack("!B", parameter_size)
+ return make_fsfw_action_cmd(
object_id=object_id,
action_id=GomspaceDeviceActionIds.PARAM_GET,
- app_data=app_data,
+ user_data=app_data,
)
def pack_set_param_command(
object_id: bytes,
- memory_address: bytearray,
+ memory_address: bytes,
parameter_size: int,
parameter: int,
ssc: int = 0,
@@ -112,10 +127,7 @@ def pack_set_param_command(
if parameter_size == 1:
app_data.append(parameter)
elif parameter_size == 2:
- byte_one = 0xFF00 & parameter >> 8
- byte_two = 0xFF & parameter
- app_data.append(byte_one)
- app_data.append(byte_two)
+ app_data += struct.pack("!H", parameter)
elif parameter_size == 4:
byte_one = 0xFF000000 & parameter >> 24
byte_two = 0xFF0000 & parameter >> 16
@@ -125,12 +137,35 @@ def pack_set_param_command(
app_data.append(byte_two)
app_data.append(byte_three)
app_data.append(byte_four)
- return generate_action_command(
- object_id=object_id, action_id=action_id, app_data=app_data, ssc=ssc
+ return make_fsfw_action_cmd(
+ object_id=object_id, action_id=action_id, user_data=app_data
)
-def pack_ping_command(object_id: ObjectId, data: bytearray) -> PusTelecommand:
+def prompt_and_pack_get_param_command(q: DefaultPusQueueHelper, object_id: ObjectIdU32):
+ table_id = int(input("Specify table ID: "))
+ memory_address = int(input("Specify memory address: 0x"), 16)
+ parameter_size = int(input("Specify parameter size: "))
+ q.add_pus_tc(
+ pack_get_param_command(
+ object_id.as_bytes, table_id, memory_address, parameter_size
+ )
+ )
+
+
+def prompt_and_pack_set_param_command(q: DefaultPusQueueHelper, object_id: ObjectIdU32):
+ memory_address = int(input("Specify memory address: 0x"), 16)
+ memory_address = struct.pack("!H", memory_address)
+ parameter_size = int(input("Specify parameter size: "))
+ parameter = int(input("Specify parameter: "))
+ q.add_pus_tc(
+ pack_set_param_command(
+ object_id.as_bytes, memory_address, parameter_size, parameter
+ )
+ )
+
+
+def pack_ping_command(object_id: ObjectIdU32, data: bytearray) -> PusTelecommand:
""" " Function to generate the command to ping a gomspace device
@param object_id Object Id of the gomspace device handler.
@param data Bytearray containing the bytes to send to the gomspace device. For now the on board software
@@ -138,36 +173,36 @@ def pack_ping_command(object_id: ObjectId, data: bytearray) -> PusTelecommand:
@note The ping request sends the specified data to a gompsace device. These
data are simply copied by the device and then sent back.
"""
- return generate_action_command(
+ return make_fsfw_action_cmd(
object_id=object_id.as_bytes,
action_id=GomspaceDeviceActionIds.PING,
- app_data=data,
+ user_data=data,
)
-def pack_gnd_wdt_reset_command(object_id: ObjectId) -> PusTelecommand:
+def pack_gnd_wdt_reset_command(object_id: ObjectIdU32) -> PusTelecommand:
""" " Function to generate the command to reset the watchdog of a gomspace device.
@param object_id Object Id of the gomspace device handler.
"""
- return generate_action_command(
+ return make_fsfw_action_cmd(
object_id=object_id.as_bytes, action_id=GomspaceDeviceActionIds.WDT_RESET
)
-def pack_reboot_command(object_id: ObjectId) -> PusTelecommand:
+def pack_reboot_command(object_id: ObjectIdU32) -> PusTelecommand:
"""Function to generate the command which triggers a reboot of a gomspace device
@param object_id The object id of the gomspace device handler.
"""
- return generate_action_command(
+ return make_fsfw_action_cmd(
object_id=object_id.as_bytes, action_id=GomspaceDeviceActionIds.REBOOT
)
-def pack_request_full_hk_table_command(object_id: ObjectId) -> PusTelecommand:
+def pack_request_full_hk_table_command(object_id: ObjectIdU32) -> PusTelecommand:
"""Function to generate the command to request the full housekeeping table from a gomspace
device.
@param object_id The object id of the gomspace device handler.
"""
- return generate_action_command(
+ return make_fsfw_action_cmd(
object_id=object_id.as_bytes, action_id=GomspaceDeviceActionIds.REQUEST_HK_TABLE
)
diff --git a/gomspace/gomspace_pdu_definitions.py b/gomspace/gomspace_pdu_definitions.py
index f695737..5699b92 100644
--- a/gomspace/gomspace_pdu_definitions.py
+++ b/gomspace/gomspace_pdu_definitions.py
@@ -1,7 +1,7 @@
from gomspace.gomspace_common import TableEntry
-class PDUConfigTable:
+class PduConfigTable:
out_en_0 = TableEntry(bytearray([0x00, 0x48]), TableEntry.uint8_size)
out_en_1 = TableEntry(bytearray([0x00, 0x49]), TableEntry.uint8_size)
out_en_2 = TableEntry(bytearray([0x00, 0x4A]), TableEntry.uint8_size)
@@ -15,7 +15,20 @@ class PDUConfigTable:
cur_lu_lim_0 = TableEntry(bytearray([0x00, 0xB8]), TableEntry.uint16_size)
-class PDUHkTable:
+PDU_CONFIG_LIST = [
+ PduConfigTable.out_en_0,
+ PduConfigTable.out_en_1,
+ PduConfigTable.out_en_2,
+ PduConfigTable.out_en_3,
+ PduConfigTable.out_en_4,
+ PduConfigTable.out_en_5,
+ PduConfigTable.out_en_6,
+ PduConfigTable.out_en_7,
+ PduConfigTable.out_en_8,
+]
+
+
+class PduHkTable:
temperature = TableEntry(bytearray([0x00, 0x28]), TableEntry.uint16_size)
# Ground WDT value (remaining seconds until reboot)
wdt_gnd_left = TableEntry(bytearray([0x00, 0x80]), TableEntry.uint32_size)
diff --git a/pus_tc/cmd_definitions.py b/pus_tc/cmd_definitions.py
index e8f8266..f9fe83e 100644
--- a/pus_tc/cmd_definitions.py
+++ b/pus_tc/cmd_definitions.py
@@ -1,622 +1,282 @@
-from pus_tc.system.proc import add_proc_cmds
-from tmtccmd.config import (
- add_op_code_entry,
- add_service_op_code_entry,
- generate_op_code_options,
- ServiceOpCodeDictT,
- OpCodeDictKeys,
-)
-from tmtccmd.config.globals import get_default_service_op_code_dict
-
-from pus_tc.devs.gps import GpsOpCodes
-from pus_tc.devs.pcdu import add_pcdu_cmds
-from pus_tc.devs.plpcdu import add_pl_pcdu_cmds
-from pus_tc.devs.rad_sensor import add_rad_sens_cmds
-from pus_tc.system.core import add_core_controller_definitions
-from pus_tc.devs.heater import add_heater_cmds
-from pus_tc.devs.rtd import specify_rtd_cmds
-from pus_tc.devs.reaction_wheels import add_rw_cmds
from pus_tc.devs.bpx_batt import BpxOpCodes
from config.definitions import CustomServiceList
+from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry, CoreServiceList
+from tmtccmd.config.tmtc import (
+ tmtc_definitions_provider,
+ call_all_definitions_providers,
+)
+from tmtccmd.config.globals import get_default_tmtc_defs
-def get_eive_service_op_code_dict() -> ServiceOpCodeDictT:
- service_op_code_dict = get_default_service_op_code_dict()
- 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)
- specify_rtd_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)
- add_proc_cmds(cmd_dict=service_op_code_dict)
- return 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,
+def get_eive_service_op_code_dict() -> TmtcDefinitionWrapper:
+ """Call all registered TMTC definition providers. They were registered using
+ the :py:func:`tmtc_definitions_provider` decorator.
+ """
+ def_wrapper = get_default_tmtc_defs()
+ srv_5 = OpCodeEntry()
+ srv_5.add("0", "Event Test")
+ def_wrapper.add_service(
+ name=CoreServiceList.SERVICE_5.value,
+ info="PUS Service 5 Event",
+ op_code_entry=srv_5,
)
- cmd_dict[CustomServiceList.SYRLINKS.value] = service_syrlinks_handler_tuple
+ srv_17 = OpCodeEntry()
+ srv_17.add("0", "Ping Test")
+ def_wrapper.add_service(
+ name=CoreServiceList.SERVICE_17_ALT,
+ info="PUS Service 17 Test",
+ op_code_entry=srv_17,
+ )
+ call_all_definitions_providers(def_wrapper)
+ return def_wrapper
-def add_bpx_cmd_definitions(cmd_dict: ServiceOpCodeDictT):
- op_code_dict = dict()
- add_op_code_entry(
- op_code_dict=op_code_dict, keys=BpxOpCodes.HK, info="Request BPX HK"
+@tmtc_definitions_provider
+def add_tmp_sens_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add("0", "TMP1075 Tests")
+ defs.add_service(CustomServiceList.TMP1075_1.value, "TMP1075 1", oce)
+ defs.add_service(CustomServiceList.TMP1075_2.value, "TMP1075 2", oce)
+
+
+@tmtc_definitions_provider
+def add_pdec_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add("0", "PDEC Handler: Print CLCW")
+ oce.add("1", "PDEC Handler: Print PDEC monitor")
+ defs.add_service(CustomServiceList.PDEC_HANDLER.value, "PDEC Handler", oce)
+
+
+@tmtc_definitions_provider
+def add_ccsds_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add("0", "CCSDS Handler: Set low rate")
+ oce.add("1", "CCSDS Handler: Set high rate")
+ oce.add("2", "CCSDS Handler: Enable transmitter")
+ oce.add("3", "CCSDS Handler: Disable transmitter")
+ oce.add("4", "CCSDS Handler: Set arbitrary bitrate")
+ oce.add("5", "CCSDS Handler: Enable tx clock manipulator")
+ oce.add("6", "CCSDS Handler: Disable tx clock manipulator")
+ oce.add("7", "CCSDS Handler: Update tx data on rising edge")
+ oce.add("8", "CCSDS Handler: Update tx data on falling edge")
+ defs.add_service(CustomServiceList.CCSDS_HANDLER.value, "CCSDS Handler", oce)
+
+
+@tmtc_definitions_provider
+def add_str_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add("0", "Star Tracker: Mode On, Submode Bootloader")
+ oce.add("1", "Star Tracker: Mode On, Submode Firmware")
+ oce.add("2", "Star Tracker: Mode Normal")
+ oce.add("3", "Star Tracker: Mode Off")
+ oce.add("4", "Star Tracker: Mode Raw")
+ oce.add("5", "Star Tracker: Ping")
+ oce.add("6", "Star Tracker: Switch to bootloader program")
+ oce.add("7", "Star Tracker: Request temperature")
+ oce.add("8", "Star Tracker: Request version")
+ oce.add("9", "Star Tracker: Request interface")
+ oce.add("10", "Star Tracker: Request power")
+ oce.add("11", "Star Tracker: Set subscription parameters")
+ oce.add("12", "Star Tracker: Boot image (requires bootloader mode)")
+ oce.add("13", "Star Tracker: Request time")
+ oce.add("14", "Star Tracker: Request solution")
+ oce.add("15", "Star Tracker: Upload image")
+ oce.add("16", "Star Tracker: Download image")
+ oce.add("17", "Star Tracker: Set limit parameters")
+ oce.add("17", "Star Tracker: Set limit parameters")
+ oce.add("18", "Star Tracker: Set tracking parameters")
+ oce.add("19", "Star Tracker: Set mounting parameters")
+ oce.add("20", "Star Tracker: Set camera parameters")
+ oce.add("22", "Star Tracker: Set centroiding parameters")
+ oce.add("23", "Star Tracker: Set LISA parameters")
+ oce.add("24", "Star Tracker: Set matching parameters")
+ oce.add("25", "Star Tracker: Set validation parameters")
+ oce.add("26", "Star Tracker: Set algo parameters")
+ oce.add("27", "Star Tracker: Take image")
+ oce.add("28", "Star Tracker: Stop str helper")
+ oce.add("30", "Star Tracker: Set name of download image")
+ oce.add("31", "Star Tracker: Request histogram")
+ oce.add("32", "Star Tracker: Request contrast")
+ oce.add("33", "Star Tracker: Set json filename")
+ oce.add("35", "Star Tracker: Flash read")
+ oce.add("36", "Star Tracker: Set flash read filename")
+ oce.add("37", "Star Tracker: Get checksum")
+ oce.add("49", "Star Tracker: Request camera parameter")
+ oce.add("50", "Star Tracker: Request limits")
+ oce.add("51", "Star Tracker: Set image processor parameters")
+ oce.add("52", "Star Tracker: (EGSE only) Load camera ground config")
+ oce.add("53", "Star Tracker: (EGSE only) Load camera flight config")
+ oce.add("54", "Star Tracker: Request log level parameters")
+ oce.add("55", "Star Tracker: Request mounting parameters")
+ oce.add("56", "Star Tracker: Request image processor parameters")
+ oce.add("57", "Star Tracker: Request centroiding parameters")
+ oce.add("58", "Star Tracker: Request lisa parameters")
+ oce.add("59", "Star Tracker: Request matching parameters")
+ oce.add("60", "Star Tracker: Request tracking parameters")
+ oce.add("61", "Star Tracker: Request validation parameters")
+ oce.add("62", "Star Tracker: Request algo parameters")
+ oce.add("63", "Star Tracker: Request subscription parameters")
+ oce.add("64", "Star Tracker: Request log subscription parameters")
+ oce.add("65", "Star Tracker: Request debug camera parameters")
+ oce.add("66", "Star Tracker: Set log level parameters")
+ oce.add("67", "Star Tracker: Set log subscription parameters")
+ oce.add("68", "Star Tracker: Set debug camera parameters")
+ oce.add("69", "Star Tracker: Firmware update")
+ oce.add("70", "Star Tracker: Disable timestamp generation")
+ oce.add("71", "Star Tracker: Enable timestamp generation")
+ defs.add_service(CustomServiceList.STAR_TRACKER.value, "Star Tracker", oce)
+
+
+@tmtc_definitions_provider
+def add_syrlinks_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add("0", "Syrlinks Handler: Set mode off")
+ oce.add("1", "Syrlinks Handler: Set mode on")
+ oce.add("2", "Syrlinks Handler: Set mode normal")
+ oce.add("3", "Syrlinks Handler: Set TX standby")
+ oce.add("4", "Syrlinks Handler: Set TX modulation")
+ oce.add("5", "Syrlinks Handler: Set TX carrier wave")
+ oce.add("6", "Syrlinks Handler: Read TX status")
+ oce.add("7", "Syrlinks Handler: Read TX waveform")
+ oce.add("8", "Syrlinks Handler: Read TX AGC value high byte")
+ oce.add("9", "Syrlinks Handler: Read TX AGC value low byte")
+ oce.add("12", "Syrlinks Handler: Write LCL config")
+ oce.add("13", "Syrlinks Handler: Read RX status registers")
+ oce.add("14", "Syrlinks Handler: Read LCL config register")
+ oce.add("15", "Syrlinks Handler: Set waveform OQPSK")
+ oce.add("16", "Syrlinks Handler: Set waveform BPSK")
+ oce.add("17", "Syrlinks Handler: Set second config")
+ oce.add("18", "Syrlinks Handler: Enable debug output")
+ oce.add("19", "Syrlinks Handler: Disable debug output")
+ defs.add_service(CustomServiceList.SYRLINKS.value, "Syrlinks Handler", oce)
+
+
+@tmtc_definitions_provider
+def add_bpx_cmd_definitions(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add(keys=BpxOpCodes.HK, info="Request BPX HK")
+ oce.add(keys=BpxOpCodes.RST_BOOT_CNT, info="Reset Boot Count")
+ oce.add(keys=BpxOpCodes.REQUEST_CFG, info="Request Configuration Struct (Step 1)")
+ oce.add(
+ keys=BpxOpCodes.REQUEST_CFG_HK, info="Request Configuration Struct HK (Step 2)"
)
- add_op_code_entry(
- op_code_dict=op_code_dict, keys=BpxOpCodes.RST_BOOT_CNT, info="Reset Boot Count"
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=BpxOpCodes.REQUEST_CFG,
- info="Request Configuration Struct (Step 1)",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=BpxOpCodes.REQUEST_CFG_HK,
- info="Request Configuration Struct HK (Step 2)",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict, keys=BpxOpCodes.REBOOT, info="Reboot Command"
- )
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
+ oce.add(keys=BpxOpCodes.REBOOT, info="Reboot Command")
+ defs.add_service(
name=CustomServiceList.BPX_BATTERY.value,
info="BPX Battery Handler",
- op_code_entry=op_code_dict,
+ op_code_entry=oce,
)
-def add_time_cmds(cmd_dict: ServiceOpCodeDictT):
+@tmtc_definitions_provider
+def add_time_cmds(defs: TmtcDefinitionWrapper):
from pus_tc.system.time import OpCodes, Info
- op_code_dict = dict()
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce = OpCodeEntry()
+ oce.add(
keys=OpCodes.SET_CURRENT_TIME,
info=Info.SET_CURRENT_TIME,
)
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
+ defs.add_service(
name=CustomServiceList.TIME.value,
info="Time Service",
- op_code_entry=op_code_dict,
+ op_code_entry=oce,
)
-def add_imtq_cmds(cmd_dict: ServiceOpCodeDictT):
- op_code_dict_srv_imtq = {
- "0": ("Mode off", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "1": ("Mode on", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "2": ("Mode normal", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "3": ("IMTQ perform pos X self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "4": ("IMTQ perform neg X self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "5": ("IMTQ perform pos Y self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "6": ("IMTQ perform neg Y self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "7": ("IMTQ perform pos Z self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "8": ("IMTQ perform neg Z self test", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "9": ("IMTQ command dipole", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "10": ("IMTQ get commanded dipole", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "11": ("IMTQ get engineering hk set", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "12": (
- "IMTQ get calibrated MTM measurement one shot",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "13": ("IMTQ get raw MTM measurement one shot", {OpCodeDictKeys.TIMEOUT: 2.0}),
- }
- service_imtq_tuple = ("IMTQ Device", op_code_dict_srv_imtq)
- cmd_dict[CustomServiceList.IMTQ.value] = service_imtq_tuple
+@tmtc_definitions_provider
+def add_imtq_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add("0", "Mode Off")
+ oce.add("1", "Mode On")
+ oce.add("2", "Mode Normal")
+ oce.add("3", "IMTQ perform pos X self test")
+ oce.add("4", "IMTQ perform neg X self test")
+ oce.add("5", "IMTQ perform pos Y self test")
+ oce.add("6", "IMTQ perform neg Y self test")
+ oce.add("7", "IMTQ perform pos Z self test")
+ oce.add("8", "IMTQ perform neg Z self test")
+ oce.add("9", "IMTQ command dipole")
+ oce.add("10", "IMTQ get commanded dipole")
+ oce.add("11", "IMTQ get engineering hk set")
+ oce.add("12", "IMTQ get calibrated MTM measurement one shot")
+ oce.add("13", "IMTQ get raw MTM measurement one shot")
+ defs.add_service(CustomServiceList.IMTQ.value, "IMQT Device", oce)
-def add_ploc_mpsoc_cmds(cmd_dict: ServiceOpCodeDictT):
- op_code_dict_srv_ploc_mpsoc = {
- "0": ("Ploc MPSoC: Set mode off", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "1": ("Ploc MPSoC: Set mode on", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "2": ("Ploc MPSoC: Set mode normal", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "3": ("Ploc MPSoC: Memory write", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "4": ("Ploc MPSoC: Memory read", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "5": ("Ploc MPSoC: Flash write", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "6": ("Ploc MPSoC: Flash delete", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "7": ("Ploc MPSoC: Replay start", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "8": ("Ploc MPSoC: Replay stop", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "9": ("Ploc MPSoC: Downlink pwr on", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "10": ("Ploc MPSoC: Downlink pwr off", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "11": ("Ploc MPSoC: Replay write sequence", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "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}),
- "17": ("Ploc MPSoC: Set UART TX tristate", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "18": ("Ploc MPSoC: Relesase UART TX", {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
-
-
-def add_ploc_supv_cmds(cmd_dict: ServiceOpCodeDictT):
- op_code_dict_ploc_mem_dumper = {
- "0": ("PLOC Memory Dumper: MRAM dump", {OpCodeDictKeys.TIMEOUT: 2.0}),
- }
- service_ploc_memory_dumper_tuple = (
- "PLOC Memory Dumper",
- op_code_dict_ploc_mem_dumper,
- )
-
- op_code_dict_srv_ploc_supv = {
- "0": ("PLOC Supervisor: Set mode off", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "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}),
- "5": ("PLOC Supervisor: Start MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "6": ("PLOC Supervisor: Shutdown MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "7": (
- "PLOC Supervisor: Select MPSoC boot image",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "8": ("PLOC Supervisor: Set max restart tries", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "9": ("PLOC Supervisor: Reset MPSoC", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "10": ("PLOC Supervisor: Set time reference", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "11": ("PLOC Supervisor: Set boot timeout", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "12": ("PLOC Supervisor: Disable Hk", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "13": (
- "PLOC Supervisor: Request boot status report",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "17": ("PLOC Supervisor: Enable latchup alert", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "18": ("PLOC Supervisor: Disable latchup alert", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "20": ("PLOC Supervisor: Set alert limit", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "23": (
- "PLOC Supervisor: Set ADC enabled channels",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "24": (
- "PLOC Supervisor: Set ADC window and stride",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "25": ("PLOC Supervisor: Set ADC threshold", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "26": (
- "PLOC Supervisor: Request latchup status report",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "27": ("PLOC Supervisor: Copy ADC data to MRAM", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "30": ("PLOC Supervisor: Run auto EM tests", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "31": ("PLOC Supervisor: MRAM Wipe", {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}),
- "38": (
- "PLOC Supervisor: Factory reset clear all",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "39": (
- "PLOC Supervisor: Factory reset clear mirror entries",
- {OpCodeDictKeys.TIMEOUT: 2.0},
- ),
- "40": (
- "PLOC Supervisor: Factory reset clear circular entries",
- {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}),
- "57": ("PLOC Supervisor: Enable NVMs", {OpCodeDictKeys.TIMEOUT: 2.0}),
- "58": ("PLOC Supervisor: Continue update", {OpCodeDictKeys.TIMEOUT: 2.0}),
- }
- service_ploc_supv_tuple = ("PLOC Supervisor", op_code_dict_srv_ploc_supv)
- cmd_dict[CustomServiceList.PLOC_SUPV.value] = service_ploc_supv_tuple
- cmd_dict[
- CustomServiceList.PLOC_MEMORY_DUMPER.value
- ] = service_ploc_memory_dumper_tuple
-
-
-def add_system_cmds(cmd_dict: ServiceOpCodeDictT):
+@tmtc_definitions_provider
+def add_system_cmds(defs: TmtcDefinitionWrapper):
from pus_tc.system.acs import AcsOpCodes, SusOpCodes
- import pus_tc.system.tcs as tcs
import pus_tc.system.controllers as controllers
- default_opts = generate_op_code_options(
- enter_listener_mode=False, custom_timeout=8.0
- )
- op_code_dict = dict()
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce = OpCodeEntry()
+ oce.add(
keys=AcsOpCodes.ACS_ASS_A_SIDE,
info="Switch to ACS board A side",
- options=default_opts,
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=AcsOpCodes.ACS_ASS_B_SIDE,
info="Switch to ACS board B side",
- options=default_opts,
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=AcsOpCodes.ACS_ASS_DUAL_MODE,
info="Switch to ACS board dual mode",
- options=default_opts,
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=AcsOpCodes.ACS_ASS_A_ON,
info="Switch ACS board A side on",
- options=default_opts,
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=AcsOpCodes.ACS_ASS_B_ON,
info="Switch ACS board B side on",
- options=default_opts,
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=AcsOpCodes.ACS_ASS_DUAL_ON,
info="Switch ACS board dual mode on",
- options=default_opts,
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=AcsOpCodes.ACS_ASS_OFF,
info="Switch off ACS board",
- options=default_opts,
)
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
- name=CustomServiceList.ACS_ASS.value,
- info="ACS Assemblies",
- op_code_entry=op_code_dict,
+ defs.add_service(
+ name=CustomServiceList.ACS_ASS.value, info="ACS Assemblies", op_code_entry=oce
)
- op_code_dict = dict()
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce = OpCodeEntry()
+ oce.add(
keys=SusOpCodes.SUS_ASS_NOM_SIDE,
info="Switch SUS board to nominal side",
- options=default_opts,
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=SusOpCodes.SUS_ASS_RED_SIDE,
info="Switch SUS board to redundant side",
- options=default_opts,
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=SusOpCodes.SUS_ASS_OFF,
info="Switch off SUS board",
- options=default_opts,
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=SusOpCodes.SUS_ASS_DUAL_MODE,
info="Switch SUS board to dual mode",
- options=default_opts,
)
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
+ defs.add_service(
name=CustomServiceList.SUS_ASS.value,
info="SUS Assembly",
- op_code_entry=op_code_dict,
+ op_code_entry=oce,
)
- op_code_dict = dict()
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=tcs.OpCodes.TCS_BOARD_ASS_NORMAL,
- info=tcs.Info.TCS_BOARD_ASS_NORMAL,
- options=default_opts,
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=tcs.OpCodes.TCS_BOARD_ASS_OFF,
- info=tcs.Info.TCS_BOARD_ASS_OFF,
- options=default_opts,
- )
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
- name=CustomServiceList.TCS_ASS.value,
- info="TCS Board Assembly",
- op_code_entry=op_code_dict,
- )
-
- op_code_dict = dict()
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce = OpCodeEntry()
+ oce.add(
keys=controllers.OpCodes.THERMAL_CONTROLLER,
info=controllers.Info.THERMAL_CONTROLLER,
- options=default_opts,
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=controllers.OpCodes.CORE_CONTROLLER,
info=controllers.Info.CORE_CONTROLLER,
- options=default_opts,
)
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
+ defs.add_service(
name=CustomServiceList.CONTROLLERS.value,
info="Controllers",
- op_code_entry=op_code_dict,
+ op_code_entry=oce,
)
diff --git a/pus_tc/devs/__init__.py b/pus_tc/devs/__init__.py
index e69de29..bc05547 100644
--- a/pus_tc/devs/__init__.py
+++ b/pus_tc/devs/__init__.py
@@ -0,0 +1 @@
+from . import power
diff --git a/pus_tc/devs/acu.py b/pus_tc/devs/acu.py
index 06d6533..1070598 100644
--- a/pus_tc/devs/acu.py
+++ b/pus_tc/devs/acu.py
@@ -3,10 +3,13 @@
@author J. Meier, R. Mueller
@date 21.12.2020
"""
+import struct
+
from config.definitions import CustomServiceList
-from tmtccmd.config import add_op_code_entry, add_service_op_code_entry
-from tmtccmd.tc.packer import TcQueueT
-from tmtccmd.config.definitions import QueueCommands, ServiceOpCodeDictT
+from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
+from tmtccmd.config.tmtc import tmtc_definitions_provider
+
+from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_3_fsfw_hk import (
make_sid,
generate_one_diag_command,
@@ -14,11 +17,11 @@ from tmtccmd.tc.pus_3_fsfw_hk import (
)
import gomspace.gomspace_common as gs
from gomspace.gomspace_common import GomspaceOpCodes
-from gomspace.gomspace_common import Info as GsInfo
+from gomspace.gomspace_common import GsInfo as GsInfo
from config.object_ids import ACU_HANDLER_ID
from pus_tc.devs.p60dock import P60DockConfigTable
-from tmtccmd.tc.pus_8_funccmd import generate_action_command
-from tmtccmd.utility import ObjectId
+from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd
+from tmtccmd.util import ObjectIdU32
class ACUConfigTable:
@@ -46,60 +49,62 @@ class Info:
TEST = "ACU Test"
-def add_acu_cmds(cmd_dict: ServiceOpCodeDictT):
- op_code_dict = dict()
- add_op_code_entry(
- op_code_dict=op_code_dict,
+@tmtc_definitions_provider
+def add_acu_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add(
keys=GomspaceOpCodes.REQUEST_CORE_HK_ONCE,
info=GsInfo.REQUEST_CORE_HK_ONCE,
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=GomspaceOpCodes.REQUEST_AUX_HK_ONCE,
info=GsInfo.REQUEST_AUX_HK_ONCE,
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=GomspaceOpCodes.REQUEST_AUX_HK_ONCE,
info=GsInfo.REQUEST_AUX_HK_ONCE,
)
- add_op_code_entry(op_code_dict=op_code_dict, keys=OpCodes.TEST, info=Info.TEST)
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
- op_code_entry=op_code_dict,
+ oce.add(
+ keys=GomspaceOpCodes.GET_PARAM,
+ info=GsInfo.GET_PARAMETER,
+ )
+ oce.add(
+ keys=GomspaceOpCodes.SET_PARAM,
+ info=GsInfo.SET_PARAMETER,
+ )
+ oce.add(keys=OpCodes.TEST, info=Info.TEST)
+ defs.add_service(
name=CustomServiceList.ACU.value,
info="ACU Device",
+ op_code_entry=oce,
)
-def pack_acu_commands(
- object_id: ObjectId, tc_queue: TcQueueT, op_code: str
-) -> TcQueueT:
- tc_queue.appendleft((QueueCommands.PRINT, "Handling ACU command"))
+def pack_acu_commands(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str):
+ q.add_log_cmd("Handling ACU command")
if op_code in GomspaceOpCodes.PRINT_SWITCH_V_I:
- tc_queue.appendleft((QueueCommands.PRINT, "ACU: Print channel stats"))
- command = generate_action_command(
- object_id=object_id.as_bytes,
- action_id=gs.GomspaceDeviceActionIds.PRINT_SWITCH_V_I,
+ q.add_log_cmd("ACU: Print channel stats")
+ q.add_pus_tc(
+ make_fsfw_action_cmd(
+ object_id=object_id.as_bytes,
+ action_id=gs.GomspaceDeviceActionIds.PRINT_SWITCH_V_I,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
if op_code in GomspaceOpCodes.REQUEST_CORE_HK_ONCE:
- tc_queue.appendleft(
- (QueueCommands.PRINT, f"PDU1: {GsInfo.REQUEST_CORE_HK_ONCE}")
- )
+ q.add_log_cmd(f"ACU: {GsInfo.REQUEST_CORE_HK_ONCE}")
hk_sid = make_sid(object_id=object_id.as_bytes, set_id=gs.SetIds.ACU_CORE)
- command = generate_one_diag_command(sid=hk_sid, ssc=0)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(generate_one_diag_command(sid=hk_sid))
if op_code in GomspaceOpCodes.REQUEST_AUX_HK_ONCE:
- tc_queue.appendleft(
- (QueueCommands.PRINT, f"PDU1: {GsInfo.REQUEST_AUX_HK_ONCE}")
- )
+ q.add_log_cmd(f"ACU: {GsInfo.REQUEST_AUX_HK_ONCE}")
hk_sid = make_sid(object_id=object_id.as_bytes, set_id=gs.SetIds.ACU_AUX)
- command = generate_one_hk_command(sid=hk_sid, ssc=0)
- tc_queue.appendleft(command.pack_command_tuple())
- pack_test_cmds(object_id=object_id, tc_queue=tc_queue)
-
- return tc_queue
+ q.add_pus_tc(generate_one_hk_command(sid=hk_sid))
+ if op_code in GomspaceOpCodes.GET_PARAM:
+ q.add_log_cmd(f"ACU: {GsInfo.GET_PARAMETER}")
+ gs.prompt_and_pack_get_param_command(q, object_id)
+ if op_code in GomspaceOpCodes.SET_PARAM:
+ q.add_log_cmd(f"ACU: {GsInfo.SET_PARAMETER}")
+ gs.prompt_and_pack_set_param_command(q, object_id)
+ pack_test_cmds(object_id=object_id, q=q)
class ACUTestProcedure:
@@ -125,91 +130,84 @@ class ACUTestProcedure:
off = False
-def pack_test_cmds(object_id: ObjectId, tc_queue: TcQueueT):
+def pack_test_cmds(object_id: ObjectIdU32, q: DefaultPusQueueHelper):
if ACUTestProcedure.all or ACUTestProcedure.reboot:
- tc_queue.appendleft((QueueCommands.PRINT, "ACU: Reboot"))
- command = gs.pack_reboot_command(object_id)
- # command = PusTelecommand(service=8, subservice=128, ssc=22, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("ACU: Reboot")
+ q.add_pus_tc(gs.pack_reboot_command(object_id))
if ACUTestProcedure.all or ACUTestProcedure.read_gnd_wdt:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "ACU: Reading ground watchdog timer value")
+ q.add_log_cmd("ACU: Reading ground watchdog timer value")
+ q.add_pus_tc(
+ gs.pack_get_param_command(
+ object_id.as_bytes,
+ gs.TableIds.hk,
+ ACUHkTable.wdt_gnd_left.parameter_address,
+ ACUHkTable.wdt_gnd_left.parameter_size,
+ )
)
- command = gs.pack_get_param_command(
- object_id.as_bytes,
- gs.TableIds.hk,
- ACUHkTable.wdt_gnd_left.parameter_address,
- ACUHkTable.wdt_gnd_left.parameter_size,
- )
- # command = PusTelecommand(service=8, subservice=128, ssc=20, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
if ACUTestProcedure.all or ACUTestProcedure.gnd_wdt_reset:
- tc_queue.appendleft((QueueCommands.PRINT, "ACU: Testing ground watchdog reset"))
- command = gs.pack_gnd_wdt_reset_command(object_id)
- # command = PusTelecommand(service=8, subservice=128, ssc=21, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("ACU: Testing ground watchdog reset")
+ q.add_pus_tc(gs.pack_gnd_wdt_reset_command(object_id))
if ACUTestProcedure.all or ACUTestProcedure.ping:
- tc_queue.appendleft((QueueCommands.PRINT, "ACU: Ping Test"))
+ q.add_log_cmd("ACU: Ping Test")
ping_data = bytearray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- command = gs.pack_ping_command(object_id, ping_data)
- # command = PusTelecommand(service=8, subservice=128, ssc=22, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(gs.pack_ping_command(object_id, ping_data))
if ACUTestProcedure.all or ACUTestProcedure.read_temperature3:
- tc_queue.appendleft((QueueCommands.PRINT, "ACU: Reading temperature 3"))
- command = gs.pack_get_param_command(
- object_id.as_bytes,
- gs.TableIds.hk,
- ACUHkTable.temperature3.parameter_address,
- ACUHkTable.temperature3.parameter_size,
+ q.add_log_cmd("ACU: Reading temperature 3")
+ q.add_pus_tc(
+ gs.pack_get_param_command(
+ object_id.as_bytes,
+ gs.TableIds.hk,
+ ACUHkTable.temperature3.parameter_address,
+ ACUHkTable.temperature3.parameter_size,
+ )
)
- # command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
if ACUTestProcedure.all or ACUTestProcedure.read_vboost:
- tc_queue.appendleft((QueueCommands.PRINT, "ACU: Reading vboost value"))
- command = gs.pack_get_param_command(
- object_id.as_bytes,
- gs.TableIds.config,
- ACUConfigTable.vboost.parameter_address,
- ACUConfigTable.vboost.parameter_size,
+ q.add_log_cmd("ACU: Reading vboost value")
+ q.add_pus_tc(
+ gs.pack_get_param_command(
+ object_id.as_bytes,
+ gs.TableIds.config,
+ ACUConfigTable.vboost.parameter_address,
+ ACUConfigTable.vboost.parameter_size,
+ )
)
- # command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
if ACUTestProcedure.all or ACUTestProcedure.read_vbat_max_hi:
- tc_queue.appendleft((QueueCommands.PRINT, "ACU: Reading vbat_max_hi"))
- command = gs.pack_get_param_command(
- object_id.as_bytes,
- gs.TableIds.config,
- ACUConfigTable.vbat_max_hi.parameter_address,
- ACUConfigTable.vbat_max_hi.parameter_size,
+ q.add_log_cmd("ACU: Reading vbat_max_hi")
+ q.add_pus_tc(
+ gs.pack_get_param_command(
+ object_id.as_bytes,
+ gs.TableIds.config,
+ ACUConfigTable.vbat_max_hi.parameter_address,
+ ACUConfigTable.vbat_max_hi.parameter_size,
+ )
)
- # command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
if ACUTestProcedure.all or ACUTestProcedure.read_vbat_max_lo:
- tc_queue.appendleft((QueueCommands.PRINT, "ACU: Reading vbat_max_lo"))
- command = gs.pack_get_param_command(
- object_id.as_bytes,
- gs.TableIds.config,
- ACUConfigTable.vbat_max_lo.parameter_address,
- ACUConfigTable.vbat_max_lo.parameter_size,
+ q.add_log_cmd("ACU: Reading vbat_max_lo")
+ q.add_pus_tc(
+ gs.pack_get_param_command(
+ object_id.as_bytes,
+ gs.TableIds.config,
+ ACUConfigTable.vbat_max_lo.parameter_address,
+ ACUConfigTable.vbat_max_lo.parameter_size,
+ )
)
- # command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
if ACUTestProcedure.all or ACUTestProcedure.read_ov_mode:
- tc_queue.appendleft((QueueCommands.PRINT, "ACU: Reading ov_mode"))
- command = gs.pack_get_param_command(
- object_id.as_bytes,
- gs.TableIds.config,
- ACUConfigTable.ov_mode.parameter_address,
- ACUConfigTable.ov_mode.parameter_size,
+ q.add_log_cmd("ACU: Reading ov_mode")
+ q.add_pus_tc(
+ gs.pack_get_param_command(
+ object_id.as_bytes,
+ gs.TableIds.config,
+ ACUConfigTable.ov_mode.parameter_address,
+ ACUConfigTable.ov_mode.parameter_size,
+ )
)
- # command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
if ACUTestProcedure.all or ACUTestProcedure.off:
- tc_queue.appendleft((QueueCommands.PRINT, "P60 Dock: Turning off ACU"))
- command = gs.pack_set_param_command(
- ACU_HANDLER_ID,
- P60DockConfigTable.out_en_0.parameter_address,
- P60DockConfigTable.out_en_0.parameter_size,
- gs.Channel.off,
+ q.add_log_cmd("P60 Dock: Turning off ACU")
+ q.add_pus_tc(
+ gs.pack_set_param_command(
+ ACU_HANDLER_ID,
+ P60DockConfigTable.out_en_0.parameter_address,
+ P60DockConfigTable.out_en_0.parameter_size,
+ gs.Channel.off,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
diff --git a/pus_tc/devs/bpx_batt.py b/pus_tc/devs/bpx_batt.py
index 3073327..108b02a 100644
--- a/pus_tc/devs/bpx_batt.py
+++ b/pus_tc/devs/bpx_batt.py
@@ -1,6 +1,9 @@
-from tmtccmd.tc.definitions import TcQueueT, QueueCommands
+from config.definitions import CustomServiceList
from config.object_ids import BPX_HANDLER_ID
-from tmtccmd.tc.pus_8_funccmd import generate_action_command
+from tmtccmd import DefaultProcedureInfo, TcHandlerBase
+from tmtccmd.tc import DefaultPusQueueHelper, service_provider
+from tmtccmd.tc.decorator import ServiceProviderParams
+from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd
from tmtccmd.tc.pus_3_fsfw_hk import generate_one_hk_command, make_sid
@@ -24,33 +27,36 @@ class BpxOpCodes:
REBOOT = ["4", "reboot"]
-def pack_bpx_commands(tc_queue: TcQueueT, op_code: str):
+@service_provider(CustomServiceList.BPX_BATTERY.value)
+def pack_bpx_commands(p: ServiceProviderParams):
+ op_code = p.op_code
+ q = p.queue_helper
if op_code in BpxOpCodes.HK:
- tc_queue.appendleft((QueueCommands.PRINT, "Requesting BPX battery HK set"))
+ q.add_log_cmd("Requesting BPX battery HK set")
sid = make_sid(object_id=BPX_HANDLER_ID, set_id=BpxSetIds.GET_HK_SET)
- cmd = generate_one_hk_command(sid=sid, ssc=0)
- tc_queue.appendleft(cmd.pack_command_tuple())
+ q.add_pus_tc(generate_one_hk_command(sid=sid))
if op_code in BpxOpCodes.RST_BOOT_CNT:
- tc_queue.appendleft((QueueCommands.PRINT, "Resetting reboot counters"))
- cmd = generate_action_command(
- object_id=BPX_HANDLER_ID, action_id=BpxActionIds.RESET_COUNTERS
+ q.add_log_cmd("Resetting reboot counters")
+ q.add_pus_tc(
+ make_fsfw_action_cmd(
+ object_id=BPX_HANDLER_ID, action_id=BpxActionIds.RESET_COUNTERS
+ )
)
- tc_queue.appendleft(cmd.pack_command_tuple())
if op_code in BpxOpCodes.REQUEST_CFG:
- tc_queue.appendleft((QueueCommands.PRINT, "Requesting configuration struct"))
- cmd = generate_action_command(
- object_id=BPX_HANDLER_ID, action_id=BpxActionIds.GET_CFG
+ q.add_log_cmd("Requesting configuration struct")
+ q.add_pus_tc(
+ make_fsfw_action_cmd(
+ object_id=BPX_HANDLER_ID, action_id=BpxActionIds.GET_CFG
+ )
)
- tc_queue.appendleft(cmd.pack_command_tuple())
if op_code in BpxOpCodes.REQUEST_CFG_HK:
- tc_queue.appendleft((QueueCommands.PRINT, "Requesting configuration struct HK"))
+ q.add_log_cmd("Requesting configuration struct HK")
sid = make_sid(object_id=BPX_HANDLER_ID, set_id=BpxSetIds.GET_CFG_SET)
- cmd = generate_one_hk_command(sid=sid, ssc=0)
- tc_queue.appendleft(cmd.pack_command_tuple())
+ q.add_pus_tc(generate_one_hk_command(sid=sid))
if op_code in BpxOpCodes.REBOOT:
- tc_queue.appendleft((QueueCommands.PRINT, "Rebooting BPX battery"))
- cmd = generate_action_command(
- object_id=BPX_HANDLER_ID, action_id=BpxActionIds.REBOOT
+ q.add_log_cmd("Rebooting BPX battery")
+ q.add_pus_tc(
+ make_fsfw_action_cmd(
+ object_id=BPX_HANDLER_ID, action_id=BpxActionIds.REBOOT
+ )
)
- tc_queue.appendleft(cmd.pack_command_tuple())
- pass
diff --git a/pus_tc/devs/ccsds_handler.py b/pus_tc/devs/ccsds_handler.py
index a7e400d..4546867 100644
--- a/pus_tc/devs/ccsds_handler.py
+++ b/pus_tc/devs/ccsds_handler.py
@@ -7,9 +7,9 @@
"""
import struct
-from tmtccmd.config.definitions import QueueCommands
-from tmtccmd.tc.packer import TcQueueT
from spacepackets.ecss.tc import PusTelecommand
+from tmtccmd.tc import DefaultPusQueueHelper
+from tmtccmd.util import ObjectIdU32
class CommandIds:
@@ -33,83 +33,48 @@ class CommandIds:
def pack_ccsds_handler_test(
- object_id: bytearray, tc_queue: TcQueueT, op_code: str
-) -> TcQueueT:
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "Testing CCSDS handler with object id: 0x" + object_id.hex(),
- )
- )
+ object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str
+):
+ obyt = object_id.as_bytes
+ q.add_log_cmd(f"Testing CCSDS handler with object id: {object_id.as_hex_string}")
if op_code == "0":
- tc_queue.appendleft((QueueCommands.PRINT, "CCSDS Handler: Set low rate"))
- command = object_id + struct.pack("!I", CommandIds.SET_LOW_RATE)
- command = PusTelecommand(service=8, subservice=128, ssc=20, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("CCSDS Handler: Set low rate")
+ command = obyt + struct.pack("!I", CommandIds.SET_LOW_RATE)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "1":
- tc_queue.appendleft((QueueCommands.PRINT, "CCSDS Handler: Set high rate"))
- command = object_id + struct.pack("!I", CommandIds.SET_HIGH_RATE)
- command = PusTelecommand(service=8, subservice=128, ssc=21, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("CCSDS Handler: Set high rate")
+ command = obyt + struct.pack("!I", CommandIds.SET_HIGH_RATE)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "2":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "CCSDS Handler: Enables the transmitter")
- )
- command = object_id + struct.pack("!I", CommandIds.EN_TRANSMITTER)
- command = PusTelecommand(service=8, subservice=128, ssc=22, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("CCSDS Handler: Enables the transmitter")
+ command = obyt + struct.pack("!I", CommandIds.EN_TRANSMITTER)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "3":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "CCSDS Handler: Disables the transmitter")
- )
- command = object_id + struct.pack("!I", CommandIds.DIS_TRANSMITTER)
- command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("CCSDS Handler: Disables the transmitter")
+ command = obyt + struct.pack("!I", CommandIds.DIS_TRANSMITTER)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "4":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "CCSDS Handler: Set arbitrary bitrate")
- )
+ q.add_log_cmd("CCSDS Handler: Set arbitrary bitrate")
bitrate = int(input("Specify bit rate (bps): "))
command = (
- object_id
+ obyt
+ struct.pack("!I", CommandIds.ARBITRARY_BITRATE)
+ struct.pack("!I", bitrate)
)
- command = PusTelecommand(service=8, subservice=128, ssc=24, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "5":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "CCSDS Handler: Enable tx clock manipulator")
- )
- command = object_id + struct.pack("!I", CommandIds.ENABLE_TX_CLK_MANIPULATOR)
- command = PusTelecommand(service=8, subservice=128, ssc=24, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("CCSDS Handler: Enable tx clock manipulator")
+ command = obyt + struct.pack("!I", CommandIds.ENABLE_TX_CLK_MANIPULATOR)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "6":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "CCSDS Handler: Disable tx clock manipulator")
- )
- command = object_id + struct.pack("!I", CommandIds.DISABLE_TX_CLK_MANIPULATOR)
- command = PusTelecommand(service=8, subservice=128, ssc=24, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("CCSDS Handler: Disable tx clock manipulator")
+ command = obyt + struct.pack("!I", CommandIds.DISABLE_TX_CLK_MANIPULATOR)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "7":
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "CCSDS Handler: Update tx data on rising edge of tx clock",
- )
- )
- command = object_id + struct.pack("!I", CommandIds.UPDATE_ON_RISING_EDGE)
- command = PusTelecommand(service=8, subservice=128, ssc=24, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("CCSDS Handler: Update tx data on rising edge of tx clock")
+ command = obyt + struct.pack("!I", CommandIds.UPDATE_ON_RISING_EDGE)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "8":
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "CCSDS Handler: Update tx data on falling edge of tx clock",
- )
- )
- command = object_id + struct.pack("!I", CommandIds.UPDATE_ON_FALLING_EDGE)
- command = PusTelecommand(service=8, subservice=128, ssc=24, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
-
- return tc_queue
+ q.add_log_cmd("CCSDS Handler: Update tx data on falling edge of tx clock")
+ command = obyt + struct.pack("!I", CommandIds.UPDATE_ON_FALLING_EDGE)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
diff --git a/pus_tc/devs/common_power.py b/pus_tc/devs/common_power.py
new file mode 100644
index 0000000..cf49e81
--- /dev/null
+++ b/pus_tc/devs/common_power.py
@@ -0,0 +1,472 @@
+import enum
+import struct
+
+from config.object_ids import PDU_1_HANDLER_ID, PDU_2_HANDLER_ID
+from gomspace.gomspace_common import (
+ pack_set_param_command,
+ Channel,
+ GomspaceOpCodes,
+ GsInfo,
+ SetIds,
+ GomspaceDeviceActionIds,
+)
+from gomspace.gomspace_pdu_definitions import PDU_CONFIG_LIST
+from pus_tm.defs import PrintWrapper
+from tmtccmd.config import OpCodeEntry
+from tmtccmd.tc import DefaultPusQueueHelper
+from tmtccmd.tc.pus_3_fsfw_hk import (
+ make_sid,
+ generate_one_diag_command,
+ generate_one_hk_command,
+)
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
+
+
+class Pdu1ChIndex(enum.IntEnum):
+ TCS = 0
+ SYRLINKS = 1
+ STR = 2
+ MGT = 3
+ SUS_N = 4
+ SCEX = 5
+ PLOC = 6
+ ACS_A = 7
+
+
+class Pdu1InfoBase:
+ TCS = "Switch TCS Board"
+ SYRLINKS = "Switch Syrlinks (COM)"
+ STR = "Switch Startracker"
+ MGT = "Switch Magnetorquer"
+ SUS_N = "Switch Sun Sensor Board Nominal"
+ SCEX = "Switch Solar Cell Experiment"
+ PLOC = "Switch Payload On-Board Computer"
+ ACS_A = "Switch ACS Board A-Side"
+
+
+class Pdu2InfoBase:
+ PL_PCDU_BAT_NOM = "Switch PL PCDU Nominal Battery Channel"
+ RW = "Switch Reaction Wheel"
+ HEATER = "Switch Heater"
+ SUS_R = "Switch Sun Sensor Board Redundant"
+ SOLAR_ARRAY_DEPL = "Switch Solar Array Deployment"
+ PL_PCDU_BAT_RED = "Switch PL PCDU Redundant Battery Channel"
+ ACS_B = "Switch ACS Board B-Side"
+ PL_CAM = "Switch Payload Camera"
+
+
+class PowerInfo:
+ INFO_CORE = "Core Information"
+ INFO_AUX = "Auxiliary Information"
+ INFO_ALL = "All Information"
+
+
+class Pdu2ChIndex(enum.IntEnum):
+ PL_PCDU_BAT_NOM = 1
+ RW = 2
+ HEATER = 3
+ SUS_R = 4
+ SOLAR_ARRAY_DEPL = 5
+ PL_PCDU_BAT_RED = 6
+ ACS_B = 7
+ PL_CAM = 8
+
+
+class PowerOpCodes:
+ # PDU 1
+ TCS_ON = ["tcs-on"]
+ TCS_OFF = ["tcs-off"]
+ SYRLINKS_ON = ["syrlinks-on"]
+ SYRLINKS_OFF = ["syrlinks-off"]
+ STAR_TRACKER_ON = ["str-on"]
+ STAR_TRACKER_OFF = ["str-off"]
+ MGT_ON = ["mgt-on"]
+ MGT_OFF = ["mgt-off"]
+ SUS_N_ON = ["sus-nom-on"]
+ SUS_N_OFF = ["sus-nom-off"]
+ SCEX_ON = ["scex-on"]
+ SCEX_OFF = ["scex-off"]
+ PLOC_ON = ["ploc-on"]
+ PLOC_OFF = ["ploc-off"]
+ ACS_A_ON = ["acs-a-on"]
+ ACS_A_OFF = ["acs-a-off"]
+
+ # PDU 2
+ PL_PCDU_VBAT_NOM_ON = ["plpcdu-vbat-nom-on"]
+ PL_PCDU_VBAT_NOM_OFF = ["plpcdu-vbat-nom-off"]
+ RW_ON = ["rw-on"]
+ RW_OFF = ["rw-off"]
+ HEATER_ON = ["heater-on"]
+ HEATER_OFF = ["heater-off"]
+ SUS_R_ON = ["sus-red-on"]
+ SUS_R_OFF = ["sus-red-off"]
+ SOLAR_ARRAY_DEPL_ON = ["sa-depl-on"]
+ SOLAR_ARRAY_DEPL_OFF = ["sa-depl-off"]
+ PL_PCDU_VBAT_RED_ON = ["plpcdu-vbat-red-on"]
+ PL_PCDU_VBAT_RED_OFF = ["plpcdu-vbat-red-off"]
+ ACS_B_ON = ["acs-b-on"]
+ ACS_B_OFF = ["acs-b-off"]
+ PL_CAM_ON = ["cam-on"]
+ PL_CAM_OFF = ["cam-off"]
+
+ INFO_CORE = ["info"]
+ INFO_AUX = ["info-aux"]
+ INFO_ALL = ["info-all"]
+
+
+def info_on_pdu1(base: str) -> str:
+ return "PDU1: " + base + " on"
+
+
+def info_off_pdu1(base: str) -> str:
+ return "PDU1: " + base + " off"
+
+
+def info_on_pdu2(base: str) -> str:
+ return "PDU2: " + base + " on"
+
+
+def info_off_pdu2(base: str) -> str:
+ return "PDU2: " + base + " off"
+
+
+def add_pdu1_common_defs(oce: OpCodeEntry):
+ oce.add(keys=PowerOpCodes.TCS_ON, info=info_on_pdu1(Pdu1InfoBase.TCS))
+ oce.add(keys=PowerOpCodes.TCS_OFF, info=info_off_pdu1(Pdu1InfoBase.TCS))
+ oce.add(keys=PowerOpCodes.STAR_TRACKER_ON, info=info_on_pdu1(Pdu1InfoBase.STR))
+ oce.add(keys=PowerOpCodes.STAR_TRACKER_OFF, info=info_off_pdu1(Pdu1InfoBase.STR))
+ oce.add(keys=PowerOpCodes.SUS_N_ON, info=info_on_pdu1(Pdu1InfoBase.SUS_N))
+ oce.add(keys=PowerOpCodes.SUS_N_OFF, info=info_off_pdu1(Pdu1InfoBase.SUS_N))
+ oce.add(keys=PowerOpCodes.ACS_A_ON, info=info_on_pdu1(Pdu1InfoBase.ACS_A))
+ oce.add(keys=PowerOpCodes.ACS_A_OFF, info=info_off_pdu1(Pdu1InfoBase.ACS_A))
+ oce.add(keys=PowerOpCodes.SYRLINKS_ON, info=info_on_pdu1(Pdu1InfoBase.SYRLINKS))
+ oce.add(keys=PowerOpCodes.SYRLINKS_OFF, info=info_off_pdu1(Pdu1InfoBase.SYRLINKS))
+ oce.add(keys=PowerOpCodes.MGT_ON, info=info_on_pdu1(Pdu1InfoBase.MGT))
+ oce.add(keys=PowerOpCodes.MGT_OFF, info=info_off_pdu1(Pdu1InfoBase.MGT))
+ oce.add(keys=PowerOpCodes.PLOC_ON, info=info_on_pdu1(Pdu1InfoBase.PLOC))
+ oce.add(keys=PowerOpCodes.PLOC_OFF, info=info_off_pdu1(Pdu1InfoBase.PLOC))
+ oce.add(keys=PowerOpCodes.SCEX_ON, info=info_on_pdu1(Pdu1InfoBase.SCEX))
+ oce.add(keys=PowerOpCodes.SCEX_OFF, info=info_off_pdu1(Pdu1InfoBase.SCEX))
+
+
+def add_pdu2_common_defs(oce: OpCodeEntry):
+ oce.add(keys=PowerOpCodes.ACS_B_ON, info=info_on_pdu2(Pdu2InfoBase.ACS_B))
+ oce.add(keys=PowerOpCodes.ACS_B_OFF, info=info_off_pdu2(Pdu2InfoBase.ACS_B))
+ oce.add(keys=PowerOpCodes.SUS_R_ON, info=info_on_pdu2(Pdu2InfoBase.SUS_R))
+ oce.add(keys=PowerOpCodes.SUS_R_OFF, info=info_off_pdu2(Pdu2InfoBase.SUS_R))
+ oce.add(keys=PowerOpCodes.RW_ON, info=info_on_pdu2(Pdu2InfoBase.RW))
+ oce.add(keys=PowerOpCodes.RW_OFF, info=info_off_pdu2(Pdu2InfoBase.RW))
+ oce.add(
+ keys=PowerOpCodes.PL_PCDU_VBAT_NOM_ON,
+ info=info_on_pdu2(Pdu2InfoBase.PL_PCDU_BAT_NOM),
+ )
+ oce.add(
+ keys=PowerOpCodes.PL_PCDU_VBAT_NOM_OFF,
+ info=info_off_pdu2(Pdu2InfoBase.PL_PCDU_BAT_NOM),
+ )
+ oce.add(
+ keys=PowerOpCodes.PL_PCDU_VBAT_RED_ON,
+ info=info_on_pdu2(Pdu2InfoBase.PL_PCDU_BAT_RED),
+ )
+ oce.add(
+ keys=PowerOpCodes.PL_PCDU_VBAT_RED_OFF,
+ info=info_off_pdu2(Pdu2InfoBase.PL_PCDU_BAT_RED),
+ )
+ oce.add(keys=PowerOpCodes.HEATER_ON, info=info_on_pdu2(Pdu2InfoBase.HEATER))
+ oce.add(keys=PowerOpCodes.HEATER_OFF, info=info_off_pdu2(Pdu2InfoBase.HEATER))
+ oce.add(
+ keys=PowerOpCodes.SOLAR_ARRAY_DEPL_ON,
+ info=info_on_pdu2(Pdu2InfoBase.SOLAR_ARRAY_DEPL),
+ )
+ oce.add(
+ keys=PowerOpCodes.SOLAR_ARRAY_DEPL_OFF,
+ info=info_off_pdu2(Pdu2InfoBase.SOLAR_ARRAY_DEPL),
+ )
+ oce.add(keys=PowerOpCodes.PL_CAM_ON, info=info_on_pdu2(Pdu2InfoBase.PL_CAM))
+ oce.add(keys=PowerOpCodes.PL_CAM_OFF, info=info_off_pdu2(Pdu2InfoBase.PL_CAM))
+
+
+def pdu1_cmds(q: DefaultPusQueueHelper, op_code: str):
+ if op_code in PowerOpCodes.TCS_ON:
+ tcs_on_cmd(q)
+ elif op_code in PowerOpCodes.TCS_OFF:
+ tcs_off_cmd(q)
+ elif op_code in PowerOpCodes.SYRLINKS_ON:
+ syrlinks_on_cmd(q)
+ elif op_code in PowerOpCodes.SYRLINKS_OFF:
+ syrlinks_off_cmd(q)
+ elif op_code in PowerOpCodes.STAR_TRACKER_ON:
+ startracker_on_cmd(q)
+ elif op_code in PowerOpCodes.STAR_TRACKER_OFF:
+ startracker_off_cmd(q)
+ elif op_code in PowerOpCodes.MGT_ON:
+ mgt_on_cmd(q)
+ elif op_code in PowerOpCodes.MGT_OFF:
+ mgt_off_cmd(q)
+ elif op_code in PowerOpCodes.SUS_N_ON:
+ sun_sensor_nominal_on_cmd(q)
+ elif op_code in PowerOpCodes.SUS_N_OFF:
+ sun_sensor_nominal_off_cmd(q)
+ elif op_code in PowerOpCodes.SCEX_ON:
+ solar_cell_experiment_on_cmd(q)
+ elif op_code in PowerOpCodes.SCEX_OFF:
+ solar_cell_experiment_off_cmd(q)
+ elif op_code in PowerOpCodes.PLOC_ON:
+ ploc_on_cmd(q)
+ elif op_code in PowerOpCodes.PLOC_OFF:
+ ploc_off_cmd(q)
+ elif op_code in PowerOpCodes.ACS_A_ON:
+ acs_board_a_on_cmd(q)
+ elif op_code in PowerOpCodes.ACS_A_OFF:
+ acs_board_a_off_cmd(q)
+
+
+def pdu2_cmds(q: DefaultPusQueueHelper, op_code: str):
+ if op_code in PowerOpCodes.PL_PCDU_VBAT_NOM_ON:
+ pl_pcdu_bat_nom_on_cmd(q)
+ elif op_code in PowerOpCodes.PL_PCDU_VBAT_NOM_OFF:
+ pl_pcdu_bat_nom_off_cmd(q)
+ elif op_code in PowerOpCodes.RW_ON:
+ reaction_wheel_on_cmd(q)
+ elif op_code in PowerOpCodes.RW_OFF:
+ reaction_wheel_off_cmd(q)
+ elif op_code in PowerOpCodes.HEATER_ON:
+ heater_on_cmd(q)
+ elif op_code in PowerOpCodes.HEATER_OFF:
+ heater_off_cmd(q)
+ elif op_code in PowerOpCodes.SUS_R_ON:
+ sus_red_on_cmd(q)
+ elif op_code in PowerOpCodes.SUS_R_OFF:
+ sus_red_off_cmd(q)
+ elif op_code in PowerOpCodes.SOLAR_ARRAY_DEPL_ON:
+ solar_array_deployment_on_cmd(q)
+ elif op_code in PowerOpCodes.SOLAR_ARRAY_DEPL_OFF:
+ solar_array_deployment_off_cmd(q)
+ elif op_code in PowerOpCodes.PL_PCDU_VBAT_RED_ON:
+ pl_pcdu_bat_red_on_cmd(q)
+ elif op_code in PowerOpCodes.PL_PCDU_VBAT_RED_OFF:
+ pl_pcdu_bat_nom_off_cmd(q)
+ elif op_code in PowerOpCodes.ACS_B_ON:
+ acs_board_b_side_on_cmd(q)
+ elif op_code in PowerOpCodes.ACS_B_OFF:
+ acs_board_b_side_off_cmd(q)
+ elif op_code in PowerOpCodes.PL_CAM_ON:
+ payload_camera_on_cmd(q)
+ elif op_code in PowerOpCodes.PL_CAM_OFF:
+ payload_camera_off_cmd(q)
+
+
+def pdu1_req_hk_cmds(q: DefaultPusQueueHelper, op_code: str):
+ if op_code in GomspaceOpCodes.REQUEST_CORE_HK_ONCE:
+ q.add_log_cmd(f"PDU1: {GsInfo.REQUEST_CORE_HK_ONCE}")
+ hk_sid = make_sid(object_id=PDU_1_HANDLER_ID, set_id=SetIds.PDU_1_CORE)
+ q.add_pus_tc(generate_one_diag_command(sid=hk_sid))
+ if op_code in GomspaceOpCodes.REQUEST_AUX_HK_ONCE:
+ q.add_log_cmd(f"PDU1: {GsInfo.REQUEST_AUX_HK_ONCE}")
+ hk_sid = make_sid(object_id=PDU_1_HANDLER_ID, set_id=SetIds.PDU_1_AUX)
+ q.add_pus_tc(generate_one_hk_command(sid=hk_sid))
+
+
+def pdu2_req_hk_cmds(q: DefaultPusQueueHelper, op_code: str):
+ if op_code in GomspaceOpCodes.REQUEST_CORE_HK_ONCE:
+ q.add_log_cmd(f"PDU2: {GsInfo.REQUEST_CORE_HK_ONCE}")
+ hk_sid = make_sid(object_id=PDU_2_HANDLER_ID, set_id=SetIds.PDU_2_CORE)
+ q.add_pus_tc(generate_one_diag_command(sid=hk_sid))
+ if op_code in GomspaceOpCodes.REQUEST_AUX_HK_ONCE:
+ q.add_log_cmd(f"PDU2: {GsInfo.REQUEST_AUX_HK_ONCE}")
+ hk_sid = make_sid(object_id=PDU_2_HANDLER_ID, set_id=SetIds.PDU_2_AUX)
+ q.add_pus_tc(generate_one_hk_command(sid=hk_sid))
+
+
+def tcs_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.TCS, Pdu1ChIndex.TCS)
+
+
+def tcs_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.TCS, Pdu1ChIndex.TCS)
+
+
+def syrlinks_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.SYRLINKS, Pdu1ChIndex.SYRLINKS)
+
+
+def syrlinks_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.SYRLINKS, Pdu1ChIndex.SYRLINKS)
+
+
+def startracker_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.STR, Pdu1ChIndex.STR)
+
+
+def startracker_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.STR, Pdu1ChIndex.STR)
+
+
+def mgt_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.MGT, Pdu1ChIndex.MGT)
+
+
+def mgt_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.MGT, Pdu1ChIndex.MGT)
+
+
+def sun_sensor_nominal_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.SUS_N, Pdu1ChIndex.SUS_N)
+
+
+def sun_sensor_nominal_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.SUS_N, Pdu1ChIndex.SUS_N)
+
+
+def solar_cell_experiment_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.SCEX, Pdu1ChIndex.SCEX)
+
+
+def solar_cell_experiment_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.SCEX, Pdu1ChIndex.SCEX)
+
+
+def ploc_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.PLOC, Pdu1ChIndex.PLOC)
+
+
+def ploc_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.PLOC, Pdu1ChIndex.PLOC)
+
+
+def acs_board_a_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.ACS_A, Pdu1ChIndex.ACS_A)
+
+
+def acs_board_a_off_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(PDU_1_HANDLER_ID, q, Pdu1InfoBase.ACS_A, Pdu1ChIndex.ACS_A)
+
+
+def pl_pcdu_bat_nom_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(
+ PDU_2_HANDLER_ID, q, Pdu2InfoBase.PL_PCDU_BAT_NOM, Pdu2ChIndex.PL_PCDU_BAT_NOM
+ )
+
+
+def pl_pcdu_bat_nom_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(
+ PDU_2_HANDLER_ID, q, Pdu2InfoBase.PL_PCDU_BAT_NOM, Pdu2ChIndex.PL_PCDU_BAT_NOM
+ )
+
+
+def reaction_wheel_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.RW, Pdu2ChIndex.RW)
+
+
+def reaction_wheel_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.RW, Pdu2ChIndex.RW)
+
+
+def heater_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.HEATER, Pdu2ChIndex.HEATER)
+
+
+def heater_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.HEATER, Pdu2ChIndex.HEATER)
+
+
+def sus_red_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.SUS_R, Pdu2ChIndex.SUS_R)
+
+
+def sus_red_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.SUS_R, Pdu2ChIndex.SUS_R)
+
+
+def solar_array_deployment_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(
+ PDU_2_HANDLER_ID, q, Pdu2InfoBase.SOLAR_ARRAY_DEPL, Pdu2ChIndex.SOLAR_ARRAY_DEPL
+ )
+
+
+def solar_array_deployment_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(
+ PDU_2_HANDLER_ID, q, Pdu2InfoBase.SOLAR_ARRAY_DEPL, Pdu2ChIndex.SOLAR_ARRAY_DEPL
+ )
+
+
+def pl_pcdu_bat_red_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(
+ PDU_2_HANDLER_ID, q, Pdu2InfoBase.PL_PCDU_BAT_RED, Pdu2ChIndex.PL_PCDU_BAT_RED
+ )
+
+
+def pl_pcdu_bat_red_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(
+ PDU_2_HANDLER_ID, q, Pdu2InfoBase.PL_PCDU_BAT_RED, Pdu2ChIndex.PL_PCDU_BAT_RED
+ )
+
+
+def acs_board_b_side_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.ACS_B, Pdu2ChIndex.ACS_B)
+
+
+def acs_board_b_side_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.ACS_B, Pdu2ChIndex.ACS_B)
+
+
+def payload_camera_on_cmd(q: DefaultPusQueueHelper):
+ generic_on_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.PL_CAM, Pdu2ChIndex.PL_CAM)
+
+
+def payload_camera_off_cmd(q: DefaultPusQueueHelper):
+ generic_off_cmd(PDU_2_HANDLER_ID, q, Pdu2InfoBase.PL_CAM, Pdu2ChIndex.PL_CAM)
+
+
+def generic_on_cmd(
+ object_id: bytes, q: DefaultPusQueueHelper, info_str: str, out_idx: int
+):
+ q.add_log_cmd(info_str + " on")
+ q.add_pus_tc(
+ pack_set_param_command(
+ object_id,
+ PDU_CONFIG_LIST[out_idx].parameter_address,
+ PDU_CONFIG_LIST[out_idx].parameter_size,
+ Channel.on,
+ )
+ )
+
+
+def generic_off_cmd(
+ object_id: bytes, q: DefaultPusQueueHelper, info_str: str, out_idx: int
+):
+ q.add_log_cmd(info_str + " off")
+ q.add_pus_tc(
+ pack_set_param_command(
+ object_id,
+ PDU_CONFIG_LIST[out_idx].parameter_address,
+ PDU_CONFIG_LIST[out_idx].parameter_size,
+ Channel.off,
+ )
+ )
+
+
+def handle_get_param_data_reply(
+ action_id: int, pw: PrintWrapper, custom_data: bytearray
+):
+ if action_id == GomspaceDeviceActionIds.PARAM_GET:
+ header_list = [
+ "Gomspace action ID",
+ "Table ID",
+ "Memory Address",
+ "Payload length",
+ "Payload",
+ ]
+ fmt_str = "!BBHH"
+ (action, table_id, address, payload_length) = struct.unpack(
+ fmt_str, custom_data[:6]
+ )
+ content_list = [
+ action,
+ table_id,
+ hex(address),
+ payload_length,
+ "0x" + custom_data[6:].hex(),
+ ]
+ pw.dlog(f"{header_list}")
+ pw.dlog(f"{content_list}")
diff --git a/pus_tc/devs/gps.py b/pus_tc/devs/gps.py
index 9f308ed..000d759 100644
--- a/pus_tc/devs/gps.py
+++ b/pus_tc/devs/gps.py
@@ -1,26 +1,48 @@
import enum
-from tmtccmd.config.definitions import QueueCommands
-from tmtccmd.tc.definitions import TcQueueT
-from tmtccmd.tc.pus_8_funccmd import generate_action_command
+from config.definitions import CustomServiceList
+from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
+from tmtccmd.config.tmtc import tmtc_definitions_provider
+from tmtccmd.tc import DefaultPusQueueHelper
+from tmtccmd.tc.pus_3_fsfw_hk import make_sid, generate_one_hk_command
+from tmtccmd.logging import get_console_logger
-from config.object_ids import GPS_HANDLER_1_ID, GPS_CONTROLLER
+LOGGER = get_console_logger()
-class GpsOpCodes(enum.Enum):
- RESET_GNSS = "5"
+class OpCodes:
+ REQ_OS_HK = ["0", "hk-os"]
+ RESET_GNSS = ["5", "reset"]
+
+
+class Info:
+ REQ_OS_HK = "Request One-Shot HK"
+ RESET_GNSS = "Reset GNSS using reset pin"
class SetIds:
HK = 0
-def pack_gps_command(object_id: bytes, tc_queue: TcQueueT, op_code: str):
- if op_code == GpsOpCodes.RESET_GNSS.value:
- if object_id == GPS_CONTROLLER:
- tc_queue.appendleft((QueueCommands.PRINT, "Resetting GPS device 0"))
- elif object_id == GPS_HANDLER_1_ID:
- tc_queue.appendleft((QueueCommands.PRINT, "Resetting GPS device 1"))
- cmd = generate_action_command(object_id=object_id, action_id=int(op_code))
- tc_queue.appendleft(cmd.pack_command_tuple())
+@tmtc_definitions_provider
+def add_gps_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add(keys=OpCodes.RESET_GNSS, info=Info.RESET_GNSS)
+ oce.add(keys=OpCodes.REQ_OS_HK, info=Info.REQ_OS_HK)
+ defs.add_service(
+ name=CustomServiceList.GPS_CTRL.value,
+ info="GPS/GNSS Controller",
+ op_code_entry=oce,
+ )
+
+
+def pack_gps_command(object_id: bytes, q: DefaultPusQueueHelper, op_code: str):
+ if op_code in OpCodes.RESET_GNSS:
+ # TODO: This needs to be re-implemented
+ LOGGER.warning("Reset pin handling needs to be re-implemented")
+ if op_code in OpCodes.REQ_OS_HK:
+ q.add_log_cmd(f"GMSS: {Info.REQ_OS_HK}")
+ q.add_pus_tc(
+ generate_one_hk_command(sid=make_sid(object_id=object_id, set_id=SetIds.HK))
+ )
diff --git a/pus_tc/devs/heater.py b/pus_tc/devs/heater.py
index 4dc9ef5..b7e9cde 100644
--- a/pus_tc/devs/heater.py
+++ b/pus_tc/devs/heater.py
@@ -7,16 +7,16 @@ import enum
from config.definitions import CustomServiceList
from config.object_ids import get_object_ids
-from tmtccmd.utility.obj_id import ObjectId
-from tmtccmd.config.definitions import QueueCommands, ServiceOpCodeDictT
+from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
+from tmtccmd.config.tmtc import tmtc_definitions_provider
+from tmtccmd.tc import DefaultPusQueueHelper
+from tmtccmd.util.obj_id import ObjectIdU32
from tmtccmd.tc.pus_201_fsfw_health import (
pack_set_health_cmd_data,
FsfwHealth,
Subservices,
)
-from tmtccmd.tc.pus_8_funccmd 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 tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd
from spacepackets.ecss.tc import PusTelecommand
@@ -54,37 +54,23 @@ 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,
+@tmtc_definitions_provider
+def add_heater_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add(keys=OpCodes.HEATER_CMD, info=Info.HEATER_CMD)
+ oce.add(keys=OpCodes.HEATER_HEALTHY_CMD, info=Info.HEATER_HEALTHY_CMD)
+ oce.add(keys=OpCodes.HEATER_EXT_CTRL, info=Info.HEATER_EXT_CTRL)
+ oce.add(keys=OpCodes.HEATER_FAULTY_CMD, info=Info.HEATER_FAULTY_CMD)
+ defs.add_service(
name=CustomServiceList.HEATER.value,
info="Heater Device",
- op_code_entry=op_code_dict,
+ op_code_entry=oce,
)
-def pack_heater_cmds(object_id: bytearray, op_code: str, tc_queue: TcQueueT):
+def pack_heater_cmds(object_id: bytearray, op_code: str, q: DefaultPusQueueHelper):
if op_code in OpCodes.HEATER_CMD:
- tc_queue.appendleft((QueueCommands.PRINT, "Heater Switching"))
+ q.add_log_cmd("Heater Switching")
heater_number = prompt_heater()
while True:
action = input("Turn switch on or off? (0 - off, 1 - on): ")
@@ -101,14 +87,13 @@ def pack_heater_cmds(object_id: bytearray, op_code: str, tc_queue: TcQueueT):
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())
+ q.add_log_cmd(debug_string)
+ q.add_pus_tc(pack_switch_heater_command(object_id, heater_number, action))
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,
+ q=q,
object_id=obj_id,
health=FsfwHealth.EXTERNAL_CTRL,
health_str="External Control",
@@ -118,7 +103,7 @@ def pack_heater_cmds(object_id: bytearray, op_code: str, tc_queue: TcQueueT):
heater_number = prompt_heater()
obj_id = heater_idx_to_obj(heater_number)
health_cmd(
- tc_queue=tc_queue,
+ q=q,
object_id=obj_id,
health=FsfwHealth.FAULTY,
health_str="Faulty",
@@ -128,7 +113,7 @@ def pack_heater_cmds(object_id: bytearray, op_code: str, tc_queue: TcQueueT):
heater_number = prompt_heater()
obj_id = heater_idx_to_obj(heater_number)
health_cmd(
- tc_queue=tc_queue,
+ q=q,
object_id=obj_id,
health=FsfwHealth.HEALTHY,
health_str="Healthy",
@@ -136,7 +121,7 @@ def pack_heater_cmds(object_id: bytearray, op_code: str, tc_queue: TcQueueT):
)
-def heater_idx_to_obj(heater: int) -> ObjectId:
+def heater_idx_to_obj(heater: int) -> ObjectIdU32:
from config.object_ids import (
HEATER_0_OBC_BRD,
HEATER_1_PLOC_PROC_BRD,
@@ -161,7 +146,7 @@ def heater_idx_to_obj(heater: int) -> ObjectId:
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 ObjectIdU32.from_bytes(obj_id_array[heater])
return obj_id_obj
@@ -188,23 +173,19 @@ def prompt_heater() -> int:
def health_cmd(
- tc_queue: TcQueueT,
+ q: DefaultPusQueueHelper,
heater_idx: int,
- object_id: ObjectId,
+ object_id: ObjectIdU32,
health: FsfwHealth,
health_str: str,
):
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- f"Setting Heater {heater_idx} {object_id} to {health_str}",
+ q.add_log_cmd(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)
+ q.add_pus_tc(
+ PusTelecommand(
+ service=201, subservice=Subservices.TC_SET_HEALTH, app_data=app_data
)
)
- 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(
@@ -219,6 +200,6 @@ def pack_switch_heater_command(
command.append(switch_nr)
command.append(switch_action)
command.append(COMMAND_SOURCE_PARAM_EXTERNAL)
- return generate_action_command(
- object_id=object_id, action_id=ActionIds.SWITCH_HEATER, app_data=command
+ return make_fsfw_action_cmd(
+ object_id=object_id, action_id=ActionIds.SWITCH_HEATER, user_data=command
)
diff --git a/pus_tc/devs/imtq.py b/pus_tc/devs/imtq.py
index f71de6b..c78127a 100644
--- a/pus_tc/devs/imtq.py
+++ b/pus_tc/devs/imtq.py
@@ -5,16 +5,17 @@
@author J. Meier
@date 25.03.2021
"""
-from tmtccmd.config.definitions import QueueCommands
+import struct
-from tmtccmd.tc.packer import TcQueueT
from spacepackets.ecss.tc import PusTelecommand
+from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_3_fsfw_hk import (
make_sid,
generate_one_diag_command,
generate_one_hk_command,
)
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes
+from tmtccmd.util import ObjectIdU32
class ImtqSetIds:
@@ -38,233 +39,149 @@ class ImtqActionIds:
perform_negative_y_test = bytearray([0x0, 0x0, 0x0, 0x0A])
perform_positive_z_test = bytearray([0x0, 0x0, 0x0, 0x0B])
perform_negative_z_test = bytearray([0x0, 0x0, 0x0, 0x0C])
- # Initiates the reading of the last performed self test. After sending this command the results can be downlinked
- # via the housekeeping service by using the appropriate set ids listed above.
+ # Initiates the reading of the last performed self test. After sending this command the results
+ # can be downlinked via the housekeeping service by using the appropriate set ids listed above.
read_self_test_results = bytearray([0x0, 0x0, 0x0, 0x0D])
-def pack_imtq_test_into(
- object_id: bytearray, tc_queue: TcQueueT, op_code: str
-) -> TcQueueT:
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "Testing ISIS IMTQ handler with object id: 0x" + object_id.hex(),
- )
+def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str):
+ q.add_log_cmd(
+ f"Testing ISIS IMTQ handler with object id: {object_id.as_hex_string}"
)
if op_code == "0":
- tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Set mode off"))
- command = pack_mode_data(object_id, Modes.OFF, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=9, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Set mode off")
+ command = pack_mode_data(object_id.as_bytes, Modes.OFF, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code == "1":
- tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Set mode on"))
- command = pack_mode_data(object_id, Modes.ON, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=10, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Set mode on")
+ command = pack_mode_data(object_id.as_bytes, Modes.ON, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code == "2":
- tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Mode Normal"))
- command = pack_mode_data(object_id, Modes.NORMAL, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=11, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Mode Normal")
+ command = pack_mode_data(object_id.as_bytes, Modes.NORMAL, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code == "3":
- tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Perform positive x self test"))
- command = object_id + ImtqActionIds.perform_positive_x_test
- command = PusTelecommand(service=8, subservice=128, ssc=22, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Perform positive x self test")
+ command = object_id.as_bytes + ImtqActionIds.perform_positive_x_test
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "IMTQ: Initiate reading of positive x self test results",
- )
- )
- command = object_id + ImtqActionIds.read_self_test_results
- command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Initiate reading of positive x self test results")
+ command = object_id.as_bytes + ImtqActionIds.read_self_test_results
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "IMTQ: Request dataset with positive x self test results",
- )
- )
- sid = make_sid(object_id, ImtqSetIds.POSITIVE_X_TEST)
- command = generate_one_hk_command(sid, 24)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Request dataset with positive x self test results")
+ sid = make_sid(object_id.as_bytes, ImtqSetIds.POSITIVE_X_TEST)
+ q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "4":
- tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Perform negative x self test"))
- command = object_id + ImtqActionIds.perform_negative_x_test
- command = PusTelecommand(service=8, subservice=128, ssc=25, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
-
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "IMTQ: Initiate reading of negative x self test results",
- )
- )
- command = object_id + ImtqActionIds.read_self_test_results
- command = PusTelecommand(service=8, subservice=128, ssc=26, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
-
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "IMTQ: Request dataset with negative x self test results",
- )
- )
- sid = make_sid(object_id, ImtqSetIds.NEGATIVE_X_TEST)
- command = generate_one_hk_command(sid, 27)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Perform negative x self test")
+ command = object_id.as_bytes + ImtqActionIds.perform_negative_x_test
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ q.add_log_cmd("IMTQ: Initiate reading of negative x self test results")
+ command = object_id.as_bytes + ImtqActionIds.read_self_test_results
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ q.add_log_cmd("IMTQ: Request dataset with negative x self test results")
+ sid = make_sid(object_id.as_bytes, ImtqSetIds.NEGATIVE_X_TEST)
+ q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "5":
- tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Perform positive y self test"))
- command = object_id + ImtqActionIds.perform_positive_y_test
- command = PusTelecommand(service=8, subservice=128, ssc=28, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Perform positive y self test")
+ command = object_id.as_bytes + ImtqActionIds.perform_positive_y_test
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ q.add_log_cmd("IMTQ: Initiate reading of positive y self test results")
+ command = object_id.as_bytes + ImtqActionIds.read_self_test_results
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "IMTQ: Initiate reading of positive y self test results",
- )
- )
- command = object_id + ImtqActionIds.read_self_test_results
- command = PusTelecommand(service=8, subservice=128, ssc=29, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
-
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "IMTQ: Request dataset with positive y self test results",
- )
- )
- sid = make_sid(object_id, ImtqSetIds.POSITIVE_Y_TEST)
- command = generate_one_hk_command(sid, 30)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Request dataset with positive y self test results")
+ sid = make_sid(object_id.as_bytes, ImtqSetIds.POSITIVE_Y_TEST)
+ q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "6":
- tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Perform negative y self test"))
- command = object_id + ImtqActionIds.perform_negative_y_test
- command = PusTelecommand(service=8, subservice=128, ssc=31, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Perform negative y self test")
+ command = object_id.as_bytes + ImtqActionIds.perform_negative_y_test
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "IMTQ: Initiate reading of negative y self test results",
- )
- )
- command = object_id + ImtqActionIds.read_self_test_results
- command = PusTelecommand(service=8, subservice=128, ssc=32, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Initiate reading of negative y self test results")
+ command = object_id.as_bytes + ImtqActionIds.read_self_test_results
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "IMTQ: Request dataset with negative y self test results",
- )
- )
- sid = make_sid(object_id, ImtqSetIds.NEGATIVE_Y_TEST)
- command = generate_one_hk_command(sid, 33)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Request dataset with negative y self test results")
+ sid = make_sid(object_id.as_bytes, ImtqSetIds.NEGATIVE_Y_TEST)
+ q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "7":
- tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Perform positive z self test"))
- command = object_id + ImtqActionIds.perform_positive_z_test
- command = PusTelecommand(service=8, subservice=128, ssc=34, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Perform positive z self test")
+ command = object_id.as_bytes + ImtqActionIds.perform_positive_z_test
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "IMTQ: Initiate reading of positive z self test results",
- )
- )
- command = object_id + ImtqActionIds.read_self_test_results
- command = PusTelecommand(service=8, subservice=128, ssc=35, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Initiate reading of positive z self test results")
+ command = object_id.as_bytes + ImtqActionIds.read_self_test_results
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "IMTQ: Request dataset with positive z self test results",
- )
- )
- sid = make_sid(object_id, ImtqSetIds.POSITIVE_Y_TEST)
- command = generate_one_hk_command(sid, 36)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Request dataset with positive z self test results")
+ sid = make_sid(object_id.as_bytes, ImtqSetIds.POSITIVE_Y_TEST)
+ q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "8":
- tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Perform negative z self test"))
- command = object_id + ImtqActionIds.perform_negative_z_test
- command = PusTelecommand(service=8, subservice=128, ssc=35, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
-
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "IMTQ: Initiate reading of negative z self test results",
- )
- )
- command = object_id + ImtqActionIds.read_self_test_results
- command = PusTelecommand(service=8, subservice=128, ssc=36, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
-
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "IMTQ: Request dataset with negative z self test results",
- )
- )
- sid = make_sid(object_id, ImtqSetIds.NEGATIVE_Z_TEST)
- command = generate_one_hk_command(sid, 37)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Perform negative z self test")
+ command = object_id.as_bytes + ImtqActionIds.perform_negative_z_test
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ q.add_log_cmd("IMTQ: Initiate reading of negative z self test results")
+ command = object_id.as_bytes + ImtqActionIds.read_self_test_results
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ q.add_log_cmd("IMTQ: Request dataset with negative z self test results")
+ sid = make_sid(object_id.as_bytes, ImtqSetIds.NEGATIVE_Z_TEST)
+ q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "9":
- tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Commanding dipole"))
+ q.add_log_cmd("IMTQ: Commanding dipole")
x_dipole = 0
y_dipole = 0
z_dipole = 0
duration = 0 # ms
- command = pack_dipole_command(object_id, x_dipole, y_dipole, z_dipole, duration)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(
+ pack_dipole_command(
+ object_id.as_bytes, x_dipole, y_dipole, z_dipole, duration
+ )
+ )
if op_code == "10":
- tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Get commanded dipole"))
- command = object_id + ImtqActionIds.get_commanded_dipole
- command = PusTelecommand(service=8, subservice=128, ssc=21, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("IMTQ: Get commanded dipole")
+ command = object_id.as_bytes + ImtqActionIds.get_commanded_dipole
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "11":
- tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Get engineering hk set"))
- command = generate_one_diag_command(
- sid=make_sid(object_id=object_id, set_id=ImtqSetIds.ENG_HK_SET), ssc=0
+ q.add_log_cmd("IMTQ: Get engineering hk set")
+ q.add_pus_tc(
+ generate_one_diag_command(
+ sid=make_sid(object_id=object_id.as_bytes, set_id=ImtqSetIds.ENG_HK_SET)
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
if op_code == "12":
- tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Get calibrated MTM hk set"))
- command = generate_one_diag_command(
- sid=make_sid(object_id=object_id, set_id=ImtqSetIds.CAL_MTM_SET), ssc=0
+ q.add_log_cmd("IMTQ: Get calibrated MTM hk set")
+ q.add_pus_tc(
+ generate_one_diag_command(
+ sid=make_sid(
+ object_id=object_id.as_bytes, set_id=ImtqSetIds.CAL_MTM_SET
+ )
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
if op_code == "13":
- tc_queue.appendleft((QueueCommands.PRINT, "IMTQ: Get raw MTM hk set"))
- command = generate_one_diag_command(
- sid=make_sid(object_id=object_id, set_id=ImtqSetIds.RAW_MTM_SET), ssc=0
+ q.add_log_cmd("IMTQ: Get raw MTM hk set")
+ q.add_pus_tc(
+ generate_one_diag_command(
+ sid=make_sid(
+ object_id=object_id.as_bytes, set_id=ImtqSetIds.RAW_MTM_SET
+ )
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
-
- return tc_queue
def pack_dipole_command(
- object_id: bytearray, x_dipole: int, y_dipole: int, z_dipole: int, duration: int
+ object_id: bytes, x_dipole: int, y_dipole: int, z_dipole: int, duration: int
) -> PusTelecommand:
"""This function packs the command causing the ISIS IMTQ to generate a dipole.
@param object_id The object id of the IMTQ handler.
@@ -276,11 +193,10 @@ def pack_dipole_command(
command is sent.
"""
action_id = ImtqActionIds.start_actuation_dipole
- command = bytearray()
command = object_id + action_id
- command.extend(x_dipole.to_bytes(length=2, byteorder="big"))
- command.extend(y_dipole.to_bytes(length=2, byteorder="big"))
- command.extend(z_dipole.to_bytes(length=2, byteorder="big"))
- command.extend(duration.to_bytes(length=2, byteorder="big"))
- command = PusTelecommand(service=8, subservice=128, ssc=22, app_data=command)
+ command += struct.pack("!h", x_dipole)
+ command += struct.pack("!h", y_dipole)
+ command += struct.pack("!h", z_dipole)
+ command += struct.pack("!h", duration)
+ command = PusTelecommand(service=8, subservice=128, app_data=command)
return command
diff --git a/pus_tc/devs/p60dock.py b/pus_tc/devs/p60dock.py
index c0f395a..e460862 100644
--- a/pus_tc/devs/p60dock.py
+++ b/pus_tc/devs/p60dock.py
@@ -5,15 +5,25 @@
@author J. Meier
@date 13.12.2020
"""
-from tmtccmd.config.definitions import QueueCommands
-from tmtccmd.tc.packer import TcQueueT
-from tmtccmd.tc.pus_3_fsfw_hk import (
- generate_one_hk_command,
- make_sid,
- generate_one_diag_command,
+from tmtccmd.tc import DefaultPusQueueHelper
+from tmtccmd.tc.pus_3_fsfw_hk import generate_one_hk_command, make_sid
+from gomspace.gomspace_common import (
+ GsInfo,
+ GomspaceOpCodes,
+ TableEntry,
+ Channel,
+ pack_set_param_command,
+ TableIds,
+ pack_get_param_command,
+ pack_gnd_wdt_reset_command,
+ pack_ping_command,
+ GomspaceDeviceActionIds,
+ pack_reboot_command,
+ SetIds,
)
-from gomspace.gomspace_common import *
from config.object_ids import P60_DOCK_HANDLER
+from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd
+from tmtccmd.util import ObjectIdU32
class P60OpCodes:
@@ -24,7 +34,7 @@ class P60OpCodes:
TEST = ["test", "0"]
-class Info:
+class P60Info:
PREFIX = "P60 Dock"
STACK_3V3_ON = f"{PREFIX}: Turn Stack 3V3 on"
STACK_3V3_OFF = f"{PREFIX}: Turn Stack 3V3 off"
@@ -87,240 +97,193 @@ class P60DockHkTable:
wdt_gnd_left = TableEntry(bytearray([0x00, 0xA8]), TableEntry.uint32_size)
-def pack_p60dock_cmds(object_id: ObjectId, tc_queue: TcQueueT, op_code: str):
+def pack_p60dock_cmds(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str):
objb = object_id.as_bytes
if op_code in P60OpCodes.STACK_3V3_ON:
- tc_queue.appendleft((QueueCommands.PRINT, Info.STACK_3V3_ON))
- command = pack_set_param_command(
- objb,
- P60DockConfigTable.out_en_9.parameter_address,
- P60DockConfigTable.out_en_9.parameter_size,
- Channel.on,
+ q.add_log_cmd(P60Info.STACK_3V3_ON)
+ q.add_pus_tc(
+ pack_set_param_command(
+ objb,
+ P60DockConfigTable.out_en_9.parameter_address,
+ P60DockConfigTable.out_en_9.parameter_size,
+ Channel.on,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
if op_code in P60OpCodes.STACK_3V3_OFF:
- tc_queue.appendleft((QueueCommands.PRINT, Info.STACK_3V3_OFF))
- command = pack_set_param_command(
- objb,
- P60DockConfigTable.out_en_9.parameter_address,
- P60DockConfigTable.out_en_9.parameter_size,
- Channel.off,
+ q.add_log_cmd(P60Info.STACK_3V3_OFF)
+ q.add_pus_tc(
+ pack_set_param_command(
+ objb,
+ P60DockConfigTable.out_en_9.parameter_address,
+ P60DockConfigTable.out_en_9.parameter_size,
+ Channel.off,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
if op_code in P60OpCodes.STACK_5V_ON:
- tc_queue.appendleft((QueueCommands.PRINT, Info.STACK_5V_ON))
- command = pack_set_param_command(
- objb,
- P60DockConfigTable.out_en_10.parameter_address,
- P60DockConfigTable.out_en_10.parameter_size,
- Channel.on,
+ q.add_log_cmd(P60Info.STACK_5V_ON)
+ q.add_pus_tc(
+ pack_set_param_command(
+ objb,
+ P60DockConfigTable.out_en_10.parameter_address,
+ P60DockConfigTable.out_en_10.parameter_size,
+ Channel.on,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
if op_code in P60OpCodes.STACK_5V_OFF:
- tc_queue.appendleft((QueueCommands.PRINT, Info.STACK_5V_OFF))
- command = pack_set_param_command(
- objb,
- P60DockConfigTable.out_en_10.parameter_address,
- P60DockConfigTable.out_en_10.parameter_size,
- Channel.off,
+ q.add_log_cmd(P60Info.STACK_5V_OFF)
+ q.add_pus_tc(
+ pack_set_param_command(
+ objb,
+ P60DockConfigTable.out_en_10.parameter_address,
+ P60DockConfigTable.out_en_10.parameter_size,
+ Channel.off,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
if op_code in GomspaceOpCodes.REQUEST_CORE_HK_ONCE:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "P60 Dock: Requesting HK Core HK Once")
- )
+ q.add_log_cmd("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())
+ q.add_pus_tc(generate_one_hk_command(sid=hk_sid))
if op_code in GomspaceOpCodes.REQUEST_AUX_HK_ONCE:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "P60 Dock: Requesting HK Aux HK Once")
- )
+ q.add_log_cmd("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())
+ q.add_pus_tc(generate_one_hk_command(sid=hk_sid))
if op_code in GomspaceOpCodes.PRINT_SWITCH_V_I:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "P60 Dock: Print Switches, Voltages, Currents")
+ q.add_log_cmd("P60 Dock: Print Switches, Voltages, Currents")
+ q.add_pus_tc(
+ make_fsfw_action_cmd(
+ object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_SWITCH_V_I
+ )
)
- command = generate_action_command(
- object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_SWITCH_V_I
- )
- tc_queue.appendleft(command.pack_command_tuple())
if op_code in GomspaceOpCodes.PRINT_LATCHUPS:
- tc_queue.appendleft((QueueCommands.PRINT, "P60 Dock: Print Latchups"))
- command = generate_action_command(
- object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_LATCHUPS
+ q.add_log_cmd("P60 Dock: Print Latchups")
+ q.add_pus_tc(
+ make_fsfw_action_cmd(
+ object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_LATCHUPS
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
if P60DockTestProcedure.all or P60DockTestProcedure.reboot:
- tc_queue.appendleft((QueueCommands.PRINT, "P60 Dock: Reboot"))
- command = pack_reboot_command(object_id)
- # command = PusTelecommand(service=8, subservice=128, ssc=22, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("P60 Dock: Reboot")
+ q.add_pus_tc(pack_reboot_command(object_id))
if P60DockTestProcedure.all or P60DockTestProcedure.read_gnd_wdt:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "P60 Dock: Reading ground watchdog timer value")
+ q.add_log_cmd("P60 Dock: Reading ground watchdog timer value")
+ q.add_pus_tc(
+ pack_get_param_command(
+ objb,
+ TableIds.hk,
+ P60DockHkTable.wdt_gnd_left.parameter_address,
+ P60DockHkTable.wdt_gnd_left.parameter_size,
+ )
)
- command = pack_get_param_command(
- objb,
- TableIds.hk,
- P60DockHkTable.wdt_gnd_left.parameter_address,
- P60DockHkTable.wdt_gnd_left.parameter_size,
- )
- # command = PusTelecommand(service=8, subservice=128, ssc=20, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
if P60DockTestProcedure.all or P60DockTestProcedure.gnd_wdt_reset:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "P60 Dock: Testing ground watchdog reset")
- )
- command = pack_gnd_wdt_reset_command(object_id)
- # command = PusTelecommand(service=8, subservice=128, ssc=21, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("P60 Dock: Testing ground watchdog reset")
+ q.add_pus_tc(pack_gnd_wdt_reset_command(object_id))
if P60DockTestProcedure.all or P60DockTestProcedure.ping:
- tc_queue.appendleft((QueueCommands.PRINT, "P60 Dock: Ping"))
+ q.add_log_cmd("P60 Dock: Ping")
ping_data = bytearray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- command = pack_ping_command(object_id, ping_data)
- # command = PusTelecommand(service=8, subservice=128, ssc=22, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(pack_ping_command(object_id, ping_data))
if P60DockTestProcedure.all or P60DockTestProcedure.channel_3_off:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "P60 Dock: Testing setting output channel 3 off")
- )
+ q.add_log_cmd("P60 Dock: Testing setting output channel 3 off")
parameter = 0 # set channel off
- command = pack_set_param_command(
- objb,
- P60DockConfigTable.out_en_3.parameter_address,
- P60DockConfigTable.out_en_3.parameter_size,
- parameter,
+ q.add_pus_tc(
+ pack_set_param_command(
+ objb,
+ P60DockConfigTable.out_en_3.parameter_address,
+ P60DockConfigTable.out_en_3.parameter_size,
+ parameter,
+ )
)
- # command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
if P60DockTestProcedure.all or P60DockTestProcedure.read_temperature1:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "P60 Dock: Testing temperature reading")
+ q.add_log_cmd("P60 Dock: Testing temperature reading")
+ q.add_pus_tc(
+ pack_get_param_command(
+ objb,
+ TableIds.hk,
+ P60DockHkTable.temperature1.parameter_address,
+ P60DockHkTable.temperature1.parameter_size,
+ )
)
- command = pack_get_param_command(
- objb,
- TableIds.hk,
- P60DockHkTable.temperature1.parameter_address,
- P60DockHkTable.temperature1.parameter_size,
- )
- # command = PusTelecommand(service=8, subservice=128, ssc=24, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
if P60DockTestProcedure.all or P60DockTestProcedure.channel_3_on:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "P60 Dock: Testing Output Channel 3 state (PDU2)")
+ q.add_log_cmd("P60 Dock: Testing Output Channel 3 state (PDU2)")
+ q.add_pus_tc(
+ pack_get_param_command(
+ objb,
+ TableIds.config,
+ P60DockConfigTable.out_en_3.parameter_address,
+ P60DockConfigTable.out_en_3.parameter_size,
+ )
)
- command = pack_get_param_command(
- objb,
- TableIds.config,
- P60DockConfigTable.out_en_3.parameter_address,
- P60DockConfigTable.out_en_3.parameter_size,
- )
- # command = PusTelecommand(service=8, subservice=128, ssc=25, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
if P60DockTestProcedure.all or P60DockTestProcedure.read_cur_lu_lim_0:
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "P60 Dock: Reading current limit value of output channel 0",
+ q.add_log_cmd("P60 Dock: Reading current limit value of output channel 0")
+ q.add_pus_tc(
+ pack_get_param_command(
+ objb,
+ TableIds.config,
+ P60DockConfigTable.cur_lu_lim_0.parameter_address,
+ P60DockConfigTable.cur_lu_lim_0.parameter_size,
)
)
- command = pack_get_param_command(
- objb,
- TableIds.config,
- P60DockConfigTable.cur_lu_lim_0.parameter_address,
- P60DockConfigTable.cur_lu_lim_0.parameter_size,
- )
- # command = PusTelecommand(service=8, subservice=128, ssc=26, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
if P60DockTestProcedure.all or P60DockTestProcedure.channel_3_on:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "P60 Dock: Testing setting output channel 3 on")
- )
+ q.add_log_cmd("P60 Dock: Testing setting output channel 3 on")
parameter = 1 # set channel on
- command = pack_set_param_command(
- objb,
- P60DockConfigTable.out_en_3.parameter_address,
- P60DockConfigTable.out_en_3.parameter_size,
- parameter,
+ q.add_pus_tc(
+ pack_set_param_command(
+ objb,
+ P60DockConfigTable.out_en_3.parameter_address,
+ P60DockConfigTable.out_en_3.parameter_size,
+ parameter,
+ )
)
- # command = PusTelecommand(service=8, subservice=128, ssc=27, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
if P60DockTestProcedure.all or P60DockTestProcedure.invalid_table_id_test:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "P60 Dock: Testing invalid table id handling")
- )
+ q.add_log_cmd("P60 Dock: Testing invalid table id handling")
table_id_invalid = 5
- command = pack_get_param_command(
- objb,
- table_id_invalid,
- P60DockHkTable.temperature1.parameter_address,
- P60DockHkTable.temperature1.parameter_size,
+ q.add_pus_tc(
+ pack_get_param_command(
+ objb,
+ table_id_invalid,
+ P60DockHkTable.temperature1.parameter_address,
+ P60DockHkTable.temperature1.parameter_size,
+ )
)
- # command = PusTelecommand(service=8, subservice=128, ssc=28, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
if P60DockTestProcedure.all or P60DockTestProcedure.invalid_address_test:
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "P60 Dock: Testing invalid address handling in get param command",
- )
- )
+ q.add_log_cmd("P60 Dock: Testing invalid address handling in get param command")
invalid_address = bytearray([0x01, 0xF4])
- command = pack_get_param_command(
- objb,
- TableIds.hk,
- invalid_address,
- P60DockHkTable.temperature1.parameter_size,
- )
- # command = PusTelecommand(service=8, subservice=128, ssc=29, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "P60 Dock: Testing invalid address handling in set param command",
+ q.add_pus_tc(
+ pack_get_param_command(
+ objb,
+ TableIds.hk,
+ invalid_address,
+ P60DockHkTable.temperature1.parameter_size,
)
)
+ q.add_log_cmd("P60 Dock: Testing invalid address handling in set param command")
invalid_address = bytearray([0x01, 0xF4])
parameter_size = 2
parameter = 1
- command = pack_set_param_command(
- objb, invalid_address, parameter_size, parameter
+ q.add_pus_tc(
+ pack_set_param_command(objb, invalid_address, parameter_size, parameter)
)
- # command = PusTelecommand(service=8, subservice=128, ssc=30, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
if P60DockTestProcedure.all or P60DockTestProcedure.invalid_parameter_size_test:
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "P60 Dock: Testing handling of invalid parameter sizes in get-param command",
- )
+ q.add_log_cmd(
+ "P60 Dock: Testing handling of invalid parameter sizes in get-param command"
)
invalid_size = 5
- command = pack_get_param_command(
- objb,
- TableIds.hk,
- P60DockHkTable.temperature1.parameter_address,
- invalid_size,
- )
- # command = PusTelecommand(service=8, subservice=128, ssc=31, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "P60 Dock: Testing handling of invalid parameter size in set-param command",
+ q.add_pus_tc(
+ pack_get_param_command(
+ objb,
+ TableIds.hk,
+ P60DockHkTable.temperature1.parameter_address,
+ invalid_size,
)
)
- parameter = 1
- command = pack_set_param_command(
- objb,
- P60DockConfigTable.out_en_3.parameter_address,
- invalid_size,
- parameter,
+ q.add_log_cmd(
+ "P60 Dock: Testing handling of invalid parameter size in set-param command"
+ )
+ parameter = 1
+ q.add_pus_tc(
+ pack_set_param_command(
+ objb,
+ P60DockConfigTable.out_en_3.parameter_address,
+ invalid_size,
+ parameter,
+ )
)
- # 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/pcdu.py b/pus_tc/devs/pcdu.py
deleted file mode 100644
index bd95d3d..0000000
--- a/pus_tc/devs/pcdu.py
+++ /dev/null
@@ -1,297 +0,0 @@
-from config.definitions import CustomServiceList
-from tmtccmd.config import (
- ServiceOpCodeDictT,
- add_op_code_entry,
- add_service_op_code_entry,
- OpCodeDictKeys,
-)
-
-from pus_tc.devs.p60dock import P60OpCodes, GomspaceOpCodes, Info
-from pus_tc.devs.pdu1 import Pdu1OpCodes
-from pus_tc.devs.pdu2 import Pdu2OpCodes
-from pus_tc.devs.acu import add_acu_cmds
-from gomspace.gomspace_common import Info as GsInfo
-
-
-def add_p60_cmds(cmd_dict: ServiceOpCodeDictT):
- op_code_dict = dict()
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=P60OpCodes.STACK_3V3_ON,
- info=Info.STACK_3V3_ON,
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=P60OpCodes.STACK_3V3_OFF,
- info=Info.STACK_3V3_OFF,
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=P60OpCodes.STACK_5V_ON,
- info=Info.STACK_5V_ON,
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=P60OpCodes.STACK_5V_OFF,
- info=Info.STACK_5V_OFF,
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- 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,
- keys=GomspaceOpCodes.PRINT_SWITCH_V_I,
- info="P60 Dock: Print Switches, Voltages, Currents",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=GomspaceOpCodes.PRINT_LATCHUPS,
- info="P60 Dock: Print Latchups",
- )
- add_op_code_entry(op_code_dict=op_code_dict, keys=P60OpCodes.TEST, info="P60 Tests")
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
- name=CustomServiceList.P60DOCK.value,
- info="P60 Device",
- op_code_entry=op_code_dict,
- )
-
-
-def add_pdu1_cmds(cmd_dict: ServiceOpCodeDictT):
- op_code_dict = dict()
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.TCS_BOARD_OFF.value,
- info="PDU1: Turn TCS board off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.STAR_TRACKER_ON.value,
- info="PDU1: Turn star tracker on",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.STAR_TRACKER_OFF.value,
- info="PDU1: Turn star tracker off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.SUS_NOMINAL_ON.value,
- info="PDU1: Turn SUS nominal on",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.SUS_NOMINAL_OFF.value,
- info="PDU1: Turn SUS nominal off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.ACS_A_SIDE_ON.value,
- info="PDU1: Turn ACS A side on",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.ACS_A_SIDE_OFF.value,
- info="PDU1: Turn ACS A side off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.SYRLINKS_ON.value,
- info="PDU1: Turn Syrlinks on",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.SYRLINKS_OFF.value,
- info="PDU1: Turn Syrlinks off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.MGT_ON.value,
- info="PDU1: Turn MGT on",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.MGT_OFF.value,
- info="PDU1: Turn MGT off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.PLOC_ON.value,
- info="PDU1: Turn PLOC on",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.PLOC_OFF.value,
- info="PDU1: Turn PLOC off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.SCEX_ON.value,
- info="PDU1: Turn Solar Cell Experiment on",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.SCEX_OFF.value,
- info="PDU1: Turn Solar Cell Experiment off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- 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,
- keys=GomspaceOpCodes.PRINT_SWITCH_V_I,
- info="PDU1: Print Switches, Voltages, Currents",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu1OpCodes.TCS_BOARD_ON.value,
- info="PDU1: Turn TCS board on",
- )
-
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=GomspaceOpCodes.PRINT_LATCHUPS,
- info="PDU1: Print Latchups",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict, keys=Pdu1OpCodes.TESTS.value, info="PDU1 Tests"
- )
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
- name=CustomServiceList.PDU1.value,
- info="PDU1 Device",
- op_code_entry=op_code_dict,
- )
-
-
-def add_pdu2_cmds(cmd_dict: ServiceOpCodeDictT):
- op_code_dict = dict()
- add_op_code_entry(op_code_dict=op_code_dict, keys="0", info="PDU2 Tests")
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.ACS_SIDE_B_ON.value,
- info="PDU2: Turn ACS Side B on",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.ACS_SIDE_B_OFF.value,
- info="PDU2: Turn ACS Side B off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.SUS_REDUNDANT_ON.value,
- info="PDU2: Turn SUS redundant on",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.SUS_REDUNDANT_OFF.value,
- info="PDU2: Turn SUS redundant off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.RW_ON.value,
- info="PDU2: Turn reaction wheels on",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.RW_OFF.value,
- info="PDU2: Turn reaction wheels off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.PL_PCDU_VBAT_NOM_ON.value,
- info="PDU2: PL PCDU Switch Channel Nominal (1) on",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.PL_PCDU_VBAT_NOM_OFF.value,
- info="PDU2: PL PCDU Switch Channel Nominal (1) off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.PL_PCDU_VBAT_RED_ON.value,
- info="PDU2: PL PCDU Switch Channel Redundant (1) on",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.PL_PCDU_VBAT_RED_OFF.value,
- info="PDU2: PL PCDU Switch Channel Redundant (1) off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.TCS_HEATER_IN_ON.value,
- info="PDU2: Switch TCS Heater Input on",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.TCS_HEATER_IN_OFF.value,
- info="PDU2: Switch TCS Heater Input off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.SOLAR_ARRAY_DEPL_ON.value,
- info="PDU2: Switch Solar Array Deployment On",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.SOLAR_ARRAY_DEPL_OFF.value,
- info="PDU2: Switch Solar Array Deployment Off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.PL_CAMERA_ON.value,
- info="PDU2: Turn payload camera on",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=Pdu2OpCodes.PL_CAMERA_OFF.value,
- info="PDU2: Turn payload camera off",
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- 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,
- keys=GomspaceOpCodes.PRINT_SWITCH_V_I,
- info="PDU2: Print Switches, Voltages, Currents",
- options={OpCodeDictKeys.TIMEOUT: 2.0},
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=GomspaceOpCodes.PRINT_LATCHUPS,
- info="PDU2: Print Latchups",
- )
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
- name="pdu2",
- info="PDU2 Device",
- op_code_entry=op_code_dict,
- )
-
-
-def add_pcdu_cmds(cmd_dict: ServiceOpCodeDictT):
- add_p60_cmds(cmd_dict)
- add_pdu1_cmds(cmd_dict)
- add_pdu2_cmds(cmd_dict)
- add_acu_cmds(cmd_dict)
diff --git a/pus_tc/devs/pdec_handler.py b/pus_tc/devs/pdec_handler.py
index c62a639..4c58762 100644
--- a/pus_tc/devs/pdec_handler.py
+++ b/pus_tc/devs/pdec_handler.py
@@ -5,9 +5,8 @@
@author J. Meier
@date 22.11.2021
"""
-from tmtccmd.config.definitions import QueueCommands
-from tmtccmd.tc.packer import TcQueueT
from spacepackets.ecss.tc import PusTelecommand
+from tmtccmd.tc import DefaultPusQueueHelper
class CommandIds:
@@ -17,24 +16,15 @@ class CommandIds:
PRINT_PDEC_MON = bytearray([0x0, 0x0, 0x0, 0x1])
-def pack_pdec_handler_test(object_id: bytearray, tc_queue: TcQueueT, op_code: str):
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "Testing PDEC handler with object id: 0x" + object_id.hex(),
- )
- )
-
+def pack_pdec_handler_test(
+ object_id: bytearray, q: DefaultPusQueueHelper, op_code: str
+):
+ q.add_log_cmd(f"Testing PDEC handler with object id: {object_id.hex()}")
if op_code == "0":
- tc_queue.appendleft((QueueCommands.PRINT, "PDEC Handler: Print CLCW"))
+ q.add_log_cmd("PDEC Handler: Print CLCW")
command = object_id + CommandIds.PRINT_CLCW
- command = PusTelecommand(service=8, subservice=128, ssc=30, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
-
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "1":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDEC Handler: Print PDEC monitor register")
- )
+ q.add_log_cmd("PDEC Handler: Print PDEC monitor register")
command = object_id + CommandIds.PRINT_PDEC_MON
- command = PusTelecommand(service=8, subservice=128, ssc=31, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
diff --git a/pus_tc/devs/pdu1.py b/pus_tc/devs/pdu1.py
index 04c042e..15d428b 100644
--- a/pus_tc/devs/pdu1.py
+++ b/pus_tc/devs/pdu1.py
@@ -1,10 +1,12 @@
# -*- coding: utf-8 -*-
-"""PDU2 is mounted on the X2 slot of the P60 dock
+"""PDU1 is mounted on the X2 slot of the P60 dock
@author J. Meier
@date 17.12.2020
"""
-from tmtccmd.config.definitions import QueueCommands
-from tmtccmd.tc.packer import TcQueueT
+import gomspace.gomspace_common as gs
+from pus_tc.devs.common_power import pdu1_cmds, pdu1_req_hk_cmds
+
+from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_3_fsfw_hk import (
generate_one_hk_command,
make_sid,
@@ -15,28 +17,6 @@ from gomspace.gomspace_pdu_definitions import *
from config.object_ids import PDU_1_HANDLER_ID
-class Pdu1OpCodes(enum.Enum):
- TCS_BOARD_ON = "0"
- TCS_BOARD_OFF = "1"
- STAR_TRACKER_ON = "2"
- STAR_TRACKER_OFF = "3"
- SUS_NOMINAL_ON = "4"
- SUS_NOMINAL_OFF = "5"
- ACS_A_SIDE_ON = "6"
- ACS_A_SIDE_OFF = "7"
- SYRLINKS_ON = "8"
- SYRLINKS_OFF = "9"
- MGT_ON = "10"
- MGT_OFF = "11"
- # Solar Cell Experiment
- SCEX_ON = "12"
- SCEX_OFF = "13"
- PLOC_ON = "14"
- PLOC_OFF = "15"
-
- TESTS = "32"
-
-
class PDU1TestProcedure:
"""
@brief Use this class to define the tests to perform for the PDU2.
@@ -54,241 +34,82 @@ class PDU1TestProcedure:
turn_channel_3_off = False
-def pack_pdu1_commands(object_id: ObjectId, tc_queue: TcQueueT, op_code: str):
- tc_queue.appendleft((QueueCommands.PRINT, "Commanding PDU1"))
+def pack_pdu1_commands(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str):
+ q.add_log_cmd("Commanding PDU1")
objb = object_id.as_bytes
- if op_code == Pdu1OpCodes.TCS_BOARD_ON.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn TCS board on"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_0.parameter_address,
- PDUConfigTable.out_en_0.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.TCS_BOARD_OFF.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn TCS board off"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_0.parameter_address,
- PDUConfigTable.out_en_0.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.STAR_TRACKER_ON.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn star tracker on"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_2.parameter_address,
- PDUConfigTable.out_en_2.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.STAR_TRACKER_OFF.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn star tracker off"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_2.parameter_address,
- PDUConfigTable.out_en_2.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.SUS_NOMINAL_ON.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn SUS nominal on"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_4.parameter_address,
- PDUConfigTable.out_en_4.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.SUS_NOMINAL_OFF.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn SUS nominal off"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_4.parameter_address,
- PDUConfigTable.out_en_4.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.ACS_A_SIDE_ON.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn ACS Side A on"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_7.parameter_address,
- PDUConfigTable.out_en_7.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.ACS_A_SIDE_OFF.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn ACS Side A off"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_7.parameter_address,
- PDUConfigTable.out_en_7.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.SUS_NOMINAL_OFF.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn SUS nominal off"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_4.parameter_address,
- PDUConfigTable.out_en_4.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.SCEX_ON.value:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU1: Turn Solar Cell Experiment on")
- )
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_5.parameter_address,
- PDUConfigTable.out_en_5.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.SCEX_OFF.value:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU1: Turn Solar Cell Experiment off")
- )
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_5.parameter_address,
- PDUConfigTable.out_en_5.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.SYRLINKS_ON.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn Syrlinks on"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_1.parameter_address,
- PDUConfigTable.out_en_1.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.SYRLINKS_OFF.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn Syrlinks off"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_1.parameter_address,
- PDUConfigTable.out_en_1.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.MGT_ON.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn MGT on"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_3.parameter_address,
- PDUConfigTable.out_en_3.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.MGT_OFF.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn MGT off"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_3.parameter_address,
- PDUConfigTable.out_en_3.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.PLOC_ON.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn PLOC on"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_6.parameter_address,
- PDUConfigTable.out_en_6.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu1OpCodes.PLOC_OFF.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn PLOC off"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_6.parameter_address,
- PDUConfigTable.out_en_6.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- 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())
+ pdu1_cmds(q, op_code)
+ pdu1_req_hk_cmds(q, op_code)
if op_code in GomspaceOpCodes.PRINT_SWITCH_V_I:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU1: Print Switches, Voltages, Currents")
+ q.add_log_cmd("PDU1: Print Switches, Voltages, Currents")
+ q.add_pus_tc(
+ make_fsfw_action_cmd(
+ object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_SWITCH_V_I
+ )
)
- command = generate_action_command(
- object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_SWITCH_V_I
- )
- tc_queue.appendleft(command.pack_command_tuple())
if op_code in GomspaceOpCodes.PRINT_LATCHUPS:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Print Latchups"))
- command = generate_action_command(
- object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_LATCHUPS
+ q.add_log_cmd("PDU1: Print Latchups")
+ q.add_pus_tc(
+ make_fsfw_action_cmd(
+ object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_LATCHUPS
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
+ if op_code in GomspaceOpCodes.SET_PARAM:
+ q.add_log_cmd(f"PDU1: {GsInfo.SET_PARAMETER}")
+ prompt_and_pack_set_param_command(q, object_id)
+ if op_code in GomspaceOpCodes.GET_PARAM:
+ q.add_log_cmd(f"PDU1: {GsInfo.GET_PARAMETER}")
+ gs.prompt_and_pack_get_param_command(q, object_id)
if PDU1TestProcedure.all or PDU1TestProcedure.ping:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Ping Test"))
+ q.add_log_cmd("PDU1: Ping Test")
ping_data = bytearray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- command = pack_ping_command(object_id, ping_data)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(pack_ping_command(object_id, ping_data))
if PDU1TestProcedure.all or PDU1TestProcedure.read_temperature:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Testing temperature reading"))
- command = pack_get_param_command(
- objb,
- TableIds.hk,
- PDUHkTable.temperature.parameter_address,
- PDUHkTable.temperature.parameter_size,
+ q.add_log_cmd("PDU1: Testing temperature reading")
+ q.add_pus_tc(
+ pack_get_param_command(
+ objb,
+ TableIds.hk,
+ PduHkTable.temperature.parameter_address,
+ PduHkTable.temperature.parameter_size,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
if PDU1TestProcedure.all or PDU1TestProcedure.turn_channel_2_on:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU1: Turn channel 2 on (Star Tracker)")
+ q.add_log_cmd("PDU1: Turn channel 2 on (Star Tracker)")
+ q.add_pus_tc(
+ pack_set_param_command(
+ objb,
+ PduConfigTable.out_en_2.parameter_address,
+ PduConfigTable.out_en_2.parameter_size,
+ Channel.on,
+ )
)
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_2.parameter_address,
- PDUConfigTable.out_en_2.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
if PDU1TestProcedure.all or PDU1TestProcedure.turn_channel_2_off:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU1: Turn channel 2 off (Star Tracker)")
+ q.add_log_cmd("PDU1: Turn channel 2 off (Star Tracker)")
+ q.add_pus_tc(
+ pack_set_param_command(
+ objb,
+ PduConfigTable.out_en_2.parameter_address,
+ PduConfigTable.out_en_2.parameter_size,
+ Channel.off,
+ )
)
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_2.parameter_address,
- PDUConfigTable.out_en_2.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
if PDU1TestProcedure.all or PDU1TestProcedure.turn_channel_3_on:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn channel 3 on (MTQ)"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_3.parameter_address,
- PDUConfigTable.out_en_3.parameter_size,
- Channel.on,
+ q.add_log_cmd("PDU1: Turn channel 3 on (MTQ)")
+ q.add_pus_tc(
+ pack_set_param_command(
+ objb,
+ PduConfigTable.out_en_3.parameter_address,
+ PduConfigTable.out_en_3.parameter_size,
+ Channel.on,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
if PDU1TestProcedure.all or PDU1TestProcedure.turn_channel_3_off:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU1: Turn channel 3 off (MTQ)"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_3.parameter_address,
- PDUConfigTable.out_en_3.parameter_size,
- Channel.off,
+ q.add_log_cmd("PDU1: Turn channel 3 off (MTQ)")
+ q.add_pus_tc(
+ pack_set_param_command(
+ objb,
+ PduConfigTable.out_en_3.parameter_address,
+ PduConfigTable.out_en_3.parameter_size,
+ Channel.off,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
diff --git a/pus_tc/devs/pdu2.py b/pus_tc/devs/pdu2.py
index df4c883..367b791 100644
--- a/pus_tc/devs/pdu2.py
+++ b/pus_tc/devs/pdu2.py
@@ -6,37 +6,9 @@
@author J. Meier
@date 17.12.2020
"""
-from tmtccmd.config.definitions import QueueCommands
-from tmtccmd.tc.packer import TcQueueT
-from tmtccmd.tc.pus_3_fsfw_hk import (
- generate_one_hk_command,
- generate_one_diag_command,
- make_sid,
-)
+from pus_tc.devs.common_power import pdu2_cmds, pdu2_req_hk_cmds
from gomspace.gomspace_common import *
from gomspace.gomspace_pdu_definitions import *
-from config.object_ids import PDU_2_HANDLER_ID
-
-
-class Pdu2OpCodes(enum.Enum):
- ACS_SIDE_B_ON = "1"
- ACS_SIDE_B_OFF = "2"
- SUS_REDUNDANT_ON = "3"
- SUS_REDUNDANT_OFF = "4"
- RW_ON = "5"
- RW_OFF = "6"
- PL_PCDU_VBAT_NOM_ON = "7"
- PL_PCDU_VBAT_NOM_OFF = "8"
- PL_PCDU_VBAT_RED_ON = "9"
- PL_PCDU_VBAT_RED_OFF = "10"
- TCS_HEATER_IN_ON = "11"
- TCS_HEATER_IN_OFF = "12"
- SOLAR_ARRAY_DEPL_ON = "13"
- SOLAR_ARRAY_DEPL_OFF = "14"
- PL_CAMERA_ON = "15"
- PL_CAMERA_OFF = "16"
- # There is not really a point of the on command, the SW can not be commanded if the OBC is off
- Q7S_OFF = "32"
class PDU2TestProcedure:
@@ -66,288 +38,101 @@ class PDU2TestProcedure:
request_hk_table = False
-def pack_pdu2_commands(object_id: ObjectId, tc_queue: TcQueueT, op_code: str):
- tc_queue.appendleft((QueueCommands.PRINT, "Testing PDU2"))
+def pack_pdu2_commands(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str):
+ q.add_log_cmd("Testing PDU2")
objb = object_id.as_bytes
- if op_code == Pdu2OpCodes.ACS_SIDE_B_ON.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Turn ACS Side B on"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_7.parameter_address,
- PDUConfigTable.out_en_7.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- return tc_queue
- if op_code == Pdu2OpCodes.ACS_SIDE_B_OFF.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Turn ACS Side B off"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_7.parameter_address,
- PDUConfigTable.out_en_7.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- return tc_queue
- if op_code == Pdu2OpCodes.Q7S_OFF.value:
- tc_queue.appendleft((QueueCommands.PRINT, "Turning off Q7S OBC"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_0.parameter_address,
- PDUConfigTable.out_en_0.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu2OpCodes.SUS_REDUNDANT_ON.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Turn SUS redundant on"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_4.parameter_address,
- PDUConfigTable.out_en_4.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu2OpCodes.SUS_REDUNDANT_OFF.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Turn SUS redundant off"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_4.parameter_address,
- PDUConfigTable.out_en_4.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu2OpCodes.RW_ON.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Turn reaction wheels on"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_2.parameter_address,
- PDUConfigTable.out_en_2.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu2OpCodes.RW_OFF.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Turn reaction wheels off"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_2.parameter_address,
- PDUConfigTable.out_en_2.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu2OpCodes.PL_PCDU_VBAT_NOM_ON.value:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU2: Turn PDU2 PL PCDU Channel 1 on")
- )
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_1.parameter_address,
- PDUConfigTable.out_en_1.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu2OpCodes.PL_PCDU_VBAT_NOM_OFF.value:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU2: Turn PDU2 PL PCDU Channel 1 off")
- )
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_1.parameter_address,
- PDUConfigTable.out_en_1.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu2OpCodes.PL_PCDU_VBAT_RED_ON.value:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU2: Turn PDU2 PL PCDU Channel 6 on")
- )
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_6.parameter_address,
- PDUConfigTable.out_en_6.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu2OpCodes.PL_PCDU_VBAT_RED_OFF.value:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU2: Turn PDU2 PL PCDU Channel 6 off")
- )
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_6.parameter_address,
- PDUConfigTable.out_en_6.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu2OpCodes.TCS_HEATER_IN_ON.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Turn TCS Heater Input on"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_3.parameter_address,
- PDUConfigTable.out_en_3.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu2OpCodes.TCS_HEATER_IN_OFF.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Turn TCS Heater Input off"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_3.parameter_address,
- PDUConfigTable.out_en_3.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu2OpCodes.SOLAR_ARRAY_DEPL_ON.value:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU2: Turn Solar Array Deployment On")
- )
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_5.parameter_address,
- PDUConfigTable.out_en_5.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu2OpCodes.SOLAR_ARRAY_DEPL_OFF.value:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU2: Turn Solar Array Deployment Off")
- )
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_5.parameter_address,
- PDUConfigTable.out_en_5.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu2OpCodes.PL_CAMERA_ON.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Turn payload camera on"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_8.parameter_address,
- PDUConfigTable.out_en_8.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == Pdu2OpCodes.PL_CAMERA_OFF.value:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Turn payload camera off"))
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_8.parameter_address,
- PDUConfigTable.out_en_8.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- 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())
+ pdu2_cmds(q, op_code)
+ pdu2_req_hk_cmds(q, op_code)
if op_code in GomspaceOpCodes.PRINT_SWITCH_V_I:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU2: Print Switches, Currents, Voltahes")
+ q.add_log_cmd(f"PDU2: {GsInfo.PRINT_SWITCH_V_I}")
+ q.add_pus_tc(
+ make_fsfw_action_cmd(
+ object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_SWITCH_V_I
+ )
)
- command = generate_action_command(
- object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_SWITCH_V_I
- )
- tc_queue.appendleft(command.pack_command_tuple())
if op_code in GomspaceOpCodes.PRINT_LATCHUPS:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Print Latchups"))
- command = generate_action_command(
- object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_LATCHUPS
+ q.add_log_cmd("PDU2: Print Latchups")
+ q.add_pus_tc(
+ make_fsfw_action_cmd(
+ object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_LATCHUPS
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
+ if op_code in GomspaceOpCodes.SET_PARAM:
+ q.add_log_cmd(f"PDU2: {GsInfo.SET_PARAMETER}")
+ prompt_and_pack_set_param_command(q, object_id)
+ if op_code in GomspaceOpCodes.GET_PARAM:
+ q.add_log_cmd(f"PDU2: {GsInfo.GET_PARAMETER}")
+ prompt_and_pack_get_param_command(q, object_id)
if PDU2TestProcedure.all or PDU2TestProcedure.reboot:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Reboot"))
- command = pack_reboot_command(object_id)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("PDU2: Reboot")
+ q.add_pus_tc(pack_reboot_command(object_id))
if PDU2TestProcedure.all or PDU2TestProcedure.read_gnd_wdt:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU2: Reading ground watchdog timer value")
+ q.add_log_cmd("PDU2: Reading ground watchdog timer value")
+ q.add_pus_tc(
+ pack_get_param_command(
+ objb,
+ TableIds.hk,
+ PduHkTable.wdt_gnd_left.parameter_address,
+ PduHkTable.wdt_gnd_left.parameter_size,
+ )
)
- command = pack_get_param_command(
- objb,
- TableIds.hk,
- PDUHkTable.wdt_gnd_left.parameter_address,
- PDUHkTable.wdt_gnd_left.parameter_size,
- )
- tc_queue.appendleft(command.pack_command_tuple())
if PDU2TestProcedure.all or PDU2TestProcedure.gnd_wdt_reset:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU2: Testing ground watchdog reset")
- )
- command = pack_gnd_wdt_reset_command(object_id)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("PDU2: Testing ground watchdog reset")
+ q.add_pus_tc(pack_gnd_wdt_reset_command(object_id))
if PDU2TestProcedure.all or PDU2TestProcedure.ping:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Ping Test"))
+ q.add_log_cmd("PDU2: Ping Test")
ping_data = bytearray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- command = pack_ping_command(object_id, ping_data)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(pack_ping_command(object_id, ping_data))
if PDU2TestProcedure.all or PDU2TestProcedure.channel_2_on:
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "PDU2: Testing setting output channel 2 on (TCS Heater)",
+ q.add_log_cmd("PDU2: Testing setting output channel 2 on (TCS Heater)")
+ q.add_pus_tc(
+ pack_set_param_command(
+ objb,
+ PduConfigTable.out_en_2.parameter_address,
+ PduConfigTable.out_en_2.parameter_size,
+ Channel.on,
)
)
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_2.parameter_address,
- PDUConfigTable.out_en_2.parameter_size,
- Channel.on,
- )
- tc_queue.appendleft(command.pack_command_tuple())
if PDU2TestProcedure.all or PDU2TestProcedure.read_temperature:
- tc_queue.appendleft((QueueCommands.PRINT, "PDU2: Testing temperature reading"))
- command = pack_get_param_command(
- objb,
- TableIds.hk,
- PDUHkTable.temperature.parameter_address,
- PDUHkTable.temperature.parameter_size,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if PDU2TestProcedure.all or PDU2TestProcedure.read_channel_2_state:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU2: Reading output channel 2 state (TCS Heater)")
- )
- command = pack_get_param_command(
- objb,
- TableIds.config,
- PDUConfigTable.out_en_2.parameter_address,
- PDUConfigTable.out_en_2.parameter_size,
- )
- tc_queue.appendleft(command.pack_command_tuple())
- if PDU2TestProcedure.all or PDU2TestProcedure.read_cur_lu_lim_0:
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "PDU2: Reading current limit value of output channel 0 (OBC)",
+ q.add_log_cmd("PDU2: Testing temperature reading")
+ q.add_pus_tc(
+ pack_get_param_command(
+ objb,
+ TableIds.hk,
+ PduHkTable.temperature.parameter_address,
+ PduHkTable.temperature.parameter_size,
)
)
- command = pack_get_param_command(
- objb,
- TableIds.config,
- PDUConfigTable.cur_lu_lim_0.parameter_address,
- PDUConfigTable.cur_lu_lim_0.parameter_size,
+ if PDU2TestProcedure.all or PDU2TestProcedure.read_channel_2_state:
+ q.add_log_cmd("PDU2: Reading output channel 2 state (TCS Heater)")
+ q.add_pus_tc(
+ pack_get_param_command(
+ objb,
+ TableIds.config,
+ PduConfigTable.out_en_2.parameter_address,
+ PduConfigTable.out_en_2.parameter_size,
+ )
+ )
+ if PDU2TestProcedure.all or PDU2TestProcedure.read_cur_lu_lim_0:
+ q.add_log_cmd("PDU2: Reading current limit value of output channel 0 (OBC)")
+ q.add_pus_tc(
+ pack_get_param_command(
+ objb,
+ TableIds.config,
+ PduConfigTable.cur_lu_lim_0.parameter_address,
+ PduConfigTable.cur_lu_lim_0.parameter_size,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
if PDU2TestProcedure.all or PDU2TestProcedure.channel_2_off:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU2: Testing setting output channel 2 off")
+ q.add_log_cmd("PDU2: Testing setting output channel 2 off")
+ q.add_pus_tc(
+ pack_set_param_command(
+ objb,
+ PduConfigTable.out_en_2.parameter_address,
+ PduConfigTable.out_en_2.parameter_size,
+ Channel.off,
+ )
)
- command = pack_set_param_command(
- objb,
- PDUConfigTable.out_en_2.parameter_address,
- PDUConfigTable.out_en_2.parameter_size,
- Channel.off,
- )
- tc_queue.appendleft(command.pack_command_tuple())
if PDU2TestProcedure.all or PDU2TestProcedure.request_hk_table:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PDU2: Requesting housekeeping table")
- )
- command = pack_request_full_hk_table_command(object_id)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("PDU2: Requesting housekeeping table")
+ q.add_pus_tc(pack_request_full_hk_table_command(object_id))
diff --git a/pus_tc/devs/ploc_memory_dumper.py b/pus_tc/devs/ploc_memory_dumper.py
deleted file mode 100644
index 36edc8e..0000000
--- a/pus_tc/devs/ploc_memory_dumper.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-@file ploc_memory_dumper.py
-@brief This file implements the command to dump memory sectors of the PLOC. Memories of the PLOC which can be dumped
- are one MRAM, two flash memories and the SRAM.
-@author J. Meier
-@date 31.08.2021
-"""
-import struct
-
-from tmtccmd.config.definitions import QueueCommands
-
-from tmtccmd.tc.packer import TcQueueT
-from spacepackets.ecss.tc import PusTelecommand
-
-
-class ActionIds:
- DUMP_MRAM = 1
-
-
-def pack_ploc_memory_dumper_cmd(object_id: bytearray, tc_queue: TcQueueT, op_code: str):
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "Testing PLOC memory dumper with object id: 0x" + object_id.hex(),
- )
- )
-
- if op_code == "0":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Dump MRAM"))
- command = pack_mram_dump_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=30, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
-
-
-def pack_mram_dump_cmd(object_id: bytearray) -> bytearray:
- start = int(input("Start address: 0x"), 16)
- end = int(input("End address: 0x"), 16)
- command = bytearray()
- command = object_id + struct.pack("!I", ActionIds.DUMP_MRAM)
- command = command + struct.pack("!I", start)
- command = command + struct.pack("!I", end)
- return command
diff --git a/pus_tc/devs/ploc_mpsoc.py b/pus_tc/devs/ploc_mpsoc.py
deleted file mode 100644
index c285680..0000000
--- a/pus_tc/devs/ploc_mpsoc.py
+++ /dev/null
@@ -1,316 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-@file ploc_mpsoc.py
-@brief Tests for commanding the MPSoC of the PLOC.
- The MPSoC is programmed by the ILH.
-@author J. Meier
-@date 06.03.2021
-"""
-import struct
-import enum
-
-from tmtccmd.config.definitions import QueueCommands
-from tmtccmd.logging import get_console_logger
-from tmtccmd.tc.packer import TcQueueT
-from spacepackets.ecss.tc import PusTelecommand
-from utility.input_helper import InputHelper
-from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes
-
-LOGGER = get_console_logger()
-
-MANUAL_INPUT = "1"
-
-flash_write_file_dict = {
- MANUAL_INPUT: ["manual input", ""],
- "2": ["/mnt/sd0/ploc/mpsoc/flash_write.bin", "/mnt/sd0/ploc/mpsoc/flash_write.bin"],
-}
-
-mpsoc_file_dict = {
- MANUAL_INPUT: ["manual input", ""],
- "2": ["0:/flash", "0:/flash"],
-}
-
-sequence_file_dict = {
- MANUAL_INPUT: ["manual input", ""],
- "2": ["0:/EM16/231", "0:/EM16/231"],
- "3": ["0:/EQ04/E-75", "0:/EQ04/E-75"],
-}
-
-CARRIAGE_RETURN = 0xD
-
-
-class CommandIds(enum.IntEnum):
- TC_MEM_WRITE = 1
- TC_MEM_READ = 2
- FLASH_WRITE = 9
- TC_FLASH_DELETE = 10
- TC_REPLAY_START = 11
- TC_REPLAY_STOP = 12
- TC_REPLAY_WRITE_SEQUENCE = 13
- TC_DOWNLINK_PWR_ON = 14
- TC_DOWNLINK_PWR_OFF = 15
- OBSW_RESET_SEQ_COUNT = 50
- TC_MODE_REPLAY = 16
- TC_CAM_CMD_SEND = 17
- TC_MODE_IDLE = 18
- SET_UART_TX_TRISTATE = 20
- RELEASE_UART_TX = 21
-
-
-class MemAddresses(enum.IntEnum):
- DEADBEEF = 0x40000004
-
-
-class PlocReplyIds(enum.IntEnum):
- TM_MEM_READ_RPT = 6
- TM_CAM_CMD_RPT = 19
-
-
-def pack_ploc_mpsoc_commands(
- object_id: bytearray, tc_queue: TcQueueT, op_code: str
-) -> TcQueueT:
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "Generate command for PLOC MPSoC with object id: 0x" + object_id.hex(),
- )
- )
-
- if op_code == "0":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Set mode off"))
- command = pack_mode_data(object_id, Modes.OFF, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=9, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == "1":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Set mode on"))
- command = pack_mode_data(object_id, Modes.ON, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=10, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == "2":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Mode Normal"))
- command = pack_mode_data(object_id, Modes.NORMAL, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=11, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == "3":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: TC mem write test"))
- memory_address = int(
- input("PLOC MPSoC: Tc Mem Write: Type memory address: 0x"), 16
- )
- memory_data = int(input("PLOC MPSoC: Tc Mem Write: Type memory data: 0x"), 16)
- # TODO: implement variable length mem write command
- mem_len = 1 # 1 32-bit word
- command = generate_write_mem_command(
- object_id, memory_address, memory_data, mem_len
- )
- 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 MPSoC: TC mem read test"))
- command = prepare_mem_read_command(object_id)
- 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 MPSoC: Flash write"))
- command = prepare_flash_write_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=22, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "6":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Flash delete"))
- command = prepare_flash_delete_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "7":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Replay start"))
- command = prepare_replay_start_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=24, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "8":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Replay stop"))
- command = object_id + struct.pack("!I", CommandIds.TC_REPLAY_STOP)
- command = PusTelecommand(service=8, subservice=128, ssc=25, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "9":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Downlink pwr on"))
- command = prepare_downlink_pwr_on_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=26, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "10":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Downlink pwr off"))
- command = object_id + struct.pack("!I", CommandIds.TC_DOWNLINK_PWR_OFF)
- command = PusTelecommand(service=8, subservice=128, ssc=26, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "11":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Replay write sequence"))
- command = prepare_replay_write_sequence_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=27, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "12":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC MPSoC: Reset OBSW sequence count")
- )
- command = object_id + struct.pack("!I", CommandIds.OBSW_RESET_SEQ_COUNT)
- command = PusTelecommand(service=8, subservice=128, ssc=28, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "13":
- num_words = 1
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Read DEADBEEF address"))
- command = (
- object_id
- + struct.pack("!I", CommandIds.TC_MEM_READ)
- + struct.pack("!I", MemAddresses.DEADBEEF)
- + struct.pack("!H", num_words)
- )
- command = PusTelecommand(service=8, subservice=128, ssc=29, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "14":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Tc mode replay"))
- 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())
- elif op_code == "17":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Set UART TX tristate"))
- command = object_id + struct.pack("!I", CommandIds.SET_UART_TX_TRISTATE)
- command = PusTelecommand(service=8, subservice=128, ssc=33, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "18":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC MPSoC: Release UART TX"))
- command = object_id + struct.pack("!I", CommandIds.RELEASE_UART_TX)
- command = PusTelecommand(service=8, subservice=128, ssc=33, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
-
- return tc_queue
-
-
-def generate_write_mem_command(
- object_id: bytearray, memory_address: int, memory_data: int, mem_len: int
-) -> bytearray:
- """This function generates the command to write to a memory address within the PLOC
- @param object_id The object id of the PlocHandler
- @param memory_address The PLOC memory address where to write to.
- @param memory_data The data to write to the memory address specified by the bytearray memory_address.
- """
- command = (
- object_id
- + struct.pack("!I", CommandIds.TC_MEM_WRITE)
- + struct.pack("!I", memory_address)
- + struct.pack("!H", mem_len)
- + struct.pack("!I", memory_data)
- )
- return command
-
-
-def prepare_mem_read_command(object_id: bytearray) -> bytearray:
- memory_address = int(input("PLOC MPSoC Tc Mem Read: Type memory address: 0x"), 16)
- num_words = int(input("PLOC MPSoC specify number of words (32-bit) to read: "))
- command = (
- object_id
- + struct.pack("!I", CommandIds.TC_MEM_READ)
- + struct.pack("!I", memory_address)
- + struct.pack("!H", num_words)
- )
- return command
-
-
-def prepare_flash_write_cmd(object_id: bytearray) -> bytearray:
- obcFile = get_obc_file()
- mpsocFile = get_mpsoc_file()
- command = (
- object_id
- + struct.pack("!I", CommandIds.FLASH_WRITE)
- + bytearray(obcFile, "utf-8")
- + bytearray(mpsocFile, "utf-8")
- )
- return command
-
-
-def prepare_flash_delete_cmd(object_id: bytearray) -> bytearray:
- file = get_mpsoc_file()
- command = (
- object_id
- + struct.pack("!I", CommandIds.TC_FLASH_DELETE)
- + bytearray(file, "utf-8")
- )
- return command
-
-
-def prepare_replay_start_cmd(object_id: bytearray) -> bytearray:
- replay = int(input("Specify replay mode (0 - once, 1 - repeated): "))
- command = (
- object_id
- + struct.pack("!I", CommandIds.TC_REPLAY_START)
- + struct.pack("!B", replay)
- )
- return command
-
-
-def prepare_downlink_pwr_on_cmd(object_id: bytearray) -> bytearray:
- mode = int(input("Specify JESD mode (0 - 5): "))
- lane_rate = int(input("Specify lane rate (0 - 9): "))
- command = (
- object_id
- + struct.pack("!I", CommandIds.TC_DOWNLINK_PWR_ON)
- + struct.pack("!B", mode)
- + struct.pack("!B", lane_rate)
- )
- return command
-
-
-def prepare_replay_write_sequence_cmd(object_id: bytearray) -> bytearray:
- null_terminator = 0
- use_decoding = int(input("Use decoding (set to 1): "))
- file = get_sequence_file()
- command = (
- object_id
- + struct.pack("!I", CommandIds.TC_REPLAY_WRITE_SEQUENCE)
- + struct.pack("!B", use_decoding)
- + bytearray(file, "utf-8")
- )
- return command
-
-
-def get_obc_file() -> str:
- LOGGER.info("Specify OBC file ")
- input_helper = InputHelper(flash_write_file_dict)
- key = input_helper.get_key()
- if key == MANUAL_INPUT:
- file = input("Ploc MPSoC: Specify absolute name of flash file: ")
- else:
- file = flash_write_file_dict[key][1]
- return file
-
-
-def get_mpsoc_file() -> str:
- LOGGER.info("Specify MPSoC file")
- input_helper = InputHelper(mpsoc_file_dict)
- key = input_helper.get_key()
- if key == MANUAL_INPUT:
- file = input("Ploc MPSoC: Specify absolute name file: ")
- else:
- file = mpsoc_file_dict[key][1]
- return file
-
-
-def get_sequence_file() -> str:
- LOGGER.info("Specify sequence file")
- input_helper = InputHelper(sequence_file_dict)
- key = input_helper.get_key()
- if key == MANUAL_INPUT:
- file = input("Ploc MPSoC: Specify absolute name file: ")
- else:
- file = sequence_file_dict[key][1]
- return file
diff --git a/pus_tc/devs/ploc_supervisor.py b/pus_tc/devs/ploc_supervisor.py
deleted file mode 100644
index 45810d3..0000000
--- a/pus_tc/devs/ploc_supervisor.py
+++ /dev/null
@@ -1,672 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-@file ploc_supervisor.py
-@brief Tests for commanding the supervisor of the PLOC.
- The supervisor is programmed by Thales.
-@author J. Meier
-@date 10.07.2021
-"""
-import struct
-
-from spacepackets.ecss.tc import PusTelecommand
-from tmtccmd.config.definitions import QueueCommands
-from tmtccmd.tc.packer import TcQueueT
-from tmtccmd.logging import get_console_logger
-from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes
-from utility.input_helper import InputHelper
-
-LOGGER = get_console_logger()
-
-latchup_id_dict = {
- "0": "0.85V",
- "1": "1.8V",
- "2": "MISC",
- "3": "3.3V",
- "4": "NVM_4XO",
- "5": "MISSION",
- "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",
- ],
- "5": [
- "/mnt/sd0/ploc/supervisor/mpsoc-uart-working.bin",
- "/mnt/sd0/ploc/supervisor/mpsoc-uart-working.bin",
- ],
-}
-
-event_buffer_path_dict = {
- MANUAL_INPUT: ["manual input", ""],
- "2": ["/mnt/sd0/ploc/supervisor", "/mnt/sd0/ploc/supervisor"],
-}
-
-
-class SupvActionIds:
- HK_REPORT = 1
- START_MPSOC = 3
- SHUTWOWN_MPSOC = 4
- SEL_MPSOC_BOOT_IMAGE = 5
- SET_BOOT_TIMEOUT = 6
- SET_MAX_RESTART_TRIES = 7
- RESET_MPSOC = 8
- SET_TIME_REF = 9
- DISABLE_HK = 10
- GET_BOOT_STATUS_REPORT = 11
- UPDATE_AVAILABLE = 12
- ENABLE_LATCHUP_ALERT = 15
- DISABLE_LATCHUP_ALERT = 16
- SET_ALERT_LIMIT = 18
- 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
- SELECT_NVM = 27
- RUN_AUTO_EM_TESTS = 28
- WIPE_MRAM = 29
- DUMP_MRAM = 30
- SET_GPIO = 34
- READ_GPIO = 35
- RESTART_SUPERVISOR = 36
- FACTORY_RESET_CLEAR_ALL = 37
- 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
- ENABLE_NVMS = 59
- CONTINUE_UPDATE = 60
-
-
-class SupvHkIds:
- HK_REPORT = 52
- BOOT_STATUS_REPORT = 53
-
-
-def pack_ploc_supv_commands(
- object_id: bytearray, tc_queue: TcQueueT, op_code: str
-) -> TcQueueT:
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "Testing PLOC Supervisor with object id: 0x" + object_id.hex(),
- )
- )
- if op_code == "0":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Set mode off"))
- command = pack_mode_data(object_id, Modes.OFF, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=9, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == "1":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Set mode on"))
- command = pack_mode_data(object_id, Modes.ON, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=10, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == "2":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Mode Normal"))
- command = pack_mode_data(object_id, Modes.NORMAL, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=11, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code == "3":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: TC Get Hk Report"))
- 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 == "5":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Start MPSoC"))
- command = object_id + struct.pack("!I", SupvActionIds.START_MPSOC)
- command = PusTelecommand(service=8, subservice=128, ssc=22, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "6":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Shutdown MPSoC"))
- command = object_id + struct.pack("!I", SupvActionIds.SHUTWOWN_MPSOC)
- command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "7":
- 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): "))
- 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())
- elif op_code == "8":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Set max restart tries")
- )
- restart_tries = int(input("Specify maximum restart tries: "))
- command = (
- object_id
- + struct.pack("!I", SupvActionIds.SET_MAX_RESTART_TRIES)
- + struct.pack("!B", restart_tries)
- )
- command = PusTelecommand(service=8, subservice=128, ssc=25, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "9":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Reset MPSoC"))
- command = object_id + struct.pack("!I", SupvActionIds.RESET_MPSOC)
- command = PusTelecommand(service=8, subservice=128, ssc=26, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "10":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Set time reference")
- )
- command = object_id + struct.pack("!I", SupvActionIds.SET_TIME_REF)
- command = PusTelecommand(service=8, subservice=128, ssc=27, app_data=command)
- 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]: "))
- command = (
- object_id
- + struct.pack("!I", SupvActionIds.SET_BOOT_TIMEOUT)
- + struct.pack("!I", boot_timeout)
- )
- command = PusTelecommand(service=8, subservice=128, ssc=28, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "12":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Disable HK"))
- command = object_id + struct.pack("!I", SupvActionIds.DISABLE_HK)
- command = PusTelecommand(service=8, subservice=128, ssc=29, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "13":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Request boot status report")
- )
- 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 == "17":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Enable latchup alert")
- )
- command = pack_lachtup_alert_cmd(object_id, True)
- command = PusTelecommand(service=8, subservice=128, ssc=34, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "18":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Disable latchup alert")
- )
- 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 == "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 == "23":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Set ADC enabled channels")
- )
- command = pack_set_adc_enabled_channels_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=40, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "24":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Set ADC window and stride")
- )
- command = pack_set_adc_window_and_stride_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=41, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "25":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Set ADC threshold"))
- command = pack_set_adc_threshold_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=42, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "26":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Request latchup status report")
- )
- command = object_id + struct.pack("!I", SupvActionIds.GET_LATCHUP_STATUS_REPORT)
- command = PusTelecommand(service=8, subservice=128, ssc=43, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "27":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Copy ADC data to MRAM")
- )
- 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 == "30":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Run auto EM tests"))
- command = pack_auto_em_tests_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=45, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "31":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Wipe MRAM"))
- 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 == "35":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Set GPIO command"))
- command = pack_set_gpio_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=50, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "36":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Read GPIO command"))
- command = pack_read_gpio_cmd(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=51, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "37":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Restart supervisor")
- )
- command = object_id + struct.pack("!I", SupvActionIds.RESTART_SUPERVISOR)
- command = PusTelecommand(service=8, subservice=128, ssc=52, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "38":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Factory reset clear all")
- )
- command = object_id + struct.pack("!I", SupvActionIds.FACTORY_RESET_CLEAR_ALL)
- command = PusTelecommand(service=8, subservice=128, ssc=53, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "39":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "PLOC Supervisor: Factory reset clear mirror entries")
- )
- command = object_id + struct.pack(
- "!I", SupvActionIds.FACTORY_RESET_CLEAR_MIRROR
- )
- command = PusTelecommand(service=8, subservice=128, ssc=54, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "40":
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "PLOC Supervisor: Factory reset clear circular entries",
- )
- )
- command = object_id + struct.pack(
- "!I", SupvActionIds.FACTORY_RESET_CLEAR_CIRCULAR
- )
- command = PusTelecommand(service=8, subservice=128, ssc=55, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- 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 = 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())
- elif op_code == "57":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Enable NVMs"))
- nvm01 = int(input("Enable (1) or disable(0) NVM 0 and 1: "))
- nvm3 = int(input("Enable (1) or disable(0) NVM 3: "))
- command = (
- object_id
- + struct.pack("!I", SupvActionIds.ENABLE_NVMS)
- + struct.pack("B", nvm01)
- + struct.pack("B", nvm3)
- )
- command = PusTelecommand(service=8, subservice=128, ssc=72, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- elif op_code == "58":
- tc_queue.appendleft((QueueCommands.PRINT, "PLOC Supervisor: Continue update"))
- command = object_id + struct.pack("!I", SupvActionIds.CONTINUE_UPDATE)
- command = PusTelecommand(service=8, subservice=128, ssc=73, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
-
- return tc_queue
-
-
-def pack_sel_boot_image_cmd(
- object_id: bytearray, mem: int, bp0: int, bp1: int, bp2: int
-) -> bytearray:
- """This function can be used to generate the command to select the image from which the MPSoC will boot
- @param object_id The object id of the PLOC supervisor handler.
- @param mem The memory from which the MPSoC shall boot (NVM0 - 0, NVM1 - 1)
- @param bp0 Partition pin 0
- @param bp1 Partition pin 1
- @param bp2 Partition pin 2
- """
- command = object_id + struct.pack("!I", SupvActionIds.SEL_MPSOC_BOOT_IMAGE)
- command = command + struct.pack("!B", mem)
- command = command + struct.pack("!B", bp0)
- command = command + struct.pack("!B", bp1)
- command = command + struct.pack("!B", bp2)
- return command
-
-
-def pack_update_available_cmd(object_id: bytearray) -> bytearray:
- """
- @brief This function packs the udpate availabe command.
- @param object_id The object id of the PLOC supervisor handler.
- """
- image_select = 1
- image_partition = 0
- image_size = 222
- image_crc = 0x0
- number_of_packets = 150
- command = object_id + struct.pack("!I", SupvActionIds.UPDATE_AVAILABLE)
- command = command + struct.pack("!B", image_select)
- command = command + struct.pack("!B", image_partition)
- command = command + struct.pack("!I", image_size)
- command = command + struct.pack("!I", image_crc)
- command = command + struct.pack("!I", number_of_packets)
- return command
-
-
-def pack_watchdogs_enable_cmd(object_id: bytearray) -> bytearray:
- """
- @brief This function packs the command to enable or disable watchdogs on the PLOC.
- @param object_id The object id of the PLOC supervisor handler.
- @note Enable = 1, Disable = 0
- """
- watchdog_ps = 1
- watchdog_pl = 1
- watchdog_int = 0
- command = bytearray()
- command = object_id + struct.pack("!I", SupvActionIds.WATCHDOGS_ENABLE)
- command = command + struct.pack("!B", watchdog_ps)
- command = command + struct.pack("!B", watchdog_pl)
- command = command + struct.pack("!B", watchdog_int)
- return command
-
-
-def pack_watchdog_config_timeout_cmd(object_id: bytearray) -> bytearray:
- """
- @brief This function packs the command set the timeout of one of the three watchdogs of the PLOC.
- @param object_id The object id of the PLOC supervisor handler.
- """
- watchdog = int(input("Specify watchdog (0 - PS, 1 - PL, 2 - INT):"))
- timeout = int(input("Specify timeout (1000 ms - 360000 ms):"))
- command = bytearray()
- command = object_id + struct.pack("!I", SupvActionIds.WATCHDOGS_CONFIG_TIMEOUT)
- command = command + struct.pack("!B", watchdog)
- command = command + struct.pack("!I", timeout)
- return command
-
-
-def pack_lachtup_alert_cmd(object_id: bytearray, state: bool) -> bytearray:
- """
- @brief This function packs the command to enable or disable a certain latchup alerts.
- @param object_id The object id of the PLOC supervisor handler.
- @param state True - enable latchup alert, False - disable latchup alert
- """
- latchup_id = get_latchup_id()
- command = bytearray()
- if state:
- command = object_id + struct.pack("!I", SupvActionIds.ENABLE_LATCHUP_ALERT)
- else:
- command = object_id + struct.pack("!I", SupvActionIds.DISABLE_LATCHUP_ALERT)
- command = command + struct.pack("!B", latchup_id)
- return command
-
-
-def pack_auto_calibrate_alert_cmd(object_id: bytearray) -> bytearray:
- """
- @brief This function packs the command to auto calibrate a latchup alert.
- @param object_id The object id of the PLOC supervisor handler.
- """
- latchup_id = get_latchup_id()
- mg = int(input("Specify MG: "))
- command = bytearray()
- command = object_id + struct.pack("!I", SupvActionIds.AUTO_CALIBRATE_ALERT)
- command = command + struct.pack("!B", latchup_id)
- command = command + struct.pack("!I", mg)
- return command
-
-
-def get_latchup_id() -> int:
- key_column_width = 10
- description_column_width = 50
- separator_width = key_column_width + description_column_width + 3
- separator_string = separator_width * "-"
- key_string = "Latchup ID".ljust(key_column_width)
- description_string = "Description".ljust(description_column_width)
- print(f"{key_string} | {description_string}")
- print(separator_string)
- for key in latchup_id_dict:
- 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: "))
-
-
-def pack_set_alert_limit_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.
- """
- latchup_id = get_latchup_id()
- dutycycle = int(input("Specify dutycycle: "))
- command = bytearray()
- command = object_id + struct.pack("!I", SupvActionIds.SET_ALERT_LIMIT)
- command = command + struct.pack("!B", latchup_id)
- command = command + struct.pack("!I", dutycycle)
- 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: 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: "))
- command = bytearray()
- command = object_id + struct.pack("!I", SupvActionIds.SET_ADC_WINDOW_AND_STRIDE)
- command = command + struct.pack("!H", window_size)
- command = command + struct.pack("!H", striding_step_size)
- return command
-
-
-def pack_set_adc_threshold_cmd(object_id: bytearray) -> bytearray:
- 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_select_nvm_cmd(object_id: bytearray) -> bytearray:
- 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)
- return command
-
-
-def pack_auto_em_tests_cmd(object_id: bytearray) -> bytearray:
- 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)
- return command
-
-
-def pack_mram_wipe_cmd(object_id: bytearray) -> bytearray:
- start = int(input("Start address: 0x"), 16)
- stop = int(input("Stop address: 0x"), 16)
- command = bytearray()
- command = object_id + struct.pack("!I", SupvActionIds.WIPE_MRAM)
- command = command + struct.pack("!I", start)
- command = command + struct.pack("!I", stop)
- return command
-
-
-def pack_update_command(object_id: bytearray) -> bytearray:
- command = bytearray()
- 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_shutdown_timeout_command(object_id: bytearray) -> bytearray:
- command = bytearray()
- 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 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: 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)
- command = command + struct.pack("!B", val)
- return command
-
-
-def pack_read_gpio_cmd(object_id: bytearray) -> 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 1728753..11ef5e0 100644
--- a/pus_tc/devs/plpcdu.py
+++ b/pus_tc/devs/plpcdu.py
@@ -4,13 +4,14 @@ import time
from typing import Optional
from config.definitions import CustomServiceList
-from tmtccmd.config import (
- QueueCommands,
- ServiceOpCodeDictT,
- add_op_code_entry,
- add_service_op_code_entry,
+from tmtccmd.config import TmtcDefinitionWrapper
+
+from tmtccmd.config.tmtc import OpCodeEntry, tmtc_definitions_provider
+from tmtccmd.tc import DefaultPusQueueHelper
+from tmtccmd.tc.pus_3_fsfw_hk import (
+ make_sid,
+ generate_one_diag_command,
)
-from tmtccmd.tc.definitions import TcQueueT
from tmtccmd.tc.pus_11_tc_sched import (
generate_enable_tc_sched_cmd,
generate_time_tagged_cmd,
@@ -39,16 +40,19 @@ class OpCodes:
NORMAL_MPA = ["8", "nml-mpa"]
NORMAL_HPA = ["9", "nml-hpa"]
- INJECT_SSR_TO_DRO_FAILURE = ["15", "inject-ssr-dro-fault"]
- INJECT_DRO_TO_X8_FAILURE = ["16", "inject-dro-x8-fault"]
- INJECT_X8_TO_TX_FAILURE = ["17", "inject-x8-tx-fault"]
- INJECT_TX_TO_MPA_FAILURE = ["18", "inject-tx-mpa-fault"]
- INJECT_MPA_TO_HPA_FAILURE = ["19", "inject-mpa-hpa-fault"]
- INJECT_ALL_ON_FAILURE = ["20", "inject-all-on-fault"]
+ REQ_OS_HK = ["8", "hk-os"]
+
+ INJECT_SSR_TO_DRO_FAILURE = ["10", "inject-ssr-dro-fault"]
+ INJECT_DRO_TO_X8_FAILURE = ["11", "inject-dro-x8-fault"]
+ INJECT_X8_TO_TX_FAILURE = ["12", "inject-x8-tx-fault"]
+ INJECT_TX_TO_MPA_FAILURE = ["13", "inject-tx-mpa-fault"]
+ INJECT_MPA_TO_HPA_FAILURE = ["14", "inject-mpa-hpa-fault"]
+ INJECT_ALL_ON_FAILURE = ["15", "inject-all-on-fault"]
class Info:
NORMAL = "PL PCDU ADC modules normal"
+ SWITCH_HPA_ON_PROC = "Switch HPA on procedure"
SWITCH_ON = "Switching PL PCDU on"
SWITCH_OFF = "Switching PL PCDU off"
NORMAL_SSR = f"{NORMAL}, SSR on"
@@ -57,8 +61,11 @@ class Info:
NORMAL_TX = f"{NORMAL}, TX on"
NORMAL_MPA = f"{NORMAL}, MPA on"
NORMAL_HPA = f"{NORMAL}, HPA on"
+ REQ_OS_HK = "Request One Shot HK"
- SWITCH_HPA_ON_PROC = "Full Procedure to switch HPA on"
+
+class SetIds(enum.IntEnum):
+ ADC = 0
class NormalSubmodesMask(enum.IntEnum):
@@ -108,99 +115,51 @@ class ParamIds(enum.IntEnum):
INJECT_ALL_ON_FAILURE = 35
-def add_pl_pcdu_cmds(cmd_dict: ServiceOpCodeDictT):
- op_code_dict = dict()
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=OpCodes.SWITCH_HPA_ON_PROC,
- info=Info.SWITCH_HPA_ON_PROC,
- )
- add_op_code_entry(
- op_code_dict=op_code_dict, keys=OpCodes.SWITCH_ON, info=Info.SWITCH_ON
- )
- add_op_code_entry(
- op_code_dict=op_code_dict, keys=OpCodes.SWITCH_OFF, info=Info.SWITCH_OFF
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=OpCodes.NORMAL_SSR,
- info=Info.NORMAL_SSR,
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=OpCodes.NORMAL_DRO,
- info=Info.NORMAL_DRO,
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=OpCodes.NORMAL_X8,
- info=Info.NORMAL_X8,
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=OpCodes.NORMAL_TX,
- info=Info.NORMAL_TX,
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=OpCodes.NORMAL_MPA,
- info=Info.NORMAL_MPA,
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=OpCodes.NORMAL_HPA,
- info=Info.NORMAL_HPA,
- )
- add_op_code_entry(
- op_code_dict=op_code_dict,
+@tmtc_definitions_provider
+def add_pl_pcdu_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add(keys=OpCodes.SWITCH_HPA_ON_PROC, info=Info.SWITCH_HPA_ON_PROC)
+ oce.add(keys=OpCodes.SWITCH_ON, info=Info.SWITCH_ON)
+ oce.add(keys=OpCodes.SWITCH_OFF, info=Info.SWITCH_OFF)
+ oce.add(keys=OpCodes.NORMAL_SSR, info=Info.NORMAL_SSR)
+ oce.add(keys=OpCodes.NORMAL_DRO, info=Info.NORMAL_DRO)
+ oce.add(keys=OpCodes.NORMAL_X8, info=Info.NORMAL_X8)
+ oce.add(keys=OpCodes.NORMAL_TX, info=Info.NORMAL_TX)
+ oce.add(keys=OpCodes.NORMAL_MPA, info=Info.NORMAL_MPA)
+ oce.add(keys=OpCodes.NORMAL_HPA, info=Info.NORMAL_HPA)
+ oce.add(keys=OpCodes.REQ_OS_HK, info=Info.REQ_OS_HK)
+ oce.add(
keys=OpCodes.INJECT_SSR_TO_DRO_FAILURE,
info="Inject failure SSR to DRO transition",
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=OpCodes.INJECT_DRO_TO_X8_FAILURE,
info="Inject failure in DRO to X8 transition",
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=OpCodes.INJECT_X8_TO_TX_FAILURE,
info="Inject failure in X8 to TX transition",
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=OpCodes.INJECT_TX_TO_MPA_FAILURE,
info="Inject failure in TX to MPA transition",
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
+ oce.add(
keys=OpCodes.INJECT_MPA_TO_HPA_FAILURE,
info="Inject failure in MPA to HPA transition",
)
- add_op_code_entry(
- op_code_dict=op_code_dict,
- keys=OpCodes.INJECT_ALL_ON_FAILURE,
- info="Inject failure in all on mode",
- )
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
- name=CustomServiceList.PL_PCDU.value,
- info="PL PCDU",
- op_code_entry=op_code_dict,
- )
+ oce.add(keys=OpCodes.INJECT_ALL_ON_FAILURE, info="Inject failure in all on mode")
+ defs.add_service(CustomServiceList.PL_PCDU.value, "PL PCDU", oce)
-def pack_pl_pcdu_commands(tc_queue: TcQueueT, op_code: str):
+def pack_pl_pcdu_commands(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCodes.SWITCH_ON:
- pack_pl_pcdu_mode_cmd(
- tc_queue=tc_queue, info=Info.SWITCH_ON, mode=Modes.ON, submode=0
- )
+ pack_pl_pcdu_mode_cmd(q=q, info=Info.SWITCH_ON, mode=Modes.ON, submode=0)
if op_code in OpCodes.SWITCH_OFF:
- pack_pl_pcdu_mode_cmd(
- tc_queue=tc_queue, info=Info.SWITCH_OFF, mode=Modes.OFF, submode=0
- )
+ pack_pl_pcdu_mode_cmd(q=q, info=Info.SWITCH_OFF, mode=Modes.OFF, submode=0)
if op_code in OpCodes.NORMAL_SSR:
pack_pl_pcdu_mode_cmd(
- tc_queue=tc_queue,
+ q=q,
info=Info.NORMAL_SSR,
mode=Modes.NORMAL,
submode=submode_mask_to_submode(
@@ -209,58 +168,63 @@ def pack_pl_pcdu_commands(tc_queue: TcQueueT, op_code: str):
)
if op_code in OpCodes.NORMAL_DRO:
pack_pl_pcdu_mode_cmd(
- tc_queue=tc_queue,
+ q=q,
info=Info.NORMAL_DRO,
mode=Modes.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.DRO_ON),
)
if op_code in OpCodes.NORMAL_X8:
pack_pl_pcdu_mode_cmd(
- tc_queue=tc_queue,
+ q=q,
info=Info.NORMAL_X8,
mode=Modes.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.X8_ON),
)
if op_code in OpCodes.NORMAL_TX:
pack_pl_pcdu_mode_cmd(
- tc_queue=tc_queue,
+ q=q,
info=Info.NORMAL_TX,
mode=Modes.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.TX_ON),
)
if op_code in OpCodes.NORMAL_MPA:
pack_pl_pcdu_mode_cmd(
- tc_queue=tc_queue,
+ q=q,
info=Info.NORMAL_MPA,
mode=Modes.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.MPA_ON),
)
if op_code in OpCodes.NORMAL_HPA:
pack_pl_pcdu_mode_cmd(
- tc_queue=tc_queue,
+ q=q,
info=Info.NORMAL_HPA,
mode=Modes.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.HPA_ON),
)
+ if op_code in OpCodes.REQ_OS_HK:
+ q.add_log_cmd(f"PL PCDU: {Info.REQ_OS_HK}")
+ q.add_pus_tc(
+ generate_one_diag_command(
+ sid=make_sid(object_id=PL_PCDU_ID, set_id=SetIds.ADC)
+ )
+ )
if op_code in OpCodes.SWITCH_HPA_ON_PROC:
- hpa_on_procedure(tc_queue)
+ hpa_on_procedure(q)
if op_code in OpCodes.INJECT_ALL_ON_FAILURE:
pack_failure_injection_cmd(
- tc_queue=tc_queue,
+ q=q,
param_id=ParamIds.INJECT_ALL_ON_FAILURE,
print_str="All On",
)
-def hpa_on_procedure(tc_queue: TcQueueT):
+def hpa_on_procedure(q: DefaultPusQueueHelper):
delay_dro_to_x8 = request_wait_time()
if delay_dro_to_x8 is None:
delay_dro_to_x8 = 900
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- f"Starting procedure to switch on PL PCDU HPA with DRO to X8 delay of {delay_dro_to_x8} seconds",
- )
+ q.add_log_cmd(
+ f"Starting procedure to switch on PL PCDU HPA with DRO to X8 "
+ f"delay of {delay_dro_to_x8} seconds"
)
pl_pcdu_on = PusTelecommand(
service=200,
@@ -325,54 +289,53 @@ def hpa_on_procedure(tc_queue: TcQueueT):
)
current_time = time.time()
- enb_sched = generate_enable_tc_sched_cmd(ssc=0)
+ enb_sched = generate_enable_tc_sched_cmd()
- sched_time = current_time + 10
- tc_queue.appendleft(enb_sched.pack_command_tuple())
+ sched_time = int(round(current_time + 10))
+ q.add_pus_tc(enb_sched)
tagged_on_cmd = generate_time_tagged_cmd(
release_time=struct.pack("!I", sched_time),
tc_to_insert=pl_pcdu_on,
- ssc=1,
)
- tc_queue.appendleft(tagged_on_cmd.pack_command_tuple())
+ q.add_pus_tc(tagged_on_cmd)
sched_time += 5
tagged_ssr_cmd = generate_time_tagged_cmd(
release_time=struct.pack("!I", sched_time),
tc_to_insert=ssr_on,
- ssc=2,
)
- tc_queue.appendleft(tagged_ssr_cmd.pack_command_tuple())
+ q.add_pus_tc(tagged_ssr_cmd)
sched_time += 5
tagged_dro_cmd = generate_time_tagged_cmd(
- release_time=struct.pack("!I", sched_time), tc_to_insert=dro_on, ssc=3
+ release_time=struct.pack("!I", sched_time), tc_to_insert=dro_on
)
- tc_queue.appendleft(tagged_dro_cmd.pack_command_tuple())
+ q.add_pus_tc(tagged_dro_cmd)
sched_time += delay_dro_to_x8
+ sched_time = int(round(sched_time))
tagged_x8_cmd = generate_time_tagged_cmd(
- release_time=struct.pack("!I", sched_time), tc_to_insert=x8_on, ssc=4
+ release_time=struct.pack("!I", sched_time), tc_to_insert=x8_on
)
- tc_queue.appendleft(tagged_x8_cmd.pack_command_tuple())
+ q.add_pus_tc(tagged_x8_cmd)
sched_time += 5
tagged_tx_cmd = generate_time_tagged_cmd(
- release_time=struct.pack("!I", sched_time), tc_to_insert=tx_on, ssc=5
+ release_time=struct.pack("!I", sched_time), tc_to_insert=tx_on
)
- tc_queue.appendleft(tagged_tx_cmd.pack_command_tuple())
+ q.add_pus_tc(tagged_tx_cmd)
sched_time += 5
tagged_mpa_cmd = generate_time_tagged_cmd(
- release_time=struct.pack("!I", sched_time), tc_to_insert=mpa_on, ssc=6
+ release_time=struct.pack("!I", sched_time), tc_to_insert=mpa_on
)
- tc_queue.appendleft(tagged_mpa_cmd.pack_command_tuple())
+ q.add_pus_tc(tagged_mpa_cmd)
sched_time += 5
tagged_hpa_cmd = generate_time_tagged_cmd(
- release_time=struct.pack("!I", sched_time), tc_to_insert=hpa_on, ssc=7
+ release_time=struct.pack("!I", sched_time), tc_to_insert=hpa_on
)
- tc_queue.appendleft(tagged_hpa_cmd.pack_command_tuple())
+ q.add_pus_tc(tagged_hpa_cmd)
def request_wait_time() -> Optional[float]:
@@ -430,11 +393,9 @@ def submode_mask_to_submode(on_tgt: NormalSubmodesMask) -> int:
)
-def pack_wait_time_cmd(tc_queue: TcQueueT, param_id: int, print_str: str):
+def pack_wait_time_cmd(q: DefaultPusQueueHelper, param_id: int, print_str: str):
wait_time = request_wait_time()
- tc_queue.appendleft(
- (QueueCommands.PRINT, f"Updating {print_str} wait time to {wait_time}")
- )
+ q.add_log_cmd(f"Updating {print_str} wait time to {wait_time}")
if wait_time is None:
return
param_data = pack_scalar_double_param_app_data(
@@ -443,28 +404,24 @@ def pack_wait_time_cmd(tc_queue: TcQueueT, param_id: int, print_str: str):
unique_id=param_id,
parameter=wait_time,
)
- cmd = pack_fsfw_load_param_cmd(ssc=0, app_data=param_data)
- tc_queue.appendleft(cmd.pack_command_tuple())
+ q.add_pus_tc(pack_fsfw_load_param_cmd(app_data=param_data))
-def pack_failure_injection_cmd(tc_queue: TcQueueT, param_id: int, print_str: str):
- tc_queue.appendleft((QueueCommands.PRINT, f"Inserting {print_str} error"))
+def pack_failure_injection_cmd(q: DefaultPusQueueHelper, param_id: int, print_str: str):
+ q.add_log_cmd(f"Inserting {print_str} error")
param_data = pack_boolean_parameter_app_data(
object_id=PL_PCDU_ID, domain_id=0, unique_id=param_id, parameter=True
)
- cmd = pack_fsfw_load_param_cmd(ssc=0, app_data=param_data)
- tc_queue.appendleft(cmd.pack_command_tuple())
+ q.add_pus_tc(pack_fsfw_load_param_cmd(app_data=param_data))
-def pack_pl_pcdu_mode_cmd(tc_queue: TcQueueT, info: str, mode: Modes, submode: int):
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- info,
+def pack_pl_pcdu_mode_cmd(
+ q: DefaultPusQueueHelper, info: str, mode: Modes, submode: int
+):
+ q.add_log_cmd(info)
+ mode_data = pack_mode_data(object_id=PL_PCDU_ID, mode=mode, submode=submode)
+ q.add_pus_tc(
+ PusTelecommand(
+ service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=mode_data
)
)
- mode_data = pack_mode_data(object_id=PL_PCDU_ID, mode=mode, submode=submode)
- mode_cmd = PusTelecommand(
- service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=mode_data
- )
- tc_queue.appendleft(mode_cmd.pack_command_tuple())
diff --git a/pus_tc/devs/power.py b/pus_tc/devs/power.py
new file mode 100644
index 0000000..a05c0d2
--- /dev/null
+++ b/pus_tc/devs/power.py
@@ -0,0 +1,133 @@
+from gomspace.gomspace_common import GsInfo
+from pus_tc.devs.common_power import (
+ PowerOpCodes,
+ add_pdu1_common_defs,
+ add_pdu2_common_defs,
+ PowerInfo,
+ pdu1_cmds,
+ pdu2_cmds,
+ pdu1_req_hk_cmds,
+ pdu2_req_hk_cmds,
+)
+from config.definitions import CustomServiceList
+from tmtccmd import get_console_logger
+from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
+
+from pus_tc.devs.p60dock import P60OpCodes, GomspaceOpCodes, P60Info
+from pus_tc.devs.acu import add_acu_cmds
+from tmtccmd.config.tmtc import tmtc_definitions_provider
+from tmtccmd.tc import DefaultPusQueueHelper
+
+
+LOGGER = get_console_logger()
+
+
+def pack_power_commands(q: DefaultPusQueueHelper, op_code: str):
+ pdu1_cmds(q, op_code)
+ pdu2_cmds(q, op_code)
+ if op_code in PowerOpCodes.INFO_CORE:
+ pdu1_req_hk_cmds(q, GomspaceOpCodes.REQUEST_CORE_HK_ONCE[0])
+ pdu2_req_hk_cmds(q, GomspaceOpCodes.REQUEST_CORE_HK_ONCE[0])
+ q.add_wait_seconds(3.0)
+ elif op_code in PowerOpCodes.INFO_AUX:
+ pdu1_req_hk_cmds(q, GomspaceOpCodes.REQUEST_AUX_HK_ONCE[0])
+ pdu2_req_hk_cmds(q, GomspaceOpCodes.REQUEST_AUX_HK_ONCE[0])
+ q.add_wait_seconds(3.0)
+ elif op_code in PowerOpCodes.INFO_ALL:
+ pdu1_req_hk_cmds(q, GomspaceOpCodes.REQUEST_CORE_HK_ONCE[0])
+ pdu2_req_hk_cmds(q, GomspaceOpCodes.REQUEST_CORE_HK_ONCE[0])
+ pdu1_req_hk_cmds(q, GomspaceOpCodes.REQUEST_AUX_HK_ONCE[0])
+ pdu2_req_hk_cmds(q, GomspaceOpCodes.REQUEST_AUX_HK_ONCE[0])
+ q.add_wait_seconds(3.0)
+ if q.empty():
+ LOGGER.info(f"Queue is empty, no stack for op code {op_code}")
+
+
+@tmtc_definitions_provider
+def add_p60_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add(keys=P60OpCodes.STACK_3V3_ON, info=P60Info.STACK_3V3_ON)
+ oce.add(keys=P60OpCodes.STACK_3V3_OFF, info=P60Info.STACK_3V3_OFF)
+ oce.add(keys=P60OpCodes.STACK_5V_ON, info=P60Info.STACK_5V_ON)
+ oce.add(keys=P60OpCodes.STACK_5V_OFF, info=P60Info.STACK_5V_OFF)
+ add_gomspace_cmds(oce)
+ oce.add(keys=P60OpCodes.TEST, info="P60 Tests")
+ defs.add_service(
+ name=CustomServiceList.P60DOCK.value, info="P60 Device", op_code_entry=oce
+ )
+
+
+@tmtc_definitions_provider
+def add_power_cmd_defs(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ add_pdu1_common_defs(oce)
+ add_pdu2_common_defs(oce)
+ oce.add(keys=PowerOpCodes.INFO_ALL, info=PowerInfo.INFO_ALL)
+ oce.add(keys=PowerOpCodes.INFO_CORE, info=PowerInfo.INFO_CORE)
+ oce.add(keys=PowerOpCodes.INFO_AUX, info=PowerInfo.INFO_AUX)
+ defs.add_service(
+ name=CustomServiceList.POWER.value,
+ info="Power Subsystem",
+ op_code_entry=oce,
+ )
+
+
+@tmtc_definitions_provider
+def add_pdu1_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ add_pdu1_common_defs(oce)
+ add_gomspace_cmds(oce)
+ oce.add(keys=GomspaceOpCodes.REQUEST_CORE_HK_ONCE, info=GsInfo.REQUEST_CORE_HK_ONCE)
+ oce.add(keys=GomspaceOpCodes.REQUEST_AUX_HK_ONCE, info=GsInfo.REQUEST_AUX_HK_ONCE)
+ oce.add(
+ keys=GomspaceOpCodes.PRINT_SWITCH_V_I,
+ info="PDU1: Print Switches, Voltages, Currents",
+ )
+ oce.add(keys=GomspaceOpCodes.GET_PARAM, info=GsInfo.GET_PARAMETER)
+
+ defs.add_service(
+ name=CustomServiceList.PDU1.value,
+ info="PDU1 Device",
+ op_code_entry=oce,
+ )
+
+
+@tmtc_definitions_provider
+def add_pdu2_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ add_pdu2_common_defs(oce)
+ add_gomspace_cmds(oce)
+ oce.add(
+ keys=GomspaceOpCodes.PRINT_SWITCH_V_I,
+ info="PDU2: Print Switches, Voltages, Currents",
+ )
+ oce.add(
+ keys=GomspaceOpCodes.PRINT_LATCHUPS,
+ info="PDU2: Print Latchups",
+ )
+ defs.add_service(
+ name="pdu2",
+ info="PDU2 Device",
+ op_code_entry=oce,
+ )
+
+
+def add_gomspace_cmds(oce: OpCodeEntry):
+ oce.add(
+ keys=GomspaceOpCodes.REQUEST_CORE_HK_ONCE,
+ info=GsInfo.REQUEST_CORE_HK_ONCE,
+ )
+ oce.add(
+ keys=GomspaceOpCodes.REQUEST_AUX_HK_ONCE,
+ info=GsInfo.REQUEST_AUX_HK_ONCE,
+ )
+ oce.add(keys=GomspaceOpCodes.GET_PARAM, info=GsInfo.GET_PARAMETER)
+ oce.add(keys=GomspaceOpCodes.PRINT_LATCHUPS, info=GsInfo.PRINT_LATCHUPS)
+ oce.add(keys=GomspaceOpCodes.SET_PARAM, info=GsInfo.SET_PARAMETER)
+
+
+def add_pcdu_cmds(defs: TmtcDefinitionWrapper):
+ add_p60_cmds(defs)
+ add_pdu1_cmds(defs)
+ add_pdu2_cmds(defs)
+ add_acu_cmds(defs)
diff --git a/pus_tc/devs/rad_sensor.py b/pus_tc/devs/rad_sensor.py
index 7d66597..949f9a8 100644
--- a/pus_tc/devs/rad_sensor.py
+++ b/pus_tc/devs/rad_sensor.py
@@ -8,14 +8,14 @@
import struct
from config.definitions import CustomServiceList
-from tmtccmd.config import add_op_code_entry, add_service_op_code_entry
-from tmtccmd.config.definitions import QueueCommands, ServiceOpCodeDictT, OpCodeDictKeys
-from tmtccmd.tc.packer import TcQueueT
from spacepackets.ecss.tc import PusTelecommand
from pus_tc.service_200_mode import pack_mode_data, Modes
+from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
+from tmtccmd.config.tmtc import tmtc_definitions_provider
+from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_3_fsfw_hk import generate_one_hk_command, make_sid
-from tmtccmd.utility import ObjectId
+from tmtccmd.util import ObjectIdU32
class SetIds:
@@ -47,64 +47,53 @@ class CommandIds:
DISABLE_DEBUG_OUTPUT = 5
-def add_rad_sens_cmds(cmd_dict: ServiceOpCodeDictT):
-
- op_code_dict = dict()
- add_op_code_entry(op_code_dict=op_code_dict, info=Info.ON, keys=OpCodes.ON)
- add_op_code_entry(op_code_dict=op_code_dict, info=Info.OFF, keys=OpCodes.OFF)
- add_op_code_entry(op_code_dict=op_code_dict, info=Info.NORMAL, keys=OpCodes.NORMAL)
- add_op_code_entry(
- op_code_dict=op_code_dict, info=Info.REQ_OS_HK, keys=OpCodes.REQ_HK_ONCE
- )
- add_op_code_entry(
- op_code_dict=op_code_dict, info=Info.DEBUG_ON, keys=OpCodes.DEBUG_ON
- )
- add_op_code_entry(
- op_code_dict=op_code_dict, info=Info.DEBUG_OFF, keys=OpCodes.DEBUG_OFF
- )
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
+@tmtc_definitions_provider
+def add_rad_sens_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add(info=Info.ON, keys=OpCodes.ON)
+ oce.add(info=Info.OFF, keys=OpCodes.OFF)
+ oce.add(info=Info.NORMAL, keys=OpCodes.NORMAL)
+ oce.add(info=Info.REQ_OS_HK, keys=OpCodes.REQ_HK_ONCE)
+ oce.add(info=Info.DEBUG_ON, keys=OpCodes.DEBUG_ON)
+ oce.add(info=Info.DEBUG_OFF, keys=OpCodes.DEBUG_OFF)
+ defs.add_service(
name=CustomServiceList.RAD_SENSOR.value,
info="Radiation Sensor",
- op_code_entry=op_code_dict,
+ op_code_entry=oce,
)
-def pack_rad_sensor_test_into(object_id: ObjectId, tc_queue: TcQueueT, op_code: str):
- tc_queue.appendleft(
- (QueueCommands.PRINT, f"Commanding Radiation sensor handler {object_id}")
- )
+def pack_rad_sensor_test_into(
+ object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str
+):
+ q.add_log_cmd(f"Commanding Radiation sensor handler {object_id}")
if op_code in OpCodes.ON:
- rad_sensor_mode_cmd(object_id, Modes.ON, Info.ON, tc_queue)
+ rad_sensor_mode_cmd(object_id, Modes.ON, Info.ON, q)
if op_code in OpCodes.NORMAL:
- rad_sensor_mode_cmd(object_id, Modes.NORMAL, Info.NORMAL, tc_queue)
+ rad_sensor_mode_cmd(object_id, Modes.NORMAL, Info.NORMAL, q)
if op_code in OpCodes.OFF:
- rad_sensor_mode_cmd(object_id, Modes.OFF, Info.OFF, tc_queue)
+ rad_sensor_mode_cmd(object_id, Modes.OFF, Info.OFF, q)
if op_code in OpCodes.REQ_HK_ONCE:
- tc_queue.appendleft((QueueCommands.PRINT, f"Rad sensor: {Info.REQ_OS_HK}"))
- cmd = generate_one_hk_command(
- sid=make_sid(object_id.as_bytes, set_id=SetIds.HK), ssc=0
+ q.add_log_cmd(f"Rad sensor: {Info.REQ_OS_HK}")
+ q.add_pus_tc(
+ generate_one_hk_command(sid=make_sid(object_id.as_bytes, set_id=SetIds.HK))
)
- tc_queue.appendleft(cmd.pack_command_tuple())
if op_code in OpCodes.DEBUG_ON:
- tc_queue.appendleft((QueueCommands.PRINT, f"Rad sensor: {Info.DEBUG_ON}"))
+ q.add_log_cmd(f"Rad sensor: {Info.DEBUG_ON}")
command = object_id.as_bytes + struct.pack("!I", CommandIds.ENABLE_DEBUG_OUTPUT)
- command = PusTelecommand(service=8, subservice=128, ssc=45, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.DEBUG_OFF:
- tc_queue.appendleft((QueueCommands.PRINT, f"Rad sensor: {Info.DEBUG_OFF}"))
+ q.add_log_cmd(f"Rad sensor: {Info.DEBUG_OFF}")
command = object_id.as_bytes + struct.pack(
"!I", CommandIds.DISABLE_DEBUG_OUTPUT
)
- command = PusTelecommand(service=8, subservice=128, ssc=45, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
def rad_sensor_mode_cmd(
- object_id: ObjectId, mode: Modes, info: str, tc_queue: TcQueueT
+ object_id: ObjectIdU32, mode: Modes, info: str, q: DefaultPusQueueHelper
):
- tc_queue.appendleft((QueueCommands.PRINT, f"Rad sensor: {info}"))
+ q.add_log_cmd(f"Rad sensor: {info}")
mode_data = pack_mode_data(object_id.as_bytes, mode, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=41, app_data=mode_data)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
diff --git a/pus_tc/devs/reaction_wheels.py b/pus_tc/devs/reaction_wheels.py
index f127830..d83d592 100644
--- a/pus_tc/devs/reaction_wheels.py
+++ b/pus_tc/devs/reaction_wheels.py
@@ -5,14 +5,15 @@
@date 20.06.2021
"""
import struct
-from tmtccmd.config.definitions import QueueCommands, ServiceOpCodeDictT
+
+from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
+from tmtccmd.config.tmtc import tmtc_definitions_provider
+from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_3_fsfw_hk import (
generate_one_hk_command,
generate_one_diag_command,
make_sid,
)
-from tmtccmd.config.globals import add_op_code_entry, add_service_op_code_entry
-from tmtccmd.tc.packer import TcQueueT
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes, Subservices
from config.definitions import CustomServiceList
@@ -75,128 +76,112 @@ class RampTime:
MS_1000 = 1000
-def add_rw_cmds(cmd_dict: ServiceOpCodeDictT):
- op_code_dict = dict()
- add_op_code_entry(
- op_code_dict=op_code_dict, info=InfoDevs.SPEED, keys=OpCodesDevs.SPEED
- )
- add_op_code_entry(op_code_dict=op_code_dict, info=InfoDevs.ON, keys=OpCodesDevs.ON)
- add_op_code_entry(
- op_code_dict=op_code_dict, info=InfoDevs.OFF, keys=OpCodesDevs.OFF
- )
- add_op_code_entry(
- op_code_dict=op_code_dict, info=InfoDevs.NML, keys=OpCodesDevs.NML
- )
- add_op_code_entry(
- op_code_dict=op_code_dict, info=InfoDevs.GET_STATUS, keys=OpCodesDevs.GET_STATUS
- )
- add_op_code_entry(
- op_code_dict=op_code_dict, info=InfoDevs.GET_TM, keys=OpCodesDevs.GET_TM
- )
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
+@tmtc_definitions_provider
+def add_rw_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add(info=InfoDevs.SPEED, keys=OpCodesDevs.SPEED)
+ oce.add(info=InfoDevs.ON, keys=OpCodesDevs.ON)
+ oce.add(info=InfoDevs.OFF, keys=OpCodesDevs.OFF)
+ oce.add(info=InfoDevs.NML, keys=OpCodesDevs.NML)
+ oce.add(info=InfoDevs.GET_STATUS, keys=OpCodesDevs.GET_STATUS)
+ oce.add(info=InfoDevs.GET_TM, keys=OpCodesDevs.GET_TM)
+ defs.add_service(
name=CustomServiceList.REACTION_WHEEL_1.value,
- op_code_entry=op_code_dict,
info="Reaction Wheel 1",
+ op_code_entry=oce,
)
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
+ defs.add_service(
name=CustomServiceList.REACTION_WHEEL_2.value,
- op_code_entry=op_code_dict,
info="Reaction Wheel 2",
+ op_code_entry=oce,
)
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
+ defs.add_service(
name=CustomServiceList.REACTION_WHEEL_3.value,
- op_code_entry=op_code_dict,
info="Reaction Wheel 3",
+ op_code_entry=oce,
)
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
+ defs.add_service(
name=CustomServiceList.REACTION_WHEEL_4.value,
- op_code_entry=op_code_dict,
info="Reaction Wheel 4",
+ op_code_entry=oce,
)
- op_code_dict = dict()
- add_op_code_entry(op_code_dict=op_code_dict, info=InfoAss.ON, keys=OpCodesAss.ON)
- add_op_code_entry(op_code_dict=op_code_dict, info=InfoAss.NML, keys=OpCodesAss.NML)
- add_op_code_entry(op_code_dict=op_code_dict, info=InfoAss.OFF, keys=OpCodesAss.OFF)
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
+ oce = OpCodeEntry()
+ oce.add(info=InfoAss.ON, keys=OpCodesAss.ON)
+ oce.add(info=InfoAss.NML, keys=OpCodesAss.NML)
+ oce.add(info=InfoAss.OFF, keys=OpCodesAss.OFF)
+ defs.add_service(
name=CustomServiceList.RW_ASSEMBLY.value,
- op_code_entry=op_code_dict,
info="Reaction Wheel Assembly",
+ op_code_entry=oce,
)
def pack_single_rw_test_into(
- object_id: bytes, rw_idx: int, tc_queue: TcQueueT, op_code: str
-) -> TcQueueT:
+ object_id: bytes, rw_idx: int, q: DefaultPusQueueHelper, op_code: str
+):
if op_code in OpCodesDevs.SPEED:
speed = int(input("Specify speed [0.1 RPM]: "))
ramp_time = int(input("Specify ramp time [ms]: "))
- tc_queue.appendleft((QueueCommands.PRINT, f"RW {rw_idx}: {InfoDevs.SPEED}"))
- command = pack_set_speed_command(object_id, speed, ramp_time, 40)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.SPEED}")
+ q.add_pus_tc(pack_set_speed_command(object_id, speed, ramp_time))
if op_code in OpCodesDevs.ON:
- tc_queue.appendleft((QueueCommands.PRINT, f"RW {rw_idx}: {InfoDevs.ON}"))
+ q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.ON}")
mode_data = pack_mode_data(object_id, Modes.ON, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=41, app_data=mode_data)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if op_code in OpCodesDevs.NML:
- tc_queue.appendleft((QueueCommands.PRINT, f"RW {rw_idx}: {InfoDevs.NML}"))
+ q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.NML}")
mode_data = pack_mode_data(object_id, Modes.NORMAL, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=42, app_data=mode_data)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if op_code in OpCodesDevs.OFF:
- tc_queue.appendleft((QueueCommands.PRINT, f"RW {rw_idx}: {InfoDevs.OFF}"))
+ q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.OFF}")
mode_data = pack_mode_data(object_id, Modes.OFF, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=43, app_data=mode_data)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if op_code in OpCodesDevs.GET_TM:
- tc_queue.appendleft((QueueCommands.PRINT, f"RW {rw_idx}: {InfoDevs.GET_TM}"))
- command = generate_one_hk_command(
- sid=make_sid(object_id=object_id, set_id=RwSetIds.TM_SET), ssc=0
+ q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.GET_TM}")
+ q.add_pus_tc(
+ generate_one_hk_command(
+ sid=make_sid(object_id=object_id, set_id=RwSetIds.TM_SET)
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
if op_code in OpCodesDevs.GET_STATUS:
- tc_queue.appendleft(
- (QueueCommands.PRINT, f"RW {rw_idx}: {InfoDevs.GET_STATUS}")
+ q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.GET_STATUS}")
+ q.add_pus_tc(
+ generate_one_diag_command(
+ sid=make_sid(object_id=object_id, set_id=RwSetIds.STATUS_SET_ID)
+ )
)
- command = generate_one_diag_command(
- sid=make_sid(object_id=object_id, set_id=RwSetIds.STATUS_SET_ID), ssc=0
- )
- tc_queue.appendleft(command.pack_command_tuple())
- return tc_queue
-def pack_rw_ass_cmds(tc_queue: TcQueueT, object_id: bytes, op_code: str):
+def pack_rw_ass_cmds(q: DefaultPusQueueHelper, object_id: bytes, op_code: str):
if op_code in OpCodesAss.OFF:
data = pack_mode_data(object_id=object_id, mode=Modes.OFF, submode=0)
- cmd = PusTelecommand(
- service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=data
+ q.add_pus_tc(
+ PusTelecommand(
+ service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=data
+ )
)
- tc_queue.appendleft(cmd.pack_command_tuple())
if op_code in OpCodesAss.ON:
data = pack_mode_data(object_id=object_id, mode=Modes.ON, submode=0)
- cmd = PusTelecommand(
- service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=data
+ q.add_pus_tc(
+ PusTelecommand(
+ service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=data
+ )
)
- tc_queue.appendleft(cmd.pack_command_tuple())
if op_code in OpCodesAss.NML:
data = pack_mode_data(object_id=object_id, mode=Modes.NORMAL, submode=0)
- cmd = PusTelecommand(
- service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=data
+ q.add_pus_tc(
+ PusTelecommand(
+ service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=data
+ )
)
- tc_queue.appendleft(cmd.pack_command_tuple())
def pack_set_speed_command(
- object_id: bytes, speed: int, ramp_time_ms: int, ssc: int
+ object_id: bytes, speed: int, ramp_time_ms: int
) -> PusTelecommand:
"""With this function a command is packed to set the speed of a reaction wheel
:param object_id: The object id of the reaction wheel handler.
@@ -204,7 +189,6 @@ def pack_set_speed_command(
specified in 0.1 * RPM
:param ramp_time_ms: The time after which the reaction wheel will reach the commanded speed.
Valid times are 10 - 10000 ms
- :param ssc: Source sequence count
"""
if speed > 0:
if speed < 1000 or speed > 65000:
@@ -212,12 +196,16 @@ def pack_set_speed_command(
"Invalid RW speed specified. "
"Allowed range is [1000, 65000] 0.1 * RPM"
)
- else:
+ elif speed < 0:
if speed < -65000 or speed > -1000:
raise ValueError(
"Invalid RW speed specified. "
"Allowed range is [-65000, -1000] 0.1 * RPM"
)
+ else:
+ # Speed is 0
+ pass
+
if ramp_time_ms < 0 or (
ramp_time_ms > 0 and (ramp_time_ms > 10000 or ramp_time_ms < 10)
):
@@ -227,5 +215,5 @@ def pack_set_speed_command(
command += object_id + command_id
command = command + struct.pack("!i", speed)
command = command + ramp_time_ms.to_bytes(length=2, byteorder="big")
- command = PusTelecommand(service=8, subservice=128, ssc=ssc, app_data=command)
+ command = PusTelecommand(service=8, subservice=128, app_data=command)
return command
diff --git a/pus_tc/devs/rtd.py b/pus_tc/devs/rtd.py
index 531989e..692e781 100644
--- a/pus_tc/devs/rtd.py
+++ b/pus_tc/devs/rtd.py
@@ -1,14 +1,13 @@
from typing import Optional
from config.definitions import CustomServiceList
+from pus_tc.devs.pdec_handler import CommandIds
from spacepackets.ecss import PusTelecommand
-from tmtccmd.config import (
- ServiceOpCodeDictT,
- add_op_code_entry,
- add_service_op_code_entry,
-)
-from tmtccmd.tc.definitions import TcQueueT
-from tmtccmd.utility import ObjectId
+from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
+from tmtccmd.config.tmtc import tmtc_definitions_provider
+
+from tmtccmd.tc import DefaultPusQueueHelper
+from tmtccmd.util import ObjectIdU32
from tmtccmd.tc.pus_200_fsfw_modes import Modes, pack_mode_data, Subservices
import config.object_ids as oids
from config.object_ids import get_object_ids
@@ -37,28 +36,30 @@ class OpCodes:
ON = ["0", "on"]
OFF = ["1", "off"]
NORMAL = ["2", "normal"]
+ CONFIG_CMD = ["3", "Write config"]
class Info:
ON = "Switch handler on"
OFF = "Switch handler off"
NORMAL = "Switch handler normal"
+ WIRTE_CONFIG = "Write config"
-def specify_rtd_cmds(cmd_dict: ServiceOpCodeDictT):
- op_code_dict = dict()
- add_op_code_entry(op_code_dict=op_code_dict, keys=OpCodes.ON, info=Info.ON)
- add_op_code_entry(op_code_dict=op_code_dict, keys=OpCodes.NORMAL, info=Info.NORMAL)
- add_op_code_entry(op_code_dict=op_code_dict, keys=OpCodes.OFF, info=Info.OFF)
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
- op_code_entry=op_code_dict,
- name=CustomServiceList.RTD.value,
- info="RTD commands",
+@tmtc_definitions_provider
+def specify_rtd_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add(keys=OpCodes.ON, info=Info.ON)
+ oce.add(keys=OpCodes.NORMAL, info=Info.NORMAL)
+ oce.add(keys=OpCodes.OFF, info=Info.OFF)
+ defs.add_service(
+ name=CustomServiceList.RTD.value, info="RTD commands", op_code_entry=oce
)
-def pack_rtd_commands(op_code: str, object_id: Optional[ObjectId], tc_queue: TcQueueT):
+def pack_rtd_commands(
+ op_code: str, object_id: Optional[ObjectIdU32], q: DefaultPusQueueHelper
+):
if object_id is not None and object_id not in RTD_IDS:
print("Specified object ID not a valid RTD ID")
object_id = None
@@ -70,26 +71,32 @@ def pack_rtd_commands(op_code: str, object_id: Optional[ObjectId], tc_queue: TcQ
app_data = pack_mode_data(
object_id=object_id.as_bytes, mode=Modes.ON, submode=0
)
- cmd = PusTelecommand(
- service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=app_data
+ q.add_pus_tc(
+ PusTelecommand(
+ service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=app_data
+ )
)
- tc_queue.appendleft(cmd.pack_command_tuple())
if op_code in OpCodes.NORMAL:
app_data = pack_mode_data(
object_id=object_id.as_bytes, mode=Modes.NORMAL, submode=0
)
- cmd = PusTelecommand(
- service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=app_data
+ q.add_pus_tc(
+ PusTelecommand(
+ service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=app_data
+ )
)
- tc_queue.appendleft(cmd.pack_command_tuple())
if op_code in OpCodes.OFF:
app_data = pack_mode_data(
object_id=object_id.as_bytes, mode=Modes.OFF, submode=0
)
- cmd = PusTelecommand(
- service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=app_data
+ q.add_pus_tc(
+ PusTelecommand(
+ service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=app_data
+ )
)
- tc_queue.appendleft(cmd.pack_command_tuple())
+ if op_code in OpCodes.CONFIG_CMD:
+ command = object_id.as_bytes + CommandIds.PRINT_CLCW
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
def prompt_rtd_idx():
diff --git a/pus_tc/devs/scex.py b/pus_tc/devs/scex.py
new file mode 100644
index 0000000..355beec
--- /dev/null
+++ b/pus_tc/devs/scex.py
@@ -0,0 +1,181 @@
+import enum
+import json
+
+from config.definitions import CustomServiceList
+from tmtccmd import DefaultProcedureInfo, TcHandlerBase
+from tmtccmd.config.tmtc import tmtc_definitions_provider
+from tmtccmd.tc import DefaultPusQueueHelper, service_provider
+from tmtccmd.tc.decorator import ServiceProviderParams
+from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd
+from tmtccmd.config import OpCodeEntry, TmtcDefinitionWrapper
+from config.object_ids import SCEX_HANDLER_ID
+
+
+USE_SCEX_CONF_FILE = True
+
+
+class OpCodes:
+ PING = ["0", "ping"]
+ ION_CMD = ["1", "ion"]
+ TEMP_CMD = ["2", "temp"]
+ EXP_STATUS_CMD = ["3", "expstatus"]
+
+ ONE_CELLS_CMD = ["4", "onecell"]
+ ALL_CELLS_CMD = ["5", "allcells"]
+ FRAM = ["6", "fram"]
+
+
+class ActionIds(enum.IntEnum):
+ PING = 7
+ ION_CMD = 4
+ TEMP_CMD = 3
+ EXP_STATUS_CMD = 2
+
+ ONE_CELLS_CMD = 6
+ ALL_CELLS_CMD = 5
+ FRAM = 1
+
+
+class Info:
+ PING = "Send Ping command"
+ ION_CMD = "Read Ion"
+ TEMP_CMD = "Read Temperature"
+ EXP_STATUS_CMD = "Read Experiment Status"
+
+ ONE_CELLS_CMD = "One Cell"
+ ALL_CELLS_CMD = "All Cells"
+ FRAM = "Read FRAM"
+
+
+@tmtc_definitions_provider
+def add_scex_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add(keys=OpCodes.PING, info=Info.PING)
+ oce.add(keys=OpCodes.ION_CMD, info=Info.ION_CMD)
+ oce.add(keys=OpCodes.TEMP_CMD, info=Info.TEMP_CMD)
+ oce.add(keys=OpCodes.EXP_STATUS_CMD, info=Info.EXP_STATUS_CMD)
+ oce.add(keys=OpCodes.ONE_CELLS_CMD, info=Info.ONE_CELLS_CMD)
+
+ oce.add(keys=OpCodes.ALL_CELLS_CMD, info=Info.ALL_CELLS_CMD)
+ oce.add(keys=OpCodes.FRAM, info=Info.FRAM)
+
+ defs.add_service(
+ name=CustomServiceList.SCEX.value, info="SCEX Device", op_code_entry=oce
+ )
+
+
+@service_provider(CustomServiceList.SCEX.value)
+def pack_scex_cmds(p: ServiceProviderParams):
+ op_code = p.op_code
+ q = p.queue_helper
+ if op_code in OpCodes.PING:
+ q.add_log_cmd(Info.PING)
+ app_data = bytes([0])
+ q.add_pus_tc(make_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.PING, app_data))
+ if op_code in OpCodes.ION_CMD:
+ q.add_log_cmd(Info.ION_CMD)
+ app_data = bytes([0])
+ q.add_pus_tc(make_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.ION_CMD, app_data))
+ if op_code in OpCodes.TEMP_CMD:
+ q.add_log_cmd(Info.TEMP_CMD)
+ app_data = bytes([0])
+ q.add_pus_tc(
+ make_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.TEMP_CMD, app_data)
+ )
+
+ if op_code in OpCodes.EXP_STATUS_CMD:
+ q.add_log_cmd(Info.EXP_STATUS_CMD)
+ app_data = bytes([0])
+ q.add_pus_tc(
+ make_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.EXP_STATUS_CMD, app_data)
+ )
+
+ # one cell
+ if op_code in OpCodes.ONE_CELLS_CMD:
+ q.add_log_cmd(Info.ONE_CELLS_CMD)
+ app_data = bytearray()
+
+ # cell number
+ cn = 0
+ while True:
+ cell_select = input("Which solar cell should be measured? (1-10): ")
+ if not cell_select.isdigit():
+ print("Invalid cell number. Try again.")
+ continue
+ cell_select = int(cell_select)
+ if cell_select < 1 or cell_select > 10:
+ print(
+ f"Invalid cell number {cell_select}, "
+ f"Please enter a valid number: "
+ )
+ continue
+ cn = cell_select - 1
+ break
+
+ if USE_SCEX_CONF_FILE:
+ with open("template/scex_conf.json") as json_file:
+ json_data = json.load(json_file)
+ first_dac = json_data["first_dac"]
+ last_dac = json_data["last_dac"]
+ res_switch1 = json_data["res_switch1"]
+ res_switch2 = json_data["res_switch2"]
+ dac_weight1 = json_data["dac_weight1"]
+ dac_weight2 = json_data["dac_weight2"]
+ dac_weight3 = json_data["dac_weight3"]
+
+ # in app_data
+ # app_data.extend(struct.pack("!H", first_dac))
+ append_16_bit_val(packet=app_data, val=first_dac[cn])
+ append_16_bit_val(packet=app_data, val=last_dac[cn])
+ append_16_bit_val(packet=app_data, val=res_switch1[cn])
+ append_16_bit_val(packet=app_data, val=res_switch2[cn])
+
+ app_data.append(dac_weight1[cn])
+ app_data.append(dac_weight2[cn])
+ app_data.append(dac_weight3[cn])
+
+ q.add_pus_tc(
+ make_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.ONE_CELLS_CMD, app_data)
+ )
+
+ if op_code in OpCodes.ALL_CELLS_CMD:
+ q.add_log_cmd(Info.ALL_CELLS_CMD)
+ app_data = bytearray()
+
+ # cell number
+ cn = 0
+ if USE_SCEX_CONF_FILE:
+ with open("template/scex_conf.json") as json_file:
+ json_data = json.load(json_file)
+ first_dac = json_data["first_dac"]
+ last_dac = json_data["last_dac"]
+ res_switch1 = json_data["res_switch1"]
+ res_switch2 = json_data["res_switch2"]
+ dac_weight1 = json_data["dac_weight1"]
+ dac_weight2 = json_data["dac_weight2"]
+ dac_weight3 = json_data["dac_weight3"]
+
+ # in app_data
+ # app_data.extend(struct.pack("!H", first_dac))
+ append_16_bit_val(packet=app_data, val=first_dac[cn])
+ append_16_bit_val(packet=app_data, val=last_dac[cn])
+ append_16_bit_val(packet=app_data, val=res_switch1[cn])
+ append_16_bit_val(packet=app_data, val=res_switch2[cn])
+
+ app_data.append(dac_weight1[cn])
+ app_data.append(dac_weight2[cn])
+ app_data.append(dac_weight3[cn])
+
+ q.add_pus_tc(
+ make_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.ALL_CELLS_CMD, app_data)
+ )
+
+ if op_code in OpCodes.FRAM:
+ q.add_log_cmd(Info.FRAM)
+ app_data = bytes([0])
+ q.add_pus_tc(make_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.FRAM, app_data))
+
+
+def append_16_bit_val(packet: bytearray, val: int):
+ packet.append((val >> 8) & 0xFF)
+ packet.append(val & 0xFF)
diff --git a/pus_tc/devs/solar_array_deployment.py b/pus_tc/devs/solar_array_deployment.py
index f6a9b69..24bb94c 100644
--- a/pus_tc/devs/solar_array_deployment.py
+++ b/pus_tc/devs/solar_array_deployment.py
@@ -5,18 +5,18 @@
@author J. Meier
@date 15.02.2021
"""
-from tmtccmd.config.definitions import QueueCommands
-from tmtccmd.tc.definitions import TcQueueT
-from tmtccmd.tc.packer import PusTelecommand
+from spacepackets.ecss import PusTelecommand
+from tmtccmd.tc import DefaultPusQueueHelper
class ActionIds:
DEPLOY_SOLAR_ARRAYS = bytearray([0x0, 0x0, 0x0, 0x5])
-def pack_solar_array_deployment_test_into(object_id: bytearray, tc_queue: TcQueueT):
- tc_queue.appendleft((QueueCommands.PRINT, "Testing S/A Deployment"))
+def pack_solar_array_deployment_test_into(
+ object_id: bytearray, q: DefaultPusQueueHelper
+):
+ q.add_log_cmd("Testing S/A Deployment")
command = object_id + ActionIds.DEPLOY_SOLAR_ARRAYS
- command = PusTelecommand(service=8, subservice=128, ssc=200, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
diff --git a/pus_tc/devs/star_tracker.py b/pus_tc/devs/star_tracker.py
index bbe3c2c..3012c34 100644
--- a/pus_tc/devs/star_tracker.py
+++ b/pus_tc/devs/star_tracker.py
@@ -7,12 +7,12 @@
"""
import struct
-from tmtccmd.config.definitions import QueueCommands
-
-from tmtccmd.tc.packer import TcQueueT
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes
from tmtccmd.logging import get_console_logger
+
+from tmtccmd.tc import DefaultPusQueueHelper
+from tmtccmd.util import ObjectIdU32
from utility.input_helper import InputHelper
@@ -154,623 +154,485 @@ class Submode:
FIRMWARE = 2
-def pack_star_tracker_commands(object_id: bytearray, tc_queue: TcQueueT, op_code: str):
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "Generate command for star tracker with object id: 0x" + object_id.hex(),
- )
+def pack_star_tracker_commands(
+ object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str
+):
+ q.add_log_cmd(
+ f"Generate command for star tracker with object id: {object_id.as_hex_string}"
)
-
+ obyt = object_id.as_bytes
if op_code == "0":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Mode On, Submode Bootloader")
- )
- command = pack_mode_data(object_id, Modes.ON, Submode.BOOTLOADER)
- command = PusTelecommand(service=200, subservice=1, ssc=9, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Mode On, Submode Bootloader")
+ data = pack_mode_data(obyt, Modes.ON, Submode.BOOTLOADER)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "1":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Mode On, Submode Firmware")
- )
- command = pack_mode_data(object_id, Modes.ON, Submode.FIRMWARE)
- command = PusTelecommand(service=200, subservice=1, ssc=10, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code in OpCodes.NORMAL:
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Mode Normal"))
- command = pack_mode_data(object_id, Modes.NORMAL, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=11, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Mode On, Submode Firmware")
+ data = pack_mode_data(obyt, Modes.ON, Submode.FIRMWARE)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
+ if op_code == "2":
+ q.add_log_cmd("Star tracker: Mode Normal")
+ data = pack_mode_data(obyt, Modes.NORMAL, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "3":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Mode Off"))
- command = pack_mode_data(object_id, Modes.OFF, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=12, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Mode Off")
+ data = pack_mode_data(obyt, Modes.OFF, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "4":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Mode Raw"))
- command = pack_mode_data(object_id, 3, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=13, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Mode Raw")
+ data = pack_mode_data(obyt, Modes.RAW, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "5":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Ping"))
- command = object_id + struct.pack("!I", StarTrackerActionIds.PING)
- command = PusTelecommand(service=8, subservice=128, ssc=30, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Ping")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.PING)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "6":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Switch to bootloader program")
- )
- command = object_id + struct.pack(
+ q.add_log_cmd("Star tracker: Switch to bootloader program")
+ data = obyt + struct.pack(
"!I", StarTrackerActionIds.SWITCH_TO_BOOTLOADER_PROGRAM
)
- command = PusTelecommand(service=8, subservice=128, ssc=31, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "7":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Temperature request"))
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_TEMPERATURE)
- command = PusTelecommand(service=8, subservice=128, ssc=32, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Temperature request")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_TEMPERATURE)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "8":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request version"))
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_VERSION)
- command = PusTelecommand(service=8, subservice=128, ssc=33, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request version")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_VERSION)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "9":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request interface"))
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_INTERFACE)
- command = PusTelecommand(service=8, subservice=128, ssc=34, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request interface")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_INTERFACE)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "10":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request power"))
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_POWER)
- command = PusTelecommand(service=8, subservice=128, ssc=35, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request power")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_POWER)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "11":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Set subscription parameters")
- )
+ q.add_log_cmd("Star tracker: Set subscription parameters")
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.SUBSCRIPTION)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=36, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "12":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Boot"))
- command = object_id + struct.pack("!I", StarTrackerActionIds.BOOT)
- command = PusTelecommand(service=8, subservice=128, ssc=37, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Boot")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.BOOT)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "13":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request time"))
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_TIME)
- command = PusTelecommand(service=8, subservice=128, ssc=38, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request time")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_TIME)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "14":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request solution"))
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_SOLUTION)
- command = PusTelecommand(service=8, subservice=128, ssc=39, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request solution")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_SOLUTION)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "15":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Upload image"))
+ q.add_log_cmd("Star tracker: Upload image")
image = get_upload_image()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.UPLOAD_IMAGE)
+ bytearray(image, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=40, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "16":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Download image"))
+ q.add_log_cmd("Star tracker: Download image")
path = input("Specify storage location (default - /mnt/sd0/startracker): ")
if not path:
path = FileDefs.download_path
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_IMAGE)
+ bytearray(path, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=53, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "17":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Set limits"))
+ q.add_log_cmd("Star tracker: Set limits")
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.LIMITS)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=42, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "18":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Set tracking parameters")
- )
+ q.add_log_cmd("Star tracker: Set tracking parameters")
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.TRACKING)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=43, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "19":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Mounting"))
+ q.add_log_cmd("Star tracker: Mounting")
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.MOUNTING)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=44, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "20":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Camera"))
+ q.add_log_cmd("Star tracker: Camera")
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.CAMERA)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=45, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "22":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Centroiding"))
+ q.add_log_cmd("Star tracker: Centroiding")
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.CENTROIDING)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=47, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "23":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: LISA"))
+ q.add_log_cmd("Star tracker: LISA")
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.LISA)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=48, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "24":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Matching"))
+ q.add_log_cmd("Star tracker: Matching")
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.MATCHING)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=49, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "25":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Validation"))
+ q.add_log_cmd("Star tracker: Validation")
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.VALIDATION)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=50, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "26":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Algo"))
+ q.add_log_cmd("Star tracker: Algo")
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.ALGO)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=51, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "27":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Take image"))
+ q.add_log_cmd("Star tracker: Take image")
actionid = int(input("Specify parameter ID (take image - 4): "))
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.TAKE_IMAGE)
+ struct.pack("!B", actionid)
)
- command = PusTelecommand(service=8, subservice=128, ssc=52, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "28":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Stop str helper"))
- command = object_id + struct.pack("!I", StarTrackerActionIds.STOP_STR_HELPER)
- command = PusTelecommand(service=8, subservice=128, ssc=54, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Stop str helper")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.STOP_STR_HELPER)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "30":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Set name of download image")
- )
+ q.add_log_cmd("Star tracker: Set name of download image")
filename = input("Specify download image name: ")
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.CHANGE_DOWNLOAD_IMAGE)
+ bytearray(filename, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=54, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "31":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request histogram"))
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_HISTOGRAM)
- command = PusTelecommand(service=8, subservice=128, ssc=55, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request histogram")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_HISTOGRAM)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "32":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request contrast"))
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_CONTRAST)
- command = PusTelecommand(service=8, subservice=128, ssc=56, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request contrast")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_CONTRAST)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "33":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Set json filename"))
+ q.add_log_cmd("Star tracker: Set json filename")
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.SET_JSON_FILE_NAME)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=57, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "35":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Flash read"))
- command = pack_read_command(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=59, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Flash read")
+ data = pack_read_command(obyt)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "36":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Set flash read filename")
- )
+ q.add_log_cmd("Star tracker: Set flash read filename")
filename = input("Specify filename: ")
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.SET_FLASH_READ_FILENAME)
+ bytearray(filename, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=60, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "37":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Get checksum"))
- command = pack_checksum_command(object_id)
- command = PusTelecommand(service=8, subservice=128, ssc=61, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Get checksum")
+ data = pack_checksum_command(obyt)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "38":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Set time"))
+ q.add_log_cmd("Star tracker: Set time")
unix_time = 1640783543
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.SET_TIME)
+ struct.pack("!Q", unix_time)
)
- command = PusTelecommand(service=8, subservice=128, ssc=61, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "39":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Download Centroid"))
+ q.add_log_cmd("Star tracker: Download Centroid")
id = 0
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_CENTROID)
+ struct.pack("!B", id)
)
- command = PusTelecommand(service=8, subservice=128, ssc=62, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "41":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Download matched star")
- )
+ q.add_log_cmd("Star tracker: Download matched star")
id = 0
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_MATCHED_STAR)
+ struct.pack("!B", id)
)
- command = PusTelecommand(service=8, subservice=128, ssc=64, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "42":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Download DB Image"))
+ q.add_log_cmd("Star tracker: Download DB Image")
id = 0
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_DBIMAGE)
+ struct.pack("!B", id)
)
- command = PusTelecommand(service=8, subservice=128, ssc=65, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "43":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Download Blob Pixel"))
+ q.add_log_cmd("Star tracker: Download Blob Pixel")
id = 0
type = 1 # 0 - normal, 1 - fast
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_BLOBPIXEL)
+ struct.pack("!B", id)
+ struct.pack("!B", type)
)
- command = PusTelecommand(service=8, subservice=128, ssc=65, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "44":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Download FPGA Image"))
+ q.add_log_cmd("Star tracker: Download FPGA Image")
position = int(input("Start position: "))
length = int(input("Size to download: "))
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_FPGA_IMAGE)
+ struct.pack("!I", position)
+ struct.pack("!I", length)
+ bytearray(FileDefs.downloadFpgaImagePath, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=66, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "45":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Change donwload FPGA image file name")
- )
- command = (
- object_id
+ q.add_log_cmd("Star tracker: Change donwload FPGA image file name")
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.CHANGE_FPGA_DOWNLOAD_FILE)
+ bytearray(FileDefs.downloadFpgaImageName, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=67, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "46":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Upload FPGA image"))
- command = (
- object_id
+ q.add_log_cmd("Star tracker: Upload FPGA image")
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.UPLOAD_FPGA_IMAGE)
+ bytearray(FileDefs.uploadFpgaImageName, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=68, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "47":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: FPGA action"))
+ q.add_log_cmd("Star tracker: FPGA action")
id = 3
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.FPGA_ACTION)
+ struct.pack("!B", id)
)
- command = PusTelecommand(service=8, subservice=128, ssc=69, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "48":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Unlock"))
- command = object_id + struct.pack("!I", StarTrackerActionIds.UNLOCK)
- command = PusTelecommand(service=8, subservice=128, ssc=70, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Unlock")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.UNLOCK)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "49":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Request camera parameters")
- )
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_CAMERA_PARAMS)
- command = PusTelecommand(service=8, subservice=128, ssc=71, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request camera parameters")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_CAMERA_PARAMS)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "50":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Request limits"))
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_LIMITS)
- command = PusTelecommand(service=8, subservice=128, ssc=72, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request limits")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_LIMITS)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "51":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Set image processor parameters")
- )
+ q.add_log_cmd("Star tracker: Set image processor parameters")
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.IMAGE_PROCESSOR)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=70, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "52":
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "Star tracker: EGSE load ground config camera parameters",
- )
- )
- command = (
- object_id
+ q.add_log_cmd("Star tracker: EGSE load ground config camera parameters")
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.CAMERA)
+ bytearray(FileDefs.egse_ground_config, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=71, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "53":
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "Star tracker: EGSE load flight config camera parameters",
- )
- )
- command = (
- object_id
+ q.add_log_cmd("Star tracker: EGSE load flight config camera parameters")
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.CAMERA)
+ bytearray(FileDefs.egse_flight_config, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=72, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "54":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Request log level parameters")
- )
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_LOG_LEVEL)
- command = PusTelecommand(service=8, subservice=128, ssc=74, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request log level parameters")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_LOG_LEVEL)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "55":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Request mounting parameters")
- )
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_MOUNTING)
- command = PusTelecommand(service=8, subservice=128, ssc=75, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request mounting parameters")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_MOUNTING)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "56":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Request image processor parameters")
- )
- command = object_id + struct.pack(
- "!I", StarTrackerActionIds.REQ_IMAGE_PROCESSOR
- )
- command = PusTelecommand(service=8, subservice=128, ssc=76, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request image processor parameters")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_IMAGE_PROCESSOR)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "57":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Request centroiding parameters")
- )
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_CENTROIDING)
- command = PusTelecommand(service=8, subservice=128, ssc=75, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request centroiding parameters")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_CENTROIDING)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "58":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Request lisa parameters")
- )
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_LISA)
- command = PusTelecommand(service=8, subservice=128, ssc=76, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request lisa parameters")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_LISA)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "59":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Request matching parameters")
- )
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_MATCHING)
- command = PusTelecommand(service=8, subservice=128, ssc=77, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request matching parameters")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_MATCHING)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "60":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Request tracking parameters")
- )
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_TRACKING)
- command = PusTelecommand(service=8, subservice=128, ssc=78, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request tracking parameters")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_TRACKING)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "61":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Request validation parameters")
- )
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_VALIDATION)
- command = PusTelecommand(service=8, subservice=128, ssc=79, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request validation parameters")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_VALIDATION)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "62":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Request algo parameters")
- )
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_ALGO)
- command = PusTelecommand(service=8, subservice=128, ssc=80, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request algo parameters")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_ALGO)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "63":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Request subscription parameters")
- )
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_SUBSCRIPTION)
- command = PusTelecommand(service=8, subservice=128, ssc=81, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request subscription parameters")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_SUBSCRIPTION)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "64":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Request log subscription parameters")
- )
- command = object_id + struct.pack(
- "!I", StarTrackerActionIds.REQ_LOG_SUBSCRIPTION
- )
- command = PusTelecommand(service=8, subservice=128, ssc=82, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request log subscription parameters")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_LOG_SUBSCRIPTION)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "65":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Request debug camera parameters")
- )
- command = object_id + struct.pack("!I", StarTrackerActionIds.REQ_DEBUG_CAMERA)
- command = PusTelecommand(service=8, subservice=128, ssc=83, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Star tracker: Request debug camera parameters")
+ data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_DEBUG_CAMERA)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "66":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Set log level parameters")
- )
+ q.add_log_cmd("Star tracker: Set log level parameters")
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.LOGLEVEL)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=84, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "67":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Set log subscription parameters")
- )
+ q.add_log_cmd("Star tracker: Set log subscription parameters")
+
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.LOG_SUBSCRIPTION)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=85, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "68":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Set debug camera parameters")
- )
+ q.add_log_cmd("Star tracker: Set debug camera parameters")
json_file = get_config_file()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.DEBUG_CAMERA)
+ bytearray(json_file, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=86, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "69":
- tc_queue.appendleft((QueueCommands.PRINT, "Star tracker: Firmware update"))
+ q.add_log_cmd("Star tracker: Firmware update")
firmware = get_firmware()
- command = (
- object_id
+ data = (
+ obyt
+ struct.pack("!I", StarTrackerActionIds.FIRMWARE_UPDATE)
+ bytearray(firmware, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=87, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "70":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Disable timestamp generation")
- )
- command = object_id + struct.pack(
+ q.add_log_cmd("Star tracker: Disable timestamp generation")
+ command = obyt + struct.pack(
"!I", StarTrackerActionIds.DISBALE_TIMESTAMP_GENERATION
)
- command = PusTelecommand(service=8, subservice=128, ssc=88, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "71":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker: Enable timestamp generation")
- )
- command = object_id + struct.pack(
+ q.add_log_cmd("Star tracker: Enable timestamp generation")
+ command = obyt + struct.pack(
"!I", StarTrackerActionIds.ENABLE_TIMESTAMP_GENERATION
)
- command = PusTelecommand(service=8, subservice=128, ssc=89, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
-def pack_read_command(object_id: bytearray) -> bytearray:
+def pack_read_command(object_id: bytes) -> bytearray:
start_region = StartRegion.STAR_TRACKER_FIRMWARE
size = PartitionSize.STAR_TRACKER_FIRMWARE
path = input("Specify storage location (default - /mnt/sd0/startracker): ")
if not path:
path = FileDefs.download_path
- command = (
+ data = (
object_id
+ struct.pack("!I", StarTrackerActionIds.FLASH_READ)
+ struct.pack("!B", start_region)
+ struct.pack("!I", size)
+ bytearray(path, "utf-8")
)
- return command
+ return bytearray(data)
-def pack_checksum_command(object_id: bytearray) -> bytearray:
+def pack_checksum_command(object_id: bytes) -> bytearray:
start_region = StartRegion.STAR_TRACKER_FIRMWARE
address = 0
size = PartitionSize.STAR_TRACKER_FIRMWARE
- command = (
+ data = (
object_id
+ struct.pack("!I", StarTrackerActionIds.CHECKSUM)
+ struct.pack("!B", start_region)
+ struct.pack("!I", address)
+ struct.pack("!I", size)
)
- return command
+ return bytearray(data)
def get_config_file() -> str:
diff --git a/pus_tc/devs/str_img_helper.py b/pus_tc/devs/str_img_helper.py
index 35c3ff4..5fe6335 100644
--- a/pus_tc/devs/str_img_helper.py
+++ b/pus_tc/devs/str_img_helper.py
@@ -10,10 +10,9 @@
"""
import struct
-from tmtccmd.config.definitions import QueueCommands
-
-from tmtccmd.tc.packer import TcQueueT
from spacepackets.ecss.tc import PusTelecommand
+from tmtccmd.tc import DefaultPusQueueHelper
+from tmtccmd.util import ObjectIdU32
class Commands:
@@ -26,23 +25,16 @@ class ImagePathDefs:
def pack_str_img_helper_command(
- object_id: bytearray, tc_queue: TcQueueT, op_code: str
-) -> TcQueueT:
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "Testing star tracker image helper object id: 0x" + object_id.hex(),
- )
+ object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str
+):
+ q.add_log_cmd(
+ f"Testing star tracker image helper object id: {object_id.as_hex_string}"
)
-
if op_code == "0":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Star tracker image helper: Upload image")
- )
+ q.add_log_cmd("Star tracker image helper: Upload image")
command = (
- object_id
+ object_id.as_bytes
+ struct.pack("!I", Commands.UPLOAD_IMAGE)
+ bytearray(ImagePathDefs.uploadFile, "utf-8")
)
- command = PusTelecommand(service=8, subservice=128, ssc=30, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
diff --git a/pus_tc/devs/syrlinks_hk_handler.py b/pus_tc/devs/syrlinks_hk_handler.py
index 6937bd6..4be6674 100644
--- a/pus_tc/devs/syrlinks_hk_handler.py
+++ b/pus_tc/devs/syrlinks_hk_handler.py
@@ -5,14 +5,14 @@
@author J. Meier
@date 13.12.2020
"""
-
-from tmtccmd.config.definitions import QueueCommands
-from tmtccmd.tc.definitions import TcQueueT
+from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_3_fsfw_hk import make_sid, generate_one_hk_command
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes
import struct
+from tmtccmd.util import ObjectIdU32
+
class SetIds:
RX_REGISTERS_DATASET = 1
@@ -41,115 +41,88 @@ class CommandIds:
DISABLE_DEBUG = 21
-def pack_syrlinks_command(object_id: bytearray, tc_queue: TcQueueT, op_code: str):
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "Testing Syrlinks with object id: 0x" + object_id.hex(),
- )
- )
-
+def pack_syrlinks_command(
+ object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str
+):
+ obyt = object_id.as_bytes
+ q.add_log_cmd(f"Testing Syrlinks with object id: {object_id.as_hex_string}")
if op_code == "0":
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Set mode off"))
- command = pack_mode_data(object_id, Modes.OFF, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=9, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Syrlinks: Set mode off")
+ data = pack_mode_data(obyt, Modes.OFF, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "1":
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Set mode on"))
- command = pack_mode_data(object_id, Modes.ON, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=10, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
- if op_code in OpCodes.NORMAL:
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Mode Normal"))
- command = pack_mode_data(object_id, Modes.NORMAL, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=11, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Syrlinks: Set mode on")
+ data = pack_mode_data(obyt, Modes.ON, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
+ if op_code == "2":
+ q.add_log_cmd("Syrlinks: Mode Normal")
+ data = pack_mode_data(obyt, Modes.NORMAL, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "3":
- tc_queue.appendleft((QueueCommands.PRINT, "syrlinks: 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())
+ q.add_log_cmd("syrlinks: Set TX mode standby")
+ data = obyt + struct.pack("!I", CommandIds.SET_TX_MODE_STANDBY)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "4":
- tc_queue.appendleft((QueueCommands.PRINT, "syrlinks: 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())
+ q.add_log_cmd("syrlinks: Set TX mode modulation")
+ data = obyt + struct.pack("!I", CommandIds.SET_TX_MODE_MODULATION)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "5":
- tc_queue.appendleft((QueueCommands.PRINT, "syrlinks: 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())
+ q.add_log_cmd("syrlinks: Set TX mode CW")
+ data = obyt + struct.pack("!I", CommandIds.SET_TX_MODE_CW)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "6":
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Get RX Registers"))
- sid = make_sid(object_id, SetIds.RX_REGISTERS_DATASET)
- command = generate_one_hk_command(sid, 200)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Syrlinks: Get RX Registers")
+ sid = make_sid(obyt, SetIds.RX_REGISTERS_DATASET)
+ q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "7":
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Get TX Registers"))
- sid = make_sid(object_id, SetIds.TX_REGISTERS_DATASET)
- command = generate_one_hk_command(sid, 201)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Syrlinks: Get TX Registers")
+ sid = make_sid(obyt, SetIds.TX_REGISTERS_DATASET)
+ q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "8":
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: 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())
+ q.add_log_cmd("Syrlinks: Read TX status")
+ command = obyt + struct.pack("!I", CommandIds.READ_TX_STATUS)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "9":
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: 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())
+ q.add_log_cmd("Syrlinks: Read TX waveform")
+ command = obyt + struct.pack("!I", CommandIds.READ_TX_WAVEFORM)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "10":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Syrlinks: 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())
+ q.add_log_cmd("Syrlinks: Read TX AGC value high byte")
+ command = obyt + struct.pack("!I", CommandIds.READ_TX_AGC_VALUE_HIGH_BYTE)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "11":
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Syrlinks: 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())
+ q.add_log_cmd("Syrlinks: Read TX AGC value low byte")
+ command = obyt + struct.pack("!I", CommandIds.READ_TX_AGC_VALUE_LOW_BYTE)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "12":
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Write LCL config"))
- command = object_id + struct.pack("!I", CommandIds.WRITE_LCL_CONFIG)
- command = PusTelecommand(service=8, subservice=128, ssc=17, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Syrlinks: Write LCL config")
+ command = obyt + struct.pack("!I", CommandIds.WRITE_LCL_CONFIG)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "13":
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Read RX status registers"))
- command = object_id + struct.pack("!I", CommandIds.READ_RX_STATUS_REGISTERS)
- command = PusTelecommand(service=8, subservice=128, ssc=18, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Syrlinks: Read RX status registers")
+ command = obyt + struct.pack("!I", CommandIds.READ_RX_STATUS_REGISTERS)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "14":
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Read LCL config register"))
- command = object_id + struct.pack("!I", CommandIds.READ_LCL_CONFIG_REGISTER)
- command = PusTelecommand(service=8, subservice=128, ssc=19, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Syrlinks: Read LCL config register")
+ command = obyt + struct.pack("!I", CommandIds.READ_LCL_CONFIG_REGISTER)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "15":
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Set waveform OQPSK"))
- command = object_id + struct.pack("!I", CommandIds.SET_WAVEFORM_OQPSK)
- command = PusTelecommand(service=8, subservice=128, ssc=20, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Syrlinks: Set waveform OQPSK")
+ command = obyt + struct.pack("!I", CommandIds.SET_WAVEFORM_OQPSK)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "16":
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Set waveform BPSK"))
- command = object_id + struct.pack("!I", CommandIds.SET_WAVEFORM_BPSK)
- command = PusTelecommand(service=8, subservice=128, ssc=21, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Syrlinks: Set waveform BPSK")
+ command = obyt + struct.pack("!I", CommandIds.SET_WAVEFORM_BPSK)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "17":
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Set second config"))
- command = object_id + struct.pack("!I", CommandIds.SET_SECOND_CONFIG)
- command = PusTelecommand(service=8, subservice=128, ssc=22, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Syrlinks: Set second config")
+ command = obyt + struct.pack("!I", CommandIds.SET_SECOND_CONFIG)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "18":
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Enable debug printout"))
- command = object_id + struct.pack("!I", CommandIds.ENABLE_DEBUG)
- command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Syrlinks: Enable debug printout")
+ command = obyt + struct.pack("!I", CommandIds.ENABLE_DEBUG)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "19":
- tc_queue.appendleft((QueueCommands.PRINT, "Syrlinks: Disable debug printout"))
- command = object_id + struct.pack("!I", CommandIds.DISABLE_DEBUG)
- command = PusTelecommand(service=8, subservice=128, ssc=24, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("Syrlinks: Disable debug printout")
+ command = obyt + struct.pack("!I", CommandIds.DISABLE_DEBUG)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
diff --git a/pus_tc/devs/tmp1075.py b/pus_tc/devs/tmp1075.py
index ffc6524..f24c7ab 100644
--- a/pus_tc/devs/tmp1075.py
+++ b/pus_tc/devs/tmp1075.py
@@ -5,11 +5,11 @@
@author J. Meier
@date 06.01.2021
"""
-from tmtccmd.config.definitions import QueueCommands
-
-from tmtccmd.tc.packer import TcQueueT
from spacepackets.ecss.tc import PusTelecommand
from pus_tc.service_200_mode import pack_mode_data
+from tmtccmd.tc import DefaultPusQueueHelper
+from tmtccmd.tc.pus_200_fsfw_modes import Modes
+from tmtccmd.util import ObjectIdU32
class Tmp1075TestProcedure:
@@ -34,40 +34,29 @@ class Tmp1075ActionIds:
def pack_tmp1075_test_into(
- object_id: bytearray, op_code: str, tc_queue: TcQueueT
-) -> TcQueueT:
- tc_queue.appendleft(
- (
- QueueCommands.PRINT,
- "Testing Tmp1075 Temperature Sensor Handler with object id: 0x"
- + object_id.hex(),
- )
+ object_id: ObjectIdU32, op_code: str, q: DefaultPusQueueHelper
+):
+ q.add_log_cmd(
+ f"Testing Tmp1075 Temperature Sensor Handler with object id: {object_id.as_hex_string}"
)
-
+ obyt = object_id.as_bytes
if Tmp1075TestProcedure.all or Tmp1075TestProcedure.start_adc_conversion:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "TMP1075: Starting new temperature conversion")
- )
- command = object_id + Tmp1075ActionIds.start_adc_conversion
- command = PusTelecommand(service=8, subservice=128, ssc=23, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
-
+ q.add_log_cmd("TMP1075: Starting new temperature conversion")
+ command = obyt + Tmp1075ActionIds.start_adc_conversion
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if Tmp1075TestProcedure.all or Tmp1075TestProcedure.get_temp:
- tc_queue.appendleft((QueueCommands.PRINT, "TMP1075: Read temperature"))
- command = object_id + Tmp1075ActionIds.get_temp
- command = PusTelecommand(service=8, subservice=128, ssc=24, app_data=command)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("TMP1075: Read temperature")
+ command = obyt + Tmp1075ActionIds.get_temp
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if Tmp1075TestProcedure.set_mode_normal:
- tc_queue.appendleft((QueueCommands.PRINT, "TMP1075: Set Mode Normal"))
- mode_data = pack_mode_data(object_id, 2, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=220, app_data=mode_data)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("TMP1075: Set Mode Normal")
+ mode_data = pack_mode_data(obyt, Modes.NORMAL, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if Tmp1075TestProcedure.set_mode_on:
- tc_queue.appendleft((QueueCommands.PRINT, "TMP1075: Set Mode On"))
- mode_data = pack_mode_data(object_id, 1, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=221, app_data=mode_data)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_log_cmd("TMP1075: Set Mode On")
+ mode_data = pack_mode_data(obyt, Modes.ON, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
- return tc_queue
+ return q
diff --git a/pus_tc/procedure_packer.py b/pus_tc/procedure_packer.py
new file mode 100644
index 0000000..9fe7a06
--- /dev/null
+++ b/pus_tc/procedure_packer.py
@@ -0,0 +1,226 @@
+"""Hook function which packs telecommands based on service and operation code string
+"""
+from typing import cast
+
+from pus_tc.devs.power import pack_power_commands
+from pus_tc.devs.rtd import pack_rtd_commands
+from pus_tc.devs.scex import pack_scex_cmds
+from pus_tc.system.controllers import (
+ pack_cmd_ctrl_to_prompted_mode,
+ get_object_from_op_code,
+)
+from tmtccmd import DefaultProcedureInfo, TcHandlerBase
+from tmtccmd.config import CoreServiceList
+from tmtccmd.logging import get_console_logger
+from tmtccmd.tc import DefaultPusQueueHelper
+from tmtccmd.tc.decorator import (
+ route_to_registered_service_handlers,
+ ServiceProviderParams,
+)
+from tmtccmd.tc.pus_5_event import (
+ pack_generic_service_5_test_into,
+)
+from tmtccmd.pus.pus_17_test import pack_service_17_ping_command
+
+from pus_tc.service_200_mode import pack_service_200_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.acu import pack_acu_commands
+from pus_tc.devs.solar_array_deployment import pack_solar_array_deployment_test_into
+from pus_tc.devs.imtq import pack_imtq_test_into
+from pus_tc.devs.tmp1075 import pack_tmp1075_test_into
+from tmtc.ploc_mpsoc import pack_ploc_mpsoc_commands
+from pus_tc.devs.heater import pack_heater_cmds
+from pus_tc.devs.reaction_wheels import pack_single_rw_test_into, pack_rw_ass_cmds
+from pus_tc.devs.rad_sensor import pack_rad_sensor_test_into
+from tmtc.ploc_memory_dumper import pack_ploc_memory_dumper_cmd
+from pus_tc.devs.ccsds_handler import pack_ccsds_handler_test
+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.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
+from pus_tc.system.tcs import pack_tcs_sys_commands
+from pus_tc.system.proc import pack_proc_commands
+from config.definitions import CustomServiceList
+from config.object_ids import (
+ P60_DOCK_HANDLER,
+ PDU_1_HANDLER_ID,
+ PDU_2_HANDLER_ID,
+ ACU_HANDLER_ID,
+ TMP_1075_1_HANDLER_ID,
+ TMP_1075_2_HANDLER_ID,
+ HEATER_ID,
+ IMTQ_HANDLER_ID,
+ PLOC_MPSOC_ID,
+ RW1_ID,
+ RW2_ID,
+ RW3_ID,
+ RW4_ID,
+ RAD_SENSOR_ID,
+ STAR_TRACKER_ID,
+ PLOC_MEMORY_DUMPER_ID,
+ CCSDS_HANDLER_ID,
+ PDEC_HANDLER_ID,
+ STR_IMG_HELPER_ID,
+ SYRLINKS_HANDLER_ID,
+ SOLAR_ARRAY_DEPLOYMENT_ID,
+ RW_ASSEMBLY,
+ get_object_ids,
+)
+import config.object_ids as oids
+from tmtccmd.util import ObjectIdU32
+
+LOGGER = get_console_logger()
+
+
+def handle_default_procedure(
+ tc_base: TcHandlerBase,
+ info: DefaultProcedureInfo,
+ queue_helper: DefaultPusQueueHelper,
+):
+ service = info.service
+ op_code = info.op_code
+ obj_id_man = get_object_ids()
+ if service == CoreServiceList.SERVICE_5.value:
+ return pack_generic_service_5_test_into(q=queue_helper)
+ if (
+ service == CoreServiceList.SERVICE_17
+ or service == CoreServiceList.SERVICE_17_ALT
+ ):
+ return queue_helper.add_pus_tc(pack_service_17_ping_command())
+ if service == CoreServiceList.SERVICE_200.value:
+ return pack_service_200_test_into(q=queue_helper)
+ if service == CustomServiceList.P60DOCK.value:
+ object_id = cast(ObjectIdU32, obj_id_man.get(P60_DOCK_HANDLER))
+ return pack_p60dock_cmds(object_id=object_id, q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.RTD.value:
+ return pack_rtd_commands(object_id=None, q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.PDU1.value:
+ object_id = cast(ObjectIdU32, obj_id_man.get(PDU_1_HANDLER_ID))
+ return pack_pdu1_commands(object_id=object_id, q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.PDU2.value:
+ object_id = cast(ObjectIdU32, obj_id_man.get(PDU_2_HANDLER_ID))
+ return pack_pdu2_commands(object_id=object_id, q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.ACU.value:
+ object_id = cast(ObjectIdU32, obj_id_man.get(ACU_HANDLER_ID))
+ return pack_acu_commands(object_id=object_id, q=queue_helper, op_code=op_code)
+ # if service == CustomServiceList.BPX_BATTERY.value:
+ # return pack_bpx_commands(q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.TCS.value:
+ return pack_tcs_sys_commands(q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.TMP1075_1.value:
+ object_id = cast(ObjectIdU32, obj_id_man.get(TMP_1075_1_HANDLER_ID))
+ return pack_tmp1075_test_into(
+ object_id=object_id, q=queue_helper, op_code=op_code
+ )
+ if service == CustomServiceList.TMP1075_2.value:
+ object_id = cast(ObjectIdU32, obj_id_man.get(TMP_1075_2_HANDLER_ID))
+ return pack_tmp1075_test_into(
+ object_id=object_id, q=queue_helper, op_code=op_code
+ )
+ if service == CustomServiceList.HEATER.value:
+ object_id = HEATER_ID
+ return pack_heater_cmds(object_id=object_id, q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.IMTQ.value:
+ object_id = cast(ObjectIdU32, obj_id_man.get(IMTQ_HANDLER_ID))
+ return pack_imtq_test_into(object_id=object_id, q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.REACTION_WHEEL_1.value:
+ return pack_single_rw_test_into(
+ object_id=RW1_ID, rw_idx=1, q=queue_helper, op_code=op_code
+ )
+ if service == CustomServiceList.REACTION_WHEEL_2.value:
+ return pack_single_rw_test_into(
+ object_id=RW2_ID, rw_idx=2, q=queue_helper, op_code=op_code
+ )
+ if service == CustomServiceList.REACTION_WHEEL_3.value:
+ return pack_single_rw_test_into(
+ object_id=RW3_ID, rw_idx=3, q=queue_helper, op_code=op_code
+ )
+ if service == CustomServiceList.REACTION_WHEEL_4.value:
+ return pack_single_rw_test_into(
+ object_id=RW4_ID, rw_idx=4, q=queue_helper, op_code=op_code
+ )
+ if service == CustomServiceList.RAD_SENSOR.value:
+ object_id = cast(ObjectIdU32, obj_id_man.get(RAD_SENSOR_ID))
+ return pack_rad_sensor_test_into(
+ object_id=object_id, q=queue_helper, op_code=op_code
+ )
+ if service == CustomServiceList.STAR_TRACKER.value:
+ object_id = cast(ObjectIdU32, obj_id_man.get(STAR_TRACKER_ID))
+ return pack_star_tracker_commands(
+ object_id=object_id, q=queue_helper, op_code=op_code
+ )
+ if service == CustomServiceList.STR_IMG_HELPER.value:
+ object_id = cast(ObjectIdU32, obj_id_man.get(STR_IMG_HELPER_ID))
+ return pack_str_img_helper_command(
+ object_id=object_id, q=queue_helper, op_code=op_code
+ )
+ if service == CustomServiceList.CORE.value:
+ return pack_core_commands(q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.PLOC_MEMORY_DUMPER.value:
+ object_id = cast(ObjectIdU32, obj_id_man.get(PLOC_MEMORY_DUMPER_ID))
+ return pack_ploc_memory_dumper_cmd(
+ object_id=object_id, q=queue_helper, op_code=op_code
+ )
+ if service == CustomServiceList.POWER.value:
+ return pack_power_commands(queue_helper, op_code)
+ if service == CustomServiceList.ACS.value:
+ return pack_acs_command(q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.GPS_CTRL.value:
+ return pack_gps_command(
+ object_id=oids.GPS_CONTROLLER, q=queue_helper, op_code=op_code
+ )
+ if service == CustomServiceList.CCSDS_HANDLER.value:
+ return pack_ccsds_handler_test(
+ object_id=CCSDS_HANDLER_ID, q=queue_helper, op_code=op_code
+ )
+ if service == CustomServiceList.PDEC_HANDLER.value:
+ return pack_ccsds_handler_test(
+ object_id=PDEC_HANDLER_ID, q=queue_helper, op_code=op_code
+ )
+ if service == CustomServiceList.SYRLINKS.value:
+ object_id = cast(ObjectIdU32, obj_id_man.get(SYRLINKS_HANDLER_ID))
+ return pack_syrlinks_command(
+ object_id=object_id, q=queue_helper, op_code=op_code
+ )
+ if service == CustomServiceList.SA_DEPLYOMENT.value:
+ return pack_solar_array_deployment_test_into(
+ object_id=SOLAR_ARRAY_DEPLOYMENT_ID, q=queue_helper
+ )
+ if service == CustomServiceList.PROCEDURE.value:
+ return pack_proc_commands(q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.SUS_ASS.value:
+ return pack_sus_cmds(q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.PL_PCDU.value:
+ return pack_pl_pcdu_commands(q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.ACS_ASS.value:
+ return pack_acs_command(q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.TCS_ASS.value:
+ return pack_tcs_sys_commands(q=queue_helper, op_code=op_code)
+ if service == CustomServiceList.RW_ASSEMBLY.value:
+ return pack_rw_ass_cmds(q=queue_helper, object_id=RW_ASSEMBLY, op_code=op_code)
+ if service == CustomServiceList.CONTROLLERS.value:
+ from tmtcc import TcHandler
+
+ tc_handler = cast(TcHandler, tc_base)
+ return pack_cmd_ctrl_to_prompted_mode(
+ q=queue_helper,
+ object_id=get_object_from_op_code(op_code),
+ gui=tc_handler.gui,
+ )
+ if service == CustomServiceList.SCEX.value:
+ return pack_scex_cmds(q=queue_helper, op_code=op_code)
+ if not route_to_registered_service_handlers(
+ service,
+ ServiceProviderParams(
+ handler_base=tc_base,
+ op_code=op_code,
+ info=info,
+ queue_helper=queue_helper,
+ ),
+ ):
+ LOGGER.warning(f"Invalid Service {service}")
diff --git a/pus_tc/prompt_parameters.py b/pus_tc/prompt_parameters.py
index feca256..b9dde69 100644
--- a/pus_tc/prompt_parameters.py
+++ b/pus_tc/prompt_parameters.py
@@ -10,9 +10,8 @@ from PyQt5.QtWidgets import (
from PyQt5 import QtCore
-
+from tmtccmd.config import CoreModeList
from tmtccmd.core.globals_manager import get_global
-from tmtccmd.config.definitions import CoreGlobalIds, CoreModeList
class Parameter:
@@ -93,32 +92,29 @@ class ParameterDialog(QDialog):
"""
-def prompt_parameters(parameterList):
- gui = get_global(CoreGlobalIds.GUI)
- mode = get_global(CoreGlobalIds.MODE)
-
- # gui only works in cont mode right now
- if gui and mode == CoreModeList.CONTINUOUS_MODE:
- return _gui_prompt(parameterList)
- else:
- return _cli_prompt(parameterList)
+def prompt_parameters_gui(param_list) -> dict:
+ return _gui_prompt(param_list)
-def _gui_prompt(parameterList):
+def prompt_parameters_cli(param_list) -> dict:
+ return _cli_prompt(param_list)
+
+
+def _gui_prompt(param_list) -> dict:
dialog = ParameterDialog()
- for parameter in parameterList:
+ for parameter in param_list:
dialog.addParameter(parameter["name"], parameter["defaultValue"])
dialog.exec_()
return dialog.getParameters()
-def _cli_prompt(parameterList):
+def _cli_prompt(param_list) -> dict:
result = {}
- for parameter in parameterList:
- userInput = input(
+ for parameter in param_list:
+ user_input = input(
"Specify {} [{}]: ".format(parameter["name"], parameter["defaultValue"])
)
- if userInput == "":
- userInput = parameter["defaultValue"]
- result[parameter["name"]] = userInput
+ if user_input == "":
+ user_input = parameter["defaultValue"]
+ result[parameter["name"]] = user_input
return result
diff --git a/pus_tc/service_200_mode.py b/pus_tc/service_200_mode.py
index 1f046e7..42809d9 100644
--- a/pus_tc/service_200_mode.py
+++ b/pus_tc/service_200_mode.py
@@ -5,37 +5,31 @@
@author R. Mueller
@date 02.05.2020
"""
-from tmtccmd.config.definitions import QueueCommands
from spacepackets.ecss.tc import PusTelecommand
-from tmtccmd.tc.packer import TcQueueT
+from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes
from config.object_ids import TEST_DEVICE_ID
TEST_DEVICE_OBJ_ID = TEST_DEVICE_ID
-def pack_service200_test_into(tc_queue: TcQueueT) -> TcQueueT:
- tc_queue.appendleft((QueueCommands.PRINT, "Testing Service 200"))
+def pack_service_200_test_into(q: DefaultPusQueueHelper):
+ q.add_log_cmd("Testing Service 200")
# Object ID: Dummy Device
obj_id = TEST_DEVICE_OBJ_ID
# Set On Mode
- tc_queue.appendleft((QueueCommands.PRINT, "Testing Service 200: Set Mode On"))
+ q.add_log_cmd("Testing Service 200: Set Mode On")
mode_data = pack_mode_data(obj_id, Modes.ON, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=2000, app_data=mode_data)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
# Set Normal mode
- tc_queue.appendleft((QueueCommands.PRINT, "Testing Service 200: Set Mode Normal"))
+ q.add_log_cmd("Testing Service 200: Set Mode Normal")
mode_data = pack_mode_data(obj_id, Modes.NORMAL, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=2010, app_data=mode_data)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
# Set Raw Mode
- tc_queue.appendleft((QueueCommands.PRINT, "Testing Service 200: Set Mode Raw"))
+ q.add_log_cmd("Testing Service 200: Set Mode Raw")
mode_data = pack_mode_data(obj_id, Modes.RAW, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=2020, app_data=mode_data)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
# Set Off Mode
- tc_queue.appendleft((QueueCommands.PRINT, "Testing Service 200: Set Mode Off"))
+ q.add_log_cmd("Testing Service 200: Set Mode Off")
mode_data = pack_mode_data(obj_id, Modes.OFF, 0)
- command = PusTelecommand(service=200, subservice=1, ssc=2030, app_data=mode_data)
- tc_queue.appendleft(command.pack_command_tuple())
- return tc_queue
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
diff --git a/pus_tc/system/__init__.py b/pus_tc/system/__init__.py
index e69de29..8b13789 100644
--- a/pus_tc/system/__init__.py
+++ b/pus_tc/system/__init__.py
@@ -0,0 +1 @@
+
diff --git a/pus_tc/system/acs.py b/pus_tc/system/acs.py
index 76b3dcc..6c6005c 100644
--- a/pus_tc/system/acs.py
+++ b/pus_tc/system/acs.py
@@ -1,5 +1,6 @@
import enum
-from tmtccmd.tc.definitions import TcQueueT
+
+from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import Modes
from config.object_ids import ACS_BOARD_ASS_ID, SUS_BOARD_ASS_ID
@@ -29,13 +30,13 @@ class DualSideSubmodes(enum.IntEnum):
DUAL_SIDE = 2
-def pack_acs_command(tc_queue: TcQueueT, op_code: str):
+def pack_acs_command(q: DefaultPusQueueHelper, op_code: str):
if op_code in AcsOpCodes.ACS_ASS_A_SIDE:
command_mode(
object_id=ACS_BOARD_ASS_ID,
mode=Modes.NORMAL,
submode=DualSideSubmodes.A_SIDE,
- tc_queue=tc_queue,
+ q=q,
info="Switching to ACS board assembly A side",
)
if op_code in AcsOpCodes.ACS_ASS_B_SIDE:
@@ -43,7 +44,7 @@ def pack_acs_command(tc_queue: TcQueueT, op_code: str):
object_id=ACS_BOARD_ASS_ID,
mode=Modes.NORMAL,
submode=DualSideSubmodes.B_SIDE,
- tc_queue=tc_queue,
+ q=q,
info="Switching to ACS board assembly B side",
)
if op_code in AcsOpCodes.ACS_ASS_DUAL_MODE:
@@ -51,7 +52,7 @@ def pack_acs_command(tc_queue: TcQueueT, op_code: str):
object_id=ACS_BOARD_ASS_ID,
mode=Modes.NORMAL,
submode=DualSideSubmodes.DUAL_SIDE,
- tc_queue=tc_queue,
+ q=q,
info="Switching to ACS board assembly dual mode",
)
if op_code in AcsOpCodes.ACS_ASS_A_ON:
@@ -59,7 +60,7 @@ def pack_acs_command(tc_queue: TcQueueT, op_code: str):
object_id=ACS_BOARD_ASS_ID,
mode=Modes.ON,
submode=DualSideSubmodes.A_SIDE,
- tc_queue=tc_queue,
+ q=q,
info="Switching ACS board assembly A side on",
)
if op_code in AcsOpCodes.ACS_ASS_B_ON:
@@ -67,7 +68,7 @@ def pack_acs_command(tc_queue: TcQueueT, op_code: str):
object_id=ACS_BOARD_ASS_ID,
mode=Modes.ON,
submode=DualSideSubmodes.B_SIDE,
- tc_queue=tc_queue,
+ q=q,
info="Switching ACS board assembly B side on",
)
if op_code in AcsOpCodes.ACS_ASS_DUAL_ON:
@@ -75,7 +76,7 @@ def pack_acs_command(tc_queue: TcQueueT, op_code: str):
object_id=ACS_BOARD_ASS_ID,
mode=Modes.ON,
submode=DualSideSubmodes.B_SIDE,
- tc_queue=tc_queue,
+ q=q,
info="Switching ACS board assembly dual side on",
)
if op_code in AcsOpCodes.ACS_ASS_OFF:
@@ -83,18 +84,18 @@ def pack_acs_command(tc_queue: TcQueueT, op_code: str):
object_id=ACS_BOARD_ASS_ID,
mode=Modes.OFF,
submode=0,
- tc_queue=tc_queue,
+ q=q,
info="Switching to ACS board assembly off",
)
-def pack_sus_cmds(tc_queue: TcQueueT, op_code: str):
+def pack_sus_cmds(q: DefaultPusQueueHelper, op_code: str):
if op_code in SusOpCodes.SUS_ASS_NOM_SIDE:
command_mode(
object_id=SUS_BOARD_ASS_ID,
mode=Modes.NORMAL,
submode=DualSideSubmodes.A_SIDE,
- tc_queue=tc_queue,
+ q=q,
info="Switching to SUS board to nominal side",
)
if op_code in SusOpCodes.SUS_ASS_RED_SIDE:
@@ -102,7 +103,7 @@ def pack_sus_cmds(tc_queue: TcQueueT, op_code: str):
object_id=SUS_BOARD_ASS_ID,
mode=Modes.NORMAL,
submode=DualSideSubmodes.B_SIDE,
- tc_queue=tc_queue,
+ q=q,
info="Switching to SUS board to redundant side",
)
if op_code in SusOpCodes.SUS_ASS_OFF:
@@ -110,7 +111,7 @@ def pack_sus_cmds(tc_queue: TcQueueT, op_code: str):
object_id=SUS_BOARD_ASS_ID,
mode=Modes.OFF,
submode=0,
- tc_queue=tc_queue,
+ q=q,
info="Switching SUS board off",
)
if op_code in SusOpCodes.SUS_ASS_DUAL_MODE:
@@ -118,6 +119,6 @@ def pack_sus_cmds(tc_queue: TcQueueT, op_code: str):
object_id=SUS_BOARD_ASS_ID,
mode=Modes.NORMAL,
submode=DualSideSubmodes.DUAL_SIDE,
- tc_queue=tc_queue,
+ q=q,
info="Switching to SUS board to dual side",
)
diff --git a/pus_tc/system/common.py b/pus_tc/system/common.py
index f6fc397..c1bd1a4 100644
--- a/pus_tc/system/common.py
+++ b/pus_tc/system/common.py
@@ -1,7 +1,7 @@
from typing import Union
-from tmtccmd.tc.definitions import TcQueueT, QueueCommands
from spacepackets.ecss.tc import PusTelecommand
+from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes, Subservices
@@ -9,16 +9,17 @@ def command_mode(
object_id: bytes,
mode: Union[int, Modes],
submode: int,
- tc_queue: TcQueueT,
+ q: DefaultPusQueueHelper,
info: str,
):
- tc_queue.appendleft((QueueCommands.PRINT, info))
+ q.add_log_cmd(info)
mode_data = pack_mode_data(
object_id=object_id,
mode=mode,
submode=submode,
)
- cmd = PusTelecommand(
- service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=mode_data
+ q.add_pus_tc(
+ PusTelecommand(
+ service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=mode_data
+ )
)
- tc_queue.appendleft(cmd.pack_command_tuple())
diff --git a/pus_tc/system/controllers.py b/pus_tc/system/controllers.py
index 2f072cd..f02a907 100644
--- a/pus_tc/system/controllers.py
+++ b/pus_tc/system/controllers.py
@@ -1,12 +1,13 @@
-from tmtccmd.tc.definitions import TcQueueT
-from tmtccmd.config import QueueCommands
+from typing import Union
+
+from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import Modes
-from tmtccmd.utility import ObjectId
+from tmtccmd.util import ObjectIdU32, ObjectIdBase
from .common import command_mode
import config.object_ids as obj_ids
-from pus_tc.prompt_parameters import prompt_parameters
+from pus_tc.prompt_parameters import prompt_parameters_cli, prompt_parameters_gui
class OpCodes:
@@ -19,13 +20,17 @@ class Info:
CORE_CONTROLLER = "ACS controller"
-def pack_cmd_ctrl_to_prompted_mode(tc_queue: TcQueueT, object_id: ObjectId):
- parameters = prompt_parameters(
- [
- {"name": "Mode", "defaultValue": "2"},
- {"name": "Submode", "defaultValue": "0"},
- ]
- )
+def pack_cmd_ctrl_to_prompted_mode(
+ q: DefaultPusQueueHelper, object_id: ObjectIdU32, gui: bool
+):
+ param_list = [
+ {"name": "Mode", "defaultValue": "2"},
+ {"name": "Submode", "defaultValue": "0"},
+ ]
+ if gui:
+ parameters = prompt_parameters_gui(param_list)
+ else:
+ parameters = prompt_parameters_cli(param_list)
mode = int(parameters["Mode"])
if mode < 0 or mode > 2:
print("Invalid Mode, defaulting to OFF")
@@ -35,37 +40,41 @@ def pack_cmd_ctrl_to_prompted_mode(tc_queue: TcQueueT, object_id: ObjectId):
object_id=object_id.as_bytes,
mode=mode,
submode=submode,
- tc_queue=tc_queue,
+ q=q,
info=f"Commanding {object_id} to {mode}, {submode}",
)
-def pack_cmd_ctrl_to_off(tc_queue: TcQueueT, object_id: ObjectId):
+def pack_cmd_ctrl_to_off(
+ q: DefaultPusQueueHelper, object_id: Union[ObjectIdBase, ObjectIdU32]
+):
command_mode(
object_id=object_id.as_bytes,
mode=Modes.OFF,
submode=0,
- tc_queue=tc_queue,
+ q=q,
info=f"Commanding {object_id} OFF",
)
-def pack_cmd_ctrl_to_on(tc_queue: TcQueueT, object_id: ObjectId):
+def pack_cmd_ctrl_to_on(q: DefaultPusQueueHelper, object_id: ObjectIdU32):
command_mode(
object_id=object_id.as_bytes,
mode=Modes.ON,
submode=0,
- tc_queue=tc_queue,
+ q=q,
info=f"Commanding {object_id} ON",
)
-def pack_cmd_ctrl_to_nml(tc_queue: TcQueueT, object_id: ObjectId):
+def pack_cmd_ctrl_to_nml(
+ q: DefaultPusQueueHelper, object_id: Union[ObjectIdBase, ObjectIdU32]
+):
command_mode(
object_id=object_id.as_bytes,
mode=Modes.NORMAL,
submode=0,
- tc_queue=tc_queue,
+ q=q,
info=f"Commanding {object_id} NORMAL",
)
diff --git a/pus_tc/system/core.py b/pus_tc/system/core.py
index f44ad87..30a93c2 100644
--- a/pus_tc/system/core.py
+++ b/pus_tc/system/core.py
@@ -1,14 +1,16 @@
import enum
from config.definitions import CustomServiceList
-from tmtccmd.config import add_op_code_entry, add_service_op_code_entry
-from tmtccmd.config.definitions import QueueCommands, ServiceOpCodeDictT
-from tmtccmd.tc.definitions import TcQueueT
-from tmtccmd.tc.pus_8_funccmd import generate_action_command
+from tmtccmd.config import TmtcDefinitionWrapper
+
+from tmtccmd.tc import DefaultPusQueueHelper
+from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd
from tmtccmd.logging import get_console_logger
from tmtccmd.tc.pus_3_fsfw_hk import make_sid, generate_one_hk_command
+from tmtccmd.config.tmtc import OpCodeEntry, tmtc_definitions_provider
from config.object_ids import CORE_CONTROLLER_ID
+
LOGGER = get_console_logger()
@@ -65,148 +67,137 @@ class Copy(enum.IntEnum):
NONE = 2
-def add_core_controller_definitions(cmd_dict: ServiceOpCodeDictT):
- od = dict()
- add_op_code_entry(op_code_dict=od, keys=OpCodes.REBOOT_XSC, info=Info.REBOOT_XSC)
- add_op_code_entry(op_code_dict=od, keys=OpCodes.REBOOT_FULL, info=Info.REBOOT_FULL)
- add_op_code_entry(op_code_dict=od, keys=OpCodes.XSC_REBOOT_SELF, info="Reboot Self")
- add_op_code_entry(op_code_dict=od, keys=OpCodes.XSC_REBOOT_0_0, info="Reboot 0 0")
- add_op_code_entry(op_code_dict=od, keys=OpCodes.XSC_REBOOT_0_1, info="Reboot 0 1")
- add_op_code_entry(op_code_dict=od, keys=OpCodes.XSC_REBOOT_1_0, info="Reboot 1 0")
- add_op_code_entry(op_code_dict=od, keys=OpCodes.XSC_REBOOT_1_1, info="Reboot 1 1")
- add_op_code_entry(
- op_code_dict=od,
+@tmtc_definitions_provider
+def add_core_controller_definitions(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add(keys=OpCodes.REBOOT_XSC, info=Info.REBOOT_XSC)
+ oce.add(keys=OpCodes.REBOOT_XSC, info=Info.REBOOT_XSC)
+ oce.add(keys=OpCodes.REBOOT_FULL, info=Info.REBOOT_FULL)
+ oce.add(keys=OpCodes.XSC_REBOOT_SELF, info="Reboot Self")
+ oce.add(keys=OpCodes.XSC_REBOOT_0_0, info="Reboot 0 0")
+ oce.add(keys=OpCodes.XSC_REBOOT_0_1, info="Reboot 0 1")
+ oce.add(keys=OpCodes.XSC_REBOOT_1_0, info="Reboot 1 0")
+ oce.add(keys=OpCodes.XSC_REBOOT_1_1, info="Reboot 1 1")
+ oce.add(
keys=OpCodes.GET_HK,
info="Request housekeeping set",
)
- add_op_code_entry(
- op_code_dict=od,
+ oce.add(
keys=OpCodes.ENABLE_REBOOT_FILE_HANDLING,
info="Enable reboot file handling",
)
- add_op_code_entry(
- op_code_dict=od,
+ oce.add(
keys=OpCodes.DISABLE_REBOOT_FILE_HANDLING,
info="Disable reboot file handling",
)
- add_op_code_entry(
- op_code_dict=od,
+ oce.add(
keys=OpCodes.RESET_ALL_REBOOT_COUNTERS,
info="Reset all reboot counters",
)
- add_op_code_entry(
- op_code_dict=od,
+ oce.add(
keys=OpCodes.RESET_REBOOT_COUNTER_00,
info="Reset reboot counter 0 0",
)
- add_op_code_entry(
- op_code_dict=od,
+ oce.add(
keys=OpCodes.RESET_REBOOT_COUNTER_01,
info="Reset reboot counter 0 1",
)
- add_op_code_entry(
- op_code_dict=od,
+ oce.add(
keys=OpCodes.RESET_REBOOT_COUNTER_10,
info="Reset reboot counter 1 0",
)
- add_op_code_entry(
- op_code_dict=od,
+ oce.add(
keys=OpCodes.RESET_REBOOT_COUNTER_11,
info="Reset reboot counter 1 1",
)
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
- name=CustomServiceList.CORE.value,
- info="Core Controller",
- op_code_entry=od,
- )
+ defs.add_service(CustomServiceList.CORE.value, "Core Controller", oce)
-def pack_core_commands(tc_queue: TcQueueT, op_code: str):
+def pack_core_commands(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCodes.REBOOT_XSC:
reboot_self, chip_select, copy_select = determine_reboot_params()
perform_reboot_cmd(
- tc_queue=tc_queue,
+ q=q,
reboot_self=reboot_self,
chip=chip_select,
copy=copy_select,
)
if op_code in OpCodes.REBOOT_FULL:
- tc_queue.appendleft((QueueCommands.PRINT, f"Core Command: {Info.REBOOT_FULL}"))
- cmd = generate_action_command(
- object_id=CORE_CONTROLLER_ID, action_id=ActionIds.FULL_REBOOT
+ q.add_log_cmd(f"Core Command: {Info.REBOOT_FULL}")
+ q.add_pus_tc(
+ make_fsfw_action_cmd(
+ object_id=CORE_CONTROLLER_ID, action_id=ActionIds.FULL_REBOOT
+ )
)
- tc_queue.appendleft(cmd.pack_command_tuple())
if op_code in OpCodes.XSC_REBOOT_SELF:
- perform_reboot_cmd(tc_queue=tc_queue, reboot_self=True)
+ perform_reboot_cmd(q=q, reboot_self=True)
if op_code in OpCodes.XSC_REBOOT_0_0:
perform_reboot_cmd(
- tc_queue=tc_queue, reboot_self=False, chip=Chip.CHIP_0, copy=Copy.COPY_0_NOM
+ q=q, reboot_self=False, chip=Chip.CHIP_0, copy=Copy.COPY_0_NOM
)
if op_code in OpCodes.XSC_REBOOT_0_1:
perform_reboot_cmd(
- tc_queue=tc_queue,
+ q=q,
reboot_self=False,
chip=Chip.CHIP_0,
copy=Copy.COPY_1_GOLD,
)
if op_code in OpCodes.XSC_REBOOT_1_0:
perform_reboot_cmd(
- tc_queue=tc_queue, reboot_self=False, chip=Chip.CHIP_1, copy=Copy.COPY_0_NOM
+ q=q, reboot_self=False, chip=Chip.CHIP_1, copy=Copy.COPY_0_NOM
)
if op_code in OpCodes.XSC_REBOOT_1_1:
perform_reboot_cmd(
- tc_queue=tc_queue,
+ q=q,
reboot_self=False,
chip=Chip.CHIP_1,
copy=Copy.COPY_1_GOLD,
)
if op_code in OpCodes.DISABLE_REBOOT_FILE_HANDLING:
- tc_queue.appendleft((QueueCommands.PRINT, "Disabling reboot file handling"))
+ q.add_log_cmd("Disabling reboot file handling")
app_data = bytearray([0])
- generate_action_command(
+ make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING,
- app_data=app_data,
+ user_data=app_data,
)
if op_code in OpCodes.ENABLE_REBOOT_FILE_HANDLING:
- tc_queue.appendleft((QueueCommands.PRINT, "Enabling reboot file handling"))
+ q.add_log_cmd("Enabling reboot file handling")
app_data = bytearray([1])
- generate_action_command(
+ make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING,
- app_data=app_data,
+ user_data=app_data,
)
if op_code in OpCodes.RESET_ALL_REBOOT_COUNTERS:
- tc_queue.appendleft((QueueCommands.PRINT, "Resetting all reboot counters"))
- generate_action_command(
+ q.add_log_cmd("Resetting all reboot counters")
+ make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_ALL_REBOOT_COUNTERS
)
if op_code in OpCodes.RESET_REBOOT_COUNTER_00:
- tc_queue.appendleft((QueueCommands.PRINT, "Resetting reboot counter 0 0"))
- generate_action_command(
+ q.add_log_cmd("Resetting reboot counter 0 0")
+ make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_00
)
if op_code in OpCodes.RESET_REBOOT_COUNTER_01:
- tc_queue.appendleft((QueueCommands.PRINT, "Resetting reboot counter 0 1"))
- generate_action_command(
+ q.add_log_cmd("Resetting reboot counter 0 1")
+ make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_01
)
if op_code in OpCodes.RESET_REBOOT_COUNTER_10:
- tc_queue.appendleft((QueueCommands.PRINT, "Resetting reboot counter 1 0"))
- generate_action_command(
+ q.add_log_cmd("Resetting reboot counter 1 0")
+ make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_10
)
if op_code in OpCodes.RESET_REBOOT_COUNTER_11:
- tc_queue.appendleft((QueueCommands.PRINT, "Resetting reboot counter 1 1"))
- generate_action_command(
+ q.add_log_cmd("Resetting reboot counter 1 1")
+ make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_11
)
if op_code in OpCodes.GET_HK:
- tc_queue.appendleft((QueueCommands.PRINT, "Requesting housekeeping set"))
+ q.add_log_cmd("Requesting housekeeping set")
sid = make_sid(object_id=CORE_CONTROLLER_ID, set_id=SetIds.HK)
- command = generate_one_hk_command(sid, 201)
- tc_queue.appendleft(command.pack_command_tuple())
+ q.add_pus_tc(generate_one_hk_command(sid))
def determine_reboot_params() -> (bool, Chip, Copy):
@@ -241,31 +232,24 @@ def determine_reboot_params() -> (bool, Chip, Copy):
def perform_reboot_cmd(
- tc_queue: TcQueueT,
+ q: DefaultPusQueueHelper,
reboot_self: bool,
chip: Chip = Chip.NONE,
copy: Copy = Copy.NONE,
):
tc_data = bytearray()
if reboot_self:
- tc_queue.appendleft(
- (QueueCommands.PRINT, "Packing reboot command for current image")
- )
+ q.add_log_cmd("Packing reboot command for current image")
tc_data.append(True)
else:
tc_data.append(False)
tc_data.append(chip)
tc_data.append(copy)
- tc_queue.append(
- (
- QueueCommands.PRINT,
- f"Packing reboot command for chip {chip} and copy {copy}",
- )
+ q.add_log_cmd(f"Packing reboot command for chip {chip} and copy {copy}")
+ q.add_pus_tc(
+ make_fsfw_action_cmd(
+ object_id=CORE_CONTROLLER_ID,
+ action_id=ActionIds.XSC_REBOOT,
+ user_data=tc_data
)
- action_cmd = generate_action_command(
- object_id=CORE_CONTROLLER_ID,
- action_id=ActionIds.XSC_REBOOT,
- app_data=tc_data,
- ssc=0,
)
- tc_queue.appendleft(action_cmd.pack_command_tuple())
diff --git a/pus_tc/system/proc.py b/pus_tc/system/proc.py
index 64df168..7782176 100644
--- a/pus_tc/system/proc.py
+++ b/pus_tc/system/proc.py
@@ -1,18 +1,16 @@
from __future__ import annotations
import time
+from datetime import timedelta
from typing import List
from config.definitions import CustomServiceList
from config.object_ids import get_object_ids
from pus_tc.system.tcs import pack_tcs_sys_commands
-from tmtccmd.config import (
- QueueCommands,
- ServiceOpCodeDictT,
- add_op_code_entry,
- add_service_op_code_entry,
-)
-from tmtccmd.tc.definitions import TcQueueT
+from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
+from tmtccmd.config.tmtc import tmtc_definitions_provider
+
+from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_11_tc_sched import (
generate_time_tagged_cmd,
generate_enable_tc_sched_cmd,
@@ -46,7 +44,9 @@ from pus_tc.devs.reaction_wheels import pack_rw_ass_cmds, pack_set_speed_command
class OpCodes:
- TV_SETUP_TCS_FT_ON = ["setup", "tcs-ft-on"]
+ """FT: Functional Test"""
+
+ TV_SETUP_TCS_FT_ON = ["s", "tcs-ft-on"]
RESET_SCHED = ["reset-sched", "rs"]
HEATER = ["heater"]
BAT_FT = ["bat-ft"]
@@ -86,10 +86,6 @@ class KeyAndInfo:
KAI = KeyAndInfo
PROC_INFO_DICT = {
- KAI.BAT_FT[0]: [OpCodes.BAT_FT, KAI.BAT_FT[1], 120.0, 10.0],
- KAI.CORE_FT[0]: [OpCodes.CORE_FT, KAI.CORE_FT[1], 120.0, 10.0],
- KAI.PCDU_FT[0]: [OpCodes.PCDU_FT, KAI.PCDU_FT[1], 120.0, 10.0],
- KAI.RAD_SEN_FT[0]: [OpCodes.RAD_SEN_FT, KAI.RAD_SEN_FT[1], 120.0, 10.0],
KAI.TV_SETUP_TCS_FT_ON[0]: [
OpCodes.TV_SETUP_TCS_FT_ON,
KAI.TV_SETUP_TCS_FT_ON[1],
@@ -102,6 +98,10 @@ PROC_INFO_DICT = {
120.0,
10.0,
],
+ KAI.BAT_FT[0]: [OpCodes.BAT_FT, KAI.BAT_FT[1], 120.0, 10.0],
+ KAI.CORE_FT[0]: [OpCodes.CORE_FT, KAI.CORE_FT[1], 120.0, 10.0],
+ KAI.PCDU_FT[0]: [OpCodes.PCDU_FT, KAI.PCDU_FT[1], 120.0, 10.0],
+ KAI.RAD_SEN_FT[0]: [OpCodes.RAD_SEN_FT, KAI.RAD_SEN_FT[1], 120.0, 10.0],
KAI.ACS_FT[0]: [OpCodes.ACS_FT, KAI.ACS_FT[1], 120.0, 10.0],
KAI.MGT_FT[0]: [OpCodes.MGT_FT, KAI.MGT_FT[1], 120.0, 10.0],
# collection_time for KAI.MGT_FT_DP maybe be reduced as a full 120
@@ -130,164 +130,178 @@ class GenericHkListeningCfg:
return GenericHkListeningCfg(False, False, False)
-def generic_print(tc_queue: TcQueueT, info: dict):
- tc_queue.appendleft(
- (QueueCommands.PRINT, f"Executing {info[1]} Procedure (OpCodes: {info[0]})")
- )
+def generic_print(q: DefaultPusQueueHelper, info: dict):
+ q.add_log_cmd(f"Executing {info[1]} Procedure (OpCodes: {info[0]})")
-def add_proc_cmds(cmd_dict: ServiceOpCodeDictT):
- op_code_dict = dict()
+@tmtc_definitions_provider
+def add_proc_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
for proc_entry in PROC_INFO_DICT.values():
- add_op_code_entry(
- op_code_dict=op_code_dict, keys=proc_entry[0], info=proc_entry[1]
- )
- add_service_op_code_entry(
- srv_op_code_dict=cmd_dict,
+ oce.add(keys=proc_entry[0], info=proc_entry[1])
+ defs.add_service(
name=CustomServiceList.PROCEDURE.value,
info="TV Test Procedures",
- op_code_entry=op_code_dict,
+ op_code_entry=oce,
)
def pack_generic_hk_listening_cmds(
- tc_queue: TcQueueT,
+ q: DefaultPusQueueHelper,
proc_key: str,
sid_list: list[bytearray],
- diag: bool,
+ diag_list: list[bool],
cfg: GenericHkListeningCfg,
):
info = PROC_INFO_DICT[proc_key]
collection_time = info[2]
- generic_print(tc_queue=tc_queue, info=info)
+ generic_print(q=q, info=info)
- for sid in sid_list:
+ for i in range(len(sid_list)):
enable_listen_to_hk_for_x_seconds(
- diag=diag,
- tc_queue=tc_queue,
+ diag=diag_list[i],
+ q=q,
device=proc_key,
- sid=sid,
+ sid=sid_list[i],
interval_seconds=info[3],
)
if not cfg.use_tc_sched:
- tc_queue.appendleft((QueueCommands.WAIT, 2.0))
+ q.add_wait_seconds(2.0)
if cfg.mgt:
- activate_mgts_alternately(
- tc_queue=tc_queue,
- )
+ activate_mgts_alternately(q)
elif cfg.one_rw:
activate_all_rws_in_sequence(
- tc_queue=tc_queue, test_speed=20000, test_ramp_time=10000, init_ssc=0
+ q=q, test_speed=20000, test_ramp_time=10000, init_ssc=0
)
elif cfg.two_rws:
- activate_all_rws_two_consecutively(tc_queue=tc_queue, init_ssc=0)
+ activate_all_rws_two_consecutively(q=q)
else:
pass
if not cfg.use_tc_sched:
- tc_queue.appendleft((QueueCommands.WAIT, collection_time))
+ q.add_wait_seconds(collection_time)
disable_cmd_list = []
- for sid in sid_list:
+ for i in range(len(sid_list)):
disable_cmd_list.append(
gen_disable_listen_to_hk_for_x_seconds(
- diag=diag,
- tc_queue=tc_queue,
+ diag=diag_list[i],
+ q=q,
device=proc_key,
- sid=sid,
+ sid=sid_list[i],
)
)
+ if cfg.one_rw or cfg.two_rws:
+ activate_all_rws_in_sequence(q=q, test_speed=0, test_ramp_time=5000, init_ssc=0)
+ q.add_wait_seconds(60.0)
current_time = time.time()
current_time += collection_time
if not cfg.use_tc_sched:
for cmd in disable_cmd_list:
- tc_queue.appendleft(cmd.pack_command_tuple())
+ q.add_pus_tc(cmd)
else:
for cmd in disable_cmd_list:
- tc_queue.appendleft(
+ q.add_pus_tc(
generate_time_tagged_cmd(
- release_time=struct.pack("!I", current_time),
- tc_to_insert=cmd,
- ssc=0,
+ release_time=struct.pack("!I", int(current_time)), tc_to_insert=cmd
)
)
+
+ if not cfg.use_tc_sched:
+ q.add_wait_seconds(60.0)
sid_list.clear()
+ diag_list.clear()
-def pack_proc_commands(tc_queue: TcQueueT, op_code: str):
+def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
sid_list = []
obj_id_dict = get_object_ids()
if op_code in OpCodes.RESET_SCHED:
- tc_queue.appendleft((QueueCommands.PRINT, "Resetting/Clearing TC schedule"))
- tc_queue.appendleft(generate_reset_tc_sched_cmd().pack_command_tuple())
+ q.add_log_cmd("Resetting/Clearing TC schedule")
+ q.add_pus_tc(generate_reset_tc_sched_cmd())
if op_code in OpCodes.BAT_FT:
key = KAI.BAT_FT[0]
sid_list.append(make_sid(oids.BPX_HANDLER_ID, BpxSetIds.GET_HK_SET))
+ diag_list = [False]
pack_generic_hk_listening_cmds(
- tc_queue=tc_queue,
+ q=q,
proc_key=key,
sid_list=sid_list,
- diag=False,
+ diag_list=diag_list,
cfg=GenericHkListeningCfg.default(),
)
if op_code in OpCodes.CORE_FT:
key = KAI.CORE_FT[0]
sid_list.append(make_sid(oids.CORE_CONTROLLER_ID, CoreSetIds.HK))
+ diag_list = [False]
pack_generic_hk_listening_cmds(
- tc_queue=tc_queue,
+ q=q,
proc_key=key,
sid_list=sid_list,
- diag=False,
+ diag_list=diag_list,
cfg=GenericHkListeningCfg.default(),
)
if op_code in OpCodes.PCDU_FT:
key = KAI.PCDU_FT[0]
- sid_list.append(make_sid(oids.P60_DOCK_HANDLER, GsSetIds.P60_CORE))
- sid_list.append(make_sid(oids.PDU_1_HANDLER_ID, GsSetIds.PDU_1_CORE))
- sid_list.append(make_sid(oids.PDU_2_HANDLER_ID, GsSetIds.PDU_2_CORE))
- sid_list.append(make_sid(oids.ACU_HANDLER_ID, GsSetIds.ACU_CORE))
- sid_list.append(make_sid(oids.P60_DOCK_HANDLER, GsSetIds.P60_AUX))
- sid_list.append(make_sid(oids.PDU_1_HANDLER_ID, GsSetIds.PDU_1_AUX))
- sid_list.append(make_sid(oids.PDU_2_HANDLER_ID, GsSetIds.PDU_2_AUX))
- sid_list.append(make_sid(oids.ACU_HANDLER_ID, GsSetIds.ACU_AUX))
+ pcdu_pairs = [
+ (oids.P60_DOCK_HANDLER, GsSetIds.P60_CORE),
+ (oids.PDU_1_HANDLER_ID, GsSetIds.PDU_1_CORE),
+ (oids.PDU_2_HANDLER_ID, GsSetIds.PDU_2_CORE),
+ (oids.ACU_HANDLER_ID, GsSetIds.ACU_CORE),
+ (oids.P60_DOCK_HANDLER, GsSetIds.P60_AUX),
+ (oids.PDU_1_HANDLER_ID, GsSetIds.PDU_1_AUX),
+ (oids.PDU_2_HANDLER_ID, GsSetIds.PDU_2_AUX),
+ (oids.ACU_HANDLER_ID, GsSetIds.ACU_AUX),
+ ]
+
+ diag_list = [
+ False,
+ True,
+ True,
+ True,
+ False,
+ False,
+ False,
+ False,
+ ]
+
+ for pcdu_dev in pcdu_pairs:
+ oid = pcdu_dev[0]
+ set_id = pcdu_dev[1]
+ sid_list.append(make_sid(oid, set_id))
pack_generic_hk_listening_cmds(
- tc_queue=tc_queue,
+ q=q,
proc_key=key,
sid_list=sid_list,
- diag=False,
+ diag_list=diag_list,
cfg=GenericHkListeningCfg.default(),
)
if op_code in OpCodes.RAD_SEN_FT:
key = KAI.RAD_SEN_FT[0]
sid_list.append(make_sid(oids.RAD_SENSOR_ID, RadSetIds.HK))
+ diag_list = [False]
pack_generic_hk_listening_cmds(
- tc_queue=tc_queue,
+ q=q,
proc_key=key,
sid_list=sid_list,
- diag=False,
+ diag_list=diag_list,
cfg=GenericHkListeningCfg.default(),
)
if op_code in OpCodes.TV_SETUP_TCS_FT_ON:
# Enable scheduling
- tc_queue.appendleft(generate_enable_tc_sched_cmd().pack_command_tuple())
+ q.add_pus_tc(generate_enable_tc_sched_cmd())
# check whether tcs_assembly also has to be commanded to NORMAL Mode
- pack_tcs_sys_commands(
- tc_queue=tc_queue, op_code=TcsOpCodes.TCS_BOARD_ASS_NORMAL[0]
- )
- pack_cmd_ctrl_to_nml(
- tc_queue=tc_queue, object_id=obj_id_dict.get(oids.THERMAL_CONTROLLER_ID)
- )
+ pack_tcs_sys_commands(q=q, op_code=TcsOpCodes.TCS_BOARD_ASS_NORMAL[0])
+ pack_cmd_ctrl_to_nml(q=q, object_id=obj_id_dict.get(oids.THERMAL_CONTROLLER_ID))
if op_code in OpCodes.TV_TEARDOWN_TCS_FT_OFF:
- # TCS board shold always be on anyway, do not command it off here
- pack_cmd_ctrl_to_off(
- tc_queue=tc_queue, object_id=obj_id_dict.get(oids.THERMAL_CONTROLLER_ID)
- )
+ # TCS board should always be on anyway, do not command it off here
+ pack_cmd_ctrl_to_off(q=q, object_id=obj_id_dict.get(oids.THERMAL_CONTROLLER_ID))
if op_code in OpCodes.ACS_FT:
key = KAI.ACS_FT[0]
@@ -305,123 +319,172 @@ def pack_proc_commands(tc_queue: TcQueueT, op_code: str):
(oids.GYRO_3_L3G_HANDLER_ID, L3gGyroSetIds_1_3.CORE_HK),
(oids.GPS_CONTROLLER, GpsSetIds.HK),
]
- pack_acs_command(tc_queue=tc_queue, op_code="acs-a")
- # MGMs
+ d_side_pairs = a_side_pairs + b_side_pairs
+ diag_list = [False, False, True, False, False]
+ pack_acs_command(q=q, op_code="acs-a")
+
for a_side_dev in a_side_pairs:
oid = a_side_dev[0]
set_id = a_side_dev[1]
sid_list.append(make_sid(oid, set_id))
pack_generic_hk_listening_cmds(
- tc_queue=tc_queue,
+ q=q,
proc_key=key,
sid_list=sid_list,
- diag=False,
+ diag_list=diag_list,
cfg=GenericHkListeningCfg.default(),
)
- pack_acs_command(tc_queue=tc_queue, op_code="acs-off")
- tc_queue.appendleft((QueueCommands.WAIT, 5.0))
- pack_acs_command(tc_queue=tc_queue, op_code="acs-b")
+ pack_acs_command(q=q, op_code="acs-off")
+ q.add_wait_seconds(5.0)
+ pack_acs_command(q=q, op_code="acs-b")
+
+ sid_list.clear()
+ diag_list = [False, False, True, False, False]
for b_side_dev in b_side_pairs:
oid = b_side_dev[0]
set_id = b_side_dev[1]
sid_list.append(make_sid(oid, set_id))
- # GNSS1
- sid_list.append(make_sid(oids.GPS_HANDLER_1_ID, GpsSetIds.HK))
pack_generic_hk_listening_cmds(
- tc_queue=tc_queue,
+ q=q,
proc_key=key,
sid_list=sid_list,
- diag=False,
+ diag_list=diag_list,
cfg=GenericHkListeningCfg.default(),
)
- pack_acs_command(tc_queue=tc_queue, op_code="acs-off")
- tc_queue.appendleft((QueueCommands.WAIT, 5.0))
- pack_acs_command(tc_queue=tc_queue, op_code="acs-d")
+ pack_acs_command(q=q, op_code="acs-off")
+ q.add_wait_seconds(5.0)
+ pack_acs_command(q=q, op_code="acs-d")
- # MGMs
- sid_list.append(make_sid(oids.MGM_0_LIS3_HANDLER_ID, MgmLis3SetIds_0_2.CORE_HK))
- sid_list.append(
- make_sid(oids.MGM_1_RM3100_HANDLER_ID, MgmRm3100SetIds_1_3.CORE_HK)
- )
- sid_list.append(make_sid(oids.MGM_2_LIS3_HANDLER_ID, MgmLis3SetIds_0_2.CORE_HK))
- sid_list.append(
- make_sid(oids.MGM_3_RM3100_HANDLER_ID, MgmRm3100SetIds_1_3.CORE_HK)
- )
- # Gyros
- sid_list.append(
- make_sid(oids.GYRO_0_ADIS_HANDLER_ID, AdisGyroSetIds_0_2.CORE_HK)
- )
- sid_list.append(
- make_sid(oids.GYRO_0_ADIS_HANDLER_ID, AdisGyroSetIds_0_2.CFG_HK)
- )
- sid_list.append(make_sid(oids.GYRO_1_L3G_HANDLER_ID, L3gGyroSetIds_1_3.CORE_HK))
- sid_list.append(
- make_sid(oids.GYRO_2_ADIS_HANDLER_ID, AdisGyroSetIds_0_2.CORE_HK)
- )
- sid_list.append(
- make_sid(oids.GYRO_2_ADIS_HANDLER_ID, AdisGyroSetIds_0_2.CFG_HK)
- )
- sid_list.append(make_sid(oids.GYRO_3_L3G_HANDLER_ID, L3gGyroSetIds_1_3.CORE_HK))
- # GNSS0+1
- sid_list.append(make_sid(oids.GPS_CONTROLLER, GpsSetIds.HK))
- sid_list.append(make_sid(oids.GPS_HANDLER_1_ID, GpsSetIds.HK))
+ sid_list.clear()
+
+ for d_side_dev in d_side_pairs:
+ oid = d_side_dev[0]
+ set_id = d_side_dev[1]
+ sid_list.append(make_sid(oid, set_id))
+ diag_list = [
+ False,
+ False,
+ True,
+ False,
+ False,
+ False,
+ False,
+ True,
+ False,
+ False,
+ ]
pack_generic_hk_listening_cmds(
- tc_queue=tc_queue,
+ q=q,
proc_key=key,
sid_list=sid_list,
- diag=False,
+ diag_list=diag_list,
cfg=GenericHkListeningCfg.default(),
)
- pack_acs_command(tc_queue=tc_queue, op_code="acs-off")
+ pack_acs_command(q=q, op_code="acs-off")
if op_code in OpCodes.MGT_FT:
key = KAI.MGT_FT[0]
+ imtq_pairs = [
+ (oids.IMTQ_HANDLER_ID, ImtqSetIds.ENG_HK_SET),
+ (oids.IMTQ_HANDLER_ID, ImtqSetIds.CAL_MTM_SET),
+ (oids.IMTQ_HANDLER_ID, ImtqSetIds.RAW_MTM_SET),
+ ]
+ diag_list = [
+ True,
+ True,
+ True,
+ ]
- # mgt 1: imtq und hk
- pack_imtq_test_into(oids.IMTQ_HANDLER_ID, tc_queue=tc_queue, op_code="2")
+ # Command MGT to mode on
+ pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="1")
+ q.add_wait_seconds(5.0)
+ # Command MGT to normal mode
+ pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="2")
- sid_list.append(make_sid(oids.IMTQ_HANDLER_ID, ImtqSetIds.ENG_HK_SET))
- sid_list.append(make_sid(oids.IMTQ_HANDLER_ID, ImtqSetIds.CAL_MTM_SET))
- sid_list.append(make_sid(oids.IMTQ_HANDLER_ID, ImtqSetIds.RAW_MTM_SET))
- cfg = GenericHkListeningCfg.default()
- cfg.mgt = True
+ for imtq_dev in imtq_pairs:
+ oid = imtq_dev[0]
+ set_id = imtq_dev[1]
+ sid_list.append(make_sid(oid, set_id))
pack_generic_hk_listening_cmds(
- tc_queue=tc_queue, proc_key=key, sid_list=sid_list, diag=False, cfg=cfg
- )
-
- pack_imtq_test_into(oids.IMTQ_HANDLER_ID, tc_queue=tc_queue, op_code="0")
-
- if op_code in OpCodes.MGT_FT_DP:
- key = KAI.MGT_FT_DP[0]
-
- pack_acs_command(tc_queue=tc_queue, op_code="acs-d")
- # mgt 2.: imtq + dual side + dipole
- pack_imtq_test_into(
- object_id=oids.IMTQ_HANDLER_ID, tc_queue=tc_queue, op_code="2"
- )
-
- sid_list.append(make_sid(oids.IMTQ_HANDLER_ID, ImtqSetIds.ENG_HK_SET))
- sid_list.append(make_sid(oids.IMTQ_HANDLER_ID, ImtqSetIds.CAL_MTM_SET))
- sid_list.append(make_sid(oids.IMTQ_HANDLER_ID, ImtqSetIds.RAW_MTM_SET))
- pack_generic_hk_listening_cmds(
- tc_queue=tc_queue,
+ q=q,
proc_key=key,
sid_list=sid_list,
- diag=False,
+ diag_list=diag_list,
cfg=GenericHkListeningCfg.default(),
)
- pack_imtq_test_into(oids.IMTQ_HANDLER_ID, tc_queue=tc_queue, op_code="0")
- pack_acs_command(tc_queue=tc_queue, op_code="acs-off")
+ pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="0")
+
+ if op_code in OpCodes.MGT_FT_DP:
+ key = KAI.MGT_FT_DP[0]
+ a_side_pairs = [
+ (oids.MGM_0_LIS3_HANDLER_ID, MgmLis3SetIds_0_2.CORE_HK),
+ (oids.MGM_1_RM3100_HANDLER_ID, MgmRm3100SetIds_1_3.CORE_HK),
+ (oids.GYRO_0_ADIS_HANDLER_ID, AdisGyroSetIds_0_2.CORE_HK),
+ (oids.GYRO_1_L3G_HANDLER_ID, L3gGyroSetIds_1_3.CORE_HK),
+ (oids.GPS_CONTROLLER, GpsSetIds.HK),
+ ]
+ b_side_pairs = [
+ (oids.MGM_2_LIS3_HANDLER_ID, MgmLis3SetIds_0_2.CORE_HK),
+ (oids.MGM_3_RM3100_HANDLER_ID, MgmRm3100SetIds_1_3.CORE_HK),
+ (oids.GYRO_2_ADIS_HANDLER_ID, AdisGyroSetIds_0_2.CORE_HK),
+ (oids.GYRO_3_L3G_HANDLER_ID, L3gGyroSetIds_1_3.CORE_HK),
+ (oids.GPS_CONTROLLER, GpsSetIds.HK),
+ ]
+ imtq_pairs = [
+ (oids.IMTQ_HANDLER_ID, ImtqSetIds.ENG_HK_SET),
+ (oids.IMTQ_HANDLER_ID, ImtqSetIds.CAL_MTM_SET),
+ (oids.IMTQ_HANDLER_ID, ImtqSetIds.RAW_MTM_SET),
+ ]
+ d_side_and_imtq_pairs = a_side_pairs + b_side_pairs + imtq_pairs
+ diag_list = [
+ False,
+ False,
+ True,
+ False,
+ False,
+ False,
+ False,
+ True,
+ False,
+ False,
+ True,
+ True,
+ True,
+ ]
+ pack_acs_command(q=q, op_code="acs-d")
+ # Command MGT to mode on
+ pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="1")
+ q.add_wait_seconds(20.0)
+ # Command MGT to normal mode
+ pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="2")
+
+ for d_side_and_imtq_dev in d_side_and_imtq_pairs:
+ oid = d_side_and_imtq_dev[0]
+ set_id = d_side_and_imtq_dev[1]
+ sid_list.append(make_sid(oid, set_id))
+
+ cfg = GenericHkListeningCfg.default()
+ cfg.mgt = True
+ pack_generic_hk_listening_cmds(
+ q=q,
+ proc_key=key,
+ sid_list=sid_list,
+ diag_list=diag_list,
+ cfg=cfg,
+ )
+
+ pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="0")
+ pack_acs_command(q=q, op_code="acs-off")
if op_code in OpCodes.SUS_FT:
key = KAI.SUS_FT[0]
- pack_sus_cmds(tc_queue=tc_queue, op_code="sus-nom")
+ pack_sus_cmds(q=q, op_code="sus-nom")
sus_n_ids = [
oids.SUS_0_N_LOC_XFYFZM_PT_XF,
@@ -439,50 +502,82 @@ def pack_proc_commands(tc_queue: TcQueueT, op_code: str):
oids.SUS_10_R_LOC_XMYBZF_PT_ZF,
oids.SUS_11_R_LOC_XBYMZB_PT_ZB,
]
+ diag_list = [
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ ]
+
# SUSs
for nom_sus in sus_n_ids:
sid_list.append(make_sid(nom_sus, SetIds.HK))
pack_generic_hk_listening_cmds(
- tc_queue=tc_queue,
+ q=q,
proc_key=key,
sid_list=sid_list,
- diag=False,
+ diag_list=diag_list,
cfg=GenericHkListeningCfg.default(),
)
- pack_acs_command(tc_queue=tc_queue, op_code="sus-off")
- tc_queue.appendleft((QueueCommands.WAIT, 5.0))
- pack_sus_cmds(tc_queue=tc_queue, op_code="sus-red")
+ pack_acs_command(q=q, op_code="sus-off")
+ q.add_wait_seconds(5.0)
+ pack_sus_cmds(q=q, op_code="sus-red")
+
+ diag_list = [
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ ]
# SUSs
for red_sus in sus_r_ids:
sid_list.append(make_sid(red_sus, SetIds.HK))
pack_generic_hk_listening_cmds(
- tc_queue=tc_queue,
+ q=q,
proc_key=key,
sid_list=sid_list,
- diag=False,
+ diag_list=diag_list,
cfg=GenericHkListeningCfg.default(),
)
- pack_acs_command(tc_queue=tc_queue, op_code="sus-off")
- tc_queue.appendleft((QueueCommands.WAIT, 5.0))
- pack_sus_cmds(tc_queue=tc_queue, op_code="sus-d")
+ pack_acs_command(q=q, op_code="sus-off")
+ q.add_wait_seconds(5.0)
+ pack_sus_cmds(q=q, op_code="sus-d")
# SUSs
for nom_sus in sus_n_ids:
sid_list.append(make_sid(nom_sus, SetIds.HK))
for red_sus in sus_r_ids:
sid_list.append(make_sid(red_sus, SetIds.HK))
+ diag_list = [
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ True,
+ ]
pack_generic_hk_listening_cmds(
- tc_queue=tc_queue,
+ q=q,
proc_key=key,
sid_list=sid_list,
- diag=False,
+ diag_list=diag_list,
cfg=GenericHkListeningCfg.default(),
)
- pack_acs_command(tc_queue=tc_queue, op_code="sus-off")
+ pack_acs_command(q=q, op_code="sus-off")
if op_code in OpCodes.SYRLINKS_FT:
key = KAI.SYRLINKS_FT[0]
@@ -501,266 +596,281 @@ def pack_proc_commands(tc_queue: TcQueueT, op_code: str):
if op_code in OpCodes.STR_FT:
key = KAI.STR_FT[0]
- pack_star_tracker_commands(
- object_id=oids.STAR_TRACKER_ID,
- tc_queue=tc_queue,
- op_code=StrOpCodes.NORMAL[0],
- )
+ pack_star_tracker_commands(object_id=oids.STAR_TRACKER_ID, q=q, op_code="2")
# STR
sid_list.append(make_sid(oids.STAR_TRACKER_ID, StrSetIds.TEMPERATURE))
+ diag_list = [False]
pack_generic_hk_listening_cmds(
- tc_queue=tc_queue,
+ q=q,
proc_key=key,
sid_list=sid_list,
- diag=False,
+ diag_list=diag_list,
cfg=GenericHkListeningCfg.default(),
)
- pack_star_tracker_commands(
- object_id=oids.STAR_TRACKER_ID, tc_queue=tc_queue, op_code="3"
- )
+ pack_star_tracker_commands(object_id=oids.STAR_TRACKER_ID, q=q, op_code="3")
if op_code in OpCodes.RW_FT_ONE_RW:
key = KAI.RW_FT_ONE_RW[0]
+ rw_pairs = [
+ (oids.RW1_ID, RwSetIds.STATUS_SET_ID),
+ (oids.RW1_ID, RwSetIds.LAST_RESET),
+ (oids.RW1_ID, RwSetIds.TM_SET),
+ (oids.RW2_ID, RwSetIds.STATUS_SET_ID),
+ (oids.RW2_ID, RwSetIds.LAST_RESET),
+ (oids.RW2_ID, RwSetIds.TM_SET),
+ (oids.RW3_ID, RwSetIds.STATUS_SET_ID),
+ (oids.RW3_ID, RwSetIds.LAST_RESET),
+ (oids.RW3_ID, RwSetIds.TM_SET),
+ (oids.RW4_ID, RwSetIds.STATUS_SET_ID),
+ (oids.RW4_ID, RwSetIds.LAST_RESET),
+ (oids.RW4_ID, RwSetIds.TM_SET),
+ ]
+ diag_list = [
+ True,
+ False,
+ False,
+ True,
+ False,
+ False,
+ True,
+ False,
+ False,
+ True,
+ False,
+ False,
+ ]
# RW NORMAL
- pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, tc_queue=tc_queue, op_code="nml")
+ pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, op_code="nml")
# RW HK für alle RWs nur einzeln
- sid_list.append(make_sid(oids.RW1_ID, RwSetIds.STATUS_SET_ID))
- sid_list.append(make_sid(oids.RW1_ID, RwSetIds.TEMPERATURE_SET_ID))
- sid_list.append(make_sid(oids.RW1_ID, RwSetIds.LAST_RESET))
- sid_list.append(make_sid(oids.RW1_ID, RwSetIds.TM_SET))
- sid_list.append(make_sid(oids.RW2_ID, RwSetIds.STATUS_SET_ID))
- sid_list.append(make_sid(oids.RW2_ID, RwSetIds.TEMPERATURE_SET_ID))
- sid_list.append(make_sid(oids.RW2_ID, RwSetIds.LAST_RESET))
- sid_list.append(make_sid(oids.RW2_ID, RwSetIds.TM_SET))
- sid_list.append(make_sid(oids.RW3_ID, RwSetIds.STATUS_SET_ID))
- sid_list.append(make_sid(oids.RW3_ID, RwSetIds.TEMPERATURE_SET_ID))
- sid_list.append(make_sid(oids.RW3_ID, RwSetIds.LAST_RESET))
- sid_list.append(make_sid(oids.RW3_ID, RwSetIds.TM_SET))
- sid_list.append(make_sid(oids.RW4_ID, RwSetIds.STATUS_SET_ID))
- sid_list.append(make_sid(oids.RW4_ID, RwSetIds.TEMPERATURE_SET_ID))
- sid_list.append(make_sid(oids.RW4_ID, RwSetIds.LAST_RESET))
- sid_list.append(make_sid(oids.RW4_ID, RwSetIds.TM_SET))
-
+ for rw_dev in rw_pairs:
+ oid = rw_dev[0]
+ set_id = rw_dev[1]
+ sid_list.append(make_sid(oid, set_id))
pack_generic_hk_listening_cmds(
- tc_queue=tc_queue,
+ q=q,
proc_key=key,
sid_list=sid_list,
- diag=False,
+ diag_list=diag_list,
cfg=GenericHkListeningCfg(mgt=False, one_rw=True, two_rws=False),
)
# RW OFF
- pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, tc_queue=tc_queue, op_code="off")
+ pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, op_code="off")
# ass command with 2 rws to speed
if op_code in OpCodes.RW_FT_TWO_RWS:
key = KAI.RW_FT_TWO_RWS[0]
+ rw_pairs = [
+ (oids.RW1_ID, RwSetIds.STATUS_SET_ID),
+ (oids.RW1_ID, RwSetIds.TEMPERATURE_SET_ID),
+ (oids.RW1_ID, RwSetIds.LAST_RESET),
+ (oids.RW1_ID, RwSetIds.TM_SET),
+ (oids.RW2_ID, RwSetIds.STATUS_SET_ID),
+ (oids.RW2_ID, RwSetIds.TEMPERATURE_SET_ID),
+ (oids.RW2_ID, RwSetIds.LAST_RESET),
+ (oids.RW2_ID, RwSetIds.TM_SET),
+ (oids.RW3_ID, RwSetIds.STATUS_SET_ID),
+ (oids.RW3_ID, RwSetIds.TEMPERATURE_SET_ID),
+ (oids.RW3_ID, RwSetIds.LAST_RESET),
+ (oids.RW3_ID, RwSetIds.TM_SET),
+ (oids.RW4_ID, RwSetIds.STATUS_SET_ID),
+ (oids.RW4_ID, RwSetIds.TEMPERATURE_SET_ID),
+ (oids.RW4_ID, RwSetIds.LAST_RESET),
+ (oids.RW4_ID, RwSetIds.TM_SET),
+ ]
+ diag_list = [
+ False,
+ False,
+ False,
+ False,
+ False,
+ False,
+ False,
+ False,
+ False,
+ False,
+ False,
+ False,
+ False,
+ False,
+ False,
+ False,
+ ]
# RW NORMAL
- pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, tc_queue=tc_queue, op_code="nml")
+ pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, op_code="nml")
# RW
- sid_list.append(make_sid(oids.RW1_ID, RwSetIds.STATUS_SET_ID))
- sid_list.append(make_sid(oids.RW1_ID, RwSetIds.TEMPERATURE_SET_ID))
- sid_list.append(make_sid(oids.RW1_ID, RwSetIds.LAST_RESET))
- sid_list.append(make_sid(oids.RW1_ID, RwSetIds.TM_SET))
- sid_list.append(make_sid(oids.RW2_ID, RwSetIds.STATUS_SET_ID))
- sid_list.append(make_sid(oids.RW2_ID, RwSetIds.TEMPERATURE_SET_ID))
- sid_list.append(make_sid(oids.RW2_ID, RwSetIds.LAST_RESET))
- sid_list.append(make_sid(oids.RW2_ID, RwSetIds.TM_SET))
- sid_list.append(make_sid(oids.RW3_ID, RwSetIds.STATUS_SET_ID))
- sid_list.append(make_sid(oids.RW3_ID, RwSetIds.TEMPERATURE_SET_ID))
- sid_list.append(make_sid(oids.RW3_ID, RwSetIds.LAST_RESET))
- sid_list.append(make_sid(oids.RW3_ID, RwSetIds.TM_SET))
- sid_list.append(make_sid(oids.RW4_ID, RwSetIds.STATUS_SET_ID))
- sid_list.append(make_sid(oids.RW4_ID, RwSetIds.TEMPERATURE_SET_ID))
- sid_list.append(make_sid(oids.RW4_ID, RwSetIds.LAST_RESET))
- sid_list.append(make_sid(oids.RW4_ID, RwSetIds.TM_SET))
+ for rw_dev in rw_pairs:
+ oid = rw_dev[0]
+ set_id = rw_dev[1]
+ sid_list.append(make_sid(oid, set_id))
pack_generic_hk_listening_cmds(
- tc_queue=tc_queue,
+ q=q,
proc_key=key,
sid_list=sid_list,
- diag=False,
+ diag_list=diag_list,
cfg=GenericHkListeningCfg(mgt=False, one_rw=False, two_rws=True),
)
# RW OFF
- pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, tc_queue=tc_queue, op_code="off")
+ pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, op_code="off")
def enable_listen_to_hk_for_x_seconds(
- tc_queue: TcQueueT,
+ q: DefaultPusQueueHelper,
diag: bool,
device: str,
sid: bytes,
interval_seconds: float,
):
- tc_queue.appendleft((QueueCommands.PRINT, f"Enabling periodic HK for {device}"))
+ q.add_log_cmd(f"Enabling periodic HK for {device}")
cmd_tuple = enable_periodic_hk_command_with_interval(
diag=diag, sid=sid, interval_seconds=interval_seconds, ssc=0
)
for cmd in cmd_tuple:
- tc_queue.appendleft(cmd.pack_command_tuple())
+ q.add_pus_tc(cmd)
+ generate_time_tagged_cmd(
+ struct.pack("!I", int(round(time.time() + interval_seconds))),
+ gen_disable_listen_to_hk_for_x_seconds(q, diag, device, sid),
+ )
def gen_disable_listen_to_hk_for_x_seconds(
- tc_queue: TcQueueT,
+ q: DefaultPusQueueHelper,
diag: bool,
device: str,
sid: bytes,
) -> PusTelecommand:
- tc_queue.appendleft((QueueCommands.PRINT, f"Disabling periodic HK for {device}"))
- return disable_periodic_hk_command(diag=diag, sid=sid, ssc=0)
+ q.add_log_cmd(f"Disabling periodic HK for {device}")
+ return disable_periodic_hk_command(diag=diag, sid=sid)
def activate_mgts_alternately(
- tc_queue: TcQueueT,
+ q: DefaultPusQueueHelper,
):
- command = pack_dipole_command(
- object_id=oids.IMTQ_HANDLER_ID,
- x_dipole=2000,
- y_dipole=0,
- z_dipole=0,
- duration=30000,
+ q.add_pus_tc(
+ pack_dipole_command(
+ object_id=oids.IMTQ_HANDLER_ID,
+ x_dipole=2000,
+ y_dipole=0,
+ z_dipole=0,
+ duration=30000,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
- tc_queue.appendleft((QueueCommands.WAIT, 40.0))
+ q.add_wait_seconds(40.0)
- command = pack_dipole_command(
- object_id=oids.IMTQ_HANDLER_ID,
- x_dipole=-2000,
- y_dipole=0,
- z_dipole=0,
- duration=30000,
+ q.add_pus_tc(
+ pack_dipole_command(
+ object_id=oids.IMTQ_HANDLER_ID,
+ x_dipole=-2000,
+ y_dipole=0,
+ z_dipole=0,
+ duration=30000,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
- tc_queue.appendleft((QueueCommands.WAIT, 40.0))
+ q.add_wait_seconds(40.0)
- command = pack_dipole_command(
- object_id=oids.IMTQ_HANDLER_ID,
- x_dipole=0,
- y_dipole=2000,
- z_dipole=0,
- duration=30000,
+ q.add_pus_tc(
+ pack_dipole_command(
+ object_id=oids.IMTQ_HANDLER_ID,
+ x_dipole=0,
+ y_dipole=2000,
+ z_dipole=0,
+ duration=30000,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
- tc_queue.appendleft((QueueCommands.WAIT, 40.0))
+ q.add_wait_seconds(40.0)
- command = pack_dipole_command(
- object_id=oids.IMTQ_HANDLER_ID,
- x_dipole=0,
- y_dipole=-2000,
- z_dipole=0,
- duration=30000,
+ q.add_pus_tc(
+ pack_dipole_command(
+ object_id=oids.IMTQ_HANDLER_ID,
+ x_dipole=0,
+ y_dipole=-2000,
+ z_dipole=0,
+ duration=30000,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
- tc_queue.appendleft((QueueCommands.WAIT, 40.0))
+ q.add_wait_seconds(40.0)
- command = pack_dipole_command(
- object_id=oids.IMTQ_HANDLER_ID,
- x_dipole=0,
- y_dipole=0,
- z_dipole=2000,
- duration=30000,
+ q.add_pus_tc(
+ pack_dipole_command(
+ object_id=oids.IMTQ_HANDLER_ID,
+ x_dipole=0,
+ y_dipole=0,
+ z_dipole=2000,
+ duration=30000,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
- tc_queue.appendleft((QueueCommands.WAIT, 40.0))
+ q.add_wait_seconds(40.0)
- command = pack_dipole_command(
- object_id=oids.IMTQ_HANDLER_ID,
- x_dipole=0,
- y_dipole=0,
- z_dipole=-2000,
- duration=30000,
+ q.add_pus_tc(
+ pack_dipole_command(
+ object_id=oids.IMTQ_HANDLER_ID,
+ x_dipole=0,
+ y_dipole=0,
+ z_dipole=-2000,
+ duration=30000,
+ )
)
- tc_queue.appendleft(command.pack_command_tuple())
- tc_queue.appendleft((QueueCommands.WAIT, 40.0))
+ q.add_wait_seconds(40.0)
def rw_speed_cmd_single(
- tc_queue: TcQueueT, oid: bytes, init_ssc: int, speed: int, ramp_time: int
-) -> int:
- command = pack_set_speed_command(
- object_id=oid, speed=speed, ramp_time_ms=ramp_time, ssc=init_ssc
+ q: DefaultPusQueueHelper, oid: bytes, speed: int, ramp_time: int
+):
+ q.add_pus_tc(
+ pack_set_speed_command(object_id=oid, speed=speed, ramp_time_ms=ramp_time)
)
- init_ssc += 1
- tc_queue.appendleft(command.pack_command_tuple())
- tc_queue.appendleft((QueueCommands.WAIT, 70.0))
- command = pack_set_speed_command(
- object_id=oids.RW1_ID, speed=0, ramp_time_ms=ramp_time, ssc=init_ssc
- )
- tc_queue.appendleft(command.pack_command_tuple())
- return init_ssc + 1
+ q.add_wait(timedelta(seconds=70.0))
+ q.add_pus_tc(pack_set_speed_command(object_id=oid, speed=0, ramp_time_ms=ramp_time))
def rw_speed_up_cmd_consec(
- tc_queue: TcQueueT, obids: List[bytes], init_ssc: int, speed: int, ramp_time: int
-) -> int:
+ q: DefaultPusQueueHelper, obids: List[bytes], speed: int, ramp_time: int
+):
for oid in obids:
- command = pack_set_speed_command(
- object_id=oid, speed=speed, ramp_time_ms=ramp_time, ssc=init_ssc
+ q.add_pus_tc(
+ pack_set_speed_command(object_id=oid, speed=speed, ramp_time_ms=ramp_time)
)
- tc_queue.appendleft(command.pack_command_tuple())
- init_ssc += 1
- return init_ssc
def rw_speed_down_cmd_consec(
- tc_queue: TcQueueT, obids: List[bytes], init_ssc: int, ramp_time: int
-) -> int:
+ q: DefaultPusQueueHelper, obids: List[bytes], ramp_time: int
+):
for oid in obids:
- command = pack_set_speed_command(
- object_id=oid, speed=0, ramp_time_ms=ramp_time, ssc=init_ssc
+ q.add_pus_tc(
+ pack_set_speed_command(object_id=oid, speed=0, ramp_time_ms=ramp_time)
)
- tc_queue.appendleft(command.pack_command_tuple())
- init_ssc += 1
- return init_ssc
def activate_all_rws_in_sequence(
- tc_queue: TcQueueT, init_ssc: int, test_speed: int, test_ramp_time: int
-) -> int:
+ q: DefaultPusQueueHelper, init_ssc: int, test_speed: int, test_ramp_time: int
+):
new_ssc = init_ssc
# RW1 speed cmd
- tc_queue.appendleft((QueueCommands.WAIT, 5.0))
- new_ssc = rw_speed_cmd_single(
- tc_queue, oids.RW1_ID, new_ssc, test_speed, test_ramp_time
- )
- tc_queue.appendleft((QueueCommands.WAIT, 10.0))
- new_ssc = rw_speed_cmd_single(
- tc_queue, oids.RW2_ID, new_ssc, test_speed, test_ramp_time
- )
- tc_queue.appendleft((QueueCommands.WAIT, 10.0))
- new_ssc = rw_speed_cmd_single(
- tc_queue, oids.RW3_ID, new_ssc, test_speed, test_ramp_time
- )
- tc_queue.appendleft((QueueCommands.WAIT, 10.0))
- new_ssc = rw_speed_cmd_single(
- tc_queue, oids.RW4_ID, new_ssc, test_speed, test_ramp_time
- )
- tc_queue.appendleft((QueueCommands.WAIT, 5.0))
+ q.add_wait(timedelta(seconds=58.0))
+ rw_speed_cmd_single(q, oids.RW1_ID, test_speed, test_ramp_time)
+ q.add_wait_seconds(30.0)
+ rw_speed_cmd_single(q, oids.RW2_ID, test_speed, test_ramp_time)
+ q.add_wait_seconds(30.0)
+ rw_speed_cmd_single(q, oids.RW3_ID, test_speed, test_ramp_time)
+ q.add_wait_seconds(30.0)
+ rw_speed_cmd_single(q, oids.RW4_ID, test_speed, test_ramp_time)
+ q.add_wait_seconds(30.0)
return new_ssc
-def activate_all_rws_two_consecutively(tc_queue: TcQueueT, init_ssc: int) -> int:
- new_ssc = init_ssc
+def activate_all_rws_two_consecutively(q: DefaultPusQueueHelper):
# RW1+3 speed cmd
- tc_queue.appendleft((QueueCommands.WAIT, 5.0))
- new_ssc = rw_speed_up_cmd_consec(
- tc_queue, [oids.RW1_ID, oids.RW3_ID], new_ssc, -20000, 10000
- )
- tc_queue.appendleft((QueueCommands.WAIT, 10.0))
+ q.add_wait_seconds(5.0)
+ rw_speed_up_cmd_consec(q, [oids.RW1_ID, oids.RW3_ID], -20000, 10000)
+ q.add_wait_seconds(70.0)
+ rw_speed_down_cmd_consec(q, [oids.RW1_ID, oids.RW3_ID], 10000)
+ q.add_wait_seconds(15.0)
# RW2+4 speed cmd
- new_ssc = rw_speed_up_cmd_consec(
- tc_queue, [oids.RW2_ID, oids.RW4_ID], new_ssc, -20000, 10000
- )
- tc_queue.appendleft((QueueCommands.WAIT, 70.0))
- new_ssc = rw_speed_down_cmd_consec(
- tc_queue, [oids.RW1_ID, oids.RW3_ID], new_ssc, 10000
- )
- tc_queue.appendleft((QueueCommands.WAIT, 5.0))
- new_ssc = rw_speed_down_cmd_consec(
- tc_queue, [oids.RW2_ID, oids.RW4_ID], new_ssc, 10000
- )
- return new_ssc
+ rw_speed_up_cmd_consec(q, [oids.RW2_ID, oids.RW4_ID], -20000, 10000)
+ q.add_wait_seconds(70.0)
+ rw_speed_down_cmd_consec(q, [oids.RW2_ID, oids.RW4_ID], 10000)
+ q.add_wait_seconds(15.0)
diff --git a/pus_tc/system/tcs.py b/pus_tc/system/tcs.py
index 47ab31d..4130260 100644
--- a/pus_tc/system/tcs.py
+++ b/pus_tc/system/tcs.py
@@ -1,27 +1,72 @@
-from tmtccmd.tc.definitions import TcQueueT, QueueCommands
+import enum
+
+from config.definitions import CustomServiceList
+from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
+from tmtccmd.config.tmtc import tmtc_definitions_provider
+from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import Modes
+from tmtccmd.tc.pus_3_fsfw_hk import (
+ make_sid,
+ generate_one_diag_command,
+ generate_one_hk_command,
+)
from .common import command_mode
-from config.object_ids import TCS_BOARD_ASS_ID
+from config.object_ids import TCS_BOARD_ASS_ID, TCS_CONTROLLER
class OpCodes:
TCS_BOARD_ASS_NORMAL = ["0", "tcs-normal"]
TCS_BOARD_ASS_OFF = ["1", "tcs-off"]
+ REQUEST_SENSOR_TEMP_SET = ["2", "temp-hk"]
class Info:
+ REQUEST_SENSOR_TEMP_SET = "Request HK set of primary sensor temperatures"
TCS_BOARD_ASS_NORMAL = "Switching TCS board assembly on"
TCS_BOARD_ASS_OFF = "Switching TCS board assembly off"
-def pack_tcs_sys_commands(tc_queue: TcQueueT, op_code: str):
+class SetIds(enum.IntEnum):
+ PRIMARY_SENSORS = 0
+ DEVICE_SENSORS = 1
+ SUS_TEMP_SENSORS = 2
+
+
+@tmtc_definitions_provider
+def add_tcs_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add(
+ keys=OpCodes.TCS_BOARD_ASS_NORMAL,
+ info=Info.TCS_BOARD_ASS_NORMAL,
+ )
+ oce.add(
+ keys=OpCodes.TCS_BOARD_ASS_OFF,
+ info=Info.TCS_BOARD_ASS_OFF,
+ )
+ oce.add(keys=OpCodes.REQUEST_SENSOR_TEMP_SET, info=Info.REQUEST_SENSOR_TEMP_SET)
+ defs.add_service(
+ name=CustomServiceList.TCS.value,
+ info="TCS Board Assembly",
+ op_code_entry=oce,
+ )
+
+
+def pack_tcs_sys_commands(q: DefaultPusQueueHelper, op_code: str):
+ if op_code in OpCodes.REQUEST_SENSOR_TEMP_SET:
+ sensor_set_sid = make_sid(TCS_CONTROLLER, SetIds.PRIMARY_SENSORS)
+ q.add_log_cmd(Info.REQUEST_SENSOR_TEMP_SET)
+ q.add_pus_tc(generate_one_hk_command(sensor_set_sid))
+ pack_tcs_ass_cmds(q, op_code)
+
+
+def pack_tcs_ass_cmds(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCodes.TCS_BOARD_ASS_NORMAL:
command_mode(
object_id=TCS_BOARD_ASS_ID,
mode=Modes.NORMAL,
submode=0,
- tc_queue=tc_queue,
+ q=q,
info=Info.TCS_BOARD_ASS_NORMAL,
)
if op_code in OpCodes.TCS_BOARD_ASS_OFF:
@@ -29,6 +74,6 @@ def pack_tcs_sys_commands(tc_queue: TcQueueT, op_code: str):
object_id=TCS_BOARD_ASS_ID,
mode=Modes.OFF,
submode=0,
- tc_queue=tc_queue,
+ q=q,
info=Info.TCS_BOARD_ASS_OFF,
)
diff --git a/pus_tc/system/time.py b/pus_tc/system/time.py
index c66bc17..d1ba341 100644
--- a/pus_tc/system/time.py
+++ b/pus_tc/system/time.py
@@ -1,10 +1,12 @@
from datetime import datetime
+from config.definitions import CustomServiceList
from spacepackets.ecss import PusTelecommand
-from tmtccmd.config import QueueCommands
-from tmtccmd.tc.definitions import TcQueueT
+from tmtccmd import DefaultProcedureInfo, TcHandlerBase
from tmtccmd.logging import get_console_logger
+from tmtccmd.tc import DefaultPusQueueHelper, service_provider
+from tmtccmd.tc.decorator import ServiceProviderParams
LOGGER = get_console_logger()
@@ -17,12 +19,11 @@ class Info:
SET_CURRENT_TIME = "Setting current time in ASCII format"
-def pack_set_current_time_ascii_command(tc_queue: TcQueueT, ssc: int):
+@service_provider(CustomServiceList.TIME.value)
+def pack_set_current_time_ascii_command(p: ServiceProviderParams):
+ q = p.queue_helper
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())
+ q.add_log_cmd(Info.SET_CURRENT_TIME)
+ q.add_pus_tc(PusTelecommand(service=9, subservice=128, app_data=current_time_ascii))
diff --git a/pus_tc/tc_packer_hook.py b/pus_tc/tc_packer_hook.py
deleted file mode 100644
index 752e19a..0000000
--- a/pus_tc/tc_packer_hook.py
+++ /dev/null
@@ -1,260 +0,0 @@
-"""Hook function which packs telecommands based on service and operation code string
-"""
-import logging
-import os
-from collections import deque
-from typing import Union
-
-from pus_tc.devs.rtd import pack_rtd_commands
-from spacepackets.ecss import PusTelecommand
-from tmtccmd.com_if.com_interface_base import CommunicationInterface
-from tmtccmd.config.definitions import CoreServiceList, QueueCommands
-from tmtccmd.logging import get_console_logger
-from tmtccmd.logging.pus import log_raw_pus_tc
-from tmtccmd.tc.definitions import TcQueueT
-from tmtccmd.tc.pus_5_event import pack_generic_service5_test_into
-from tmtccmd.pus.pus_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_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
-from pus_tc.devs.acu import pack_acu_commands
-from pus_tc.devs.solar_array_deployment import pack_solar_array_deployment_test_into
-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_cmds
-from pus_tc.devs.reaction_wheels import pack_single_rw_test_into, pack_rw_ass_cmds
-from pus_tc.devs.rad_sensor import pack_rad_sensor_test_into
-from pus_tc.devs.ploc_memory_dumper import pack_ploc_memory_dumper_cmd
-from pus_tc.devs.ccsds_handler import pack_ccsds_handler_test
-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
-from pus_tc.system.tcs import pack_tcs_sys_commands
-from pus_tc.system.proc import pack_proc_commands
-from pus_tc.system.controllers import pack_cmd_ctrl_to_prompted_mode
-from config.definitions import CustomServiceList
-from config.object_ids import (
- get_object_ids,
- P60_DOCK_HANDLER,
- PDU_1_HANDLER_ID,
- PDU_2_HANDLER_ID,
- ACU_HANDLER_ID,
- TMP_1075_1_HANDLER_ID,
- TMP_1075_2_HANDLER_ID,
- HEATER_ID,
- IMTQ_HANDLER_ID,
- PLOC_MPSOC_ID,
- RW1_ID,
- RW2_ID,
- RW3_ID,
- RW4_ID,
- RAD_SENSOR_ID,
- PLOC_SUPV_ID,
- STAR_TRACKER_ID,
- PLOC_MEMORY_DUMPER_ID,
- GPS_CONTROLLER,
- GPS_HANDLER_1_ID,
- CCSDS_HANDLER_ID,
- PDEC_HANDLER_ID,
- STR_IMG_HELPER_ID,
- SYRLINKS_HANDLER_ID,
- SOLAR_ARRAY_DEPLOYMENT_ID,
- RW_ASSEMBLY,
- get_object_ids,
-)
-
-
-LOGGER = get_console_logger()
-
-
-def pre_tc_send_cb(
- queue_entry: Union[bytes, QueueCommands],
- com_if: CommunicationInterface,
- queue_info: Union[PusTelecommand, any],
- file_logger: logging.Logger,
-):
- if isinstance(queue_entry, bytes) or isinstance(queue_entry, bytearray):
- log_raw_pus_tc(
- packet=queue_entry,
- srv_subservice=(queue_info.service, queue_info.subservice),
- )
- tc_info_string = f"Sent {queue_info}"
- LOGGER.info(tc_info_string)
- file_logger.info(f"{get_current_time_string(True)}: {tc_info_string}")
- com_if.send(data=queue_entry)
- elif isinstance(queue_entry, QueueCommands):
- if queue_entry == QueueCommands.PRINT:
- file_logger.info(queue_info)
-
-
-def pack_service_queue_user(
- service: Union[str, int], op_code: str, service_queue: TcQueueT
-):
- obj_id_man = get_object_ids()
- if service == CoreServiceList.SERVICE_5.value:
- return pack_generic_service5_test_into(tc_queue=service_queue)
- if service == CoreServiceList.SERVICE_17.value:
- return service_queue.appendleft(
- pack_service_17_ping_command(ssc=1700).pack_command_tuple()
- )
- if service == CoreServiceList.SERVICE_200.value:
- return pack_service200_test_into(tc_queue=service_queue)
- if service == CustomServiceList.P60DOCK.value:
- object_id = obj_id_man.get(P60_DOCK_HANDLER)
- return pack_p60dock_cmds(
- object_id=object_id, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.RTD.value:
- return pack_rtd_commands(
- object_id=None, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.PDU1.value:
- object_id = obj_id_man.get(PDU_1_HANDLER_ID)
- return pack_pdu1_commands(
- object_id=object_id, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.PDU2.value:
- object_id = obj_id_man.get(PDU_2_HANDLER_ID)
- return pack_pdu2_commands(
- object_id=object_id, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.ACU.value:
- object_id = obj_id_man.get(ACU_HANDLER_ID)
- return pack_acu_commands(
- object_id=object_id, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.BPX_BATTERY.value:
- return pack_bpx_commands(tc_queue=service_queue, op_code=op_code)
- if service == CustomServiceList.TMP1075_1.value:
- object_id = TMP_1075_1_HANDLER_ID
- return pack_tmp1075_test_into(
- object_id=object_id, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.TMP1075_2.value:
- object_id = TMP_1075_2_HANDLER_ID
- return pack_tmp1075_test_into(
- object_id=object_id, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.HEATER.value:
- object_id = HEATER_ID
- 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(
- object_id=object_id, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.PLOC_MPSOC.value:
- object_id = PLOC_MPSOC_ID
- return pack_ploc_mpsoc_commands(
- object_id=object_id, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.REACTION_WHEEL_1.value:
- return pack_single_rw_test_into(
- object_id=RW1_ID, rw_idx=1, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.REACTION_WHEEL_2.value:
- return pack_single_rw_test_into(
- object_id=RW2_ID, rw_idx=2, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.REACTION_WHEEL_3.value:
- return pack_single_rw_test_into(
- object_id=RW3_ID, rw_idx=3, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.REACTION_WHEEL_4.value:
- return pack_single_rw_test_into(
- object_id=RW4_ID, rw_idx=4, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.RAD_SENSOR.value:
- object_id = obj_id_man.get(RAD_SENSOR_ID)
- return pack_rad_sensor_test_into(
- object_id=object_id, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.PLOC_SUPV.value:
- object_id = PLOC_SUPV_ID
- return pack_ploc_supv_commands(
- object_id=object_id, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.STAR_TRACKER.value:
- object_id = STAR_TRACKER_ID
- return pack_star_tracker_commands(
- object_id=object_id, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.STR_IMG_HELPER.value:
- object_id = STR_IMG_HELPER_ID
- return pack_str_img_helper_command(
- object_id=object_id, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.CORE.value:
- return pack_core_commands(tc_queue=service_queue, op_code=op_code)
- if service == CustomServiceList.PLOC_MEMORY_DUMPER.value:
- object_id = PLOC_MEMORY_DUMPER_ID
- return pack_ploc_memory_dumper_cmd(
- object_id=object_id, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.ACS.value:
- return pack_acs_command(tc_queue=service_queue, op_code=op_code)
- if service == CustomServiceList.GPS_0.value:
- return pack_gps_command(
- object_id=GPS_CONTROLLER, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.GPS_1.value:
- return pack_gps_command(
- object_id=GPS_HANDLER_1_ID, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.CCSDS_HANDLER.value:
- return pack_ccsds_handler_test(
- object_id=CCSDS_HANDLER_ID, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.PDEC_HANDLER.value:
- return pack_ccsds_handler_test(
- object_id=PDEC_HANDLER_ID, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.SYRLINKS.value:
- return pack_syrlinks_command(
- object_id=SYRLINKS_HANDLER_ID, tc_queue=service_queue, op_code=op_code
- )
- if service == CustomServiceList.SA_DEPLYOMENT.value:
- return pack_solar_array_deployment_test_into(
- object_id=SOLAR_ARRAY_DEPLOYMENT_ID, tc_queue=service_queue
- )
- if service == CustomServiceList.PROCEDURE.value:
- return pack_proc_commands(tc_queue=service_queue, op_code=op_code)
- if service == CustomServiceList.SUS_ASS.value:
- return pack_sus_cmds(tc_queue=service_queue, op_code=op_code)
- if service == CustomServiceList.PL_PCDU.value:
- return pack_pl_pcdu_commands(tc_queue=service_queue, op_code=op_code)
- if service == CustomServiceList.ACS_ASS.value:
- 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)
- if service == CustomServiceList.RW_ASSEMBLY.value:
- return pack_rw_ass_cmds(
- tc_queue=service_queue, object_id=RW_ASSEMBLY, op_code=op_code
- )
- if service == CustomServiceList.CONTROLLERS.value:
- return pack_cmd_ctrl_to_prompted_mode(tc_queue=service_queue, op_code=op_code)
- LOGGER.warning("Invalid Service !")
-
-
-def create_total_tc_queue_user() -> TcQueueT:
- if not os.path.exists("log"):
- os.mkdir("log")
- tc_queue = deque()
- pack_generic_service5_test_into(tc_queue)
- tc_queue.appendleft(pack_service_17_ping_command(ssc=1700).pack_command_tuple())
- return tc_queue
diff --git a/pus_tm/action_reply_handler.py b/pus_tm/action_reply_handler.py
index cd35815..b7077b3 100644
--- a/pus_tm/action_reply_handler.py
+++ b/pus_tm/action_reply_handler.py
@@ -1,13 +1,14 @@
import struct
from config.object_ids import *
+from pus_tc.devs.common_power import handle_get_param_data_reply
from pus_tc.devs.imtq import ImtqActionIds
-from pus_tc.devs.ploc_mpsoc import PlocReplyIds
-from pus_tc.devs.ploc_supervisor import SupvActionIds
+from pus_tm.defs import PrintWrapper
+from tmtc.ploc_mpsoc import PlocReplyIds
+from tmtc.ploc_supervisor import SupvActionIds
from pus_tc.devs.star_tracker import StarTrackerActionIds
from tmtccmd.logging import get_console_logger
-from tmtccmd.config.definitions import DataReplyUnpacked
from tmtccmd.tm import Service8FsfwTm
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
LOGGER = get_console_logger()
@@ -21,13 +22,13 @@ 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_as_bytes)
+ pw = PrintWrapper(printer)
custom_data = tm_packet.custom_data
action_id = tm_packet.action_id
generic_print_str = printer.generic_action_packet_tm_print(
packet=tm_packet, obj_id=object_id
)
- print(generic_print_str)
- printer.file_logger.info(generic_print_str)
+ pw.dlog(generic_print_str)
if object_id.as_bytes == IMTQ_HANDLER_ID:
return handle_imtq_replies(action_id, printer, custom_data)
elif object_id.as_bytes == PLOC_MPSOC_ID:
@@ -36,6 +37,16 @@ def handle_action_reply(
return handle_supervisor_replies(action_id, printer, custom_data)
elif object_id.as_bytes == STAR_TRACKER_ID:
return handle_startracker_replies(action_id, printer, custom_data)
+ elif object_id.as_bytes in [
+ ACU_HANDLER_ID,
+ PDU_1_HANDLER_ID,
+ PDU_2_HANDLER_ID,
+ P60_DOCK_HANDLER,
+ ]:
+ return handle_get_param_data_reply(action_id, pw, custom_data)
+ else:
+ pw.dlog(f"No dedicated action reply handler found for reply from {object_id}")
+ pw.dlog(f"Raw Data: {tm_packet.custom_data.hex(sep=',')}")
def handle_imtq_replies(
@@ -88,7 +99,6 @@ def handle_ploc_replies(
def handle_supervisor_replies(
action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray
):
- reply = DataReplyUnpacked()
if action_id == SupvActionIds.DUMP_MRAM:
header_list = ["MRAM Dump"]
content_list = [custom_data[: len(custom_data)]]
diff --git a/pus_tm/defs.py b/pus_tm/defs.py
index 218e2d0..e5e6d14 100644
--- a/pus_tm/defs.py
+++ b/pus_tm/defs.py
@@ -1,4 +1,4 @@
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
class PrintWrapper:
diff --git a/pus_tm/devs/bpx_bat.py b/pus_tm/devs/bpx_bat.py
index eb27286..abbe93e 100644
--- a/pus_tm/devs/bpx_bat.py
+++ b/pus_tm/devs/bpx_bat.py
@@ -2,7 +2,7 @@ import struct
from pus_tc.devs.bpx_batt import BpxSetIds
from pus_tm.defs import PrintWrapper
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
def handle_bpx_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
diff --git a/pus_tm/devs/gps.py b/pus_tm/devs/gps.py
index d60828d..0f421cb 100644
--- a/pus_tm/devs/gps.py
+++ b/pus_tm/devs/gps.py
@@ -1,59 +1,39 @@
-import os
import struct
-from datetime import datetime
from pus_tm.defs import PrintWrapper
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
def handle_gps_data(printer: FsfwTmTcPrinter, hk_data: bytes):
pw = PrintWrapper(printer)
pw.dlog(f"Received GPS data, HK data length {len(hk_data)}")
- var_index = 0
- header_list = [
- "Latitude",
- "Longitude",
- "Altitude",
- "Fix Mode",
- "Sats in Use",
- "Date",
- "Unix Seconds",
- ]
- latitude = struct.unpack("!d", hk_data[0:8])[0]
- longitude = struct.unpack("!d", hk_data[8:16])[0]
- altitude = struct.unpack("!d", hk_data[16:24])[0]
- fix_mode = hk_data[24]
- sat_in_use = hk_data[25]
- year = struct.unpack("!H", hk_data[26:28])[0]
- month = hk_data[28]
- day = hk_data[29]
- hours = hk_data[30]
- minutes = hk_data[31]
- seconds = hk_data[32]
- date_string = f"{day}.{month}.{year} {hours}:{minutes}:{seconds}"
- unix_seconds = struct.unpack("!I", hk_data[33:37])[0]
- content_list = [
- latitude,
- longitude,
- altitude,
- fix_mode,
- sat_in_use,
- date_string,
+ current_idx = 0
+ fmt_str = "!ddddBBBHBBBBBI"
+ inc_len = struct.calcsize(fmt_str)
+ (
+ lat,
+ long,
+ alt,
+ speed,
+ fix,
+ sats_in_use,
+ sats_in_view,
+ year,
+ month,
+ day,
+ hours,
+ minutes,
+ seconds,
unix_seconds,
- ]
- var_index += 13
- if not os.path.isfile("gps_log.txt"):
- with open("gps_log.txt", "w") as gps_file:
- gps_file.write(
- "Time, Latitude [deg], Longitude [deg], Altitude [m], Fix Mode, Sats in Use, "
- "Date, Unix Seconds\n"
- )
- with open("gps_log.txt", "a") as gps_file:
- gps_file.write(
- f"{datetime.now()}, {latitude}, {longitude}, {altitude}, "
- f"{fix_mode}, {sat_in_use}, {date_string}, {unix_seconds}\n"
- )
- validity_buffer = hk_data[37:39]
- pw.dlog(str(header_list))
- pw.dlog(str(content_list))
- printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=10)
+ ) = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
+ current_idx += inc_len
+ date_string = f"{day}.{month}.{year} {hours}:{minutes}:{seconds}"
+ pw.dlog(f"Lat: {lat} deg")
+ pw.dlog(f"Long: {long} deg")
+ pw.dlog(f"Altitude: {alt} m | Speed: {speed} m/s")
+ pw.dlog(
+ f"Fix Type: {fix} | Sats in View {sats_in_view} | Sats in Use {sats_in_use}"
+ )
+ pw.dlog(f"GNSS Date: {date_string}")
+ pw.dlog(f"Unix seconds {unix_seconds}")
+ printer.print_validity_buffer(validity_buffer=hk_data[current_idx:], num_vars=14)
diff --git a/pus_tm/devs/gyros.py b/pus_tm/devs/gyros.py
index ff56abf..bebfcda 100644
--- a/pus_tm/devs/gyros.py
+++ b/pus_tm/devs/gyros.py
@@ -1,15 +1,15 @@
import struct
from pus_tm.defs import PrintWrapper
-from tmtccmd.utility import ObjectId
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.util import ObjectIdU32
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from pus_tc.devs.gyros import L3gGyroSetIds, AdisGyroSetIds
import config.object_ids as obj_ids
def handle_gyros_hk_data(
- object_id: ObjectId, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
+ object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
if object_id.as_bytes in [
obj_ids.GYRO_0_ADIS_HANDLER_ID,
@@ -28,7 +28,7 @@ def handle_gyros_hk_data(
def handle_adis_gyro_hk(
- object_id: ObjectId, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
+ object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
if set_id == AdisGyroSetIds.CORE_HK:
pw = PrintWrapper(printer)
@@ -58,9 +58,9 @@ def handle_adis_gyro_hk(
def handle_l3g_gyro_hk(
- object_id: ObjectId, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
+ object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
- if set_id == L3gGyroSetIds:
+ if set_id == L3gGyroSetIds.CORE_HK:
pw = PrintWrapper(printer)
fmt_str = "!ffff"
inc_len = struct.calcsize(fmt_str)
@@ -72,4 +72,4 @@ def handle_l3g_gyro_hk(
f"Angular Velocities (degrees per second): X {angVelocX} | "
f"Y {angVelocY} | Z {angVelocZ}"
)
- pw.dlog(f"Temperature {temp} C")
+ pw.dlog(f"Temperature {temp} °C")
diff --git a/pus_tm/devs/imtq_mgt.py b/pus_tm/devs/imtq_mgt.py
index 6a3aae4..347e675 100644
--- a/pus_tm/devs/imtq_mgt.py
+++ b/pus_tm/devs/imtq_mgt.py
@@ -1,7 +1,7 @@
import struct
from pus_tm.defs import PrintWrapper
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
def handle_eng_set(printer: FsfwTmTcPrinter, hk_data: bytes):
diff --git a/pus_tm/devs/mgms.py b/pus_tm/devs/mgms.py
index 0a9db2c..b4cc122 100644
--- a/pus_tm/devs/mgms.py
+++ b/pus_tm/devs/mgms.py
@@ -2,21 +2,29 @@ import struct
from pus_tm.defs import PrintWrapper
from pus_tc.devs.mgms import MgmRm3100SetIds, MgmLis3SetIds
-from tmtccmd.utility import ObjectId
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.util import ObjectIdU32
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
import config.object_ids as obj_ids
def handle_mgm_hk_data(
- object_id: ObjectId, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
+ object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
- if object_id in [obj_ids.MGM_0_LIS3_HANDLER_ID, obj_ids.MGM_2_LIS3_HANDLER_ID]:
+ if object_id.as_bytes in [
+ obj_ids.MGM_0_LIS3_HANDLER_ID,
+ obj_ids.MGM_2_LIS3_HANDLER_ID,
+ ]:
handle_mgm_lis3_hk_data(object_id, printer, set_id, hk_data)
+ elif object_id.as_bytes in [
+ obj_ids.MGM_1_RM3100_HANDLER_ID,
+ obj_ids.MGM_3_RM3100_HANDLER_ID,
+ ]:
+ handle_mgm_rm3100_hk_data(object_id, printer, set_id, hk_data)
pass
def handle_mgm_lis3_hk_data(
- object_id: ObjectId, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
+ object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
if set_id == MgmLis3SetIds.CORE_HK:
pw = PrintWrapper(printer)
@@ -33,7 +41,7 @@ def handle_mgm_lis3_hk_data(
def handle_mgm_rm3100_hk_data(
- object_id: ObjectId, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
+ object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
if set_id == MgmRm3100SetIds.CORE_HK:
pw = PrintWrapper(printer)
diff --git a/pus_tm/devs/plpcdu.py b/pus_tm/devs/plpcdu.py
new file mode 100644
index 0000000..f9ed50a
--- /dev/null
+++ b/pus_tm/devs/plpcdu.py
@@ -0,0 +1,52 @@
+import struct
+
+from pus_tm.defs import PrintWrapper
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
+from pus_tc.devs.plpcdu import SetIds
+
+
+ADC_CHANNELS_NAMED = [
+ "U BAT DIV 6",
+ "U NEG V FB",
+ "I HPA",
+ "U HPA DIV 6",
+ "I MPA",
+ "U MPA DIV 6",
+ "I TX",
+ "U TX DIV 6",
+ "I X8",
+ "U X8 DIV 6",
+ "I DRO",
+ "U DRO DIV 6",
+]
+
+
+def handle_plpcdu_hk(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
+ if set_id == SetIds.ADC:
+ pw = PrintWrapper(printer)
+ current_idx = 0
+ pw.dlog("Received PL PCDU ADC HK data")
+ channels = []
+ ch_print = "Channels Raw (hex): ["
+ for i in range(12):
+ channels.append(
+ struct.unpack("!H", hk_data[current_idx : current_idx + 2])[0]
+ )
+ if i < 11:
+ ch_print += f"{channels[i]:06x},"
+ else:
+ ch_print += f"{channels[i]:06x}]"
+ current_idx += 2
+ processed_vals = []
+ for i in range(12):
+ processed_vals.append(
+ struct.unpack("!f", hk_data[current_idx : current_idx + 4])[0]
+ )
+ current_idx += 4
+ temp = struct.unpack("!f", hk_data[current_idx : current_idx + 4])[0]
+ current_idx += 4
+ pw.dlog(f"Temperature: {temp} C")
+ pw.dlog(ch_print)
+ for i in range(12):
+ pw.dlog(f"{ADC_CHANNELS_NAMED[i].ljust(24)} | {processed_vals[i]}")
+ printer.print_validity_buffer(validity_buffer=hk_data[current_idx:], num_vars=3)
diff --git a/pus_tm/devs/rad_sensor.py b/pus_tm/devs/rad_sensor.py
index de0e65d..a2673ff 100644
--- a/pus_tm/devs/rad_sensor.py
+++ b/pus_tm/devs/rad_sensor.py
@@ -1,7 +1,7 @@
import struct
from pus_tm.defs import PrintWrapper
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from pus_tc.devs.rad_sensor import SetIds
diff --git a/pus_tm/devs/reaction_wheels.py b/pus_tm/devs/reaction_wheels.py
index e1e1c28..6e072f5 100644
--- a/pus_tm/devs/reaction_wheels.py
+++ b/pus_tm/devs/reaction_wheels.py
@@ -1,11 +1,11 @@
import struct
from pus_tm.defs import PrintWrapper, FsfwTmTcPrinter
-from tmtccmd.utility.obj_id import ObjectId
+from tmtccmd.util.obj_id import ObjectIdU32
def handle_rw_hk_data(
- printer: FsfwTmTcPrinter, object_id: ObjectId, set_id: int, hk_data: bytes
+ printer: FsfwTmTcPrinter, object_id: ObjectIdU32, set_id: int, hk_data: bytes
):
from pus_tc.devs.reaction_wheels import RwSetIds
diff --git a/pus_tm/devs/sus.py b/pus_tm/devs/sus.py
index 62a11ce..f733954 100644
--- a/pus_tm/devs/sus.py
+++ b/pus_tm/devs/sus.py
@@ -2,12 +2,12 @@ import struct
from pus_tm.defs import PrintWrapper
from pus_tc.devs.sus import SetIds
-from tmtccmd.utility import ObjectId
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.util import ObjectIdU32
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
def handle_sus_hk(
- object_id: ObjectId, hk_data: bytes, printer: FsfwTmTcPrinter, set_id: int
+ object_id: ObjectIdU32, hk_data: bytes, printer: FsfwTmTcPrinter, set_id: int
):
pw = PrintWrapper(printer)
pw.dlog(f"Received SUS HK data from {object_id}")
@@ -22,5 +22,5 @@ def handle_sus_hk(
pw.dlog(f"Temperature: {temperature} C")
pw.dlog(f"AIN Channel | Raw Value (hex) | Raw Value (dec)")
for idx, val in enumerate(channels):
- pw.dlog(f"{idx} | {val:#06x} | {str(val).ljust(5)}")
+ pw.dlog(f"{idx} | {val[0]:#06x} |" + str(val[0]).ljust(5))
printer.print_validity_buffer(validity_buffer=hk_data[current_idx:], num_vars=7)
diff --git a/pus_tm/devs/syrlinks.py b/pus_tm/devs/syrlinks.py
index 3c82f7a..f0c9b58 100644
--- a/pus_tm/devs/syrlinks.py
+++ b/pus_tm/devs/syrlinks.py
@@ -2,7 +2,7 @@ import struct
from pus_tm.defs import PrintWrapper
from pus_tc.devs.syrlinks_hk_handler import SetIds
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
def handle_syrlinks_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
diff --git a/pus_tm/event_handler.py b/pus_tm/event_handler.py
index 9d0426d..e7315cb 100644
--- a/pus_tm/event_handler.py
+++ b/pus_tm/event_handler.py
@@ -2,10 +2,11 @@ import logging
import os.path
from datetime import datetime
from config.object_ids import get_object_ids
+from pus_tm.defs import PrintWrapper
from tmtccmd.tm import Service5Tm
from tmtccmd.logging import get_console_logger
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from tmtccmd.fsfw import parse_fsfw_events_csv, EventDictT, EventInfo
@@ -25,12 +26,9 @@ def get_event_dict() -> EventDictT:
return __EVENT_DICT
-def handle_event_packet(
- raw_tm: bytes, printer: FsfwTmTcPrinter, file_logger: logging.Logger
-) -> str:
+def handle_event_packet(raw_tm: bytes, printer: FsfwTmTcPrinter):
+ pw = PrintWrapper(printer)
tm = Service5Tm.unpack(raw_telemetry=raw_tm)
- printer.handle_long_tm_print(packet_if=tm, info_if=tm)
- additional_event_info = ""
event_dict = get_event_dict()
info = event_dict.get(tm.event_id)
if info is None:
@@ -40,22 +38,32 @@ def handle_event_packet(
obj_ids = get_object_ids()
obj_id_obj = obj_ids.get(tm.reporter_id.as_bytes)
if obj_id_obj is None:
- LOGGER.warning(f"Object ID 0x{tm.reporter_id.as_string} has no name")
- obj_name = tm.reporter_id.as_string
+ LOGGER.warning(f"Object ID 0x{tm.reporter_id.as_hex_string} has no name")
+ obj_name = tm.reporter_id.as_hex_string
else:
obj_name = obj_id_obj.name
generic_event_string = (
f"Object {obj_name} generated Event {tm.event_id} | {info.name}"
)
- if info.info != "":
- additional_event_info = (
- f"Additional info: {info.info} | P1: {tm.param_1} | P2: {tm.param_2}"
- )
- file_logger.info(
+ pw.printer.file_logger.info(
f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}: {generic_event_string}"
)
LOGGER.info(generic_event_string)
- if additional_event_info != "":
- file_logger.info(additional_event_info)
- print(additional_event_info)
- return generic_event_string + " | " + additional_event_info
+ specific_handler = True
+ if info.name == "SUPV_UPDATE_PROGRESS" or info.name == "WRITE_MEMORY_FAILED":
+ additional_event_info = f"Additional info: {info.info}"
+ context = (
+ f"Progress Percent: {tm.param_1 >> 24 & 0xff} | Sequence Count: {tm.param_1 & 0xffff} "
+ f"| Bytes Written: {tm.param_2}"
+ )
+ pw.dlog(additional_event_info)
+ pw.dlog(context)
+ else:
+ specific_handler = False
+ if info.info != "":
+ additional_event_info = (
+ f"Additional info: {info.info} | P1: {tm.param_1} | P2: {tm.param_2}"
+ )
+ pw.dlog(additional_event_info)
+ if not specific_handler:
+ printer.handle_long_tm_print(packet_if=tm, info_if=tm)
diff --git a/pus_tm/factory_hook.py b/pus_tm/factory_hook.py
index 8bd8fe1..a62b9d4 100644
--- a/pus_tm/factory_hook.py
+++ b/pus_tm/factory_hook.py
@@ -1,84 +1,65 @@
"""Core EIVE TM handler module
"""
-from spacepackets.ecss.tm import PusTelemetry
-from tmtccmd.logging import get_console_logger
-from tmtccmd.logging.pus import (
- log_raw_pus_tm,
- log_raw_unknown_packet,
- PacketTypes,
- create_tmtc_logger,
-)
-
-from tmtccmd.tm.pus_17_test import Service17TMExtended
-from tmtccmd.tm.pus_20_fsfw_parameters import Service20FsfwTm
-from tmtccmd.tm.pus_200_fsfw_modes import Service200FsfwTm
-from tmtccmd.utility.tmtc_printer import PrintFormats, FsfwTmTcPrinter
-
-from config.definitions import PUS_APID
from config.object_ids import get_object_ids
+from spacepackets.ecss import PusTelemetry
+from spacepackets.ecss.pus_17_test import Service17Tm
+from spacepackets.util import PrintFormats
+from tmtccmd import get_console_logger
+from tmtccmd.logging.pus import RawTmtcTimedLogWrapper
+from tmtccmd.pus import VerificationWrapper
+from tmtccmd.tm import Service20FsfwTm, Service200FsfwTm
+from tmtccmd.tm.pus_17_test import Service17TmExtended
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from .event_handler import handle_event_packet
-from .verification_handler import handle_service_1_packet
+from .verification_handler import handle_service_1_fsfw_packet
from .hk_handling import handle_hk_packet
from .action_reply_handler import handle_action_reply
LOGGER = get_console_logger()
-FSFW_PRINTER = FsfwTmTcPrinter(file_logger=create_tmtc_logger())
-
-
-def ccsds_tm_handler(apid: int, raw_tm_packet: bytes, _user_args: any) -> None:
- if apid == PUS_APID:
- pus_factory_hook(raw_tm_packet=raw_tm_packet)
-
-
-def pus_factory_hook(raw_tm_packet: bytes):
- if len(raw_tm_packet) < 8:
+def pus_factory_hook(
+ packet: bytes,
+ verif_wrapper: VerificationWrapper,
+ printer: FsfwTmTcPrinter,
+ raw_logger: RawTmtcTimedLogWrapper,
+):
+ if len(packet) < 8:
LOGGER.warning("Detected packet shorter than 8 bytes!")
return
- service_type = raw_tm_packet[7]
- subservice_type = raw_tm_packet[8]
- file_logger = FSFW_PRINTER.file_logger
+ try:
+ tm_packet = PusTelemetry.unpack(packet)
+ except ValueError:
+ LOGGER.warning("Could not generate PUS TM object from raw data")
+ LOGGER.warning(f"Raw Packet: [{packet.hex(sep=',')}], REPR: {packet!r}")
+ return
+ service = tm_packet.service
obj_id_dict = get_object_ids()
dedicated_handler = True
- try:
- tm_packet = None
- if service_type == 1:
- handle_service_1_packet(printer=FSFW_PRINTER, raw_tm=raw_tm_packet)
- elif service_type == 3:
- handle_hk_packet(
- printer=FSFW_PRINTER, raw_tm=raw_tm_packet, obj_id_dict=obj_id_dict
- )
- elif service_type == 5:
- handle_event_packet(
- raw_tm=raw_tm_packet, printer=FSFW_PRINTER, file_logger=file_logger
- )
- elif service_type == 8:
- handle_action_reply(
- raw_tm=raw_tm_packet, printer=FSFW_PRINTER, obj_id_dict=obj_id_dict
- )
- elif service_type == 17:
- tm_packet = Service17TMExtended.unpack(raw_telemetry=raw_tm_packet)
- dedicated_handler = False
- elif service_type == 20:
- tm_packet = Service20FsfwTm.unpack(raw_telemetry=raw_tm_packet)
- dedicated_handler = False
- elif service_type == 200:
- tm_packet = Service200FsfwTm.unpack(raw_telemetry=raw_tm_packet)
- dedicated_handler = False
- else:
- LOGGER.info(
- f"The service {service_type} is not implemented in Telemetry Factory"
- )
- tm_packet = PusTelemetry.unpack(raw_telemetry=raw_tm_packet)
- tm_packet.print_source_data(PrintFormats.HEX)
- dedicated_handler = True
- if not dedicated_handler and tm_packet is not None:
- FSFW_PRINTER.handle_long_tm_print(packet_if=tm_packet, info_if=tm_packet)
- log_raw_pus_tm(
- packet=raw_tm_packet, srv_subservice=(service_type, subservice_type)
- )
- except ValueError:
- LOGGER.warning("Invalid packet format detected")
- log_raw_unknown_packet(packet=raw_tm_packet, packet_type=PacketTypes.TM)
+ if service == 1:
+ handle_service_1_fsfw_packet(wrapper=verif_wrapper, raw_tm=packet)
+ elif service == 3:
+ handle_hk_packet(printer=printer, raw_tm=packet, obj_id_dict=obj_id_dict)
+ elif service == 5:
+ handle_event_packet(raw_tm=packet, printer=printer)
+ elif service == 8:
+ handle_action_reply(raw_tm=packet, printer=printer, obj_id_dict=obj_id_dict)
+ elif service == 17:
+ tm_packet = Service17Tm.unpack(raw_telemetry=packet)
+ if tm_packet.subservice == 2:
+ verif_wrapper.dlog("Received Ping Reply TM[17,2]")
+ dedicated_handler = True
+ elif service == 20:
+ tm_packet = Service20FsfwTm.unpack(raw_telemetry=packet)
+ dedicated_handler = False
+ elif service == 200:
+ tm_packet = Service200FsfwTm.unpack(raw_telemetry=packet)
+ dedicated_handler = False
+ else:
+ LOGGER.info(f"The service {service} is not implemented in Telemetry Factory")
+ tm_packet.print_source_data(PrintFormats.HEX)
+ dedicated_handler = True
+ if not dedicated_handler and tm_packet is not None:
+ printer.handle_long_tm_print(packet_if=tm_packet, info_if=tm_packet)
+ raw_logger.log_tm(tm_packet)
diff --git a/pus_tm/hk_handling.py b/pus_tm/hk_handling.py
index 75f3739..395f274 100644
--- a/pus_tm/hk_handling.py
+++ b/pus_tm/hk_handling.py
@@ -1,16 +1,17 @@
"""HK Handling for EIVE OBSW"""
-import struct
-
+from pus_tm.tcp_server_objects import tcp_server_sensor_temperatures
+from tmtc.acs_ctrl import handle_acs_ctrl_mgm_data
+from pus_tm.devs.plpcdu import handle_plpcdu_hk
from pus_tm.devs.rad_sensor import handle_rad_sensor_data
from pus_tm.devs.sus import handle_sus_hk
-from pus_tm.system.tcs import handle_thermal_controller_hk_data, TM_TCP_SERVER
-from tmtccmd.config.definitions import HkReplyUnpacked
+from pus_tm.system.tcs import handle_thermal_controller_hk_data
+from tmtc.ploc_supervisor import handle_supv_hk_data
from tmtccmd.tm.pus_3_fsfw_hk import (
Service3Base,
HkContentType,
Service3FsfwTm,
)
-from tmtccmd.utility.obj_id import ObjectId, ObjectIdDictT
+from tmtccmd.util.obj_id import ObjectIdU32, ObjectIdDictT
from tmtccmd.logging import get_console_logger
from pus_tm.devs.bpx_bat import handle_bpx_hk_data
@@ -22,11 +23,11 @@ from pus_tm.devs.imtq_mgt import (
handle_calibrated_mtm_measurement,
handle_raw_mtm_measurement,
)
-from pus_tm.devs.pcdu import handle_pdu_data, handle_p60_hk_data, handle_acu_hk_data
+from pus_tm.system.power import handle_pdu_data, handle_p60_hk_data, handle_acu_hk_data
from pus_tm.devs.syrlinks import handle_syrlinks_hk_data
from pus_tc.devs.imtq import ImtqSetIds
from pus_tm.devs.reaction_wheels import handle_rw_hk_data
-from pus_tm.defs import FsfwTmTcPrinter, log_to_both
+from pus_tm.defs import FsfwTmTcPrinter
from pus_tm.system.core import handle_core_hk_data
from pus_tm.devs.mgms import handle_mgm_hk_data
import config.object_ids as obj_ids
@@ -35,6 +36,9 @@ import config.object_ids as obj_ids
LOGGER = get_console_logger()
+FORWARD_SENSOR_TEMPS = False
+
+
def handle_hk_packet(
raw_tm: bytes,
obj_id_dict: ObjectIdDictT,
@@ -46,9 +50,10 @@ def handle_hk_packet(
named_obj_id = tm_packet.object_id
if tm_packet.subservice == 25 or tm_packet.subservice == 26:
hk_data = tm_packet.tm_data[8:]
- TM_TCP_SERVER.report_raw_hk_data(
- object_id=named_obj_id, set_id=tm_packet.set_id, hk_data=hk_data
- )
+ if FORWARD_SENSOR_TEMPS:
+ tcp_server_sensor_temperatures.report_raw_hk_data(
+ object_id=named_obj_id, set_id=tm_packet.set_id, hk_data=hk_data
+ )
printer.generic_hk_tm_print(
content_type=HkContentType.HK,
object_id=named_obj_id,
@@ -72,18 +77,18 @@ def handle_hk_packet(
def handle_regular_hk_print(
printer: FsfwTmTcPrinter,
- object_id: ObjectId,
+ object_id: ObjectIdU32,
hk_packet: Service3Base,
hk_data: bytes,
):
objb = 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 in [obj_ids.RW1_ID, obj_ids.RW2_ID, obj_ids.RW3_ID, obj_ids.RW4_ID]:
+ if objb in [obj_ids.RW1_ID, obj_ids.RW2_ID, obj_ids.RW3_ID, obj_ids.RW4_ID]:
handle_rw_hk_data(printer, object_id, set_id, hk_data)
- if objb == obj_ids.SYRLINKS_HANDLER_ID:
+ elif objb == obj_ids.SYRLINKS_HANDLER_ID:
handle_syrlinks_hk_data(printer=printer, hk_data=hk_data, set_id=set_id)
- if objb == obj_ids.IMTQ_HANDLER_ID:
+ elif objb == obj_ids.IMTQ_HANDLER_ID:
if (set_id >= ImtqSetIds.POSITIVE_X_TEST) and (
set_id <= ImtqSetIds.NEGATIVE_Z_TEST
):
@@ -96,25 +101,25 @@ def handle_regular_hk_print(
return handle_raw_mtm_measurement(printer, hk_data)
else:
LOGGER.info("Service 3 TM: IMTQ handler reply with unknown set id")
- if objb == obj_ids.GPS_CONTROLLER or object_id == obj_ids.GPS_HANDLER_1_ID:
- handle_gps_data(printer=printer, hk_data=hk_data)
- if objb == obj_ids.BPX_HANDLER_ID:
+ elif objb == obj_ids.GPS_CONTROLLER:
+ return handle_gps_data(printer=printer, hk_data=hk_data)
+ elif objb == obj_ids.BPX_HANDLER_ID:
handle_bpx_hk_data(hk_data=hk_data, set_id=set_id, printer=printer)
- if objb == obj_ids.CORE_CONTROLLER_ID:
+ elif objb == obj_ids.CORE_CONTROLLER_ID:
return handle_core_hk_data(printer=printer, hk_data=hk_data, set_id=set_id)
- if objb == obj_ids.PDU_1_HANDLER_ID:
+ elif objb == obj_ids.PDU_1_HANDLER_ID:
return handle_pdu_data(
printer=printer, pdu_idx=1, set_id=set_id, hk_data=hk_data
)
- if objb == obj_ids.PDU_2_HANDLER_ID:
+ elif objb == obj_ids.PDU_2_HANDLER_ID:
return handle_pdu_data(
printer=printer, pdu_idx=2, set_id=set_id, hk_data=hk_data
)
- if objb == obj_ids.ACU_HANDLER_ID:
+ elif objb == obj_ids.ACU_HANDLER_ID:
return handle_acu_hk_data(printer=printer, hk_data=hk_data, set_id=set_id)
- if objb == obj_ids.RAD_SENSOR_ID:
+ elif objb == obj_ids.RAD_SENSOR_ID:
return handle_rad_sensor_data(printer=printer, hk_data=hk_data, set_id=set_id)
- if objb in [obj_ids.RW1_ID, obj_ids.RW2_ID, obj_ids.RW3_ID, obj_ids.RW4_ID]:
+ elif objb in [obj_ids.RW1_ID, obj_ids.RW2_ID, obj_ids.RW3_ID, obj_ids.RW4_ID]:
return handle_rw_hk_data(
printer=printer, object_id=object_id, set_id=set_id, hk_data=hk_data
)
@@ -135,9 +140,9 @@ def handle_regular_hk_print(
handle_sus_hk(
object_id=object_id, hk_data=hk_data, printer=printer, set_id=set_id
)
- if objb == obj_ids.P60_DOCK_HANDLER:
+ elif objb == obj_ids.P60_DOCK_HANDLER:
handle_p60_hk_data(printer=printer, set_id=set_id, hk_data=hk_data)
- if objb in [
+ elif objb in [
obj_ids.GYRO_0_ADIS_HANDLER_ID,
obj_ids.GYRO_1_L3G_HANDLER_ID,
obj_ids.GYRO_2_ADIS_HANDLER_ID,
@@ -146,7 +151,7 @@ def handle_regular_hk_print(
handle_gyros_hk_data(
object_id=object_id, hk_data=hk_data, printer=printer, set_id=set_id
)
- if objb in [
+ elif objb in [
obj_ids.MGM_0_LIS3_HANDLER_ID,
obj_ids.MGM_1_RM3100_HANDLER_ID,
obj_ids.MGM_2_LIS3_HANDLER_ID,
@@ -155,11 +160,18 @@ def handle_regular_hk_print(
handle_mgm_hk_data(
object_id=object_id, hk_data=hk_data, printer=printer, set_id=set_id
)
- if objb == obj_ids.PL_PCDU_ID:
- log_to_both(printer, "Received PL PCDU HK data")
- if objb == obj_ids.THERMAL_CONTROLLER_ID:
+ elif objb == obj_ids.PL_PCDU_ID:
+ handle_plpcdu_hk(set_id=set_id, hk_data=hk_data, printer=printer)
+ elif objb == obj_ids.THERMAL_CONTROLLER_ID:
handle_thermal_controller_hk_data(
object_id=object_id, printer=printer, set_id=set_id, hk_data=hk_data
)
+ elif objb == obj_ids.PLOC_SUPV_ID:
+ handle_supv_hk_data(set_id=set_id, hk_data=hk_data, printer=printer)
+ elif objb == obj_ids.ACS_CONTROLLER:
+ handle_acs_ctrl_mgm_data(printer, hk_data)
else:
- LOGGER.info("Service 3 TM: Parsing for this SID has not been implemented.")
+ LOGGER.info(
+ f"Service 3 TM: Parsing for object {object_id} and set ID {set_id} "
+ f"has not been implemented."
+ )
diff --git a/pus_tm/system/core.py b/pus_tm/system/core.py
index 883d044..f4e65a3 100644
--- a/pus_tm/system/core.py
+++ b/pus_tm/system/core.py
@@ -2,7 +2,7 @@ import struct
from pus_tm.defs import PrintWrapper
from pus_tc.system.core import SetIds
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
def handle_core_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
diff --git a/pus_tm/devs/pcdu.py b/pus_tm/system/power.py
similarity index 99%
rename from pus_tm/devs/pcdu.py
rename to pus_tm/system/power.py
index ca39a75..dd5f8e4 100644
--- a/pus_tm/devs/pcdu.py
+++ b/pus_tm/system/power.py
@@ -1,7 +1,7 @@
import struct
from typing import List, Tuple
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from pus_tm.defs import PrintWrapper
from gomspace.gomspace_common import SetIds
@@ -202,14 +202,14 @@ def handle_pdu_data(
f"{voltage_list[idx]:05} | {current_list[idx]:04}"
)
pw.dlog(content_line)
- fmt_str = "!IBh"
+ fmt_str = "!IBf"
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}"
+ f"Temperature {temperature}"
)
pw.dlog(info)
diff --git a/pus_tm/system/tcs.py b/pus_tm/system/tcs.py
index 867347c..c886c0e 100644
--- a/pus_tm/system/tcs.py
+++ b/pus_tm/system/tcs.py
@@ -1,41 +1,116 @@
+import enum
import struct
from pus_tm.defs import PrintWrapper
+from pus_tm.tcp_server_objects import (
+ tcp_server_sensor_temperatures,
+ tcp_server_device_temperatures,
+)
from pus_tm.tm_tcp_server import TmTcpServer
-from tmtccmd.utility import ObjectId
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.util import ObjectIdU32
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
-TM_TCP_SERVER = TmTcpServer.getInstance()
+class SetIds(enum.IntEnum):
+ SENSOR_TEMPERATURE_SET = 0
+ DEVICE_TEMPERATURE_SET = 1
+ SUS_TEMPERATURE_SET = 2
def handle_thermal_controller_hk_data(
- object_id: ObjectId, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
+ object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
- if set_id == 0:
+ if tcp_server_sensor_temperatures is None:
+ tcp_server_sensor_temperatures = TmTcpServer("localhost", 7305)
+ if tcp_server_device_temperatures is None:
+ tcp_server_device_temperatures = TmTcpServer("localhost", 7306)
+ if set_id == SetIds.SENSOR_TEMPERATURE_SET:
pw = PrintWrapper(printer)
- pw.dlog("Received Sensor Temperature data")
+ pw.dlog("Received sensor temperature data")
# get all the floats
- tm_data = struct.unpack("!ffffffffffffffff", hk_data[: 16 * 4])
- parsed_data = {}
-
- # put them into an nice dictionary
- parsed_data["SENSOR_PLOC_HEATSPREADER"] = tm_data[0]
- parsed_data["SENSOR_PLOC_MISSIONBOARD"] = tm_data[1]
- parsed_data["SENSOR_4K_CAMERA"] = tm_data[2]
- parsed_data["SENSOR_DAC_HEATSPREADER"] = tm_data[3]
- parsed_data["SENSOR_STARTRACKER"] = tm_data[4]
- parsed_data["SENSOR_RW1"] = tm_data[5]
- parsed_data["SENSOR_DRO"] = tm_data[6]
- parsed_data["SENSOR_SCEX"] = tm_data[7]
- parsed_data["SENSOR_X8"] = tm_data[8]
- parsed_data["SENSOR_HPA"] = tm_data[9]
- parsed_data["SENSOR_TX_MODUL"] = tm_data[10]
- parsed_data["SENSOR_MPA"] = tm_data[11]
- parsed_data["SENSOR_ACU"] = tm_data[12]
- parsed_data["SENSOR_PLPCDU_HEATSPREADER"] = tm_data[13]
- parsed_data["SENSOR_TCS_BOARD"] = tm_data[14]
- parsed_data["SENSOR_MAGNETTORQUER"] = tm_data[15]
-
- TM_TCP_SERVER.report_parsed_hk_data(object_id, set_id, parsed_data)
+ tm_data = struct.unpack("!ffffffffffffffffff", hk_data[: 18 * 4])
+ parsed_data = {
+ "SENSOR_PLOC_HEATSPREADER": tm_data[0],
+ "SENSOR_PLOC_MISSIONBOARD": tm_data[1],
+ "SENSOR_4K_CAMERA": tm_data[2],
+ "SENSOR_DAC_HEATSPREADER": tm_data[3],
+ "SENSOR_STARTRACKER": tm_data[4],
+ "SENSOR_RW1": tm_data[5],
+ "SENSOR_DRO": tm_data[6],
+ "SENSOR_SCEX": tm_data[7],
+ "SENSOR_X8": tm_data[8],
+ "SENSOR_HPA": tm_data[9],
+ "SENSOR_TX_MODUL": tm_data[10],
+ "SENSOR_MPA": tm_data[11],
+ "SENSOR_ACU": tm_data[12],
+ "SENSOR_PLPCDU_HEATSPREADER": tm_data[13],
+ "SENSOR_TCS_BOARD": tm_data[14],
+ "SENSOR_MAGNETTORQUER": tm_data[15],
+ "TMP1075 1": tm_data[16],
+ "TMP1075 2": tm_data[17],
+ }
+ printer.file_logger.info(str(parsed_data))
+ tcp_server_sensor_temperatures.report_parsed_hk_data(
+ object_id, set_id, parsed_data
+ )
+ elif set_id == SetIds.DEVICE_TEMPERATURE_SET:
+ pw = PrintWrapper(printer)
+ pw.dlog("Received device temperature data")
+ fmt_str = "!fhhhhiiiifffhffffffffffffff"
+ tm_data = struct.unpack(fmt_str, hk_data[:98])
+ parsed_data = {
+ "Q7S_TEMPERATURE": tm_data[0],
+ "BATTERY_TEMPERATURE_1": tm_data[1],
+ "BATTERY_TEMPERATURE_2": tm_data[2],
+ "BATTERY_TEMPERATURE_3": tm_data[3],
+ "BATTERY_TEMPERATURE_4": tm_data[4],
+ "RW_1_TEMPERATURE": tm_data[5],
+ "RW_2_TEMPERATURE": tm_data[6],
+ "RW_3_TEMPERATURE": tm_data[7],
+ "RW_4_TEMPERATURE": tm_data[8],
+ "STARTRACKER_TEMPERATURE": tm_data[9],
+ "SYRLINKS_POWER_AMPLIFIER_TEMPERATURE": tm_data[10],
+ "SYRLINKS_BASEBAND_BOARD_TEMPERATURE": tm_data[11],
+ "MGT_TEMPERATURE": tm_data[12],
+ "ACU_TEMPERATURE_1": tm_data[13],
+ "ACU_TEMPERATURE_2": tm_data[14],
+ "ACU_TEMPERATURE_3": tm_data[15],
+ "PDU1_TEMPERATURE": tm_data[16],
+ "PDU2_TEMPERATURE": tm_data[17],
+ "P60DOCK_TEMPERATURE_1": tm_data[18],
+ "P60DOCK_TEMPERATURE_2": tm_data[19],
+ "GYRO_0_TEMPERATURE": tm_data[20],
+ "GYRO_1_TEMPERATURE": tm_data[21],
+ "GYRO_2_TEMPERATURE": tm_data[22],
+ "GYRO_3_TEMPERATURE": tm_data[23],
+ "MGM_0_TEMPERATURE": tm_data[24],
+ "MGM_1_TEMPERATURE": tm_data[25],
+ "ADC_PL_PCDU_TEMPERATURE": tm_data[26],
+ }
+ # print(parsed_data)
+ tcp_server_device_temperatures.report_parsed_hk_data(
+ object_id, set_id, parsed_data
+ )
+ elif set_id == SetIds.SUS_TEMPERATURE_SET:
+ pass
+ # pw = PrintWrapper(printer)
+ # pw.dlog("Received SUS temperature data")
+ # fmt_str = "!ffffffffffffffffff"
+ # tm_data = struct.unpack(fmt_str, hk_data[:4 * 18])
+ # parsed_data = {
+ # "SUS_0": tm_data[0],
+ # "SUS_1": tm_data[1],
+ # "SUS_2": tm_data[2],
+ # "SUS_3": tm_data[3],
+ # "SUS_4": tm_data[4],
+ # "SUS_5": tm_data[5],
+ # "SUS_6": tm_data[6],
+ # "SUS_7": tm_data[7],
+ # "SUS_8": tm_data[8],
+ # "SUS_9": tm_data[9],
+ # "SUS_10": tm_data[10],
+ # "SUS_11": tm_data[11],
+ # }
+ # print(parsed_data)
+ # TODO: Forward data to space simulator
diff --git a/pus_tm/tcp_server_objects.py b/pus_tm/tcp_server_objects.py
new file mode 100644
index 0000000..3378511
--- /dev/null
+++ b/pus_tm/tcp_server_objects.py
@@ -0,0 +1,6 @@
+from typing import Optional
+
+from pus_tm.tm_tcp_server import TmTcpServer
+
+tcp_server_sensor_temperatures: Optional[TmTcpServer] = None
+tcp_server_device_temperatures: Optional[TmTcpServer] = None
diff --git a/pus_tm/tm_tcp_server.py b/pus_tm/tm_tcp_server.py
index f6d0e88..f2a7e02 100644
--- a/pus_tm/tm_tcp_server.py
+++ b/pus_tm/tm_tcp_server.py
@@ -4,25 +4,18 @@ import json
import base64
from tmtccmd.logging import get_console_logger
-from tmtccmd.utility.obj_id import ObjectId
+from tmtccmd.util.obj_id import ObjectIdU32
from dle_encoder import DleEncoder
-# TODO add to configuration parameters
-SERVER_HOST = ""
-SERVER_PORT = 7305
-
LOGGER = get_console_logger()
class TmTcpServer:
-
- _Instance = None
-
- def __init__(self):
+ def __init__(self, ip_address: str, port: int):
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- self.server_socket.bind((SERVER_HOST, SERVER_PORT))
+ self.server_socket.bind((ip_address, port))
# for now, only accept one connection
self.server_socket.listen(0)
@@ -41,21 +34,17 @@ class TmTcpServer:
def close(self):
self.server_socket.close()
- if self.client_connection != None:
+ if self.client_connection is not None:
self.client_connection.close()
- def getInstance():
- if TmTcpServer._Instance == None:
- TmTcpServer._Instance = TmTcpServer()
- return TmTcpServer._Instance
-
def _send_dictionary_over_socket(self, dictionary):
# keep listeners current
- if self.client_connection == None:
+ if self.client_connection is None:
# no running connection, see if a client wants to connect
try:
(self.client_connection, _) = self.server_socket.accept()
self.client_connection.setblocking(False)
+ print("Client connected")
except:
# no client waiting
return
@@ -75,23 +64,25 @@ class TmTcpServer:
self.client_connection.close()
self.client_connection = None
- def report_raw_hk_data(self, object_id: ObjectId, set_id: int, hk_data: bytes):
+ def report_raw_hk_data(self, object_id: ObjectIdU32, set_id: int, hk_data: bytes):
data_dict = {
"type": "TM",
"tmType": "Raw HK",
- "objectId": object_id.as_string,
+ "objectId": object_id.as_hex_string,
"setId": set_id,
"rawData": base64.b64encode(hk_data).decode(),
}
self._send_dictionary_over_socket(data_dict)
- def report_parsed_hk_data(self, object_id: ObjectId, set_id: int, data_dictionary):
+ def report_parsed_hk_data(
+ self, object_id: ObjectIdU32, set_id: int, data_dictionary
+ ):
data_dict = {
"type": "TM",
"tmType": "Parsed HK",
- "objectId": object_id.as_string,
+ "objectId": object_id.as_hex_string,
"setId": set_id,
"content": data_dictionary,
}
diff --git a/pus_tm/verification_handler.py b/pus_tm/verification_handler.py
index 08c0099..b3d4a6a 100644
--- a/pus_tm/verification_handler.py
+++ b/pus_tm/verification_handler.py
@@ -1,28 +1,52 @@
-from typing import cast
-
-from tmtccmd.tm.pus_1_verification import Service1TMExtended
+from spacepackets.ecss.pus_1_verification import UnpackParams, Service1Tm
from tmtccmd.logging import get_console_logger
-from tmtccmd.utility.tmtc_printer import FsfwTmTcPrinter
+from tmtccmd.pus import VerificationWrapper
+from tmtccmd.tm.pus_1_verification import Service1FsfwWrapper
from config.retvals import get_retval_dict
LOGGER = get_console_logger()
-def handle_service_1_packet(printer: FsfwTmTcPrinter, raw_tm: bytes):
- tm_packet = Service1TMExtended.unpack(raw_telemetry=raw_tm)
- printer.handle_long_tm_print(packet_if=tm_packet, info_if=tm_packet)
- srv1_packet = cast(Service1TMExtended, tm_packet)
+def handle_service_1_fsfw_packet(wrapper: VerificationWrapper, raw_tm: bytes):
+ if wrapper.console_logger is None or wrapper.file_logger is None:
+ raise ValueError(
+ "Console logger or file logger not valid. Please set a valid one"
+ )
+ # Error code with length 2 is FSFW specific
+ tm_packet = Service1Tm.unpack(data=raw_tm, params=UnpackParams(1, 2))
+ fsfw_wrapper = Service1FsfwWrapper(tm_packet)
+ res = wrapper.verificator.add_tm(tm_packet)
+ if res is None:
+ LOGGER.info(
+ f"Received Verification TM[{tm_packet.service}, {tm_packet.subservice}] "
+ f"with Request ID {tm_packet.tc_req_id.as_u32():#08x}"
+ )
+ LOGGER.warning(f"No matching telecommand found for {tm_packet.tc_req_id}")
+ else:
+ wrapper.log_to_console(tm_packet, res)
+ wrapper.log_to_file(tm_packet, res)
retval_dict = get_retval_dict()
- if srv1_packet.has_tc_error_code:
- retval_info = retval_dict.get(srv1_packet.error_code)
+ if tm_packet.has_failure_notice:
+ retval_info = retval_dict.get(tm_packet.error_code.val)
if retval_info is None:
+ raw_err = tm_packet.error_code.val
LOGGER.info(
- f"No returnvalue information found for error code {srv1_packet.error_code}"
+ f"No returnvalue information found for error code with subsystem ID"
+ f" {(raw_err >> 8) & 0xff} and unique ID {raw_err & 0xff}"
)
else:
retval_string = (
- f"Error Code information for code {srv1_packet.error_code} | "
+ f"Error Code information for code {tm_packet.error_code.val:#06x} | "
f"Name: {retval_info.name} | Info: {retval_info.info}"
)
- LOGGER.info(retval_string)
- printer.file_logger.info(retval_string)
+ error_param_1_str = (
+ f"Error Parameter 1: hex {fsfw_wrapper.error_param_1:#010x} "
+ f"dec {fsfw_wrapper.error_param_1} "
+ )
+ error_param_2_str = (
+ f"Error Parameter 2: hex {fsfw_wrapper.error_param_2:#010x} "
+ f"dec {fsfw_wrapper.error_param_2}"
+ )
+ wrapper.dlog(retval_string)
+ wrapper.dlog(error_param_1_str)
+ wrapper.dlog(error_param_2_str)
diff --git a/spacepackets b/spacepackets
deleted file mode 160000
index 9ee7922..0000000
--- a/spacepackets
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 9ee7922bf7b7a678f8e5ebd5926001defac9a3d4
diff --git a/template/scex_conf.json b/template/scex_conf.json
new file mode 100644
index 0000000..f30d4a2
--- /dev/null
+++ b/template/scex_conf.json
@@ -0,0 +1,9 @@
+{
+ "first_dac": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ "last_dac": [40000, 40000, 40000, 40000, 40000, 40000, 40000, 40000, 40000, 40000],
+ "res_switch1": [8000, 8000, 8000, 7000, 8000, 8000, 8000, 8000, 8000, 8000],
+ "res_switch2": [15650, 15650, 15650, 13400, 15650, 13400, 13400, 13400, 13400, 13400],
+ "dac_weight1": [35, 35, 35, 35, 35, 37, 37, 37, 37, 37],
+ "dac_weight2": [30, 30, 30, 50, 30, 28, 28, 28, 28, 28],
+ "dac_weight3": [35, 35, 35, 35, 35, 35, 35, 35, 35, 35]
+}
\ No newline at end of file
diff --git a/tmtc/__init__.py b/tmtc/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tmtc/acs_ctrl.py b/tmtc/acs_ctrl.py
new file mode 100644
index 0000000..71cc1ba
--- /dev/null
+++ b/tmtc/acs_ctrl.py
@@ -0,0 +1,185 @@
+import enum
+import socket
+import struct
+from socket import AF_INET
+from typing import Tuple, Optional
+
+from config.definitions import CustomServiceList
+from config.object_ids import ACS_CONTROLLER
+from pus_tm.defs import PrintWrapper
+from tmtccmd import get_console_logger
+from tmtccmd.config.tmtc import (
+ tmtc_definitions_provider,
+ TmtcDefinitionWrapper,
+ OpCodeEntry,
+)
+from tmtccmd.tc import service_provider
+from tmtccmd.tc.decorator import ServiceProviderParams
+from tmtccmd.tc.pus_3_fsfw_hk import (
+ generate_one_hk_command,
+ make_sid,
+ enable_periodic_hk_command_with_interval,
+ disable_periodic_hk_command,
+)
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
+
+LOGGER = get_console_logger()
+
+
+class SetIds(enum.IntEnum):
+ MGM_SET = 0
+
+
+class OpCodes:
+ REQUEST_MGM_HK = ["0", "req-mgm-hk"]
+ ENABLE_MGM_HK = ["1", "enable-mgm-hk"]
+ DISABLE_MGM_HK = ["1", "disable-mgm-hk"]
+
+
+class Info:
+ REQUEST_MGM_HK = "Request MGM HK once"
+ ENABLE_MGM_HK = "Enable MGM HK data generation"
+ DISABLE_MGM_HK = "Disable MGM HK data generation"
+
+
+PERFORM_MGM_CALIBRATION = False
+CALIBRATION_SOCKET_HOST = "localhost"
+CALIBRATION_SOCKET_PORT = 6677
+CALIBRATION_ADDR = (CALIBRATION_SOCKET_HOST, CALIBRATION_SOCKET_PORT)
+
+if PERFORM_MGM_CALIBRATION:
+ CALIBR_SOCKET = socket.socket(AF_INET, socket.SOCK_STREAM)
+ CALIBR_SOCKET.setblocking(False)
+ CALIBR_SOCKET.settimeout(0.2)
+ CALIBR_SOCKET.connect(CALIBRATION_ADDR)
+
+
+@tmtc_definitions_provider
+def acs_cmd_defs(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add(keys=OpCodes.REQUEST_MGM_HK, info=Info.REQUEST_MGM_HK)
+ oce.add(keys=OpCodes.ENABLE_MGM_HK, info=Info.ENABLE_MGM_HK)
+ oce.add(keys=OpCodes.DISABLE_MGM_HK, info=Info.DISABLE_MGM_HK)
+ defs.add_service(
+ name=CustomServiceList.ACS_CTRL.value, info="ACS Controller", op_code_entry=oce
+ )
+
+
+@service_provider(CustomServiceList.ACS_CTRL.value)
+def pack_acs_ctrl_command(p: ServiceProviderParams):
+ op_code = p.op_code
+ q = p.queue_helper
+ sid = make_sid(ACS_CONTROLLER, SetIds.MGM_SET)
+ if op_code in OpCodes.REQUEST_MGM_HK:
+ q.add_log_cmd(Info.REQUEST_MGM_HK)
+ q.add_pus_tc(generate_one_hk_command(sid))
+ elif op_code in OpCodes.ENABLE_MGM_HK:
+ q.add_log_cmd(Info.ENABLE_MGM_HK)
+ cmd_tuple = enable_periodic_hk_command_with_interval(False, sid, 2.0)
+ q.add_pus_tc(cmd_tuple[0])
+ q.add_pus_tc(cmd_tuple[1])
+ elif op_code in OpCodes.DISABLE_MGM_HK:
+ q.add_log_cmd(Info.DISABLE_MGM_HK)
+ q.add_pus_tc(disable_periodic_hk_command(False, sid))
+ else:
+ LOGGER.info(f"Unknown op code {op_code}")
+
+
+def handle_acs_ctrl_mgm_data(printer: FsfwTmTcPrinter, hk_data: bytes):
+ current_idx = 0
+ pw = PrintWrapper(printer)
+
+ if len(hk_data) < 61:
+ pw.dlog(
+ f"ACS CTRL HK: MGM HK data with length {len(hk_data)} shorter than expected 61 bytes"
+ )
+ pw.dlog(f"Raw Data: {hk_data.hex(sep=',')}")
+ return
+
+ def unpack_float_tuple(idx: int) -> (tuple, int):
+ f_tuple = struct.unpack(
+ float_tuple_fmt_str,
+ hk_data[idx : idx + struct.calcsize(float_tuple_fmt_str)],
+ )
+ idx += struct.calcsize(float_tuple_fmt_str)
+ return f_tuple, idx
+
+ float_tuple_fmt_str = "!fff"
+ mgm_0_lis3_floats_ut, current_idx = unpack_float_tuple(current_idx)
+ mgm_1_rm3100_floats_ut, current_idx = unpack_float_tuple(current_idx)
+ mgm_2_lis3_floats_ut, current_idx = unpack_float_tuple(current_idx)
+ mgm_3_rm3100_floats_ut, current_idx = unpack_float_tuple(current_idx)
+ isis_floats_nt, current_idx = unpack_float_tuple(current_idx)
+ imtq_mgm_ut = tuple(val / 1000.0 for val in isis_floats_nt)
+ pw.dlog("ACS CTRL HK: MGM values [X,Y,Z] in floating point uT: ")
+ mgm_lists = [
+ mgm_0_lis3_floats_ut,
+ mgm_1_rm3100_floats_ut,
+ mgm_2_lis3_floats_ut,
+ mgm_3_rm3100_floats_ut,
+ imtq_mgm_ut,
+ ]
+ formatted_list = []
+ # Reserve 8 decimal digits, use precision 3
+ float_str_fmt = "[{:8.3f}, {:8.3f}, {:8.3f}]"
+ for mgm_entry in mgm_lists[0:4]:
+ formatted_list.append(float_str_fmt.format(*mgm_entry))
+ formatted_list.append(hk_data[current_idx])
+ formatted_list.append(float_str_fmt.format(*mgm_lists[4]))
+ print_str_list = [
+ "ACS Board MGM 0 LIS3MDL",
+ "ACS Board MGM 1 RM3100",
+ "ACS Board MGM 2 LIS3MDL",
+ "ACS Board MGM 3 RM3100",
+ "IMTQ Actuation Status:",
+ "IMTQ MGM:",
+ ]
+ for entry in zip(print_str_list, formatted_list):
+ pw.dlog(f"{entry[0].ljust(28)}: {entry[1]}")
+ current_idx += 1
+ if PERFORM_MGM_CALIBRATION:
+ perform_mgm_calibration(pw, mgm_0_lis3_floats_ut)
+ assert current_idx == 61
+
+
+def perform_mgm_calibration(pw: PrintWrapper, mgm_tuple: Tuple):
+ global CALIBR_SOCKET, CALIBRATION_ADDR
+ try:
+ declare_api_cmd = "declare_api_version 2"
+ CALIBR_SOCKET.sendall(f"{declare_api_cmd}\n".encode())
+ reply = CALIBR_SOCKET.recv(1024)
+ if len(reply) != 2:
+ pw.dlog(
+ f"MGM calibration: Reply received command {declare_api_cmd} has invalid length {len(reply)}"
+ )
+ return
+ else:
+ if str(reply[0]) == "0":
+ pw.dlog(f"MGM calibration: API version 2 was not accepted")
+ return
+ if len(mgm_tuple) != 3:
+ pw.dlog(f"MGM tuple has invalid length {len(mgm_tuple)}")
+ mgm_list = [mgm / 1e6 for mgm in mgm_tuple]
+ command = (
+ f"magnetometer_field {mgm_list[0]} {mgm_list[1]} {mgm_list[2]}\n".encode()
+ )
+ CALIBR_SOCKET.sendall(command)
+ reply = CALIBR_SOCKET.recv(1024)
+ if len(reply) != 2:
+ pw.dlog(
+ f"MGM calibration: Reply received command magnetometer_field has invalid length {len(reply)}"
+ )
+ return
+ else:
+ if str(reply[0]) == "0":
+ pw.dlog(f"MGM calibration: magnetmeter field format was not accepted")
+ return
+ pw.dlog(f"Sent data {mgm_list} to Helmholtz Testbench successfully")
+ except socket.timeout:
+ pw.dlog("Socket timeout")
+ except BlockingIOError as e:
+ pw.dlog(f"Error {e}")
+ except ConnectionResetError as e:
+ pw.dlog("Socket was closed")
+ except ConnectionRefusedError or OSError:
+ pw.dlog("Connecting to Calibration Socket on addrss {} failed")
diff --git a/tmtc/ploc_memory_dumper.py b/tmtc/ploc_memory_dumper.py
new file mode 100644
index 0000000..d99dafc
--- /dev/null
+++ b/tmtc/ploc_memory_dumper.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+"""
+@file ploc_memory_dumper.py
+@brief This file implements the command to dump memory sectors of the PLOC. Memories of the PLOC which can be dumped
+ are one MRAM, two flash memories and the SRAM.
+@author J. Meier
+@date 31.08.2021
+"""
+import struct
+
+from config.definitions import CustomServiceList
+from spacepackets.ecss.tc import PusTelecommand
+from tmtccmd.config import TmtcDefinitionWrapper
+from tmtccmd.config.tmtc import tmtc_definitions_provider, OpCodeEntry
+from tmtccmd.tc import DefaultPusQueueHelper
+from tmtccmd.util import ObjectIdU32
+
+
+class ActionIds:
+ DUMP_MRAM = 1
+
+
+@tmtc_definitions_provider
+def add_ploc_mem_dumper_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add("0", "PLOC Memory Dumper: MRAM dump")
+ defs.add_service(CustomServiceList.PLOC_MEMORY_DUMPER, "PLOC Memory Dumper", oce)
+
+
+def pack_ploc_memory_dumper_cmd(
+ object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str
+):
+ q.add_log_cmd(
+ f"Testing PLOC memory dumper with object id: {object_id.as_hex_string}"
+ )
+
+ if op_code == "0":
+ q.add_log_cmd("PLOC Supervisor: Dump MRAM")
+ command = pack_mram_dump_cmd(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+
+
+def pack_mram_dump_cmd(object_id: bytes) -> bytearray:
+ start = int(input("Start address: 0x"), 16)
+ end = int(input("End address: 0x"), 16)
+ command = object_id + struct.pack("!I", ActionIds.DUMP_MRAM)
+ command = command + struct.pack("!I", start)
+ command = command + struct.pack("!I", end)
+ return bytearray(command)
diff --git a/tmtc/ploc_mpsoc.py b/tmtc/ploc_mpsoc.py
new file mode 100644
index 0000000..3eb4322
--- /dev/null
+++ b/tmtc/ploc_mpsoc.py
@@ -0,0 +1,328 @@
+# -*- coding: utf-8 -*-
+"""
+@file ploc_mpsoc.py
+@brief Tests for commanding the MPSoC of the PLOC.
+ The MPSoC is programmed by the ILH.
+@author J. Meier
+@date 06.03.2021
+"""
+import struct
+import enum
+
+from config.definitions import CustomServiceList
+from config.object_ids import get_object_ids, PLOC_MPSOC_ID
+from tmtccmd.config.tmtc import (
+ tmtc_definitions_provider,
+ OpCodeEntry,
+ TmtcDefinitionWrapper,
+)
+from tmtccmd.logging import get_console_logger
+from spacepackets.ecss.tc import PusTelecommand
+from tmtccmd.tc import DefaultPusQueueHelper, service_provider
+from tmtccmd.tc.decorator import ServiceProviderParams
+from tmtccmd.util import ObjectIdU32
+from utility.input_helper import InputHelper
+from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes
+
+LOGGER = get_console_logger()
+
+MANUAL_INPUT = "1"
+
+flash_write_file_dict = {
+ MANUAL_INPUT: ["manual input", ""],
+ "2": ["/mnt/sd0/ploc/mpsoc/flash_write.bin", "/mnt/sd0/ploc/mpsoc/flash_write.bin"],
+}
+
+mpsoc_file_dict = {
+ MANUAL_INPUT: ["manual input", ""],
+ "2": ["0:/flash", "0:/flash"],
+}
+
+sequence_file_dict = {
+ MANUAL_INPUT: ["manual input", ""],
+ "2": ["0:/EM16/231", "0:/EM16/231"],
+ "3": ["0:/EQ04/E-75", "0:/EQ04/E-75"],
+}
+
+CARRIAGE_RETURN = 0xD
+
+
+class CommandIds(enum.IntEnum):
+ TC_MEM_WRITE = 1
+ TC_MEM_READ = 2
+ FLASH_WRITE = 9
+ TC_FLASH_DELETE = 10
+ TC_REPLAY_START = 11
+ TC_REPLAY_STOP = 12
+ TC_REPLAY_WRITE_SEQUENCE = 13
+ TC_DOWNLINK_PWR_ON = 14
+ TC_DOWNLINK_PWR_OFF = 15
+ OBSW_RESET_SEQ_COUNT = 50
+ TC_MODE_REPLAY = 16
+ TC_CAM_CMD_SEND = 17
+ TC_MODE_IDLE = 18
+ SET_UART_TX_TRISTATE = 20
+ RELEASE_UART_TX = 21
+
+
+class MemAddresses(enum.IntEnum):
+ DEADBEEF = 0x40000004
+
+
+class PlocReplyIds(enum.IntEnum):
+ TM_MEM_READ_RPT = 6
+ TM_CAM_CMD_RPT = 19
+
+
+@tmtc_definitions_provider
+def add_ploc_mpsoc_cmds(defs: TmtcDefinitionWrapper):
+ oce = OpCodeEntry()
+ oce.add("0", "Ploc MPSoC: Set mode off")
+ oce.add("1", "Ploc MPSoC: Set mode on")
+ oce.add("2", "Ploc MPSoC: Set mode normal")
+ oce.add("3", "Ploc MPSoC: Memory write")
+ oce.add("4", "Ploc MPSoC: Memory read")
+ oce.add("5", "Ploc MPSoC: Flash write")
+ oce.add("6", "Ploc MPSoC: Flash delete")
+ oce.add("7", "Ploc MPSoC: Replay start")
+ oce.add("8", "Ploc MPSoC: Replay stop")
+ oce.add("9", "Ploc MPSoC: Downlink pwr on")
+ oce.add("10", "Ploc MPSoC: Downlink pwr off")
+ oce.add("11", "Ploc MPSoC: Replay write sequence")
+ oce.add("12", "Ploc MPSoC: OBSW reset sequence count")
+ oce.add("13", "Ploc MPSoC: Read DEADBEEF address")
+ oce.add("14", "Ploc MPSoC: Mode replay")
+ oce.add("15", "Ploc MPSoC: Mode idle")
+ oce.add("16", "Ploc MPSoC: Tc cam command send")
+ oce.add("17", "Ploc MPSoC: Set UART TX tristate")
+ oce.add("18", "Ploc MPSoC: Relesase UART TX")
+ defs.add_service(CustomServiceList.PLOC_MPSOC.value, "Ploc MPSoC", oce)
+
+
+@service_provider(CustomServiceList.PLOC_MPSOC)
+def pack_ploc_mpsoc_commands(p: ServiceProviderParams):
+ object_id = get_object_ids().get(PLOC_MPSOC_ID)
+ q = p.queue_helper
+ op_code = p.op_code
+ q.add_log_cmd(
+ f"Generate command for PLOC MPSoC with object id: {object_id.as_hex_string}"
+ )
+ obyt = object_id.as_bytes
+ if op_code == "0":
+ q.add_log_cmd("PLOC MPSoC: Set mode off")
+ command = pack_mode_data(obyt, Modes.OFF, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
+ if op_code == "1":
+ q.add_log_cmd("PLOC MPSoC: Set mode on")
+ data = pack_mode_data(obyt, Modes.ON, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
+ if op_code == "2":
+ q.add_log_cmd("PLOC MPSoC: Mode Normal")
+ data = pack_mode_data(object_id.as_bytes, Modes.NORMAL, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
+ if op_code == "3":
+ q.add_log_cmd("PLOC MPSoC: TC mem write test")
+ memory_address = int(
+ input("PLOC MPSoC: Tc Mem Write: Type memory address: 0x"), 16
+ )
+ memory_data = int(input("PLOC MPSoC: Tc Mem Write: Type memory data: 0x"), 16)
+ # TODO: implement variable length mem write command
+ mem_len = 1 # 1 32-bit word
+ data = generate_write_mem_command(
+ object_id.as_bytes, memory_address, memory_data, mem_len
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "4":
+ q.add_log_cmd("PLOC MPSoC: TC mem read test")
+ data = prepare_mem_read_command(object_id=object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "5":
+ q.add_log_cmd("PLOC MPSoC: Flash write")
+ data = prepare_flash_write_cmd(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "6":
+ q.add_log_cmd("PLOC MPSoC: Flash delete")
+ data = prepare_flash_delete_cmd(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "7":
+ q.add_log_cmd("PLOC MPSoC: Replay start")
+ data = prepare_replay_start_cmd(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "8":
+ q.add_log_cmd("PLOC MPSoC: Replay stop")
+ data = object_id.as_bytes + struct.pack("!I", CommandIds.TC_REPLAY_STOP)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "9":
+ q.add_log_cmd("PLOC MPSoC: Downlink pwr on")
+ data = prepare_downlink_pwr_on_cmd(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "10":
+ q.add_log_cmd("PLOC MPSoC: Downlink pwr off")
+ data = object_id.as_bytes + struct.pack("!I", CommandIds.TC_DOWNLINK_PWR_OFF)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "11":
+ q.add_log_cmd("PLOC MPSoC: Replay write sequence")
+ data = prepare_replay_write_sequence_cmd(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "12":
+ q.add_log_cmd("PLOC MPSoC: Reset OBSW sequence count")
+ data = object_id.as_bytes + struct.pack("!I", CommandIds.OBSW_RESET_SEQ_COUNT)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "13":
+ num_words = 1
+ q.add_log_cmd("PLOC MPSoC: Read DEADBEEF address")
+ data = (
+ object_id.as_bytes
+ + struct.pack("!I", CommandIds.TC_MEM_READ)
+ + struct.pack("!I", MemAddresses.DEADBEEF)
+ + struct.pack("!H", num_words)
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "14":
+ q.add_log_cmd("PLOC MPSoC: Tc mode replay")
+ data = object_id.as_bytes + struct.pack("!I", CommandIds.TC_MODE_REPLAY)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "15":
+ q.add_log_cmd("PLOC MPSoC: Tc mode idle")
+ data = object_id.as_bytes + struct.pack("!I", CommandIds.TC_MODE_IDLE)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "16":
+ q.add_log_cmd("PLOC MPSoC: Tc cam command send")
+ cam_cmd = input("Specify cam command string: ")
+ data = (
+ object_id.as_bytes
+ + struct.pack("!I", CommandIds.TC_CAM_CMD_SEND)
+ + bytearray(cam_cmd, "utf-8")
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "17":
+ q.add_log_cmd("PLOC MPSoC: Set UART TX tristate")
+ data = object_id.as_bytes + struct.pack("!I", CommandIds.SET_UART_TX_TRISTATE)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+ if op_code == "18":
+ q.add_log_cmd("PLOC MPSoC: Release UART TX")
+ data = object_id.as_bytes + struct.pack("!I", CommandIds.RELEASE_UART_TX)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
+
+
+def generate_write_mem_command(
+ object_id: bytes, memory_address: int, memory_data: int, mem_len: int
+) -> bytearray:
+ """This function generates the command to write to a memory address within the PLOC.
+
+ :param object_id: The object id of the PlocHandler
+ :param memory_address: The PLOC memory address where to write to.
+ :param memory_data: The data to write to the memory address specified by the
+ bytearray memory_address.
+ :param mem_len:
+ """
+ command = (
+ object_id
+ + struct.pack("!I", CommandIds.TC_MEM_WRITE)
+ + struct.pack("!I", memory_address)
+ + struct.pack("!H", mem_len)
+ + struct.pack("!I", memory_data)
+ )
+ return bytearray(command)
+
+
+def prepare_mem_read_command(object_id: bytes) -> bytearray:
+ memory_address = int(input("PLOC MPSoC Tc Mem Read: Type memory address: 0x"), 16)
+ num_words = int(input("PLOC MPSoC specify number of words (32-bit) to read: "))
+ command = (
+ object_id
+ + struct.pack("!I", CommandIds.TC_MEM_READ)
+ + struct.pack("!I", memory_address)
+ + struct.pack("!H", num_words)
+ )
+ return bytearray(command)
+
+
+def prepare_flash_write_cmd(object_id: bytes) -> bytearray:
+ obcFile = get_obc_file()
+ mpsocFile = get_mpsoc_file()
+ command = (
+ object_id
+ + struct.pack("!I", CommandIds.FLASH_WRITE)
+ + bytearray(obcFile, "utf-8")
+ + bytearray(mpsocFile, "utf-8")
+ )
+ return bytearray(command)
+
+
+def prepare_flash_delete_cmd(object_id: bytes) -> bytearray:
+ file = get_mpsoc_file()
+ command = (
+ object_id
+ + struct.pack("!I", CommandIds.TC_FLASH_DELETE)
+ + bytearray(file, "utf-8")
+ )
+ return bytearray(command)
+
+
+def prepare_replay_start_cmd(object_id: bytes) -> bytearray:
+ replay = int(input("Specify replay mode (0 - once, 1 - repeated): "))
+ command = (
+ object_id
+ + struct.pack("!I", CommandIds.TC_REPLAY_START)
+ + struct.pack("!B", replay)
+ )
+ return bytearray(command)
+
+
+def prepare_downlink_pwr_on_cmd(object_id: bytes) -> bytearray:
+ mode = int(input("Specify JESD mode (0 - 5): "))
+ lane_rate = int(input("Specify lane rate (0 - 9): "))
+ command = (
+ object_id
+ + struct.pack("!I", CommandIds.TC_DOWNLINK_PWR_ON)
+ + struct.pack("!B", mode)
+ + struct.pack("!B", lane_rate)
+ )
+ return bytearray(command)
+
+
+def prepare_replay_write_sequence_cmd(object_id: bytes) -> bytearray:
+ null_terminator = 0
+ use_decoding = int(input("Use decoding (set to 1): "))
+ file = get_sequence_file()
+ command = (
+ object_id
+ + struct.pack("!I", CommandIds.TC_REPLAY_WRITE_SEQUENCE)
+ + struct.pack("!B", use_decoding)
+ + bytearray(file, "utf-8")
+ )
+ return bytearray(command)
+
+
+def get_obc_file() -> str:
+ LOGGER.info("Specify OBC file ")
+ input_helper = InputHelper(flash_write_file_dict)
+ key = input_helper.get_key()
+ if key == MANUAL_INPUT:
+ file = input("Ploc MPSoC: Specify absolute name of flash file: ")
+ else:
+ file = flash_write_file_dict[key][1]
+ return file
+
+
+def get_mpsoc_file() -> str:
+ LOGGER.info("Specify MPSoC file")
+ input_helper = InputHelper(mpsoc_file_dict)
+ key = input_helper.get_key()
+ if key == MANUAL_INPUT:
+ file = input("Ploc MPSoC: Specify absolute name file: ")
+ else:
+ file = mpsoc_file_dict[key][1]
+ return file
+
+
+def get_sequence_file() -> str:
+ LOGGER.info("Specify sequence file")
+ input_helper = InputHelper(sequence_file_dict)
+ key = input_helper.get_key()
+ if key == MANUAL_INPUT:
+ file = input("Ploc MPSoC: Specify absolute name file: ")
+ else:
+ file = sequence_file_dict[key][1]
+ return file
diff --git a/tmtc/ploc_supervisor.py b/tmtc/ploc_supervisor.py
new file mode 100644
index 0000000..fbcd666
--- /dev/null
+++ b/tmtc/ploc_supervisor.py
@@ -0,0 +1,735 @@
+# -*- coding: utf-8 -*-
+"""
+@file ploc_supervisor.py
+@brief Tests for commanding the supervisor of the PLOC.
+ The supervisor is programmed by Thales.
+@author J. Meier
+@date 10.07.2021
+"""
+import enum
+import struct
+
+from config.object_ids import PLOC_SUPV_ID, get_object_ids
+from config.definitions import CustomServiceList
+from pus_tm.defs import PrintWrapper
+from spacepackets.ecss.tc import PusTelecommand
+from tmtccmd.tc.pus_3_fsfw_hk import generate_one_hk_command, make_sid
+from tmtccmd.config import TmtcDefinitionWrapper
+from tmtccmd.config.tmtc import tmtc_definitions_provider, OpCodeEntry
+from tmtccmd.logging import get_console_logger
+from tmtccmd.tc import service_provider
+from tmtccmd.tc.decorator import ServiceProviderParams
+from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes
+from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
+from utility.input_helper import InputHelper
+
+LOGGER = get_console_logger()
+
+latchup_id_dict = {
+ "0": "0.85V",
+ "1": "1.8V",
+ "2": "MISC",
+ "3": "3.3V",
+ "4": "NVM_4XO",
+ "5": "MISSION",
+ "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",
+ ],
+ "5": [
+ "/mnt/sd0/ploc/supervisor/mpsoc-uart-working.bin",
+ "/mnt/sd0/ploc/supervisor/mpsoc-uart-working.bin",
+ ],
+}
+
+event_buffer_path_dict = {
+ MANUAL_INPUT: ["manual input", ""],
+ "2": ["/mnt/sd0/ploc/supervisor", "/mnt/sd0/ploc/supervisor"],
+}
+
+
+class SupvActionIds:
+ HK_REPORT = 1
+ START_MPSOC = 3
+ SHUTWOWN_MPSOC = 4
+ SEL_MPSOC_BOOT_IMAGE = 5
+ SET_BOOT_TIMEOUT = 6
+ SET_MAX_RESTART_TRIES = 7
+ RESET_MPSOC = 8
+ SET_TIME_REF = 9
+ DISABLE_HK = 10
+ GET_BOOT_STATUS_REPORT = 11
+ UPDATE_AVAILABLE = 12
+ ENABLE_LATCHUP_ALERT = 15
+ DISABLE_LATCHUP_ALERT = 16
+ SET_ALERT_LIMIT = 18
+ 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
+ SELECT_NVM = 27
+ RUN_AUTO_EM_TESTS = 28
+ WIPE_MRAM = 29
+ DUMP_MRAM = 30
+ SET_GPIO = 34
+ READ_GPIO = 35
+ RESTART_SUPERVISOR = 36
+ FACTORY_RESET_CLEAR_ALL = 37
+ 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
+ ENABLE_NVMS = 59
+ CONTINUE_UPDATE = 60
+ MEM_CHECK = 61
+
+
+class SetIds:
+ HK_REPORT = 102
+ BOOT_STATUS_REPORT = 103
+
+
+class OpCodes:
+ OFF = ["0", "off"]
+ ON = ["1", "on"]
+ NORMAL = ["2", "nml"]
+ HK_TO_OBC = ["3", "hk_to_obc"]
+ REQUEST_HK = ["4", "req_hk"]
+ START_MPSOC = ["5", "start_mpsoc"]
+ SHUTDOWN_MPSOC = ["6", "stop_mpsoc"]
+ SEL_NVM = ["7", "sel_nvm"]
+ REQ_BOOT_STATUS_REPORT = ["13", "boot_report"]
+ START_UPDATE = ["42", "start_update"]
+ PERFORM_UPDATE = ["update"]
+ MEM_CHECK = ["mem_check"]
+
+
+class Info(str, enum.Enum):
+ value: str
+ OFF = "Switch Off"
+ ON = "Switch On"
+ NML = "Switch Normal"
+ HK_TO_OBC = "Request HK from PLOC SUPV"
+ REQUEST_HK = "Request HK set from PLOC Handler"
+ PERFORM_UPDATE = "Start or continue MPSoC SW update at starting bytes"
+ START_UPDATE = "Start new MPSoC SW update"
+ REQ_BOOT_STATUS_REPORT = "Request boot status report and HK"
+ MEM_CHECK = "Memory Check"
+ SEL_NVM = "Select NVM"
+
+
+@tmtc_definitions_provider
+def add_ploc_supv_cmds(defs: TmtcDefinitionWrapper):
+
+ oce = OpCodeEntry()
+ oce.add(OpCodes.OFF, Info.OFF)
+ oce.add(OpCodes.ON, Info.ON)
+ oce.add(OpCodes.NORMAL, Info.NML)
+ oce.add(OpCodes.HK_TO_OBC, Info.HK_TO_OBC)
+ oce.add(OpCodes.REQUEST_HK, Info.REQUEST_HK)
+ oce.add(OpCodes.START_MPSOC, "PLOC Supervisor: Start MPSoC")
+ oce.add(OpCodes.SHUTDOWN_MPSOC, "PLOC Supervisor: Shutdown MPSoC")
+ oce.add(OpCodes.SEL_NVM, Info.SEL_NVM)
+ oce.add("8", "PLOC Supervisor: Set max restart tries")
+ oce.add("9", "PLOC Supervisor: Reset MPSoC")
+ oce.add("10", "PLOC Supervisor: Set time reference")
+ oce.add("11", "PLOC Supervisor: Set boot timeout")
+ oce.add("12", "PLOC Supervisor: Disable Hk")
+ oce.add(OpCodes.REQ_BOOT_STATUS_REPORT, Info.REQ_BOOT_STATUS_REPORT)
+ oce.add("17", "PLOC Supervisor: Enable latchup alert")
+ oce.add("18", "PLOC Supervisor: Disable latchup alert")
+ oce.add("20", "PLOC Supervisor: Set alert limit")
+ oce.add("23", "PLOC Supervisor: Set ADC enabled channels")
+ oce.add("24", "PLOC Supervisor: Set ADC window and stride")
+ oce.add("25", "PLOC Supervisor: Set ADC threshold")
+ oce.add("26", "PLOC Supervisor: Request latchup status report")
+ oce.add("27", "PLOC Supervisor: Copy ADC data to MRAM")
+ oce.add("30", "PLOC Supervisor: Run auto EM tests")
+ oce.add("31", "PLOC Supervisor: MRAM Wipe")
+ oce.add("35", "PLOC Supervisor: Set GPIO")
+ oce.add("36", "PLOC Supervisor: Read GPIO")
+ oce.add("37", "PLOC Supervisor: Restart supervisor")
+ oce.add("38", "PLOC Supervisor: Factory reset clear all")
+ oce.add("39", "PLOC Supervisor: Factory reset clear mirror entries")
+ oce.add("40", "PLOC Supervisor: Factory reset clear circular entries")
+ oce.add(OpCodes.PERFORM_UPDATE, Info.PERFORM_UPDATE)
+ oce.add(OpCodes.START_UPDATE, Info.START_UPDATE)
+ oce.add("43", "PLOC Supervisor: Terminate supervisor process")
+ oce.add("44", "PLOC Supervisor: Start MPSoC quiet")
+ oce.add("45", "PLOC Supervisor: Set shutdown timeout")
+ oce.add("46", "PLOC Supervisor: Factory flash")
+ oce.add("47", "PLOC Supervisor: Enable auto TM")
+ oce.add("48", "PLOC Supervisor: Disable auto TM")
+ oce.add("51", "PLOC Supervisor: Logging request event buffers")
+ oce.add("52", "PLOC Supervisor: Logging clear counters")
+ oce.add("53", "PLOC Supervisor: Logging set topic")
+ oce.add("54", "PLOC Supervisor: Logging request counters")
+ oce.add("55", "PLOC Supervisor: Request ADC Report")
+ oce.add("56", "PLOC Supervisor: Reset PL")
+ oce.add("57", "PLOC Supervisor: Enable NVMs")
+ oce.add("58", "PLOC Supervisor: Continue update")
+ oce.add(OpCodes.MEM_CHECK, Info.MEM_CHECK)
+ defs.add_service(CustomServiceList.PLOC_SUPV.value, "PLOC Supervisor", oce)
+
+
+@service_provider(CustomServiceList.PLOC_SUPV)
+def pack_ploc_supv_commands(p: ServiceProviderParams):
+ q = p.queue_helper
+ op_code = p.op_code
+ object_id = get_object_ids().get(PLOC_SUPV_ID)
+ q.add_log_cmd(f"Testing PLOC Supervisor with object id: {object_id.as_hex_string}")
+ obyt = object_id.as_bytes
+ prefix = "PLOC Supervisor"
+ if op_code in OpCodes.OFF:
+ q.add_log_cmd(f"{prefix}: {Info.OFF}")
+ command = pack_mode_data(object_id.as_bytes, Modes.OFF, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
+ if op_code in OpCodes.ON:
+ q.add_log_cmd(f"{prefix}: {Info.ON}")
+ command = pack_mode_data(object_id.as_bytes, Modes.ON, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
+ if op_code in OpCodes.NORMAL:
+ q.add_log_cmd(f"{prefix}: {Info.NML}")
+ command = pack_mode_data(object_id.as_bytes, Modes.NORMAL, 0)
+ q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
+ if op_code in OpCodes.HK_TO_OBC:
+ q.add_log_cmd(f"{prefix}: {Info.HK_TO_OBC}")
+ command = obyt + struct.pack("!I", SupvActionIds.HK_REPORT)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code in OpCodes.REQUEST_HK:
+ q.add_log_cmd(f"{prefix}: {Info.REQUEST_HK}")
+ sid = make_sid(object_id.as_bytes, SetIds.HK_REPORT)
+ cmd = generate_one_hk_command(sid)
+ q.add_pus_tc(cmd)
+ elif op_code in OpCodes.START_MPSOC:
+ q.add_log_cmd("PLOC Supervisor: Start MPSoC")
+ command = obyt + struct.pack("!I", SupvActionIds.START_MPSOC)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code in OpCodes.SHUTDOWN_MPSOC:
+ q.add_log_cmd("PLOC Supervisor: Shutdown MPSoC")
+ command = object_id.as_bytes + struct.pack("!I", SupvActionIds.SHUTWOWN_MPSOC)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code in OpCodes.SEL_NVM:
+ q.add_log_cmd("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): "))
+ command = pack_sel_boot_image_cmd(object_id.as_bytes, mem, bp0, bp1, bp2)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "8":
+ q.add_log_cmd("PLOC Supervisor: Set max restart tries")
+ restart_tries = int(input("Specify maximum restart tries: "))
+ command = (
+ object_id.as_bytes
+ + struct.pack("!I", SupvActionIds.SET_MAX_RESTART_TRIES)
+ + struct.pack("!B", restart_tries)
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "9":
+ q.add_log_cmd("PLOC Supervisor: Reset MPSoC")
+ command = object_id.as_bytes + struct.pack("!I", SupvActionIds.RESET_MPSOC)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "10":
+ q.add_log_cmd("PLOC Supervisor: Set time reference")
+ command = object_id.as_bytes + struct.pack("!I", SupvActionIds.SET_TIME_REF)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "11":
+ q.add_log_cmd("PLOC Supervisor: Set boot timeout")
+ boot_timeout = int(input("Specify boot timeout [ms]: "))
+ command = (
+ object_id.as_bytes
+ + struct.pack("!I", SupvActionIds.SET_BOOT_TIMEOUT)
+ + struct.pack("!I", boot_timeout)
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "12":
+ q.add_log_cmd("PLOC Supervisor: Disable HK")
+ command = object_id.as_bytes + struct.pack("!I", SupvActionIds.DISABLE_HK)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code in OpCodes.REQ_BOOT_STATUS_REPORT:
+ q.add_log_cmd(f"{prefix}: {Info.REQ_BOOT_STATUS_REPORT}")
+ command = object_id.as_bytes + struct.pack(
+ "!I", SupvActionIds.GET_BOOT_STATUS_REPORT
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ q.add_wait_seconds(2.0)
+ sid = make_sid(object_id.as_bytes, SetIds.BOOT_STATUS_REPORT)
+ req_hk = generate_one_hk_command(sid)
+ q.add_pus_tc(req_hk)
+ if op_code == "17":
+ q.add_log_cmd("PLOC Supervisor: Enable latchup alert")
+ command = pack_lachtup_alert_cmd(object_id.as_bytes, True)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "18":
+ q.add_log_cmd("PLOC Supervisor: Disable latchup alert")
+ command = pack_lachtup_alert_cmd(object_id.as_bytes, False)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "20":
+ q.add_log_cmd("PLOC Supervisor: Set alert limit")
+ command = pack_set_alert_limit_cmd(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "23":
+ q.add_log_cmd("PLOC Supervisor: Set ADC enabled channels")
+ command = pack_set_adc_enabled_channels_cmd(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "24":
+ q.add_log_cmd("PLOC Supervisor: Set ADC window and stride")
+ command = pack_set_adc_window_and_stride_cmd(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "25":
+ q.add_log_cmd("PLOC Supervisor: Set ADC threshold")
+ command = pack_set_adc_threshold_cmd(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "26":
+ q.add_log_cmd("PLOC Supervisor: Request latchup status report")
+ command = object_id.as_bytes + struct.pack(
+ "!I", SupvActionIds.GET_LATCHUP_STATUS_REPORT
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "27":
+ q.add_log_cmd("PLOC Supervisor: Copy ADC data to MRAM")
+ command = object_id.as_bytes + struct.pack(
+ "!I", SupvActionIds.COPY_ADC_DATA_TO_MRAM
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "30":
+ q.add_log_cmd("PLOC Supervisor: Run auto EM tests")
+ command = pack_auto_em_tests_cmd(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "31":
+ q.add_log_cmd("PLOC Supervisor: Wipe MRAM")
+ command = pack_mram_wipe_cmd(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "35":
+ q.add_log_cmd("PLOC Supervisor: Set GPIO command")
+ command = pack_set_gpio_cmd(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "36":
+ q.add_log_cmd("PLOC Supervisor: Read GPIO command")
+ command = pack_read_gpio_cmd(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "37":
+ q.add_log_cmd("PLOC Supervisor: Restart supervisor")
+ command = object_id.as_bytes + struct.pack(
+ "!I", SupvActionIds.RESTART_SUPERVISOR
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "38":
+ q.add_log_cmd("PLOC Supervisor: Factory reset clear all")
+ command = object_id.as_bytes + struct.pack(
+ "!I", SupvActionIds.FACTORY_RESET_CLEAR_ALL
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "39":
+ q.add_log_cmd("PLOC Supervisor: Factory reset clear mirror entries")
+ command = object_id.as_bytes + struct.pack(
+ "!I", SupvActionIds.FACTORY_RESET_CLEAR_MIRROR
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "40":
+ q.add_log_cmd("PLOC Supervisor: Factory reset clear circular entries")
+ command = object_id.as_bytes + struct.pack(
+ "!I", SupvActionIds.FACTORY_RESET_CLEAR_CIRCULAR
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code in OpCodes.START_UPDATE:
+ q.add_log_cmd("PLOC Supversior: Start new MPSoC SW update")
+ command = pack_update_command(object_id.as_bytes, True)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code in OpCodes.PERFORM_UPDATE:
+ q.add_log_cmd("PLOC Supervisor: Perform MPSoC SW update")
+ command = pack_update_command(object_id.as_bytes, False)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "43":
+ q.add_log_cmd("PLOC Supervisor: Terminate supervisor process")
+ command = object_id.as_bytes + struct.pack(
+ "!I", SupvActionIds.TERMINATE_SUPV_HELPER
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "44":
+ q.add_log_cmd("PLOC Supervisor: Start MPSoC quiet")
+ command = object_id.as_bytes + struct.pack(
+ "!I", SupvActionIds.START_MPSOC_QUIET
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "45":
+ q.add_log_cmd("PLOC Supervisor: Set shutdown timeout")
+ command = pack_set_shutdown_timeout_command(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "46":
+ q.add_log_cmd("PLOC Supervisor: Factory flash")
+ command = object_id.as_bytes + struct.pack("!I", SupvActionIds.FACTORY_FLASH)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "47":
+ q.add_log_cmd("PLOC Supervisor: Enable auto TM")
+ command = object_id.as_bytes + struct.pack("!I", SupvActionIds.ENABLE_AUTO_TM)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "48":
+ q.add_log_cmd("PLOC Supervisor: Disable auto TM")
+ command = object_id.as_bytes + struct.pack("!I", SupvActionIds.DISABLE_AUTO_TM)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "51":
+ q.add_log_cmd("PLOC Supervisor: Logging request event buffers")
+ command = pack_logging_buffer_request(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "52":
+ q.add_log_cmd("PLOC Supervisor: Logging clear counters")
+ command = object_id.as_bytes + struct.pack(
+ "!I", SupvActionIds.LOGGING_CLEAR_COUNTERS
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "53":
+ q.add_log_cmd("PLOC Supervisor: Logging set topic")
+ command = pack_logging_set_topic(object_id.as_bytes)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "54":
+ q.add_log_cmd("PLOC Supervisor: Logging request counters")
+ command = object_id.as_bytes + struct.pack(
+ "!I", SupvActionIds.LOGGING_REQUEST_COUNTERS
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "55":
+ q.add_log_cmd("PLOC Supervisor: Request ADC report")
+ command = object_id.as_bytes + struct.pack(
+ "!I", SupvActionIds.REQUEST_ADC_REPORT
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "56":
+ q.add_log_cmd("PLOC Supervisor: Reset PL")
+ command = object_id.as_bytes + struct.pack("!I", SupvActionIds.RESET_PL)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "57":
+ q.add_log_cmd("PLOC Supervisor: Enable NVMs")
+ nvm01 = int(input("Enable (1) or disable(0) NVM 0 and 1: "))
+ nvm3 = int(input("Enable (1) or disable(0) NVM 3: "))
+ command = (
+ object_id.as_bytes
+ + struct.pack("!I", SupvActionIds.ENABLE_NVMS)
+ + struct.pack("B", nvm01)
+ + struct.pack("B", nvm3)
+ )
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code == "58":
+ q.add_log_cmd("PLOC Supervisor: Continue update")
+ command = object_id.as_bytes + struct.pack("!I", SupvActionIds.CONTINUE_UPDATE)
+ q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
+ if op_code in OpCodes.MEM_CHECK:
+ custom_data = bytearray()
+ update_file = get_update_file()
+ memory_id = int(input("Specify memory ID: "))
+ start_address = int(input("Specify start address: 0x"), 16)
+ custom_data.extend(update_file.encode("utf-8"))
+ custom_data.append(0)
+ custom_data.extend(struct.pack("!B", memory_id))
+ custom_data.extend(struct.pack("!I", start_address))
+ q.add_log_cmd(
+ f"{prefix}: {Info.MEM_CHECK} for file {update_file} at memory ID {memory_id} at start "
+ f"address {start_address}"
+ )
+ command = make_fsfw_action_cmd(
+ object_id.as_bytes, SupvActionIds.MEM_CHECK, custom_data
+ )
+ q.add_pus_tc(command)
+
+
+def pack_sel_boot_image_cmd(
+ object_id: bytes, mem: int, bp0: int, bp1: int, bp2: int
+) -> bytearray:
+ """This function can be used to generate the command to select the image from which the MPSoC will boot
+ @param object_id The object id of the PLOC supervisor handler.
+ @param mem The memory from which the MPSoC shall boot (NVM0 - 0, NVM1 - 1)
+ @param bp0 Partition pin 0
+ @param bp1 Partition pin 1
+ @param bp2 Partition pin 2
+ """
+ command = object_id + struct.pack("!I", SupvActionIds.SEL_MPSOC_BOOT_IMAGE)
+ command = command + struct.pack("!B", mem)
+ command = command + struct.pack("!B", bp0)
+ command = command + struct.pack("!B", bp1)
+ command = command + struct.pack("!B", bp2)
+ return bytearray(command)
+
+
+def pack_update_available_cmd(object_id: bytes) -> bytearray:
+ """
+ @brief This function packs the udpate availabe command.
+ @param object_id The object id of the PLOC supervisor handler.
+ """
+ image_select = 1
+ image_partition = 0
+ image_size = 222
+ image_crc = 0x0
+ number_of_packets = 150
+ command = object_id + struct.pack("!I", SupvActionIds.UPDATE_AVAILABLE)
+ command = command + struct.pack("!B", image_select)
+ command = command + struct.pack("!B", image_partition)
+ command = command + struct.pack("!I", image_size)
+ command = command + struct.pack("!I", image_crc)
+ command = command + struct.pack("!I", number_of_packets)
+ return bytearray(command)
+
+
+def pack_lachtup_alert_cmd(object_id: bytes, state: bool) -> bytearray:
+ """
+ @brief This function packs the command to enable or disable a certain latchup alerts.
+ @param object_id The object id of the PLOC supervisor handler.
+ @param state True - enable latchup alert, False - disable latchup alert
+ """
+ latchup_id = get_latchup_id()
+ command = bytearray()
+ if state:
+ command = object_id + struct.pack("!I", SupvActionIds.ENABLE_LATCHUP_ALERT)
+ else:
+ command = object_id + struct.pack("!I", SupvActionIds.DISABLE_LATCHUP_ALERT)
+ command = command + struct.pack("!B", latchup_id)
+ return bytearray(command)
+
+
+def get_latchup_id() -> int:
+ key_column_width = 10
+ description_column_width = 50
+ separator_width = key_column_width + description_column_width + 3
+ separator_string = separator_width * "-"
+ key_string = "Latchup ID".ljust(key_column_width)
+ description_string = "Description".ljust(description_column_width)
+ print(f"{key_string} | {description_string}")
+ print(separator_string)
+ for key in latchup_id_dict:
+ 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: "))
+
+
+def pack_set_alert_limit_cmd(object_id: bytes) -> 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.
+ """
+ latchup_id = get_latchup_id()
+ dutycycle = int(input("Specify dutycycle: "))
+ command = bytearray()
+ command = object_id + struct.pack("!I", SupvActionIds.SET_ALERT_LIMIT)
+ command = command + struct.pack("!B", latchup_id)
+ command = command + struct.pack("!I", dutycycle)
+ return bytearray(command)
+
+
+def pack_set_adc_enabled_channels_cmd(object_id: bytes) -> 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: 0x"), 16)
+ cmd = object_id + struct.pack("!I", SupvActionIds.SET_ADC_ENABLED_CHANNELS)
+ cmd = cmd + struct.pack("!H", ch)
+ return bytearray(cmd)
+
+
+def pack_set_adc_window_and_stride_cmd(object_id: bytes) -> bytearray:
+ window_size = int(input("Specify window size: "))
+ striding_step_size = int(input("Specify striding step size: "))
+ command = object_id + struct.pack("!I", SupvActionIds.SET_ADC_WINDOW_AND_STRIDE)
+ command = command + struct.pack("!H", window_size)
+ command = command + struct.pack("!H", striding_step_size)
+ return bytearray(command)
+
+
+def pack_set_adc_threshold_cmd(object_id: bytes) -> bytearray:
+ threshold = int(input("Specify threshold: "))
+ command = object_id + struct.pack("!I", SupvActionIds.SET_ADC_THRESHOLD)
+ command = command + struct.pack("!I", threshold)
+ return bytearray(command)
+
+
+def pack_select_nvm_cmd(object_id: bytes) -> bytearray:
+ mem = int(input("Specify NVM (0 - NVM0, 1 - MVM1): "))
+ command = object_id + struct.pack("!I", SupvActionIds.SELECT_NVM)
+ command = command + struct.pack("!B", mem)
+ return bytearray(command)
+
+
+def pack_auto_em_tests_cmd(object_id: bytes) -> bytearray:
+ test = int(input("Specify test (1 - complete, 2 - short): "))
+ command = object_id + struct.pack("!I", SupvActionIds.RUN_AUTO_EM_TESTS)
+ command = command + struct.pack("!B", test)
+ return bytearray(command)
+
+
+def pack_mram_wipe_cmd(object_id: bytes) -> bytearray:
+ start = int(input("Start address: 0x"), 16)
+ stop = int(input("Stop address: 0x"), 16)
+ command = object_id + struct.pack("!I", SupvActionIds.WIPE_MRAM)
+ command = command + struct.pack("!I", start)
+ command = command + struct.pack("!I", stop)
+ return bytearray(command)
+
+
+def pack_update_command(object_id: bytes, new_update: bool) -> bytearray:
+ command = bytearray()
+ memory_id = int(input("Specify memory ID: "))
+ start_address = int(input("Specify start address: 0x"), 16)
+ update_file = get_update_file()
+ if new_update:
+ init_bytes_written = 0
+ init_seq_count = 1
+ del_mem = True
+ else:
+ init_bytes_written = input("Specify bytes to start from [0 default]: ")
+ if init_bytes_written == "":
+ init_bytes_written = 0
+ init_bytes_written = int(init_bytes_written)
+ init_seq_count = input("Specify initial sequence count [1 default]: ")
+ if init_seq_count == "":
+ init_seq_count = 1
+ init_seq_count = int(init_seq_count)
+ del_mem = input("Delete memory? [y/n, y default]: ")
+ if del_mem.lower() in ["y", "1"]:
+ del_mem = 1
+ elif del_mem.lower() in ["n", "0"]:
+ del_mem = 0
+ else:
+ raise ValueError("Invalid input, use y or n")
+ 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)
+ command.extend(struct.pack("!I", init_bytes_written))
+ command.extend(struct.pack("!H", init_seq_count))
+ command.append(del_mem)
+ return bytearray(command)
+
+
+def pack_set_shutdown_timeout_command(object_id: bytes) -> bytearray:
+ command = bytearray()
+ 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 pack_logging_buffer_request(object_id: bytes) -> 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: bytes) -> 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)
+ command = command + struct.pack("!B", val)
+ return bytearray(command)
+
+
+def pack_read_gpio_cmd(object_id: bytes) -> 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 bytearray(command)
+
+
+def pack_logging_set_topic(object_id: bytes) -> bytearray:
+ command = object_id + struct.pack("!I", SupvActionIds.LOGGING_SET_TOPIC)
+ tpc = int(input("Specify logging topic: "))
+ command += struct.pack("!B", tpc)
+ return bytearray(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
+
+
+def handle_supv_hk_data(set_id: int, hk_data: bytes, printer: FsfwTmTcPrinter):
+ pw = PrintWrapper(printer)
+ current_idx = 0
+ if set_id == SetIds.HK_REPORT:
+ pass
+ elif set_id == SetIds.BOOT_STATUS_REPORT:
+ fmt_str = "!BBIIBBBBBB"
+ inc_len = struct.calcsize(fmt_str)
+ (
+ soc_state,
+ power_cycles,
+ boot_after_ms,
+ boot_timeout_ms,
+ active_nvm,
+ bp_0_state,
+ bp_1_state,
+ bp_2_state,
+ boot_state,
+ boot_cycles,
+ ) = struct.unpack(fmt_str, hk_data[0 : 0 + inc_len])
+ current_idx += inc_len
+ pw.dlog(
+ f"SoC state (0:off, 1:booting, 2:update, 3:operating, 4:shutdown, 5:reset): {soc_state}"
+ )
+ pw.dlog(f"Power Cycles {power_cycles}")
+ pw.dlog(f"Boot after {boot_after_ms} ms | Boot timeout {boot_timeout_ms} ms")
+ pw.dlog(f"Active NVM: {active_nvm}")
+ pw.dlog(
+ f"BP0 State {bp_0_state} | BP1 State {bp_1_state} | BP2 State {bp_2_state}"
+ )
+ pw.dlog(f"Boot State {boot_state} | Boot Cycles {boot_cycles}")
+ pw.printer.print_validity_buffer(hk_data[current_idx:], 10)
+ else:
+ pw.dlog(f"PLOC SUPV: HK handling not implemented for set ID {set_id}")
+ pw.dlog(f"Raw Data: 0x[{hk_data.hex(sep=',')}]")
diff --git a/tmtcc.py b/tmtcc.py
old mode 100644
new mode 100755
index e704716..e74171f
--- a/tmtcc.py
+++ b/tmtcc.py
@@ -1,7 +1,10 @@
-import argparse
+#!/usr/bin/env python3
+import logging
import sys
+import time
import traceback
-from typing import Optional
+
+from tmtccmd.tc.handler import SendCbParams
try:
import spacepackets
@@ -14,15 +17,7 @@ except ImportError as error:
sys.exit(1)
try:
- import tmtccmd.runner as tmtccmd
- from tmtccmd.logging.pus import create_tmtc_logger
- from tmtccmd.ccsds.handler import ApidHandler, CcsdsTmHandler
- from tmtccmd.config import SetupArgs, default_json_path
- from tmtccmd.config.args import (
- create_default_args_parser,
- add_default_tmtccmd_args,
- parse_default_input_arguments,
- )
+ import tmtccmd
except ImportError as error:
run_tmtc_commander = None
initialize_tmtc_commander = None
@@ -31,35 +26,214 @@ except ImportError as error:
print("Python tmtccmd submodule could not be imported")
sys.exit(1)
+from spacepackets.ecss import PusVerificator
+from tmtccmd import get_console_logger, TcHandlerBase, BackendBase
+from tmtccmd.util import FileSeqCountProvider, PusFileSeqCountProvider
+from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
+
+from tmtccmd.logging.pus import (
+ RawTmtcTimedLogWrapper,
+ RegularTmtcLogWrapper,
+ TimedLogWhen,
+)
+from tmtccmd.pus import VerificationWrapper
+from tmtccmd.tm import SpecificApidHandlerBase, GenericApidHandlerBase, CcsdsTmHandler
+from tmtccmd.core import BackendRequest
+from tmtccmd.logging import get_current_time_string
+from tmtccmd.tc import (
+ ProcedureHelper,
+ FeedWrapper,
+ TcProcedureType,
+ TcQueueEntryType,
+ DefaultPusQueueHelper,
+)
+from tmtccmd.config import default_json_path, SetupWrapper
+from tmtccmd.config.args import SetupParams, ArgParserWrapper
from config import __version__
from config.definitions import PUS_APID
-from config.hook_implementations import EiveHookObject
-from pus_tm.factory_hook import ccsds_tm_handler
-from pus_tc.tc_packer_hook import pre_tc_send_cb
+from config.hook import EiveHookObject
+from pus_tm.factory_hook import pus_factory_hook
+from pus_tc.procedure_packer import handle_default_procedure
+
+LOGGER = get_console_logger()
-def tmtcc_pre_args() -> EiveHookObject:
+# Put rotating file logger parameters here for quick changes
+ROTATING_TIMED_LOGGER_INTERVAL_WHEN = TimedLogWhen.PER_MINUTE
+ROTATING_TIMED_LOGGER_INTERVAL = 30
+
+
+class PusHandler(SpecificApidHandlerBase):
+ def __init__(
+ self,
+ wrapper: VerificationWrapper,
+ printer: FsfwTmTcPrinter,
+ raw_logger: RawTmtcTimedLogWrapper,
+ ):
+ super().__init__(PUS_APID, None)
+ self.printer = printer
+ self.verif_wrapper = wrapper
+ self.raw_logger = raw_logger
+
+ def handle_tm(self, packet: bytes, _user_args: any):
+ pus_factory_hook(packet, self.verif_wrapper, self.printer, self.raw_logger)
+
+
+class UnknownApidHandler(GenericApidHandlerBase):
+ def handle_tm(self, apid: int, _packet: bytes, _user_args: any):
+ LOGGER.warning(f"Packet with unknwon APID {apid} detected")
+
+
+class TcHandler(TcHandlerBase):
+ def __init__(
+ self,
+ seq_count_provider: FileSeqCountProvider,
+ pus_verificator: PusVerificator,
+ file_logger: logging.Logger,
+ raw_logger: RawTmtcTimedLogWrapper,
+ gui: bool,
+ ):
+ super().__init__()
+ self.seq_count_provider = seq_count_provider
+ self.pus_verificator = pus_verificator
+ self.file_logger = file_logger
+ self.raw_logger = raw_logger
+ self.gui = gui
+ self.queue_helper = DefaultPusQueueHelper(
+ queue_wrapper=None,
+ pus_apid=PUS_APID,
+ seq_cnt_provider=seq_count_provider,
+ pus_verificator=pus_verificator,
+ )
+
+ def feed_cb(self, info: ProcedureHelper, wrapper: FeedWrapper):
+ self.queue_helper.queue_wrapper = wrapper.queue_wrapper
+ if info.proc_type == TcProcedureType.DEFAULT:
+ handle_default_procedure(self, info.to_def_procedure(), self.queue_helper)
+
+ def send_cb(self, send_params: SendCbParams):
+ entry_helper = send_params.entry
+ if entry_helper.is_tc:
+ if entry_helper.entry_type == TcQueueEntryType.PUS_TC:
+ pus_tc_wrapper = entry_helper.to_pus_tc_entry()
+ pus_tc_wrapper.pus_tc.seq_count = (
+ self.seq_count_provider.get_and_increment()
+ )
+ pus_tc_wrapper.pus_tc.apid = PUS_APID
+ # Add TC after Sequence Count stamping
+ self.pus_verificator.add_tc(pus_tc_wrapper.pus_tc)
+ raw_tc = pus_tc_wrapper.pus_tc.pack()
+ self.raw_logger.log_tc(pus_tc_wrapper.pus_tc)
+ tc_info_string = f"Sent {pus_tc_wrapper.pus_tc}"
+ LOGGER.info(tc_info_string)
+ self.file_logger.info(
+ f"{get_current_time_string(True)}: {tc_info_string}"
+ )
+ send_params.com_if.send(raw_tc)
+ elif entry_helper.entry_type == TcQueueEntryType.LOG:
+ log_entry = entry_helper.to_log_entry()
+ LOGGER.info(log_entry.log_str)
+ self.file_logger.info(log_entry.log_str)
+
+ def queue_finished_cb(self, info: ProcedureHelper):
+ if info is not None and info.proc_type == TcQueueEntryType.PUS_TC:
+ def_proc = info.to_def_procedure()
+ LOGGER.info(
+ f"Finished queue for service {def_proc.service} and op code {def_proc.op_code}"
+ )
+
+
+def setup_params() -> SetupWrapper:
print(f"-- eive tmtc v{__version__} --")
print(f"-- spacepackets v{spacepackets.__version__} --")
- tmtccmd.init_printout(False)
- return EiveHookObject(json_cfg_path=default_json_path())
+ hook_obj = EiveHookObject(default_json_path())
+ params = SetupParams()
+ parser_wrapper = ArgParserWrapper(hook_obj)
+ parser_wrapper.create_default_parent_parser()
+ parser_wrapper.create_default_parser()
+ parser_wrapper.add_def_proc_and_cfdp_as_subparsers()
+ parser_wrapper.parse()
+ tmtccmd.init_printout(parser_wrapper.use_gui)
+ parser_wrapper.set_params(params)
+ params.apid = PUS_APID
+ setup_wrapper = SetupWrapper(hook_obj=hook_obj, setup_params=params)
+ return setup_wrapper
-def tmtcc_post_args(
- hook_obj: EiveHookObject, use_gui: bool, args: Optional[argparse.Namespace]
-):
- setup_args = SetupArgs(
- hook_obj=hook_obj, use_gui=use_gui, apid=PUS_APID, cli_args=args
+def setup_tmtc(
+ verificator: PusVerificator,
+ printer: FsfwTmTcPrinter,
+ raw_logger: RawTmtcTimedLogWrapper,
+ gui: bool,
+) -> (CcsdsTmHandler, TcHandler):
+ verification_wrapper = VerificationWrapper(verificator, LOGGER, printer.file_logger)
+ pus_handler = PusHandler(verification_wrapper, printer, raw_logger)
+ ccsds_handler = CcsdsTmHandler(generic_handler=UnknownApidHandler(None))
+ ccsds_handler.add_apid_handler(pus_handler)
+ seq_count_provider = PusFileSeqCountProvider()
+ tc_handler = TcHandler(
+ seq_count_provider=seq_count_provider,
+ pus_verificator=verificator,
+ file_logger=printer.file_logger,
+ raw_logger=raw_logger,
+ gui=gui,
)
- tmtc_file_logger = create_tmtc_logger()
- apid_handler = ApidHandler(cb=ccsds_tm_handler, queue_len=50, user_args=None)
- ccsds_handler = CcsdsTmHandler()
- ccsds_handler.add_tm_handler(apid=PUS_APID, handler=apid_handler)
- tmtccmd.setup(setup_args=setup_args)
- tmtccmd.add_ccsds_handler(ccsds_handler)
+ return ccsds_handler, tc_handler
+
+
+def setup_backend(
+ setup_wrapper: SetupWrapper,
+ tc_handler: TcHandler,
+ ccsds_handler: CcsdsTmHandler,
+) -> BackendBase:
tmtc_backend = tmtccmd.create_default_tmtc_backend(
- setup_args=setup_args,
- tm_handler=ccsds_handler,
+ setup_wrapper=setup_wrapper, tm_handler=ccsds_handler, tc_handler=tc_handler
)
- tmtc_backend.usr_send_wrapper = (pre_tc_send_cb, tmtc_file_logger)
- tmtccmd.run(tmtc_backend=tmtc_backend)
+ tmtccmd.start(tmtc_backend=tmtc_backend, hook_obj=setup_wrapper.hook_obj)
+ return tmtc_backend
+
+
+def main():
+ try:
+ setup_wrapper = setup_params()
+ except KeyboardInterrupt as e:
+ LOGGER.info(f"{e}. Exiting")
+ sys.exit(0)
+ tmtc_logger = RegularTmtcLogWrapper()
+ printer = FsfwTmTcPrinter(tmtc_logger.logger)
+ raw_logger = RawTmtcTimedLogWrapper(
+ when=ROTATING_TIMED_LOGGER_INTERVAL_WHEN,
+ interval=ROTATING_TIMED_LOGGER_INTERVAL,
+ )
+ pus_verificator = PusVerificator()
+ ccsds_handler, tc_handler = setup_tmtc(
+ pus_verificator, printer, raw_logger, setup_wrapper.params.use_gui
+ )
+
+ tmtccmd.setup(setup_wrapper)
+ tmtc_backend = setup_backend(
+ setup_wrapper=setup_wrapper, ccsds_handler=ccsds_handler, tc_handler=tc_handler
+ )
+ try:
+ while True:
+ state = tmtc_backend.periodic_op(None)
+ if state.request == BackendRequest.TERMINATION_NO_ERROR:
+ sys.exit(0)
+ elif state.request == BackendRequest.DELAY_IDLE:
+ LOGGER.info("TMTC Client in IDLE mode")
+ time.sleep(3.0)
+ elif state.request == BackendRequest.DELAY_LISTENER:
+ time.sleep(0.5)
+ elif state.request == BackendRequest.DELAY_CUSTOM:
+ if state.next_delay.total_seconds() < 0.5:
+ time.sleep(state.next_delay.total_seconds())
+ else:
+ time.sleep(0.5)
+ elif state.request == BackendRequest.CALL_NEXT:
+ pass
+ except KeyboardInterrupt:
+ sys.exit(0)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/tmtccli.py b/tmtccli.py
deleted file mode 100755
index 29f3615..0000000
--- a/tmtccli.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env python3
-"""TMTC commander for EIVE"""
-from tmtcc import (
- tmtcc_post_args,
- tmtcc_pre_args,
- create_default_args_parser,
- add_default_tmtccmd_args,
- parse_default_input_arguments,
-)
-
-
-def main():
- hook_obj = tmtcc_pre_args()
- arg_parser = create_default_args_parser()
- add_default_tmtccmd_args(arg_parser)
- args = parse_default_input_arguments(arg_parser, hook_obj)
- tmtcc_post_args(hook_obj=hook_obj, use_gui=False, args=args)
-
-
-if __name__ == "__main__":
- main()
diff --git a/tmtccmd b/tmtccmd
deleted file mode 160000
index eaed332..0000000
--- a/tmtccmd
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit eaed332a69885c19912827eb71440e8562935d36
diff --git a/tmtcgui.py b/tmtcgui.py
deleted file mode 100755
index b36f61c..0000000
--- a/tmtcgui.py
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env python3
-"""TMTC commander for EIVE"""
-from tmtcc import tmtcc_post_args, tmtcc_pre_args
-from tmtccmd.config.args import (
- create_default_args_parser,
- add_gui_tmtccmd_args,
- parse_gui_input_arguments,
-)
-
-
-def main():
- hook_obj = tmtcc_pre_args()
- arg_parser = create_default_args_parser()
- add_gui_tmtccmd_args(arg_parser)
- args = parse_gui_input_arguments(arg_parser)
- tmtcc_post_args(hook_obj=hook_obj, use_gui=True, args=args)
-
-
-if __name__ == "__main__":
- main()
diff --git a/tmtcloop.py b/tmtcloop.py
index 0a7fdc8..d177c83 100755
--- a/tmtcloop.py
+++ b/tmtcloop.py
@@ -35,7 +35,7 @@ except ImportError as error:
sys.exit(1)
from config.definitions import PUS_APID
-from pus_tc.tc_packer_hook import pre_tc_send_cb
+from pus_tc.procedure_packer import pre_tc_send_cb
from pus_tm.factory_hook import ccsds_tm_handler
from tmtcc import tmtcc_pre_args