Compare commits

..

101 Commits

Author SHA1 Message Date
8b6039e15d bump changelog 2023-01-26 20:36:10 +01:00
e4963fb712 Merge pull request 'fixed mgm proc output' (#128) from mgm-proc-fix into main
Reviewed-on: #128
2023-01-26 20:35:26 +01:00
feacfeaf65 Merge branch 'main' into mgm-proc-fix 2023-01-26 20:35:04 +01:00
47480a7959 bump minor version 2023-01-26 20:34:37 +01:00
67c6b86baf update retvals 2023-01-26 19:43:08 +01:00
df1bbe9ded pack syrlinks command correctly 2023-01-26 17:00:50 +01:00
39dfac2520 added new events 2023-01-26 16:44:01 +01:00
b8a8f4b5a3 event update 2023-01-26 16:21:11 +01:00
733fc19d78 update retvals 2023-01-26 16:18:58 +01:00
83f10ed253 add command to configure default data rate 2023-01-26 16:16:09 +01:00
c4329558c9 better op codes 2023-01-26 15:50:19 +01:00
72c577e991 update of tmtccmd 2023-01-26 15:47:39 +01:00
0fe6cec54c update submodes 2023-01-26 15:45:25 +01:00
2ac182e753 add commands to update default data rate 2023-01-26 14:34:21 +01:00
ffdc6a68bb bump tmtccmd dependency 2023-01-26 14:29:56 +01:00
99d5ed014b add new submode for default data rate 2023-01-26 14:00:03 +01:00
05f22ae4ce small tweak 2023-01-26 13:45:59 +01:00
69e2b82c8e bump changelog 2023-01-26 13:44:58 +01:00
8a5e779e23 update syrlinks commands 2023-01-26 13:43:57 +01:00
c36c7ca5bb move CCSDS handler definitions 2023-01-26 11:31:26 +01:00
8a7880bc35 add new CCSDS handler mode commands 2023-01-25 14:51:32 +01:00
cac68dba7f bump changelog 2023-01-25 14:15:55 +01:00
4323b0659d move startracker module into acs folder 2023-01-25 14:15:25 +01:00
55cecdf81c move some modules 2023-01-25 14:14:22 +01:00
82c6b60af2 this should be better 2023-01-25 13:45:11 +01:00
35a485d79e fixed mgm proc output 2023-01-25 13:43:08 +01:00
49ccb4be8d add enable/disable for TX regs as well 2023-01-24 19:07:11 +01:00
8341ccc99d better names 2023-01-24 17:49:59 +01:00
5998aa12a4 bump changelog 2023-01-24 13:06:36 +01:00
5a05eb4825 added command to request switcher set 2023-01-24 13:06:08 +01:00
f8299b91cd import replacements 2023-01-24 12:41:50 +01:00
45253bc9b8 update changelog 2023-01-24 12:39:23 +01:00
7537388f6e Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-01-24 12:38:50 +01:00
fe19284a8e move str file and add some set IDs 2023-01-24 12:38:32 +01:00
49f27c9923 forgot bumping version again 2023-01-23 17:43:22 +01:00
0010ac581a always forggetting it.. 2023-01-23 17:42:50 +01:00
0a7feff169 bump changelog 2023-01-23 17:40:27 +01:00
9b30d290a7 pin tmtccmd on v4.0.0a2 2023-01-23 17:38:14 +01:00
d23201466c syrlinks cmd updates 2023-01-23 15:35:24 +01:00
8bcee7c094 add enable/disable HK syrlinks 2023-01-23 15:04:06 +01:00
033c8927c0 update generated files 2023-01-23 11:30:45 +01:00
220cb5e9f4 small tweak for TCS system info 2023-01-23 11:25:29 +01:00
7387ae3583 bump tmtccmd 2023-01-20 16:28:44 +01:00
2f33a43937 changelog 2023-01-20 14:22:54 +01:00
a2cd9245a2 Merge pull request 'Update SA DEPL commands' (#127) from update_sa_depl_cmds into main
Reviewed-on: #127
2023-01-20 14:21:59 +01:00
5a0feff284 add missing cmds 2023-01-20 13:55:13 +01:00
912728474a that should do the job 2023-01-20 12:19:57 +01:00
2b5ad32fdd Merge pull request 'fixes fixes fixes' (#126) from acs-ctrl-fixes into main
Reviewed-on: #126
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-01-20 11:28:31 +01:00
b3b98eb2d2 add TCS subsystem commands 2023-01-20 11:28:07 +01:00
7d068d85c8 Merge branch 'main' into acs-ctrl-fixes 2023-01-20 10:52:48 +01:00
d6c35262bf Merge pull request 'Add SUS temps handling' (#124) from mueller_add_sus_temps into main
Reviewed-on: #124
2023-01-20 10:51:40 +01:00
1317441c03 Merge branch 'main' into mueller_add_sus_temps 2023-01-20 10:51:30 +01:00
cd8fdc4865 Merge branch 'main' into acs-ctrl-fixes 2023-01-20 10:51:22 +01:00
3a60fd2d6d black 2023-01-20 10:35:30 +01:00
d77ccbf8e9 fixes fixes fixes
- improved cmd OpCodes naming
- removed normal mode without submode which gets rejected anyways
- added normal mode with submodes
- fixed bugs in sus hk handling
2023-01-20 09:44:51 +01:00
f3c0b7567a Merge pull request 'rtd command to rewrite config' (#125) from meier/rtd into main
Reviewed-on: #125
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-01-19 16:49:22 +01:00
485f0015d7 Merge branch 'main' into meier/rtd 2023-01-19 16:49:08 +01:00
a3eb34a73d some ACS sets are diagnostic now 2023-01-19 16:41:49 +01:00
dfa5cad8a6 Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-01-19 16:28:30 +01:00
1cab6dc065 bump used tmtccmd version 2023-01-19 16:28:22 +01:00
a5337b5293 replace deprecated API 2023-01-19 13:29:01 +01:00
887312371b rtd command to rewrite config 2023-01-19 13:21:12 +01:00
c2f43c90fb hmm this command disappeared 2023-01-19 13:11:28 +01:00
b9b1769bc5 Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-01-19 09:19:27 +01:00
118b439272 Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-01-18 16:51:31 +01:00
612383ade1 bump installed tmtccmd again 2023-01-18 16:50:56 +01:00
2e40e31c15 bump changelog 2023-01-18 16:31:47 +01:00
aba0dd8ebb add SUS temp handling 2023-01-18 16:30:11 +01:00
c9790911ef make syrlinks hk a bit more readable 2023-01-18 15:52:35 +01:00
8001156a02 move and improve syrlinks module 2023-01-18 15:43:02 +01:00
db0cbf620e bugfix for syrlinks HK code 2023-01-18 15:36:09 +01:00
43e6f0cefa re-run generators 2023-01-18 14:03:05 +01:00
0c67ce5b08 bump release 2023-01-18 11:50:40 +01:00
9cccefc938 another small bump for tmtccmd 2023-01-18 11:48:51 +01:00
404082c38d this version uses a concrete spacepackets version 2023-01-18 11:38:15 +01:00
5021a88112 update setup.cfg again 2023-01-18 11:35:07 +01:00
15fbfd0f95 Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-01-18 11:32:21 +01:00
4a02e284b3 changes for updated tmtccmd 2023-01-18 11:12:07 +01:00
bd9c134729 bump tmtccmd 2023-01-17 19:08:00 +01:00
44f15eced7 bump tmtccmd 2023-01-17 18:37:16 +01:00
ff72c02508 annoying 2023-01-17 18:32:53 +01:00
f14bb81c9b and yet another bump 2023-01-17 11:16:16 +01:00
136aaecb77 should be the last of renamings 2023-01-17 11:10:52 +01:00
32db4fabdc bump tmtccmd again 2023-01-17 10:48:57 +01:00
484deb0f97 bump tmtccmd again 2023-01-17 10:44:26 +01:00
ead4c91769 bump tmtccmd again 2023-01-16 17:45:46 +01:00
e5e19a8c04 Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-01-16 17:11:29 +01:00
92ef500f42 restructure TCS module a bit 2023-01-16 17:11:20 +01:00
43ca7de786 bump setup.cfg again 2023-01-16 15:37:32 +01:00
4839ab4365 update tmtccmd dependency 2023-01-16 15:05:33 +01:00
7bc49f1ff7 Merge branch 'main' of https://egit.irs.uni-stuttgart.de/eive/eive-tmtc 2023-01-16 14:53:46 +01:00
74a439955f use specific commit 2023-01-16 14:53:38 +01:00
aff3ced2c2 start adding acs ctrl modes 2023-01-16 14:48:12 +01:00
e1cd0e9b5c update author field 2023-01-16 14:22:25 +01:00
a42cdcdfba bump minor version 2023-01-16 14:21:12 +01:00
9d835e5705 some more consistency updates, delete obsolete file 2023-01-16 14:18:15 +01:00
e7609f02b9 consistency change for enum names 2023-01-16 14:13:06 +01:00
87f5bf83d1 bump required python version 2023-01-16 14:06:07 +01:00
0e9f7e6444 small renaming 2023-01-16 13:22:41 +01:00
cae971e90b Merge pull request 'ACS-Ctrl Validity Flags' (#123) from acs-ctrl-validity-flags into main
Reviewed-on: #123
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2023-01-16 09:59:06 +01:00
d294649916 corrected sizes and added missing validity flags 2023-01-16 09:46:52 +01:00
72 changed files with 2219 additions and 1871 deletions

View File

@ -1,7 +1,7 @@
<component name="ProjectRunConfigurationManager"> <component name="ProjectRunConfigurationManager">
<configuration default="false" name="tmtccli" type="PythonConfigurationType" factoryName="Python"> <configuration default="false" name="tmtccli" type="PythonConfigurationType" factoryName="Python">
<module name="tmtc" /> <module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" /> <option name="INTERPRETER_OPTIONS" value="-X dev" />
<option name="PARENT_ENVS" value="true" /> <option name="PARENT_ENVS" value="true" />
<envs> <envs>
<env name="PYTHONUNBUFFERED" value="1" /> <env name="PYTHONUNBUFFERED" value="1" />

View File

@ -8,11 +8,53 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/).
The [milestone](https://egit.irs.uni-stuttgart.de/eive/eive-obsw/milestones) The [milestone](https://egit.irs.uni-stuttgart.de/eive/eive-obsw/milestones)
list yields a list of all related PRs for each release. list yields a list of all related PRs for each release.
# [v2.1.1] 12.01.2023 # [unreleased]
# [v2.5.0] 2023-01-26
## Fixed
- Bugfix for CCSDS handler commanding: Pass correct object ID
- Processed MGM set TM handling fix
## Added
- Added command to request switcher set from PCDU handler.
- Star Tracker: Add commands to update default datarate.
## Changed
- Move Star Tracker module to `tmtc` folder and add some set IDs. Rename `SetIds` to `SetId`.
- Move `syrlinks_hk_handler` and `ccsds_handler` module to `tmtc` module.
Rename `syrlinks_hk_handler` to `syrlinks_handler`.
- Move `star_tracker` module into `tmtc.acs`
- CCSDS Handler: Switch from action commands to mode commands for ON/OFF handling.
- Star Tracker: Switch from actions commands to mode commands for RX/TX/Modulation commanding.
# [v2.4.0] and [v2.4.1] 2023-01-23
- Pin `tmtccmd` to v4.0.0a2
- Unify and move Syrlinks module, some bugfixes
- Add/Re-enable handling for SUS temp packets
- Update SA deployment commands for OBSW https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/347
- Extend, fix and improve Syrlinks TMTC handling a bit
# [v2.3.0] and [v2.3.1] 2023-01-18
- Bumped `tmtccmd` version to new alpha release, use some new features
and fix the breaking changes
# [v2.2.0] 2023-01-16
- A lot of consistency renaming: Single name for enums which are not flag enums,
e.g `ActionId` instead of `ActionIds`
- Updated required Python version to 3.10
# [v2.1.1] 2023-01-12
- Typo in `setup.cfg`, missing version prefix `v` for `tmtccmd` - Typo in `setup.cfg`, missing version prefix `v` for `tmtccmd`
# [v2.1.0] 12.01.2023 # [v2.1.0] 2023-01-12
- Various refactoring and tweaks to allow easier integration into `eive-mib`. - Various refactoring and tweaks to allow easier integration into `eive-mib`.
- Handle ACS CTRL HK sets. - Handle ACS CTRL HK sets.
@ -21,22 +63,22 @@ list yields a list of all related PRs for each release.
- Starting from now, more regular releases, especially on breaking changes. This is because - Starting from now, more regular releases, especially on breaking changes. This is because
this is now also a library with dependents. this is now also a library with dependents.
# [v2.0.2] 01.12.2022 # [v2.0.2] 2022-01-12
- Bumped dependencies, small fix to allow working script if PyQt is not installed - Bumped dependencies, small fix to allow working script if PyQt is not installed
# [v2.0.1] 29.11.2022 # [v2.0.1] 2022-11-29
- Minor bugfix - Minor bugfix
# [v2.0.0] 29.11.2022 # [v2.0.0] 2022-11-29
- The tmtc program is installable now, which allow re-using it in other Python applications - The tmtc program is installable now, which allow re-using it in other Python applications
- Bugfixes for IMTQ TM handling - Bugfixes for IMTQ TM handling
- Updates S/A deployment command - Updates S/A deployment command
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/118 PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/118
# [v1.13.0] 13.10.2022 # [v1.13.0] 2022-10-13
- CFDP integration - CFDP integration
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/113 PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/113
@ -49,7 +91,7 @@ list yields a list of all related PRs for each release.
- Update PLOC supervisor commands - Update PLOC supervisor commands
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/107 PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/107
# [v1.12.0] 05.07.2022 # [v1.12.0] 2022-07-05
- Update GPS HK Parsing - Update GPS HK Parsing
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/86 PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/86

View File

@ -2,10 +2,10 @@ from pathlib import Path
SW_NAME = "eive-tmtc" SW_NAME = "eive-tmtc"
VERSION_MAJOR = 2 VERSION_MAJOR = 2
VERSION_MINOR = 1 VERSION_MINOR = 5
VERSION_REVISION = 1 VERSION_REVISION = 0
__version__ = "2.1.1" __version__ = "2.5.0"
EIVE_TMTC_ROOT = Path(__file__).parent EIVE_TMTC_ROOT = Path(__file__).parent
PACKAGE_ROOT = EIVE_TMTC_ROOT.parent PACKAGE_ROOT = EIVE_TMTC_ROOT.parent

View File

@ -83,6 +83,7 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
10800;0x2a30;STORE_ERROR;LOW;;fsfw/src/fsfw/cfdp/handler/defs.h 10800;0x2a30;STORE_ERROR;LOW;;fsfw/src/fsfw/cfdp/handler/defs.h
10801;0x2a31;MSG_QUEUE_ERROR;LOW;;fsfw/src/fsfw/cfdp/handler/defs.h 10801;0x2a31;MSG_QUEUE_ERROR;LOW;;fsfw/src/fsfw/cfdp/handler/defs.h
10802;0x2a32;SERIALIZATION_ERROR;LOW;;fsfw/src/fsfw/cfdp/handler/defs.h 10802;0x2a32;SERIALIZATION_ERROR;LOW;;fsfw/src/fsfw/cfdp/handler/defs.h
11200;0x2bc0;SAFE_RATE_VIOLATION;MEDIUM;;mission/controller/AcsController.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 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 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 11302;0x2c26;SWITCHING_Q7S_DENIED;MEDIUM;;mission/devices/devicedefinitions/powerDefinitions.h
@ -225,11 +226,9 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
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/PlocSupvUartMan.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/PlocSupvUartMan.h
13631;0x353f;HDLC_FRAME_REMOVAL_ERROR;INFO;;linux/devices/ploc/PlocSupvUartMan.h 13631;0x353f;HDLC_FRAME_REMOVAL_ERROR;INFO;;linux/devices/ploc/PlocSupvUartMan.h
13632;0x3540;HDLC_CRC_ERROR;INFO;;linux/devices/ploc/PlocSupvUartMan.h 13632;0x3540;HDLC_CRC_ERROR;INFO;;linux/devices/ploc/PlocSupvUartMan.h
13700;0x3584;ALLOC_FAILURE;MEDIUM;;bsp_q7s/core/CoreController.h 13700;0x3584;FDIR_REACTION_IGNORED;MEDIUM;;mission/devices/devicedefinitions/SyrlinksDefinitions.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 13701;0x3585;TX_ON;INFO;Transmitter is on now. P1: Submode, P2: Current default datarate.;mission/devices/devicedefinitions/SyrlinksDefinitions.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 13702;0x3586;TX_OFF;INFO;Transmitter is off now.;mission/devices/devicedefinitions/SyrlinksDefinitions.h
13703;0x3587;REBOOT_HW;MEDIUM;;bsp_q7s/core/CoreController.h
13704;0x3588;NO_SD_CARD_ACTIVE;HIGH;No SD card was active. Core controller will attempt to re-initialize a SD card.;bsp_q7s/core/CoreController.h
13800;0x35e8;MISSING_PACKET;LOW;;mission/devices/devicedefinitions/ScexDefinitions.h 13800;0x35e8;MISSING_PACKET;LOW;;mission/devices/devicedefinitions/ScexDefinitions.h
13801;0x35e9;EXPERIMENT_TIMEDOUT;LOW;;mission/devices/devicedefinitions/ScexDefinitions.h 13801;0x35e9;EXPERIMENT_TIMEDOUT;LOW;;mission/devices/devicedefinitions/ScexDefinitions.h
13802;0x35ea;MULTI_PACKET_COMMAND_DONE;INFO;;mission/devices/devicedefinitions/ScexDefinitions.h 13802;0x35ea;MULTI_PACKET_COMMAND_DONE;INFO;;mission/devices/devicedefinitions/ScexDefinitions.h
@ -238,3 +237,8 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
13903;0x364f;INSERT_CONFIGFILEVALUE_FAILED;MEDIUM;;mission/utility/GlobalConfigHandler.h 13903;0x364f;INSERT_CONFIGFILEVALUE_FAILED;MEDIUM;;mission/utility/GlobalConfigHandler.h
13904;0x3650;WRITE_CONFIGFILE_FAILED;MEDIUM;;mission/utility/GlobalConfigHandler.h 13904;0x3650;WRITE_CONFIGFILE_FAILED;MEDIUM;;mission/utility/GlobalConfigHandler.h
13905;0x3651;READ_CONFIGFILE_FAILED;MEDIUM;;mission/utility/GlobalConfigHandler.h 13905;0x3651;READ_CONFIGFILE_FAILED;MEDIUM;;mission/utility/GlobalConfigHandler.h
14000;0x36b0;ALLOC_FAILURE;MEDIUM;;bsp_q7s/core/CoreController.h
14001;0x36b1;REBOOT_SW;MEDIUM; Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy;bsp_q7s/core/CoreController.h
14002;0x36b2;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
14003;0x36b3;REBOOT_HW;MEDIUM;;bsp_q7s/core/CoreController.h
14004;0x36b4;NO_SD_CARD_ACTIVE;HIGH;No SD card was active. Core controller will attempt to re-initialize a SD card.;bsp_q7s/core/CoreController.h

1 Event ID (dec) Event ID (hex) Name Severity Description File Path
83 10800 0x2a30 STORE_ERROR LOW fsfw/src/fsfw/cfdp/handler/defs.h
84 10801 0x2a31 MSG_QUEUE_ERROR LOW fsfw/src/fsfw/cfdp/handler/defs.h
85 10802 0x2a32 SERIALIZATION_ERROR LOW fsfw/src/fsfw/cfdp/handler/defs.h
86 11200 0x2bc0 SAFE_RATE_VIOLATION MEDIUM mission/controller/AcsController.h
87 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
88 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
89 11302 0x2c26 SWITCHING_Q7S_DENIED MEDIUM mission/devices/devicedefinitions/powerDefinitions.h
226 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/PlocSupvUartMan.h
227 13631 0x353f HDLC_FRAME_REMOVAL_ERROR INFO linux/devices/ploc/PlocSupvUartMan.h
228 13632 0x3540 HDLC_CRC_ERROR INFO linux/devices/ploc/PlocSupvUartMan.h
229 13700 0x3584 ALLOC_FAILURE FDIR_REACTION_IGNORED MEDIUM bsp_q7s/core/CoreController.h mission/devices/devicedefinitions/SyrlinksDefinitions.h
230 13701 0x3585 REBOOT_SW TX_ON MEDIUM INFO Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy Transmitter is on now. P1: Submode, P2: Current default datarate. bsp_q7s/core/CoreController.h mission/devices/devicedefinitions/SyrlinksDefinitions.h
231 13702 0x3586 REBOOT_MECHANISM_TRIGGERED TX_OFF MEDIUM INFO 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 Transmitter is off now. bsp_q7s/core/CoreController.h mission/devices/devicedefinitions/SyrlinksDefinitions.h
13703 0x3587 REBOOT_HW MEDIUM bsp_q7s/core/CoreController.h
13704 0x3588 NO_SD_CARD_ACTIVE HIGH No SD card was active. Core controller will attempt to re-initialize a SD card. bsp_q7s/core/CoreController.h
232 13800 0x35e8 MISSING_PACKET LOW mission/devices/devicedefinitions/ScexDefinitions.h
233 13801 0x35e9 EXPERIMENT_TIMEDOUT LOW mission/devices/devicedefinitions/ScexDefinitions.h
234 13802 0x35ea MULTI_PACKET_COMMAND_DONE INFO mission/devices/devicedefinitions/ScexDefinitions.h
237 13903 0x364f INSERT_CONFIGFILEVALUE_FAILED MEDIUM mission/utility/GlobalConfigHandler.h
238 13904 0x3650 WRITE_CONFIGFILE_FAILED MEDIUM mission/utility/GlobalConfigHandler.h
239 13905 0x3651 READ_CONFIGFILE_FAILED MEDIUM mission/utility/GlobalConfigHandler.h
240 14000 0x36b0 ALLOC_FAILURE MEDIUM bsp_q7s/core/CoreController.h
241 14001 0x36b1 REBOOT_SW MEDIUM Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy bsp_q7s/core/CoreController.h
242 14002 0x36b2 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
243 14003 0x36b3 REBOOT_HW MEDIUM bsp_q7s/core/CoreController.h
244 14004 0x36b4 NO_SD_CARD_ACTIVE HIGH No SD card was active. Core controller will attempt to re-initialize a SD card. bsp_q7s/core/CoreController.h

View File

@ -3,7 +3,7 @@ import os
from eive_tmtc import EIVE_TMTC_ROOT from eive_tmtc import EIVE_TMTC_ROOT
from tmtccmd import get_console_logger from tmtccmd import get_console_logger
from tmtccmd.fsfw import parse_fsfw_events_csv from tmtccmd.fsfw import parse_fsfw_events_csv
from tmtccmd.pus.pus_5_event import EventDictT from tmtccmd.pus.s5_event import EventDictT
LOGGER = get_console_logger() LOGGER = get_console_logger()
DEFAULT_EVENTS_CSV_PATH = EIVE_TMTC_ROOT / "config/events.csv" DEFAULT_EVENTS_CSV_PATH = EIVE_TMTC_ROOT / "config/events.csv"

View File

@ -1,33 +0,0 @@
"""
@brief This file transfers definitions of global variables to the user.
@details Template configuration file. Copy this folder to the TMTC commander root and adapt
it to your needs.
"""
import enum
import argparse
# All globals can be added here and will be part of a globals dictionary.
from config.definitions import CustomServiceList, PUS_APID
from config.custom_mode_op import CustomModeList
from tmtccmd.config.definitions import CoreComInterfaces
from tmtccmd.config.globals import set_default_globals_pre_args_parsing
from tmtccmd.logging import get_console_logger
LOGGER = get_console_logger()
class CustomGlobalIds(enum.Enum):
from enum import auto
pass
def set_globals_pre_args_parsing(gui: bool = False):
set_default_globals_pre_args_parsing(
gui=gui,
tc_apid=PUS_APID,
tm_apid=PUS_APID,
com_if_id=CoreComInterfaces.TCPIP_UDP.value,
)

View File

@ -126,6 +126,7 @@ SUS_11_R_LOC_XBYMZB_PT_ZB = bytes([0x44, 0x12, 0x00, 0x43])
# System and Assembly Objects # System and Assembly Objects
ACS_SUBSYSTEM_ID = bytes([0x73, 0x01, 0x00, 0x01]) ACS_SUBSYSTEM_ID = bytes([0x73, 0x01, 0x00, 0x01])
PL_SUBSYSTEM_ID = bytes([0x73, 0x01, 0x00, 0x02]) PL_SUBSYSTEM_ID = bytes([0x73, 0x01, 0x00, 0x02])
TCS_SUBSYSTEM_ID = bytes([0x73, 0x01, 0x00, 0x03])
ACS_BOARD_ASS_ID = bytes([0x73, 0x00, 0x00, 0x01]) ACS_BOARD_ASS_ID = bytes([0x73, 0x00, 0x00, 0x01])
SUS_BOARD_ASS_ID = bytes([0x73, 0x00, 0x00, 0x02]) SUS_BOARD_ASS_ID = bytes([0x73, 0x00, 0x00, 0x02])
TCS_BOARD_ASS_ID = bytes([0x73, 0x00, 0x00, 0x03]) TCS_BOARD_ASS_ID = bytes([0x73, 0x00, 0x00, 0x03])

View File

@ -84,8 +84,10 @@
0x49050001;CSP_COM_IF 0x49050001;CSP_COM_IF
0x50000100;CCSDS_PACKET_DISTRIBUTOR 0x50000100;CCSDS_PACKET_DISTRIBUTOR
0x50000200;PUS_PACKET_DISTRIBUTOR 0x50000200;PUS_PACKET_DISTRIBUTOR
0x50000300;TMTC_BRIDGE 0x50000300;TCP_TMTC_SERVER
0x50000400;TMTC_POLLING_TASK 0x50000301;UDP_TMTC_SERVER
0x50000400;TCP_TMTC_POLLING_TASK
0x50000401;UDP_TMTC_POLLING_TASK
0x50000500;FILE_SYSTEM_HANDLER 0x50000500;FILE_SYSTEM_HANDLER
0x50000550;SDC_MANAGER 0x50000550;SDC_MANAGER
0x50000600;PTME 0x50000600;PTME
@ -144,5 +146,6 @@
0x73010000;EIVE_SYSTEM 0x73010000;EIVE_SYSTEM
0x73010001;ACS_SUBSYSTEM 0x73010001;ACS_SUBSYSTEM
0x73010002;PL_SUBSYSTEM 0x73010002;PL_SUBSYSTEM
0x73010003;TCS_SUBSYSTEM
0x73500000;CCSDS_IP_CORE_BRIDGE 0x73500000;CCSDS_IP_CORE_BRIDGE
0xFFFFFFFF;NO_OBJECT 0xFFFFFFFF;NO_OBJECT

1 0x00005060 P60DOCK_TEST_TASK
84 0x49050001 CSP_COM_IF
85 0x50000100 CCSDS_PACKET_DISTRIBUTOR
86 0x50000200 PUS_PACKET_DISTRIBUTOR
87 0x50000300 TMTC_BRIDGE TCP_TMTC_SERVER
88 0x50000400 0x50000301 TMTC_POLLING_TASK UDP_TMTC_SERVER
89 0x50000400 TCP_TMTC_POLLING_TASK
90 0x50000401 UDP_TMTC_POLLING_TASK
91 0x50000500 FILE_SYSTEM_HANDLER
92 0x50000550 SDC_MANAGER
93 0x50000600 PTME
146 0x73010000 EIVE_SYSTEM
147 0x73010001 ACS_SUBSYSTEM
148 0x73010002 PL_SUBSYSTEM
149 0x73010003 TCS_SUBSYSTEM
150 0x73500000 CCSDS_IP_CORE_BRIDGE
151 0xFFFFFFFF NO_OBJECT

View File

@ -1,14 +1,23 @@
Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
0x0000;OK;System-wide code for ok.;0;HasReturnvaluesIF;fsfw/returnvalues/returnvalue.h 0x0000;OK;System-wide code for ok.;0;HasReturnvaluesIF;fsfw/returnvalues/returnvalue.h
0x0001;Failed;Unspecified system-wide code for failed.;1;HasReturnvaluesIF;fsfw/returnvalues/returnvalue.h 0x0001;Failed;Unspecified system-wide code for failed.;1;HasReturnvaluesIF;fsfw/returnvalues/returnvalue.h
0x60a0;CCSDS_CommandNotImplemented;Received action message with unknown action id;160;CCSDS_HANDLER;mission/tmtc/CcsdsIpCoreHandler.h 0x63a0;NVMB_KeyNotExists;Specified key does not exist in json file;160;NVM_PARAM_BASE;mission/memory/NVMParameterBase.h
0x6300;NVMB_Busy;;0;NVM_PARAM_BASE;mission/system/objects/Stack5VHandler.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 0x66a0;SADPL_CommandNotSupported;;160;SA_DEPL_HANDLER;mission/devices/SolarArrayDeploymentHandler.h
0x66a1;SADPL_DeploymentAlreadyExecuting;;161;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 0x66a2;SADPL_MainSwitchTimeoutFailure;;162;SA_DEPL_HANDLER;mission/devices/SolarArrayDeploymentHandler.h
0x66a3;SADPL_SwitchingDeplSa1Failed;;163;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 0x66a4;SADPL_SwitchingDeplSa2Failed;;164;SA_DEPL_HANDLER;mission/devices/SolarArrayDeploymentHandler.h
0x58a0;SUSS_ErrorUnlockMutex;;160;SUS_HANDLER;mission/devices/SusHandler.h 0x51a0;IMTQ_InvalidCommandCode;;160;IMTQ_HANDLER;mission/devices/ImtqHandler.h
0x58a1;SUSS_ErrorLockMutex;;161;SUS_HANDLER;mission/devices/SusHandler.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
0x52b0;RWHA_SpiWriteFailure;;176;RW_HANDLER;mission/devices/RwHandler.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 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 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
@ -21,115 +30,85 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
0x52a2;RWHA_SetSpeedCommandInvalidLength;Received set speed command has invalid length. Should be 6.;162;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 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 0x52a4;RWHA_CrcError;Reaction wheel reply has invalid crc;164;RW_HANDLER;mission/devices/RwHandler.h
0x4fa1;HEATER_CommandNotSupported;;161;HEATER_HANDLER;mission/devices/HeaterHandler.h 0x50a0;SYRLINKS_CrcFailure;;160;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
0x4fa2;HEATER_InitFailed;;162;HEATER_HANDLER;mission/devices/HeaterHandler.h 0x50a1;SYRLINKS_UartFraminOrParityErrorAck;;161;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
0x4fa3;HEATER_InvalidSwitchNr;;163;HEATER_HANDLER;mission/devices/HeaterHandler.h 0x50a2;SYRLINKS_BadCharacterAck;;162;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
0x4fa4;HEATER_MainSwitchSetTimeout;;164;HEATER_HANDLER;mission/devices/HeaterHandler.h 0x50a3;SYRLINKS_BadParameterValueAck;;163;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
0x4fa5;HEATER_CommandAlreadyWaiting;;165;HEATER_HANDLER;mission/devices/HeaterHandler.h 0x50a4;SYRLINKS_BadEndOfFrameAck;;164;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
0x50a5;SYRLINKS_UnknownCommandIdAck;;165;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
0x50a6;SYRLINKS_BadCrcAck;;166;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
0x50a7;SYRLINKS_ReplyWrongSize;;167;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
0x50a8;SYRLINKS_MissingStartFrameCharacter;;168;SYRLINKS_HANDLER;mission/devices/SyrlinksHandler.h
0x5d00;GOMS_PacketTooLong;;0;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h 0x5d00;GOMS_PacketTooLong;;0;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
0x5d01;GOMS_InvalidTableId;;1;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 0x5d02;GOMS_InvalidAddress;;2;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
0x5d03;GOMS_InvalidParamSize;;3;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 0x5d04;GOMS_InvalidPayloadSize;;4;GOM_SPACE_HANDLER;mission/devices/GomspaceDeviceHandler.h
0x5d05;GOMS_UnknownReplyId;;5;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 0x4fa1;HEATER_CommandNotSupported;;161;HEATER_HANDLER;mission/devices/HeaterHandler.h
0x51a1;IMTQ_ParameterMissing;;161;IMTQ_HANDLER;mission/devices/ImtqHandler.h 0x4fa2;HEATER_InitFailed;;162;HEATER_HANDLER;mission/devices/HeaterHandler.h
0x51a2;IMTQ_ParameterInvalid;;162;IMTQ_HANDLER;mission/devices/ImtqHandler.h 0x4fa3;HEATER_InvalidSwitchNr;;163;HEATER_HANDLER;mission/devices/HeaterHandler.h
0x51a3;IMTQ_CcUnavailable;;163;IMTQ_HANDLER;mission/devices/ImtqHandler.h 0x4fa4;HEATER_MainSwitchSetTimeout;;164;HEATER_HANDLER;mission/devices/HeaterHandler.h
0x51a4;IMTQ_InternalProcessingError;;164;IMTQ_HANDLER;mission/devices/ImtqHandler.h 0x4fa5;HEATER_CommandAlreadyWaiting;;165;HEATER_HANDLER;mission/devices/HeaterHandler.h
0x51a5;IMTQ_RejectedWithoutReason;;165;IMTQ_HANDLER;mission/devices/ImtqHandler.h 0x60a0;CCSDS_CommandNotImplemented;Received action message with unknown action id;160;CCSDS_HANDLER;mission/tmtc/CcsdsIpCoreHandler.h
0x51a6;IMTQ_CmdErrUnknown;;166;IMTQ_HANDLER;mission/devices/ImtqHandler.h 0x6001;CCSDS_KalmanNoGyrMeas;;1;CCSDS_HANDLER;mission/controller/acs/MultiplicativeKalmanFilter.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 0x6002;CCSDS_KalmanNoModel;;2;CCSDS_HANDLER;mission/controller/acs/MultiplicativeKalmanFilter.h
0x50a0;SYRLINKS_CrcFailure;;160;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h 0x6003;CCSDS_KalmanInversionFailed;;3;CCSDS_HANDLER;mission/controller/acs/MultiplicativeKalmanFilter.h
0x50a1;SYRLINKS_UartFraminOrParityErrorAck;;161;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h 0x4500;HSPI_OpeningFileFailed;;0;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
0x50a2;SYRLINKS_BadCharacterAck;;162;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h 0x4501;HSPI_FullDuplexTransferFailed;;1;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
0x50a3;SYRLINKS_BadParameterValueAck;;163;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h 0x4502;HSPI_HalfDuplexTransferFailed;;2;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
0x50a4;SYRLINKS_BadEndOfFrameAck;;164;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h 0x4801;HGIO_UnknownGpioId;;1;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
0x50a5;SYRLINKS_UnknownCommandIdAck;;165;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h 0x4802;HGIO_DriveGpioFailure;;2;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
0x50a6;SYRLINKS_BadCrcAck;;166;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h 0x4803;HGIO_GpioTypeFailure;;3;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
0x50a7;SYRLINKS_ReplyWrongSize;;167;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h 0x4804;HGIO_GpioInvalidInstance;;4;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
0x50a8;SYRLINKS_MissingStartFrameCharacter;;168;SYRLINKS_HANDLER;mission/devices/SyrlinksHkHandler.h 0x4805;HGIO_GpioDuplicateDetected;;5;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
0x63a0;NVMB_KeyNotExists;Specified key does not exist in json file;160;NVM_PARAM_BASE;mission/memory/NVMParameterBase.h 0x4806;HGIO_GpioInitFailed;;6;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
0x3c00;LPIF_PoolEntryNotFound;;0;LOCAL_POOL_OWNER_IF;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h 0x4807;HGIO_GpioGetValueFailed;;7;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
0x3c01;LPIF_PoolEntryTypeConflict;;1;LOCAL_POOL_OWNER_IF;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h 0x4601;HURT_UartReadFailure;;1;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
0x3e00;HKM_QueueOrDestinationInvalid;;0;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h 0x4602;HURT_UartReadSizeMissmatch;;2;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
0x3e01;HKM_WrongHkPacketType;;1;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h 0x4603;HURT_UartRxBufferTooSmall;;3;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
0x3e02;HKM_ReportingStatusUnchanged;;2;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h 0x4400;UXOS_ExecutionFinished;Execution of the current command has finished;0;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
0x3e03;HKM_PeriodicHelperInvalid;;3;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.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
0x3e04;HKM_PoolobjectNotFound;;4;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h 0x4402;UXOS_BytesRead;Some bytes have been read from the executing process;2;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
0x3e05;HKM_DatasetNotFound;;5;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h 0x4403;UXOS_CommandError;Command execution failed;3;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
0x3601;CFDP_InvalidTlvType;;1;CFDP;fsfw/src/fsfw/cfdp/definitions.h 0x4404;UXOS_NoCommandLoadedOrPending;;4;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h
0x3602;CFDP_InvalidDirectiveField;;2;CFDP;fsfw/src/fsfw/cfdp/definitions.h 0x4406;UXOS_PcloseCallError;;6;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.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_NakCantParseOptions;;6;CFDP;fsfw/src/fsfw/cfdp/definitions.h
0x3607;CFDP_FinishedCantParseFsResponses;;7;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
0x360a;CFDP_InvalidPduFormat;;10;CFDP;fsfw/src/fsfw/cfdp/definitions.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
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
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
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
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
0x2801;SM_DataTooLarge;;1;STORAGE_MANAGER_IF;fsfw/src/fsfw/storagemanager/StorageManagerIF.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 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 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 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 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 0x2806;SM_PoolTooLarge;;6;STORAGE_MANAGER_IF;fsfw/src/fsfw/storagemanager/StorageManagerIF.h
0x2401;MT_TooDetailedRequest;;1;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h 0x0601;PP_DoItMyself;;1;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x2402;MT_TooGeneralRequest;;2;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h 0x0602;PP_PointsToVariable;;2;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x2403;MT_NoMatch;;3;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h 0x0603;PP_PointsToMemory;;3;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x2404;MT_Full;;4;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h 0x0604;PP_ActivityCompleted;;4;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x2405;MT_NewNodeCreated;;5;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h 0x0605;PP_PointsToVectorUint8;;5;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x3f01;DLEE_StreamTooShort;;1;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleEncoder.h 0x0606;PP_PointsToVectorUint16;;6;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x3f02;DLEE_DecodingError;;2;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleEncoder.h 0x0607;PP_PointsToVectorUint32;;7;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x2f01;ASC_NoPacketFound;;1;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/DleParser.h 0x0608;PP_PointsToVectorFloat;;8;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x2f02;ASC_PossiblePacketLoss;;2;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/DleParser.h 0x06a0;PP_DumpNotSupported;;160;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x2f03;ASC_BufferTooSmall;;3;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/AsciiConverter.h 0x06e0;PP_InvalidSize;;224;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x4201;PUS11_InvalidTypeTimeWindow;;1;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h 0x06e1;PP_InvalidAddress;;225;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x4202;PUS11_InvalidTimeWindow;;2;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h 0x06e2;PP_InvalidContent;;226;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x4203;PUS11_TimeshiftingNotPossible;;3;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h 0x06e3;PP_UnalignedAccess;;227;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x4204;PUS11_InvalidRelativeTime;;4;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h 0x06e4;PP_WriteProtected;;228;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x1c01;TCD_PacketLost;;1;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributorBase.h 0x13e0;MH_UnknownCmd;;224;MEMORY_HELPER;fsfw/src/fsfw/memory/MemoryHelper.h
0x1c02;TCD_DestinationNotFound;;2;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributorBase.h 0x13e1;MH_InvalidAddress;;225;MEMORY_HELPER;fsfw/src/fsfw/memory/MemoryHelper.h
0x1c03;TCD_ServiceIdAlreadyExists;;3;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributorBase.h 0x13e2;MH_InvalidSize;;226;MEMORY_HELPER;fsfw/src/fsfw/memory/MemoryHelper.h
0x1b00;TCC_NoDestinationFound;;0;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h 0x13e3;MH_StateMismatch;;227;MEMORY_HELPER;fsfw/src/fsfw/memory/MemoryHelper.h
0x1b01;TCC_InvalidCcsdsVersion;;1;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h 0x38a1;SGP4_InvalidEccentricity;;161;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
0x1b02;TCC_InvalidApid;;2;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h 0x38a2;SGP4_InvalidMeanMotion;;162;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
0x1b03;TCC_InvalidPacketType;;3;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h 0x38a3;SGP4_InvalidPerturbationElements;;163;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
0x1b04;TCC_InvalidSecHeaderField;;4;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h 0x38a4;SGP4_InvalidSemiLatusRectum;;164;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
0x1b05;TCC_IncorrectPrimaryHeader;;5;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h 0x38a5;SGP4_InvalidEpochElements;;165;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
0x1b07;TCC_IncompletePacket;;7;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h 0x38a6;SGP4_SatelliteHasDecayed;;166;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
0x1b08;TCC_InvalidPusVersion;;8;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h 0x38b1;SGP4_TleTooOld;;177;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
0x1b09;TCC_IncorrectChecksum;;9;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h 0x38b2;SGP4_TleNotInitialized;;178;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h
0x1b0a;TCC_IllegalPacketSubtype;;10;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h 0x1801;FF_Full;;1;FIFO_CLASS;fsfw/src/fsfw/container/FIFOBase.h
0x1b0b;TCC_IncorrectSecondaryHeader;;11;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h 0x1802;FF_Empty;;2;FIFO_CLASS;fsfw/src/fsfw/container/FIFOBase.h
0x3a01;MQI_Empty;;1;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h 0x1601;FMM_MapFull;;1;FIXED_MULTIMAP;fsfw/src/fsfw/container/FixedOrderedMultimap.h
0x3a02;MQI_Full;No space left for more messages;2;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h 0x1602;FMM_KeyDoesNotExist;;2;FIXED_MULTIMAP;fsfw/src/fsfw/container/FixedOrderedMultimap.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
0x3901;MUX_NotEnoughResources;;1;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.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 0x3902;MUX_InsufficientMemory;;2;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
0x3903;MUX_NoPrivilege;;3;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h 0x3903;MUX_NoPrivilege;;3;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
@ -142,20 +121,23 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
0x390a;MUX_MutexTimeout;;10;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 0x390b;MUX_MutexInvalidId;;11;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
0x390c;MUX_MutexDestroyedWhileWaiting;;12;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h 0x390c;MUX_MutexDestroyedWhileWaiting;;12;MUTEX_IF;fsfw/src/fsfw/ipc/MutexIF.h
0x2901;TC_InvalidTargetState;;1;THERMAL_COMPONENT_IF;fsfw/src/fsfw/thermal/ThermalComponentIF.h 0x3a01;MQI_Empty;;1;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
0x29f1;TC_AboveOperationalLimit;;241;THERMAL_COMPONENT_IF;fsfw/src/fsfw/thermal/ThermalComponentIF.h 0x3a02;MQI_Full;No space left for more messages;2;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
0x29f2;TC_BelowOperationalLimit;;242;THERMAL_COMPONENT_IF;fsfw/src/fsfw/thermal/ThermalComponentIF.h 0x3a03;MQI_NoReplyPartner;Returned if a reply method was called without partner;3;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
0x0801;DPS_InvalidParameterDefinition;;1;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h 0x3a04;MQI_DestinationInvalid;Returned if the target destination is invalid.;4;MESSAGE_QUEUE_IF;fsfw/src/fsfw/ipc/MessageQueueIF.h
0x0802;DPS_SetWasAlreadyRead;;2;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h 0x0f01;CM_UnknownCommand;;1;COMMAND_MESSAGE;fsfw/src/fsfw/ipc/CommandMessageIF.h
0x0803;DPS_CommitingWithoutReading;;3;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h 0x0e01;HM_InvalidMode;;1;HAS_MODES_IF;fsfw/src/fsfw/modes/HasModesIF.h
0x0804;DPS_DataSetUninitialised;;4;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h 0x0e02;HM_TransNotAllowed;;2;HAS_MODES_IF;fsfw/src/fsfw/modes/HasModesIF.h
0x0805;DPS_DataSetFull;;5;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h 0x0e03;HM_InTransition;;3;HAS_MODES_IF;fsfw/src/fsfw/modes/HasModesIF.h
0x0806;DPS_PoolVarNull;;6;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h 0x0e04;HM_InvalidSubmode;;4;HAS_MODES_IF;fsfw/src/fsfw/modes/HasModesIF.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
0x0c02;MS_InvalidEntry;;2;MODE_STORE_IF;fsfw/src/fsfw/subsystem/modes/ModeStoreIF.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 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 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 0x0d01;SS_SequenceAlreadyExists;;1;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
0x0d02;SS_TableAlreadyExists;;2;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 0x0d03;SS_TableDoesNotExist;;3;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
@ -170,53 +152,7 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
0x0d0e;SS_TableInUse;;14;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 0x0da1;SS_TargetTableNotReached;;161;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
0x0da2;SS_TableCheckFailed;;162;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h 0x0da2;SS_TableCheckFailed;;162;SUBSYSTEM;fsfw/src/fsfw/subsystem/Subsystem.h
0x0b01;SB_ChildNotFound;;1;SUBSYSTEM_BASE;fsfw/src/fsfw/subsystem/SubsystemBase.h 0x2501;EV_ListenerNotFound;;1;EVENT_MANAGER_IF;fsfw/src/fsfw/events/EventManagerIF.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
0x0b00;SB_ConnBroken;;0;SUBSYSTEM_BASE;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
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
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
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
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
0x04e1;RMP_CommandNoDescriptorsAvailable;;225;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.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 0x04e2;RMP_CommandBufferFull;;226;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
0x04e3;RMP_CommandChannelOutOfRange;;227;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h 0x04e3;RMP_CommandChannelOutOfRange;;227;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
@ -257,6 +193,153 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
0x040a;RMP_ReplyCommandNotImplementedOrNotAuthorised;;10;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 0x040b;RMP_ReplyRmwDataLengthError;;11;RMAP_CHANNEL;fsfw/src/fsfw/rmap/RMAP.h
0x040c;RMP_ReplyInvalidTargetLogicalAddress;;12;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/TcDistributorBase.h
0x1c02;TCD_DestinationNotFound;;2;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributorBase.h
0x1c03;TCD_ServiceIdAlreadyExists;;3;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributorBase.h
0x1b00;TCC_NoDestinationFound;;0;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b01;TCC_InvalidCcsdsVersion;;1;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b02;TCC_InvalidApid;;2;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b03;TCC_InvalidPacketType;;3;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b04;TCC_InvalidSecHeaderField;;4;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b05;TCC_IncorrectPrimaryHeader;;5;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b07;TCC_IncompletePacket;;7;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b08;TCC_InvalidPusVersion;;8;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b09;TCC_IncorrectChecksum;;9;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b0a;TCC_IllegalPacketSubtype;;10;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b0b;TCC_IncorrectSecondaryHeader;;11;TMTC_DISTRIBUTION;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_InvalidDirectiveField;;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_NakCantParseOptions;;6;CFDP;fsfw/src/fsfw/cfdp/definitions.h
0x3607;CFDP_FinishedCantParseFsResponses;;7;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
0x360a;CFDP_InvalidPduFormat;;10;CFDP;fsfw/src/fsfw/cfdp/definitions.h
0x4300;FILS_GenericFileError;;0;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4301;FILS_GenericDirError;;1;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4302;FILS_FilesystemInactive;;2;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4303;FILS_GenericRenameError;;3;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4304;FILS_IsBusy;;4;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4305;FILS_InvalidParameters;;5;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430a;FILS_FileDoesNotExist;;10;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430b;FILS_FileAlreadyExists;;11;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430c;FILS_NotAFile;;12;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430d;FILS_FileLocked;;13;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430e;FILS_PermissionDenied;;14;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4315;FILS_DirectoryDoesNotExist;;21;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4316;FILS_DirectoryAlreadyExists;;22;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4317;FILS_NotADirectory;;23;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4318;FILS_DirectoryNotEmpty;;24;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x431e;FILS_SequencePacketMissingWrite;;30;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x431f;FILS_SequencePacketMissingRead;;31;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x2c01;CCS_BcIsSetVrCommand;;1;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.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 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 0x2cb0;CCS_BcIllegalCommand;;176;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
@ -286,99 +369,18 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
0x2cd1;CCS_ShorterThanHeader;;209;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 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 0x2cd3;CCS_TooShortMapExtraction;;211;CCSDS_HANDLER_IF;fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
0x38a1;SGP4_InvalidEccentricity;;161;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h 0x4201;PUS11_InvalidTypeTimeWindow;;1;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
0x38a2;SGP4_InvalidMeanMotion;;162;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h 0x4202;PUS11_InvalidTimeWindow;;2;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
0x38a3;SGP4_InvalidPerturbationElements;;163;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h 0x4203;PUS11_TimeshiftingNotPossible;;3;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
0x38a4;SGP4_InvalidSemiLatusRectum;;164;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h 0x4204;PUS11_InvalidRelativeTime;;4;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
0x38a5;SGP4_InvalidEpochElements;;165;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h 0x4205;PUS11_ContainedTcTooSmall;;5;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
0x38a6;SGP4_SatelliteHasDecayed;;166;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h 0x4206;PUS11_ContainedTcCrcMissmatch;;6;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
0x38b1;SGP4_TleTooOld;;177;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h 0x3401;DC_NoReplyReceived;;1;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
0x38b2;SGP4_TleNotInitialized;;178;SGP4PROPAGATOR_CLASS;fsfw/src/fsfw/coordinates/Sgp4Propagator.h 0x3402;DC_ProtocolError;;2;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
0x4300;FILS_GenericFileError;;0;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h 0x3403;DC_Nullpointer;;3;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
0x4301;FILS_GenericDirError;;1;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h 0x3404;DC_InvalidCookieType;;4;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
0x4302;FILS_FilesystemInactive;;2;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h 0x3405;DC_NotActive;;5;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
0x4303;FILS_GenericRenameError;;3;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h 0x3406;DC_TooMuchData;;6;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
0x4304;FILS_IsBusy;;4;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4305;FILS_InvalidParameters;;5;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430a;FILS_FileDoesNotExist;;10;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430b;FILS_FileAlreadyExists;;11;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430c;FILS_NotAFile;;12;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430d;FILS_FileLocked;;13;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430e;FILS_PermissionDenied;;14;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4315;FILS_DirectoryDoesNotExist;;21;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4316;FILS_DirectoryAlreadyExists;;22;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4317;FILS_NotADirectory;;23;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4318;FILS_DirectoryNotEmpty;;24;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x431e;FILS_SequencePacketMissingWrite;;30;FILE_SYSTEM;fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x431f;FILS_SequencePacketMissingRead;;31;FILE_SYSTEM;fsfw/src/fsfw/filesystem/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
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
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
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
0x3001;POS_InPowerTransition;;1;POWER_SWITCHER;fsfw/src/fsfw/power/PowerSwitcher.h
0x3002;POS_SwitchStateMismatch;;2;POWER_SWITCHER;fsfw/src/fsfw/power/PowerSwitcher.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
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
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
0x1601;FMM_MapFull;;1;FIXED_MULTIMAP;fsfw/src/fsfw/container/FixedOrderedMultimap.h
0x1602;FMM_KeyDoesNotExist;;2;FIXED_MULTIMAP;fsfw/src/fsfw/container/FixedOrderedMultimap.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
0x03a0;DHB_InvalidChannel;;160;DEVICE_HANDLER_BASE;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.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 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 0x03b1;DHB_IgnoreReplyData;;177;DEVICE_HANDLER_BASE;fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h
@ -415,53 +417,60 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
0x27c3;DHI_DeviceReplyInvalid;;195;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 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 0x27d1;DHI_InvalidNumberOrLengthOfParameters;;209;DEVICE_HANDLER_IF;fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
0x3401;DC_NoReplyReceived;;1;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h 0x2401;MT_TooDetailedRequest;;1;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
0x3402;DC_ProtocolError;;2;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h 0x2402;MT_TooGeneralRequest;;2;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
0x3403;DC_Nullpointer;;3;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h 0x2403;MT_NoMatch;;3;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
0x3404;DC_InvalidCookieType;;4;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h 0x2404;MT_Full;;4;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
0x3405;DC_NotActive;;5;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h 0x2405;MT_NewNodeCreated;;5;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
0x3406;DC_TooMuchData;;6;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h 0x3f01;DLEE_NoPacketFound;;1;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleParser.h
0x2501;EV_ListenerNotFound;;1;EVENT_MANAGER_IF;fsfw/src/fsfw/events/EventManagerIF.h 0x3f02;DLEE_PossiblePacketLoss;;2;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleParser.h
0x1a01;TRC_NotEnoughSensors;;1;TRIPLE_REDUNDACY_CHECK;fsfw/src/fsfw/monitoring/TriplexMonitor.h 0x2f01;ASC_TooLongForTargetType;;1;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/AsciiConverter.h
0x1a02;TRC_LowestValueOol;;2;TRIPLE_REDUNDACY_CHECK;fsfw/src/fsfw/monitoring/TriplexMonitor.h 0x2f02;ASC_InvalidCharacters;;2;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/AsciiConverter.h
0x1a03;TRC_HighestValueOol;;3;TRIPLE_REDUNDACY_CHECK;fsfw/src/fsfw/monitoring/TriplexMonitor.h 0x2f03;ASC_BufferTooSmall;;3;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/AsciiConverter.h
0x1a04;TRC_BothValuesOol;;4;TRIPLE_REDUNDACY_CHECK;fsfw/src/fsfw/monitoring/TriplexMonitor.h 0x1701;HHI_ObjectNotHealthy;;1;HAS_HEALTH_IF;fsfw/src/fsfw/health/HasHealthIF.h
0x1a05;TRC_DuplexOol;;5;TRIPLE_REDUNDACY_CHECK;fsfw/src/fsfw/monitoring/TriplexMonitor.h 0x1702;HHI_InvalidHealthState;;2;HAS_HEALTH_IF;fsfw/src/fsfw/health/HasHealthIF.h
0x3101;LIM_Unchecked;;1;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x1703;HHI_IsExternallyControlled;;3;HAS_HEALTH_IF;fsfw/src/fsfw/health/HasHealthIF.h
0x3102;LIM_Invalid;;2;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x3201;CF_ObjectHasNoFunctions;;1;COMMANDS_ACTIONS_IF;fsfw/src/fsfw/action/CommandsActionsIF.h
0x3103;LIM_Unselected;;3;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x3202;CF_AlreadyCommanding;;2;COMMANDS_ACTIONS_IF;fsfw/src/fsfw/action/CommandsActionsIF.h
0x3104;LIM_BelowLowLimit;;4;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x3301;HF_IsBusy;;1;HAS_ACTIONS_IF;fsfw/src/fsfw/action/HasActionsIF.h
0x3105;LIM_AboveHighLimit;;5;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x3302;HF_InvalidParameters;;2;HAS_ACTIONS_IF;fsfw/src/fsfw/action/HasActionsIF.h
0x3106;LIM_UnexpectedValue;;6;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x3303;HF_ExecutionFinished;;3;HAS_ACTIONS_IF;fsfw/src/fsfw/action/HasActionsIF.h
0x3107;LIM_OutOfRange;;7;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x3304;HF_InvalidActionId;;4;HAS_ACTIONS_IF;fsfw/src/fsfw/action/HasActionsIF.h
0x31a0;LIM_FirstSample;;160;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x1000;TIM_UnsupportedTimeFormat;;0;CCSDS_TIME_HELPER_CLASS;fsfw/src/fsfw/timemanager/CCSDSTime.h
0x31e0;LIM_InvalidSize;;224;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x1001;TIM_NotEnoughInformationForTargetFormat;;1;CCSDS_TIME_HELPER_CLASS;fsfw/src/fsfw/timemanager/CCSDSTime.h
0x31e1;LIM_WrongType;;225;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x1002;TIM_LengthMismatch;;2;CCSDS_TIME_HELPER_CLASS;fsfw/src/fsfw/timemanager/CCSDSTime.h
0x31e2;LIM_WrongPid;;226;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x1003;TIM_InvalidTimeFormat;;3;CCSDS_TIME_HELPER_CLASS;fsfw/src/fsfw/timemanager/CCSDSTime.h
0x31e3;LIM_WrongLimitId;;227;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x1004;TIM_InvalidDayOfYear;;4;CCSDS_TIME_HELPER_CLASS;fsfw/src/fsfw/timemanager/CCSDSTime.h
0x31ee;LIM_MonitorNotFound;;238;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h 0x1005;TIM_TimeDoesNotFitFormat;;5;CCSDS_TIME_HELPER_CLASS;fsfw/src/fsfw/timemanager/CCSDSTime.h
0x3b01;SPH_SemaphoreTimeout;;1;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h 0x3701;TSI_BadTimestamp;;1;TIME_STAMPER_IF;fsfw/src/fsfw/timemanager/TimeStampIF.h
0x3b02;SPH_SemaphoreNotOwned;;2;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h 0x3c00;LPIF_PoolEntryNotFound;;0;LOCAL_POOL_OWNER_IF;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h
0x3b03;SPH_SemaphoreInvalid;;3;SEMAPHORE_IF;fsfw/src/fsfw/tasks/SemaphoreIF.h 0x3c01;LPIF_PoolEntryTypeConflict;;1;LOCAL_POOL_OWNER_IF;fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h
0x4500;HSPI_OpeningFileFailed;;0;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h 0x3e00;HKM_QueueOrDestinationInvalid;;0;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
0x4501;HSPI_FullDuplexTransferFailed;;1;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h 0x3e01;HKM_WrongHkPacketType;;1;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
0x4502;HSPI_HalfDuplexTransferFailed;;2;HAL_SPI;fsfw/src/fsfw_hal/linux/spi/SpiComIF.h 0x3e02;HKM_ReportingStatusUnchanged;;2;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
0x4601;HURT_UartReadFailure;;1;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h 0x3e03;HKM_PeriodicHelperInvalid;;3;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
0x4602;HURT_UartReadSizeMissmatch;;2;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h 0x3e04;HKM_PoolobjectNotFound;;4;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
0x4603;HURT_UartRxBufferTooSmall;;3;HAL_UART;fsfw/src/fsfw_hal/linux/serial/SerialComIF.h 0x3e05;HKM_DatasetNotFound;;5;HOUSEKEEPING_MANAGER;fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
0x4801;HGIO_UnknownGpioId;;1;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h 0x2901;TC_InvalidTargetState;;1;THERMAL_COMPONENT_IF;fsfw/src/fsfw/thermal/ThermalComponentIF.h
0x4802;HGIO_DriveGpioFailure;;2;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h 0x29f1;TC_AboveOperationalLimit;;241;THERMAL_COMPONENT_IF;fsfw/src/fsfw/thermal/ThermalComponentIF.h
0x4803;HGIO_GpioTypeFailure;;3;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h 0x29f2;TC_BelowOperationalLimit;;242;THERMAL_COMPONENT_IF;fsfw/src/fsfw/thermal/ThermalComponentIF.h
0x4804;HGIO_GpioInvalidInstance;;4;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h 0x2001;CSB_ExecutionComplete;;1;COMMAND_SERVICE_BASE;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
0x4805;HGIO_GpioDuplicateDetected;;5;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h 0x2002;CSB_NoStepMessage;;2;COMMAND_SERVICE_BASE;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
0x4806;HGIO_GpioInitFailed;;6;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h 0x2003;CSB_ObjectBusy;;3;COMMAND_SERVICE_BASE;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
0x4807;HGIO_GpioGetValueFailed;;7;HAL_GPIO;fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h 0x2004;CSB_Busy;;4;COMMAND_SERVICE_BASE;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
0x4400;UXOS_ExecutionFinished;Execution of the current command has finished;0;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h 0x2005;CSB_InvalidTc;;5;COMMAND_SERVICE_BASE;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.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 0x2006;CSB_InvalidObject;;6;COMMAND_SERVICE_BASE;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
0x4402;UXOS_BytesRead;Some bytes have been read from the executing process;2;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h 0x2007;CSB_InvalidReply;;7;COMMAND_SERVICE_BASE;fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
0x4403;UXOS_CommandError;Command execution failed;3;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h 0x4c00;SPPA_NoPacketFound;;0;SPACE_PACKET_PARSER;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h
0x4404;UXOS_NoCommandLoadedOrPending;;4;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.h 0x4c01;SPPA_SplitPacket;;1;SPACE_PACKET_PARSER;fsfw/src/fsfw/tmtcservices/SpacePacketParser.h
0x4406;UXOS_PcloseCallError;;6;LINUX_OSAL;fsfw/src/fsfw_hal/linux/CommandExecutor.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/fs/FilesystemHelper.h
0x64a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;161;FILE_SYSTEM_HELPER;bsp_q7s/fs/FilesystemHelper.h
0x6a00;SDMA_OpOngoing;;0;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h 0x6a00;SDMA_OpOngoing;;0;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
0x6a01;SDMA_AlreadyOn;;1;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h 0x6a01;SDMA_AlreadyOn;;1;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
0x6a02;SDMA_AlreadyMounted;;2;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h 0x6a02;SDMA_AlreadyMounted;;2;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
@ -472,6 +481,3 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
0x6a0d;SDMA_UnmountError;;13;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h 0x6a0d;SDMA_UnmountError;;13;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
0x6a0e;SDMA_SystemCallError;;14;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h 0x6a0e;SDMA_SystemCallError;;14;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
0x6a0f;SDMA_PopenCallError;;15;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h 0x6a0f;SDMA_PopenCallError;;15;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
0x64a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;160;FILE_SYSTEM_HELPER;bsp_q7s/fs/FilesystemHelper.h
0x64a1;FSHLP_FileNotExists;Specified file does not exist on filesystem;161;FILE_SYSTEM_HELPER;bsp_q7s/fs/FilesystemHelper.h
0x6b00;SCBU_KeyNotFound;;0;SCRATCH_BUFFER;bsp_q7s/memory/scratchApi.h

1 Full ID (hex) Name Description Unique ID Subsytem Name File Path
2 0x0000 OK System-wide code for ok. 0 HasReturnvaluesIF fsfw/returnvalues/returnvalue.h
3 0x0001 Failed Unspecified system-wide code for failed. 1 HasReturnvaluesIF fsfw/returnvalues/returnvalue.h
4 0x60a0 0x63a0 CCSDS_CommandNotImplemented NVMB_KeyNotExists Received action message with unknown action id Specified key does not exist in json file 160 CCSDS_HANDLER NVM_PARAM_BASE mission/tmtc/CcsdsIpCoreHandler.h mission/memory/NVMParameterBase.h
5 0x6300 NVMB_Busy 0 NVM_PARAM_BASE mission/system/objects/Stack5VHandler.h
6 0x58a0 SUSS_ErrorUnlockMutex 160 SUS_HANDLER mission/devices/SusHandler.h
7 0x58a1 SUSS_ErrorLockMutex 161 SUS_HANDLER mission/devices/SusHandler.h
8 0x66a0 SADPL_CommandNotSupported 160 SA_DEPL_HANDLER mission/devices/SolarArrayDeploymentHandler.h
9 0x66a1 SADPL_DeploymentAlreadyExecuting 161 SA_DEPL_HANDLER mission/devices/SolarArrayDeploymentHandler.h
10 0x66a2 SADPL_MainSwitchTimeoutFailure 162 SA_DEPL_HANDLER mission/devices/SolarArrayDeploymentHandler.h
11 0x66a3 SADPL_SwitchingDeplSa1Failed 163 SA_DEPL_HANDLER mission/devices/SolarArrayDeploymentHandler.h
12 0x66a4 SADPL_SwitchingDeplSa2Failed 164 SA_DEPL_HANDLER mission/devices/SolarArrayDeploymentHandler.h
13 0x58a0 0x51a0 SUSS_ErrorUnlockMutex IMTQ_InvalidCommandCode 160 SUS_HANDLER IMTQ_HANDLER mission/devices/SusHandler.h mission/devices/ImtqHandler.h
14 0x58a1 0x51a1 SUSS_ErrorLockMutex IMTQ_ParameterMissing 161 SUS_HANDLER IMTQ_HANDLER mission/devices/SusHandler.h mission/devices/ImtqHandler.h
15 0x51a2 IMTQ_ParameterInvalid 162 IMTQ_HANDLER mission/devices/ImtqHandler.h
16 0x51a3 IMTQ_CcUnavailable 163 IMTQ_HANDLER mission/devices/ImtqHandler.h
17 0x51a4 IMTQ_InternalProcessingError 164 IMTQ_HANDLER mission/devices/ImtqHandler.h
18 0x51a5 IMTQ_RejectedWithoutReason 165 IMTQ_HANDLER mission/devices/ImtqHandler.h
19 0x51a6 IMTQ_CmdErrUnknown 166 IMTQ_HANDLER mission/devices/ImtqHandler.h
20 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
21 0x52b0 RWHA_SpiWriteFailure 176 RW_HANDLER mission/devices/RwHandler.h
22 0x52b1 RWHA_SpiReadFailure Used by the spi send function to tell a failing read call 177 RW_HANDLER mission/devices/RwHandler.h
23 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
30 0x52a2 RWHA_SetSpeedCommandInvalidLength Received set speed command has invalid length. Should be 6. 162 RW_HANDLER mission/devices/RwHandler.h
31 0x52a3 RWHA_ExecutionFailed Command execution failed 163 RW_HANDLER mission/devices/RwHandler.h
32 0x52a4 RWHA_CrcError Reaction wheel reply has invalid crc 164 RW_HANDLER mission/devices/RwHandler.h
33 0x4fa1 0x50a0 HEATER_CommandNotSupported SYRLINKS_CrcFailure 161 160 HEATER_HANDLER SYRLINKS_HANDLER mission/devices/HeaterHandler.h mission/devices/SyrlinksHandler.h
34 0x4fa2 0x50a1 HEATER_InitFailed SYRLINKS_UartFraminOrParityErrorAck 162 161 HEATER_HANDLER SYRLINKS_HANDLER mission/devices/HeaterHandler.h mission/devices/SyrlinksHandler.h
35 0x4fa3 0x50a2 HEATER_InvalidSwitchNr SYRLINKS_BadCharacterAck 163 162 HEATER_HANDLER SYRLINKS_HANDLER mission/devices/HeaterHandler.h mission/devices/SyrlinksHandler.h
36 0x4fa4 0x50a3 HEATER_MainSwitchSetTimeout SYRLINKS_BadParameterValueAck 164 163 HEATER_HANDLER SYRLINKS_HANDLER mission/devices/HeaterHandler.h mission/devices/SyrlinksHandler.h
37 0x4fa5 0x50a4 HEATER_CommandAlreadyWaiting SYRLINKS_BadEndOfFrameAck 165 164 HEATER_HANDLER SYRLINKS_HANDLER mission/devices/HeaterHandler.h mission/devices/SyrlinksHandler.h
38 0x50a5 SYRLINKS_UnknownCommandIdAck 165 SYRLINKS_HANDLER mission/devices/SyrlinksHandler.h
39 0x50a6 SYRLINKS_BadCrcAck 166 SYRLINKS_HANDLER mission/devices/SyrlinksHandler.h
40 0x50a7 SYRLINKS_ReplyWrongSize 167 SYRLINKS_HANDLER mission/devices/SyrlinksHandler.h
41 0x50a8 SYRLINKS_MissingStartFrameCharacter 168 SYRLINKS_HANDLER mission/devices/SyrlinksHandler.h
42 0x5d00 GOMS_PacketTooLong 0 GOM_SPACE_HANDLER mission/devices/GomspaceDeviceHandler.h
43 0x5d01 GOMS_InvalidTableId 1 GOM_SPACE_HANDLER mission/devices/GomspaceDeviceHandler.h
44 0x5d02 GOMS_InvalidAddress 2 GOM_SPACE_HANDLER mission/devices/GomspaceDeviceHandler.h
45 0x5d03 GOMS_InvalidParamSize 3 GOM_SPACE_HANDLER mission/devices/GomspaceDeviceHandler.h
46 0x5d04 GOMS_InvalidPayloadSize 4 GOM_SPACE_HANDLER mission/devices/GomspaceDeviceHandler.h
47 0x5d05 GOMS_UnknownReplyId 5 GOM_SPACE_HANDLER mission/devices/GomspaceDeviceHandler.h
48 0x51a0 0x4fa1 IMTQ_InvalidCommandCode HEATER_CommandNotSupported 160 161 IMTQ_HANDLER HEATER_HANDLER mission/devices/ImtqHandler.h mission/devices/HeaterHandler.h
49 0x51a1 0x4fa2 IMTQ_ParameterMissing HEATER_InitFailed 161 162 IMTQ_HANDLER HEATER_HANDLER mission/devices/ImtqHandler.h mission/devices/HeaterHandler.h
50 0x51a2 0x4fa3 IMTQ_ParameterInvalid HEATER_InvalidSwitchNr 162 163 IMTQ_HANDLER HEATER_HANDLER mission/devices/ImtqHandler.h mission/devices/HeaterHandler.h
51 0x51a3 0x4fa4 IMTQ_CcUnavailable HEATER_MainSwitchSetTimeout 163 164 IMTQ_HANDLER HEATER_HANDLER mission/devices/ImtqHandler.h mission/devices/HeaterHandler.h
52 0x51a4 0x4fa5 IMTQ_InternalProcessingError HEATER_CommandAlreadyWaiting 164 165 IMTQ_HANDLER HEATER_HANDLER mission/devices/ImtqHandler.h mission/devices/HeaterHandler.h
53 0x51a5 0x60a0 IMTQ_RejectedWithoutReason CCSDS_CommandNotImplemented Received action message with unknown action id 165 160 IMTQ_HANDLER CCSDS_HANDLER mission/devices/ImtqHandler.h mission/tmtc/CcsdsIpCoreHandler.h
54 0x51a6 0x6001 IMTQ_CmdErrUnknown CCSDS_KalmanNoGyrMeas 166 1 IMTQ_HANDLER CCSDS_HANDLER mission/devices/ImtqHandler.h mission/controller/acs/MultiplicativeKalmanFilter.h
55 0x51a7 0x6002 IMTQ_UnexpectedSelfTestReply CCSDS_KalmanNoModel The status reply to a self test command was received but no self test command has been sent. This should normally never happen. 167 2 IMTQ_HANDLER CCSDS_HANDLER mission/devices/ImtqHandler.h mission/controller/acs/MultiplicativeKalmanFilter.h
56 0x50a0 0x6003 SYRLINKS_CrcFailure CCSDS_KalmanInversionFailed 160 3 SYRLINKS_HANDLER CCSDS_HANDLER mission/devices/SyrlinksHkHandler.h mission/controller/acs/MultiplicativeKalmanFilter.h
57 0x50a1 0x4500 SYRLINKS_UartFraminOrParityErrorAck HSPI_OpeningFileFailed 161 0 SYRLINKS_HANDLER HAL_SPI mission/devices/SyrlinksHkHandler.h fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
58 0x50a2 0x4501 SYRLINKS_BadCharacterAck HSPI_FullDuplexTransferFailed 162 1 SYRLINKS_HANDLER HAL_SPI mission/devices/SyrlinksHkHandler.h fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
59 0x50a3 0x4502 SYRLINKS_BadParameterValueAck HSPI_HalfDuplexTransferFailed 163 2 SYRLINKS_HANDLER HAL_SPI mission/devices/SyrlinksHkHandler.h fsfw/src/fsfw_hal/linux/spi/SpiComIF.h
60 0x50a4 0x4801 SYRLINKS_BadEndOfFrameAck HGIO_UnknownGpioId 164 1 SYRLINKS_HANDLER HAL_GPIO mission/devices/SyrlinksHkHandler.h fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
61 0x50a5 0x4802 SYRLINKS_UnknownCommandIdAck HGIO_DriveGpioFailure 165 2 SYRLINKS_HANDLER HAL_GPIO mission/devices/SyrlinksHkHandler.h fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
62 0x50a6 0x4803 SYRLINKS_BadCrcAck HGIO_GpioTypeFailure 166 3 SYRLINKS_HANDLER HAL_GPIO mission/devices/SyrlinksHkHandler.h fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
63 0x50a7 0x4804 SYRLINKS_ReplyWrongSize HGIO_GpioInvalidInstance 167 4 SYRLINKS_HANDLER HAL_GPIO mission/devices/SyrlinksHkHandler.h fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
64 0x50a8 0x4805 SYRLINKS_MissingStartFrameCharacter HGIO_GpioDuplicateDetected 168 5 SYRLINKS_HANDLER HAL_GPIO mission/devices/SyrlinksHkHandler.h fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
65 0x63a0 0x4806 NVMB_KeyNotExists HGIO_GpioInitFailed Specified key does not exist in json file 160 6 NVM_PARAM_BASE HAL_GPIO mission/memory/NVMParameterBase.h fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
66 0x3c00 0x4807 LPIF_PoolEntryNotFound HGIO_GpioGetValueFailed 0 7 LOCAL_POOL_OWNER_IF HAL_GPIO fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h
67 0x3c01 0x4601 LPIF_PoolEntryTypeConflict HURT_UartReadFailure 1 LOCAL_POOL_OWNER_IF HAL_UART fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
68 0x3e00 0x4602 HKM_QueueOrDestinationInvalid HURT_UartReadSizeMissmatch 0 2 HOUSEKEEPING_MANAGER HAL_UART fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
69 0x3e01 0x4603 HKM_WrongHkPacketType HURT_UartRxBufferTooSmall 1 3 HOUSEKEEPING_MANAGER HAL_UART fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h fsfw/src/fsfw_hal/linux/serial/SerialComIF.h
70 0x3e02 0x4400 HKM_ReportingStatusUnchanged UXOS_ExecutionFinished Execution of the current command has finished 2 0 HOUSEKEEPING_MANAGER LINUX_OSAL fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h fsfw/src/fsfw_hal/linux/CommandExecutor.h
71 0x3e03 0x4401 HKM_PeriodicHelperInvalid UXOS_CommandPending Command is pending. This will also be returned if the user tries to load another command but a command is still pending 3 1 HOUSEKEEPING_MANAGER LINUX_OSAL fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h fsfw/src/fsfw_hal/linux/CommandExecutor.h
72 0x3e04 0x4402 HKM_PoolobjectNotFound UXOS_BytesRead Some bytes have been read from the executing process 4 2 HOUSEKEEPING_MANAGER LINUX_OSAL fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h fsfw/src/fsfw_hal/linux/CommandExecutor.h
73 0x3e05 0x4403 HKM_DatasetNotFound UXOS_CommandError Command execution failed 5 3 HOUSEKEEPING_MANAGER LINUX_OSAL fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h fsfw/src/fsfw_hal/linux/CommandExecutor.h
74 0x3601 0x4404 CFDP_InvalidTlvType UXOS_NoCommandLoadedOrPending 1 4 CFDP LINUX_OSAL fsfw/src/fsfw/cfdp/definitions.h fsfw/src/fsfw_hal/linux/CommandExecutor.h
75 0x3602 0x4406 CFDP_InvalidDirectiveField UXOS_PcloseCallError 2 6 CFDP LINUX_OSAL fsfw/src/fsfw/cfdp/definitions.h fsfw/src/fsfw_hal/linux/CommandExecutor.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_NakCantParseOptions 6 CFDP fsfw/src/fsfw/cfdp/definitions.h
0x3607 CFDP_FinishedCantParseFsResponses 7 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
0x360a CFDP_InvalidPduFormat 10 CFDP fsfw/src/fsfw/cfdp/definitions.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
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
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
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
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
76 0x2801 SM_DataTooLarge 1 STORAGE_MANAGER_IF fsfw/src/fsfw/storagemanager/StorageManagerIF.h
77 0x2802 SM_DataStorageFull 2 STORAGE_MANAGER_IF fsfw/src/fsfw/storagemanager/StorageManagerIF.h
78 0x2803 SM_IllegalStorageId 3 STORAGE_MANAGER_IF fsfw/src/fsfw/storagemanager/StorageManagerIF.h
79 0x2804 SM_DataDoesNotExist 4 STORAGE_MANAGER_IF fsfw/src/fsfw/storagemanager/StorageManagerIF.h
80 0x2805 SM_IllegalAddress 5 STORAGE_MANAGER_IF fsfw/src/fsfw/storagemanager/StorageManagerIF.h
81 0x2806 SM_PoolTooLarge 6 STORAGE_MANAGER_IF fsfw/src/fsfw/storagemanager/StorageManagerIF.h
82 0x2401 0x0601 MT_TooDetailedRequest PP_DoItMyself 1 MATCH_TREE_CLASS HAS_MEMORY_IF fsfw/src/fsfw/globalfunctions/matching/MatchTree.h fsfw/src/fsfw/memory/HasMemoryIF.h
83 0x2402 0x0602 MT_TooGeneralRequest PP_PointsToVariable 2 MATCH_TREE_CLASS HAS_MEMORY_IF fsfw/src/fsfw/globalfunctions/matching/MatchTree.h fsfw/src/fsfw/memory/HasMemoryIF.h
84 0x2403 0x0603 MT_NoMatch PP_PointsToMemory 3 MATCH_TREE_CLASS HAS_MEMORY_IF fsfw/src/fsfw/globalfunctions/matching/MatchTree.h fsfw/src/fsfw/memory/HasMemoryIF.h
85 0x2404 0x0604 MT_Full PP_ActivityCompleted 4 MATCH_TREE_CLASS HAS_MEMORY_IF fsfw/src/fsfw/globalfunctions/matching/MatchTree.h fsfw/src/fsfw/memory/HasMemoryIF.h
86 0x2405 0x0605 MT_NewNodeCreated PP_PointsToVectorUint8 5 MATCH_TREE_CLASS HAS_MEMORY_IF fsfw/src/fsfw/globalfunctions/matching/MatchTree.h fsfw/src/fsfw/memory/HasMemoryIF.h
87 0x3f01 0x0606 DLEE_StreamTooShort PP_PointsToVectorUint16 1 6 DLE_ENCODER HAS_MEMORY_IF fsfw/src/fsfw/globalfunctions/DleEncoder.h fsfw/src/fsfw/memory/HasMemoryIF.h
88 0x3f02 0x0607 DLEE_DecodingError PP_PointsToVectorUint32 2 7 DLE_ENCODER HAS_MEMORY_IF fsfw/src/fsfw/globalfunctions/DleEncoder.h fsfw/src/fsfw/memory/HasMemoryIF.h
89 0x2f01 0x0608 ASC_NoPacketFound PP_PointsToVectorFloat 1 8 ASCII_CONVERTER HAS_MEMORY_IF fsfw/src/fsfw/globalfunctions/DleParser.h fsfw/src/fsfw/memory/HasMemoryIF.h
90 0x2f02 0x06a0 ASC_PossiblePacketLoss PP_DumpNotSupported 2 160 ASCII_CONVERTER HAS_MEMORY_IF fsfw/src/fsfw/globalfunctions/DleParser.h fsfw/src/fsfw/memory/HasMemoryIF.h
91 0x2f03 0x06e0 ASC_BufferTooSmall PP_InvalidSize 3 224 ASCII_CONVERTER HAS_MEMORY_IF fsfw/src/fsfw/globalfunctions/AsciiConverter.h fsfw/src/fsfw/memory/HasMemoryIF.h
92 0x4201 0x06e1 PUS11_InvalidTypeTimeWindow PP_InvalidAddress 1 225 PUS_SERVICE_11 HAS_MEMORY_IF fsfw/src/fsfw/pus/Service11TelecommandScheduling.h fsfw/src/fsfw/memory/HasMemoryIF.h
93 0x4202 0x06e2 PUS11_InvalidTimeWindow PP_InvalidContent 2 226 PUS_SERVICE_11 HAS_MEMORY_IF fsfw/src/fsfw/pus/Service11TelecommandScheduling.h fsfw/src/fsfw/memory/HasMemoryIF.h
94 0x4203 0x06e3 PUS11_TimeshiftingNotPossible PP_UnalignedAccess 3 227 PUS_SERVICE_11 HAS_MEMORY_IF fsfw/src/fsfw/pus/Service11TelecommandScheduling.h fsfw/src/fsfw/memory/HasMemoryIF.h
95 0x4204 0x06e4 PUS11_InvalidRelativeTime PP_WriteProtected 4 228 PUS_SERVICE_11 HAS_MEMORY_IF fsfw/src/fsfw/pus/Service11TelecommandScheduling.h fsfw/src/fsfw/memory/HasMemoryIF.h
96 0x1c01 0x13e0 TCD_PacketLost MH_UnknownCmd 1 224 PACKET_DISTRIBUTION MEMORY_HELPER fsfw/src/fsfw/tcdistribution/TcDistributorBase.h fsfw/src/fsfw/memory/MemoryHelper.h
97 0x1c02 0x13e1 TCD_DestinationNotFound MH_InvalidAddress 2 225 PACKET_DISTRIBUTION MEMORY_HELPER fsfw/src/fsfw/tcdistribution/TcDistributorBase.h fsfw/src/fsfw/memory/MemoryHelper.h
98 0x1c03 0x13e2 TCD_ServiceIdAlreadyExists MH_InvalidSize 3 226 PACKET_DISTRIBUTION MEMORY_HELPER fsfw/src/fsfw/tcdistribution/TcDistributorBase.h fsfw/src/fsfw/memory/MemoryHelper.h
99 0x1b00 0x13e3 TCC_NoDestinationFound MH_StateMismatch 0 227 TMTC_DISTRIBUTION MEMORY_HELPER fsfw/src/fsfw/tcdistribution/definitions.h fsfw/src/fsfw/memory/MemoryHelper.h
100 0x1b01 0x38a1 TCC_InvalidCcsdsVersion SGP4_InvalidEccentricity 1 161 TMTC_DISTRIBUTION SGP4PROPAGATOR_CLASS fsfw/src/fsfw/tcdistribution/definitions.h fsfw/src/fsfw/coordinates/Sgp4Propagator.h
101 0x1b02 0x38a2 TCC_InvalidApid SGP4_InvalidMeanMotion 2 162 TMTC_DISTRIBUTION SGP4PROPAGATOR_CLASS fsfw/src/fsfw/tcdistribution/definitions.h fsfw/src/fsfw/coordinates/Sgp4Propagator.h
102 0x1b03 0x38a3 TCC_InvalidPacketType SGP4_InvalidPerturbationElements 3 163 TMTC_DISTRIBUTION SGP4PROPAGATOR_CLASS fsfw/src/fsfw/tcdistribution/definitions.h fsfw/src/fsfw/coordinates/Sgp4Propagator.h
103 0x1b04 0x38a4 TCC_InvalidSecHeaderField SGP4_InvalidSemiLatusRectum 4 164 TMTC_DISTRIBUTION SGP4PROPAGATOR_CLASS fsfw/src/fsfw/tcdistribution/definitions.h fsfw/src/fsfw/coordinates/Sgp4Propagator.h
104 0x1b05 0x38a5 TCC_IncorrectPrimaryHeader SGP4_InvalidEpochElements 5 165 TMTC_DISTRIBUTION SGP4PROPAGATOR_CLASS fsfw/src/fsfw/tcdistribution/definitions.h fsfw/src/fsfw/coordinates/Sgp4Propagator.h
105 0x1b07 0x38a6 TCC_IncompletePacket SGP4_SatelliteHasDecayed 7 166 TMTC_DISTRIBUTION SGP4PROPAGATOR_CLASS fsfw/src/fsfw/tcdistribution/definitions.h fsfw/src/fsfw/coordinates/Sgp4Propagator.h
106 0x1b08 0x38b1 TCC_InvalidPusVersion SGP4_TleTooOld 8 177 TMTC_DISTRIBUTION SGP4PROPAGATOR_CLASS fsfw/src/fsfw/tcdistribution/definitions.h fsfw/src/fsfw/coordinates/Sgp4Propagator.h
107 0x1b09 0x38b2 TCC_IncorrectChecksum SGP4_TleNotInitialized 9 178 TMTC_DISTRIBUTION SGP4PROPAGATOR_CLASS fsfw/src/fsfw/tcdistribution/definitions.h fsfw/src/fsfw/coordinates/Sgp4Propagator.h
108 0x1b0a 0x1801 TCC_IllegalPacketSubtype FF_Full 10 1 TMTC_DISTRIBUTION FIFO_CLASS fsfw/src/fsfw/tcdistribution/definitions.h fsfw/src/fsfw/container/FIFOBase.h
109 0x1b0b 0x1802 TCC_IncorrectSecondaryHeader FF_Empty 11 2 TMTC_DISTRIBUTION FIFO_CLASS fsfw/src/fsfw/tcdistribution/definitions.h fsfw/src/fsfw/container/FIFOBase.h
110 0x3a01 0x1601 MQI_Empty FMM_MapFull 1 MESSAGE_QUEUE_IF FIXED_MULTIMAP fsfw/src/fsfw/ipc/MessageQueueIF.h fsfw/src/fsfw/container/FixedOrderedMultimap.h
111 0x3a02 0x1602 MQI_Full FMM_KeyDoesNotExist No space left for more messages 2 MESSAGE_QUEUE_IF FIXED_MULTIMAP fsfw/src/fsfw/ipc/MessageQueueIF.h fsfw/src/fsfw/container/FixedOrderedMultimap.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
112 0x3901 MUX_NotEnoughResources 1 MUTEX_IF fsfw/src/fsfw/ipc/MutexIF.h
113 0x3902 MUX_InsufficientMemory 2 MUTEX_IF fsfw/src/fsfw/ipc/MutexIF.h
114 0x3903 MUX_NoPrivilege 3 MUTEX_IF fsfw/src/fsfw/ipc/MutexIF.h
121 0x390a MUX_MutexTimeout 10 MUTEX_IF fsfw/src/fsfw/ipc/MutexIF.h
122 0x390b MUX_MutexInvalidId 11 MUTEX_IF fsfw/src/fsfw/ipc/MutexIF.h
123 0x390c MUX_MutexDestroyedWhileWaiting 12 MUTEX_IF fsfw/src/fsfw/ipc/MutexIF.h
124 0x2901 0x3a01 TC_InvalidTargetState MQI_Empty 1 THERMAL_COMPONENT_IF MESSAGE_QUEUE_IF fsfw/src/fsfw/thermal/ThermalComponentIF.h fsfw/src/fsfw/ipc/MessageQueueIF.h
125 0x29f1 0x3a02 TC_AboveOperationalLimit MQI_Full No space left for more messages 241 2 THERMAL_COMPONENT_IF MESSAGE_QUEUE_IF fsfw/src/fsfw/thermal/ThermalComponentIF.h fsfw/src/fsfw/ipc/MessageQueueIF.h
126 0x29f2 0x3a03 TC_BelowOperationalLimit MQI_NoReplyPartner Returned if a reply method was called without partner 242 3 THERMAL_COMPONENT_IF MESSAGE_QUEUE_IF fsfw/src/fsfw/thermal/ThermalComponentIF.h fsfw/src/fsfw/ipc/MessageQueueIF.h
127 0x0801 0x3a04 DPS_InvalidParameterDefinition MQI_DestinationInvalid Returned if the target destination is invalid. 1 4 DATA_SET_CLASS MESSAGE_QUEUE_IF fsfw/src/fsfw/datapool/DataSetIF.h fsfw/src/fsfw/ipc/MessageQueueIF.h
128 0x0802 0x0f01 DPS_SetWasAlreadyRead CM_UnknownCommand 2 1 DATA_SET_CLASS COMMAND_MESSAGE fsfw/src/fsfw/datapool/DataSetIF.h fsfw/src/fsfw/ipc/CommandMessageIF.h
129 0x0803 0x0e01 DPS_CommitingWithoutReading HM_InvalidMode 3 1 DATA_SET_CLASS HAS_MODES_IF fsfw/src/fsfw/datapool/DataSetIF.h fsfw/src/fsfw/modes/HasModesIF.h
130 0x0804 0x0e02 DPS_DataSetUninitialised HM_TransNotAllowed 4 2 DATA_SET_CLASS HAS_MODES_IF fsfw/src/fsfw/datapool/DataSetIF.h fsfw/src/fsfw/modes/HasModesIF.h
131 0x0805 0x0e03 DPS_DataSetFull HM_InTransition 5 3 DATA_SET_CLASS HAS_MODES_IF fsfw/src/fsfw/datapool/DataSetIF.h fsfw/src/fsfw/modes/HasModesIF.h
132 0x0806 0x0e04 DPS_PoolVarNull HM_InvalidSubmode 6 4 DATA_SET_CLASS HAS_MODES_IF fsfw/src/fsfw/datapool/DataSetIF.h fsfw/src/fsfw/modes/HasModesIF.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
133 0x0c02 MS_InvalidEntry 2 MODE_STORE_IF fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h
134 0x0c03 MS_TooManyElements 3 MODE_STORE_IF fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h
135 0x0c04 MS_CantStoreEmpty 4 MODE_STORE_IF fsfw/src/fsfw/subsystem/modes/ModeStoreIF.h
136 0x0b01 SB_ChildNotFound 1 SUBSYSTEM_BASE fsfw/src/fsfw/subsystem/SubsystemBase.h
137 0x0b02 SB_ChildInfoUpdated 2 SUBSYSTEM_BASE fsfw/src/fsfw/subsystem/SubsystemBase.h
138 0x0b03 SB_ChildDoesntHaveModes 3 SUBSYSTEM_BASE fsfw/src/fsfw/subsystem/SubsystemBase.h
139 0x0b04 SB_CouldNotInsertChild 4 SUBSYSTEM_BASE fsfw/src/fsfw/subsystem/SubsystemBase.h
140 0x0b05 SB_TableContainsInvalidObjectId 5 SUBSYSTEM_BASE fsfw/src/fsfw/subsystem/SubsystemBase.h
141 0x0d01 SS_SequenceAlreadyExists 1 SUBSYSTEM fsfw/src/fsfw/subsystem/Subsystem.h
142 0x0d02 SS_TableAlreadyExists 2 SUBSYSTEM fsfw/src/fsfw/subsystem/Subsystem.h
143 0x0d03 SS_TableDoesNotExist 3 SUBSYSTEM fsfw/src/fsfw/subsystem/Subsystem.h
152 0x0d0e SS_TableInUse 14 SUBSYSTEM fsfw/src/fsfw/subsystem/Subsystem.h
153 0x0da1 SS_TargetTableNotReached 161 SUBSYSTEM fsfw/src/fsfw/subsystem/Subsystem.h
154 0x0da2 SS_TableCheckFailed 162 SUBSYSTEM fsfw/src/fsfw/subsystem/Subsystem.h
155 0x0b01 0x2501 SB_ChildNotFound EV_ListenerNotFound 1 SUBSYSTEM_BASE EVENT_MANAGER_IF fsfw/src/fsfw/subsystem/SubsystemBase.h fsfw/src/fsfw/events/EventManagerIF.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
0x0b00 SB_ConnBroken 0 SUBSYSTEM_BASE 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
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
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
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
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
156 0x04e1 RMP_CommandNoDescriptorsAvailable 225 RMAP_CHANNEL fsfw/src/fsfw/rmap/RMAP.h
157 0x04e2 RMP_CommandBufferFull 226 RMAP_CHANNEL fsfw/src/fsfw/rmap/RMAP.h
158 0x04e3 RMP_CommandChannelOutOfRange 227 RMAP_CHANNEL fsfw/src/fsfw/rmap/RMAP.h
193 0x040a RMP_ReplyCommandNotImplementedOrNotAuthorised 10 RMAP_CHANNEL fsfw/src/fsfw/rmap/RMAP.h
194 0x040b RMP_ReplyRmwDataLengthError 11 RMAP_CHANNEL fsfw/src/fsfw/rmap/RMAP.h
195 0x040c RMP_ReplyInvalidTargetLogicalAddress 12 RMAP_CHANNEL fsfw/src/fsfw/rmap/RMAP.h
196 0x1401 SE_BufferTooShort 1 SERIALIZE_IF fsfw/src/fsfw/serialize/SerializeIF.h
197 0x1402 SE_StreamTooShort 2 SERIALIZE_IF fsfw/src/fsfw/serialize/SerializeIF.h
198 0x1403 SE_TooManyElements 3 SERIALIZE_IF fsfw/src/fsfw/serialize/SerializeIF.h
199 0x3da0 PVA_InvalidReadWriteMode 160 POOL_VARIABLE_IF fsfw/src/fsfw/datapool/PoolVariableIF.h
200 0x3da1 PVA_InvalidPoolEntry 161 POOL_VARIABLE_IF fsfw/src/fsfw/datapool/PoolVariableIF.h
201 0x0801 DPS_InvalidParameterDefinition 1 DATA_SET_CLASS fsfw/src/fsfw/datapool/DataSetIF.h
202 0x0802 DPS_SetWasAlreadyRead 2 DATA_SET_CLASS fsfw/src/fsfw/datapool/DataSetIF.h
203 0x0803 DPS_CommitingWithoutReading 3 DATA_SET_CLASS fsfw/src/fsfw/datapool/DataSetIF.h
204 0x0804 DPS_DataSetUninitialised 4 DATA_SET_CLASS fsfw/src/fsfw/datapool/DataSetIF.h
205 0x0805 DPS_DataSetFull 5 DATA_SET_CLASS fsfw/src/fsfw/datapool/DataSetIF.h
206 0x0806 DPS_PoolVarNull 6 DATA_SET_CLASS fsfw/src/fsfw/datapool/DataSetIF.h
207 0x1c01 TCD_PacketLost 1 PACKET_DISTRIBUTION fsfw/src/fsfw/tcdistribution/TcDistributorBase.h
208 0x1c02 TCD_DestinationNotFound 2 PACKET_DISTRIBUTION fsfw/src/fsfw/tcdistribution/TcDistributorBase.h
209 0x1c03 TCD_ServiceIdAlreadyExists 3 PACKET_DISTRIBUTION fsfw/src/fsfw/tcdistribution/TcDistributorBase.h
210 0x1b00 TCC_NoDestinationFound 0 TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
211 0x1b01 TCC_InvalidCcsdsVersion 1 TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
212 0x1b02 TCC_InvalidApid 2 TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
213 0x1b03 TCC_InvalidPacketType 3 TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
214 0x1b04 TCC_InvalidSecHeaderField 4 TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
215 0x1b05 TCC_IncorrectPrimaryHeader 5 TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
216 0x1b07 TCC_IncompletePacket 7 TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
217 0x1b08 TCC_InvalidPusVersion 8 TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
218 0x1b09 TCC_IncorrectChecksum 9 TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
219 0x1b0a TCC_IllegalPacketSubtype 10 TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
220 0x1b0b TCC_IncorrectSecondaryHeader 11 TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
221 0x3001 POS_InPowerTransition 1 POWER_SWITCHER fsfw/src/fsfw/power/PowerSwitcher.h
222 0x3002 POS_SwitchStateMismatch 2 POWER_SWITCHER fsfw/src/fsfw/power/PowerSwitcher.h
223 0x0501 PS_SwitchOn 1 POWER_SWITCH_IF fsfw/src/fsfw/power/PowerSwitchIF.h
224 0x0500 PS_SwitchOff 0 POWER_SWITCH_IF fsfw/src/fsfw/power/PowerSwitchIF.h
225 0x0502 PS_SwitchTimeout 2 POWER_SWITCH_IF fsfw/src/fsfw/power/PowerSwitchIF.h
226 0x0503 PS_FuseOn 3 POWER_SWITCH_IF fsfw/src/fsfw/power/PowerSwitchIF.h
227 0x0504 PS_FuseOff 4 POWER_SWITCH_IF fsfw/src/fsfw/power/PowerSwitchIF.h
228 0x3b00 SPH_ConnBroken 0 SEMAPHORE_IF fsfw/src/fsfw/osal/common/TcpTmTcServer.h
229 0x2a01 IEC_NoConfigurationTable 1 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
230 0x2a02 IEC_NoCpuTable 2 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
231 0x2a03 IEC_InvalidWorkspaceAddress 3 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
232 0x2a04 IEC_TooLittleWorkspace 4 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
233 0x2a05 IEC_WorkspaceAllocation 5 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
234 0x2a06 IEC_InterruptStackTooSmall 6 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
235 0x2a07 IEC_ThreadExitted 7 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
236 0x2a08 IEC_InconsistentMpInformation 8 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
237 0x2a09 IEC_InvalidNode 9 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
238 0x2a0a IEC_NoMpci 10 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
239 0x2a0b IEC_BadPacket 11 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
240 0x2a0c IEC_OutOfPackets 12 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
241 0x2a0d IEC_OutOfGlobalObjects 13 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
242 0x2a0e IEC_OutOfProxies 14 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
243 0x2a0f IEC_InvalidGlobalId 15 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
244 0x2a10 IEC_BadStackHook 16 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
245 0x2a11 IEC_BadAttributes 17 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
246 0x2a12 IEC_ImplementationKeyCreateInconsistency 18 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
247 0x2a13 IEC_ImplementationBlockingOperationCancel 19 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
248 0x2a14 IEC_MutexObtainFromBadState 20 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
249 0x2a15 IEC_UnlimitedAndMaximumIs0 21 INTERNAL_ERROR_CODES fsfw/src/fsfw/osal/InternalErrorCodes.h
250 0x2600 FDI_YourFault 0 HANDLES_FAILURES_IF fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h
251 0x2601 FDI_MyFault 1 HANDLES_FAILURES_IF fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h
252 0x2602 FDI_ConfirmLater 2 HANDLES_FAILURES_IF fsfw/src/fsfw/fdir/ConfirmsFailuresIF.h
253 0x1e00 PUS_InvalidPusVersion 0 PUS_IF fsfw/src/fsfw/tmtcpacket/pus/PusIF.h
254 0x1e01 PUS_InvalidCrc16 1 PUS_IF fsfw/src/fsfw/tmtcpacket/pus/PusIF.h
255 0x0201 OM_InsertionFailed 1 OBJECT_MANAGER_IF fsfw/src/fsfw/objectmanager/ObjectManagerIF.h
256 0x0202 OM_NotFound 2 OBJECT_MANAGER_IF fsfw/src/fsfw/objectmanager/ObjectManagerIF.h
257 0x0203 OM_ChildInitFailed 3 OBJECT_MANAGER_IF fsfw/src/fsfw/objectmanager/ObjectManagerIF.h
258 0x0204 OM_InternalErrReporterUninit 4 OBJECT_MANAGER_IF fsfw/src/fsfw/objectmanager/ObjectManagerIF.h
259 0x2201 TMF_Busy 1 TM_STORE_FRONTEND_IF fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
260 0x2202 TMF_LastPacketFound 2 TM_STORE_FRONTEND_IF fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
261 0x2203 TMF_StopFetch 3 TM_STORE_FRONTEND_IF fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
262 0x2204 TMF_Timeout 4 TM_STORE_FRONTEND_IF fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
263 0x2205 TMF_TmChannelFull 5 TM_STORE_FRONTEND_IF fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
264 0x2206 TMF_NotStored 6 TM_STORE_FRONTEND_IF fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
265 0x2207 TMF_AllDeleted 7 TM_STORE_FRONTEND_IF fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
266 0x2208 TMF_InvalidData 8 TM_STORE_FRONTEND_IF fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
267 0x2209 TMF_NotReady 9 TM_STORE_FRONTEND_IF fsfw/src/fsfw/tmstorage/TmStoreFrontendIF.h
268 0x2101 TMB_Busy 1 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
269 0x2102 TMB_Full 2 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
270 0x2103 TMB_Empty 3 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
271 0x2104 TMB_NullRequested 4 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
272 0x2105 TMB_TooLarge 5 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
273 0x2106 TMB_NotReady 6 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
274 0x2107 TMB_DumpError 7 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
275 0x2108 TMB_CrcError 8 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
276 0x2109 TMB_Timeout 9 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
277 0x210a TMB_IdlePacketFound 10 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
278 0x210b TMB_TelecommandFound 11 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
279 0x210c TMB_NoPusATm 12 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
280 0x210d TMB_TooSmall 13 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
281 0x210e TMB_BlockNotFound 14 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
282 0x210f TMB_InvalidRequest 15 TM_STORE_BACKEND_IF fsfw/src/fsfw/tmstorage/TmStoreBackendIF.h
283 0x2d01 PAW_UnknownDatatype 1 PARAMETER_WRAPPER fsfw/src/fsfw/parameters/ParameterWrapper.h
284 0x2d02 PAW_DatatypeMissmatch 2 PARAMETER_WRAPPER fsfw/src/fsfw/parameters/ParameterWrapper.h
285 0x2d03 PAW_Readonly 3 PARAMETER_WRAPPER fsfw/src/fsfw/parameters/ParameterWrapper.h
286 0x2d04 PAW_TooBig 4 PARAMETER_WRAPPER fsfw/src/fsfw/parameters/ParameterWrapper.h
287 0x2d05 PAW_SourceNotSet 5 PARAMETER_WRAPPER fsfw/src/fsfw/parameters/ParameterWrapper.h
288 0x2d06 PAW_OutOfBounds 6 PARAMETER_WRAPPER fsfw/src/fsfw/parameters/ParameterWrapper.h
289 0x2d07 PAW_NotSet 7 PARAMETER_WRAPPER fsfw/src/fsfw/parameters/ParameterWrapper.h
290 0x2d08 PAW_ColumnOrRowsZero 8 PARAMETER_WRAPPER fsfw/src/fsfw/parameters/ParameterWrapper.h
291 0x2e01 HPA_InvalidIdentifierId 1 HAS_PARAMETERS_IF fsfw/src/fsfw/parameters/HasParametersIF.h
292 0x2e02 HPA_InvalidDomainId 2 HAS_PARAMETERS_IF fsfw/src/fsfw/parameters/HasParametersIF.h
293 0x2e03 HPA_InvalidValue 3 HAS_PARAMETERS_IF fsfw/src/fsfw/parameters/HasParametersIF.h
294 0x2e05 HPA_ReadOnly 5 HAS_PARAMETERS_IF fsfw/src/fsfw/parameters/HasParametersIF.h
295 0x3b01 SPH_SemaphoreTimeout 1 SEMAPHORE_IF fsfw/src/fsfw/tasks/SemaphoreIF.h
296 0x3b02 SPH_SemaphoreNotOwned 2 SEMAPHORE_IF fsfw/src/fsfw/tasks/SemaphoreIF.h
297 0x3b03 SPH_SemaphoreInvalid 3 SEMAPHORE_IF fsfw/src/fsfw/tasks/SemaphoreIF.h
298 0x1a01 TRC_NotEnoughSensors 1 TRIPLE_REDUNDACY_CHECK fsfw/src/fsfw/monitoring/TriplexMonitor.h
299 0x1a02 TRC_LowestValueOol 2 TRIPLE_REDUNDACY_CHECK fsfw/src/fsfw/monitoring/TriplexMonitor.h
300 0x1a03 TRC_HighestValueOol 3 TRIPLE_REDUNDACY_CHECK fsfw/src/fsfw/monitoring/TriplexMonitor.h
301 0x1a04 TRC_BothValuesOol 4 TRIPLE_REDUNDACY_CHECK fsfw/src/fsfw/monitoring/TriplexMonitor.h
302 0x1a05 TRC_DuplexOol 5 TRIPLE_REDUNDACY_CHECK fsfw/src/fsfw/monitoring/TriplexMonitor.h
303 0x3101 LIM_Unchecked 1 LIMITS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h
304 0x3102 LIM_Invalid 2 LIMITS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h
305 0x3103 LIM_Unselected 3 LIMITS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h
306 0x3104 LIM_BelowLowLimit 4 LIMITS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h
307 0x3105 LIM_AboveHighLimit 5 LIMITS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h
308 0x3106 LIM_UnexpectedValue 6 LIMITS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h
309 0x3107 LIM_OutOfRange 7 LIMITS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h
310 0x31a0 LIM_FirstSample 160 LIMITS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h
311 0x31e0 LIM_InvalidSize 224 LIMITS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h
312 0x31e1 LIM_WrongType 225 LIMITS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h
313 0x31e2 LIM_WrongPid 226 LIMITS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h
314 0x31e3 LIM_WrongLimitId 227 LIMITS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h
315 0x31ee LIM_MonitorNotFound 238 LIMITS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h
316 0x3601 CFDP_InvalidTlvType 1 CFDP fsfw/src/fsfw/cfdp/definitions.h
317 0x3602 CFDP_InvalidDirectiveField 2 CFDP fsfw/src/fsfw/cfdp/definitions.h
318 0x3603 CFDP_InvalidPduDatafieldLen 3 CFDP fsfw/src/fsfw/cfdp/definitions.h
319 0x3604 CFDP_InvalidAckDirectiveFields 4 CFDP fsfw/src/fsfw/cfdp/definitions.h
320 0x3605 CFDP_MetadataCantParseOptions 5 CFDP fsfw/src/fsfw/cfdp/definitions.h
321 0x3606 CFDP_NakCantParseOptions 6 CFDP fsfw/src/fsfw/cfdp/definitions.h
322 0x3607 CFDP_FinishedCantParseFsResponses 7 CFDP fsfw/src/fsfw/cfdp/definitions.h
323 0x3608 CFDP_FilestoreRequiresSecondFile 8 CFDP fsfw/src/fsfw/cfdp/definitions.h
324 0x3609 CFDP_FilestoreResponseCantParseFsMessage 9 CFDP fsfw/src/fsfw/cfdp/definitions.h
325 0x360a CFDP_InvalidPduFormat 10 CFDP fsfw/src/fsfw/cfdp/definitions.h
326 0x4300 FILS_GenericFileError 0 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
327 0x4301 FILS_GenericDirError 1 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
328 0x4302 FILS_FilesystemInactive 2 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
329 0x4303 FILS_GenericRenameError 3 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
330 0x4304 FILS_IsBusy 4 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
331 0x4305 FILS_InvalidParameters 5 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
332 0x430a FILS_FileDoesNotExist 10 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
333 0x430b FILS_FileAlreadyExists 11 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
334 0x430c FILS_NotAFile 12 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
335 0x430d FILS_FileLocked 13 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
336 0x430e FILS_PermissionDenied 14 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
337 0x4315 FILS_DirectoryDoesNotExist 21 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
338 0x4316 FILS_DirectoryAlreadyExists 22 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
339 0x4317 FILS_NotADirectory 23 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
340 0x4318 FILS_DirectoryNotEmpty 24 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
341 0x431e FILS_SequencePacketMissingWrite 30 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
342 0x431f FILS_SequencePacketMissingRead 31 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
343 0x2c01 CCS_BcIsSetVrCommand 1 CCSDS_HANDLER_IF fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
344 0x2c02 CCS_BcIsUnlockCommand 2 CCSDS_HANDLER_IF fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
345 0x2cb0 CCS_BcIllegalCommand 176 CCSDS_HANDLER_IF fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
369 0x2cd1 CCS_ShorterThanHeader 209 CCSDS_HANDLER_IF fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
370 0x2cd2 CCS_TooShortBlockedPacket 210 CCSDS_HANDLER_IF fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
371 0x2cd3 CCS_TooShortMapExtraction 211 CCSDS_HANDLER_IF fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
372 0x38a1 0x4201 SGP4_InvalidEccentricity PUS11_InvalidTypeTimeWindow 161 1 SGP4PROPAGATOR_CLASS PUS_SERVICE_11 fsfw/src/fsfw/coordinates/Sgp4Propagator.h fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
373 0x38a2 0x4202 SGP4_InvalidMeanMotion PUS11_InvalidTimeWindow 162 2 SGP4PROPAGATOR_CLASS PUS_SERVICE_11 fsfw/src/fsfw/coordinates/Sgp4Propagator.h fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
374 0x38a3 0x4203 SGP4_InvalidPerturbationElements PUS11_TimeshiftingNotPossible 163 3 SGP4PROPAGATOR_CLASS PUS_SERVICE_11 fsfw/src/fsfw/coordinates/Sgp4Propagator.h fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
375 0x38a4 0x4204 SGP4_InvalidSemiLatusRectum PUS11_InvalidRelativeTime 164 4 SGP4PROPAGATOR_CLASS PUS_SERVICE_11 fsfw/src/fsfw/coordinates/Sgp4Propagator.h fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
376 0x38a5 0x4205 SGP4_InvalidEpochElements PUS11_ContainedTcTooSmall 165 5 SGP4PROPAGATOR_CLASS PUS_SERVICE_11 fsfw/src/fsfw/coordinates/Sgp4Propagator.h fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
377 0x38a6 0x4206 SGP4_SatelliteHasDecayed PUS11_ContainedTcCrcMissmatch 166 6 SGP4PROPAGATOR_CLASS PUS_SERVICE_11 fsfw/src/fsfw/coordinates/Sgp4Propagator.h fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
378 0x38b1 0x3401 SGP4_TleTooOld DC_NoReplyReceived 177 1 SGP4PROPAGATOR_CLASS DEVICE_COMMUNICATION_IF fsfw/src/fsfw/coordinates/Sgp4Propagator.h fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
379 0x38b2 0x3402 SGP4_TleNotInitialized DC_ProtocolError 178 2 SGP4PROPAGATOR_CLASS DEVICE_COMMUNICATION_IF fsfw/src/fsfw/coordinates/Sgp4Propagator.h fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
380 0x4300 0x3403 FILS_GenericFileError DC_Nullpointer 0 3 FILE_SYSTEM DEVICE_COMMUNICATION_IF fsfw/src/fsfw/filesystem/HasFileSystemIF.h fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
381 0x4301 0x3404 FILS_GenericDirError DC_InvalidCookieType 1 4 FILE_SYSTEM DEVICE_COMMUNICATION_IF fsfw/src/fsfw/filesystem/HasFileSystemIF.h fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
382 0x4302 0x3405 FILS_FilesystemInactive DC_NotActive 2 5 FILE_SYSTEM DEVICE_COMMUNICATION_IF fsfw/src/fsfw/filesystem/HasFileSystemIF.h fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
383 0x4303 0x3406 FILS_GenericRenameError DC_TooMuchData 3 6 FILE_SYSTEM DEVICE_COMMUNICATION_IF fsfw/src/fsfw/filesystem/HasFileSystemIF.h fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
0x4304 FILS_IsBusy 4 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4305 FILS_InvalidParameters 5 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430a FILS_FileDoesNotExist 10 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430b FILS_FileAlreadyExists 11 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430c FILS_NotAFile 12 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430d FILS_FileLocked 13 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x430e FILS_PermissionDenied 14 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4315 FILS_DirectoryDoesNotExist 21 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4316 FILS_DirectoryAlreadyExists 22 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4317 FILS_NotADirectory 23 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x4318 FILS_DirectoryNotEmpty 24 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x431e FILS_SequencePacketMissingWrite 30 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
0x431f FILS_SequencePacketMissingRead 31 FILE_SYSTEM fsfw/src/fsfw/filesystem/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
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
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
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
0x3001 POS_InPowerTransition 1 POWER_SWITCHER fsfw/src/fsfw/power/PowerSwitcher.h
0x3002 POS_SwitchStateMismatch 2 POWER_SWITCHER fsfw/src/fsfw/power/PowerSwitcher.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
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
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
0x1601 FMM_MapFull 1 FIXED_MULTIMAP fsfw/src/fsfw/container/FixedOrderedMultimap.h
0x1602 FMM_KeyDoesNotExist 2 FIXED_MULTIMAP fsfw/src/fsfw/container/FixedOrderedMultimap.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
384 0x03a0 DHB_InvalidChannel 160 DEVICE_HANDLER_BASE fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h
385 0x03b0 DHB_AperiodicReply 176 DEVICE_HANDLER_BASE fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h
386 0x03b1 DHB_IgnoreReplyData 177 DEVICE_HANDLER_BASE fsfw/src/fsfw/devicehandlers/DeviceHandlerBase.h
417 0x27c3 DHI_DeviceReplyInvalid 195 DEVICE_HANDLER_IF fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
418 0x27d0 DHI_InvalidCommandParameter 208 DEVICE_HANDLER_IF fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
419 0x27d1 DHI_InvalidNumberOrLengthOfParameters 209 DEVICE_HANDLER_IF fsfw/src/fsfw/devicehandlers/DeviceHandlerIF.h
420 0x3401 0x2401 DC_NoReplyReceived MT_TooDetailedRequest 1 DEVICE_COMMUNICATION_IF MATCH_TREE_CLASS fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
421 0x3402 0x2402 DC_ProtocolError MT_TooGeneralRequest 2 DEVICE_COMMUNICATION_IF MATCH_TREE_CLASS fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
422 0x3403 0x2403 DC_Nullpointer MT_NoMatch 3 DEVICE_COMMUNICATION_IF MATCH_TREE_CLASS fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
423 0x3404 0x2404 DC_InvalidCookieType MT_Full 4 DEVICE_COMMUNICATION_IF MATCH_TREE_CLASS fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
424 0x3405 0x2405 DC_NotActive MT_NewNodeCreated 5 DEVICE_COMMUNICATION_IF MATCH_TREE_CLASS fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
425 0x3406 0x3f01 DC_TooMuchData DLEE_NoPacketFound 6 1 DEVICE_COMMUNICATION_IF DLE_ENCODER fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h fsfw/src/fsfw/globalfunctions/DleParser.h
426 0x2501 0x3f02 EV_ListenerNotFound DLEE_PossiblePacketLoss 1 2 EVENT_MANAGER_IF DLE_ENCODER fsfw/src/fsfw/events/EventManagerIF.h fsfw/src/fsfw/globalfunctions/DleParser.h
427 0x1a01 0x2f01 TRC_NotEnoughSensors ASC_TooLongForTargetType 1 TRIPLE_REDUNDACY_CHECK ASCII_CONVERTER fsfw/src/fsfw/monitoring/TriplexMonitor.h fsfw/src/fsfw/globalfunctions/AsciiConverter.h
428 0x1a02 0x2f02 TRC_LowestValueOol ASC_InvalidCharacters 2 TRIPLE_REDUNDACY_CHECK ASCII_CONVERTER fsfw/src/fsfw/monitoring/TriplexMonitor.h fsfw/src/fsfw/globalfunctions/AsciiConverter.h
429 0x1a03 0x2f03 TRC_HighestValueOol ASC_BufferTooSmall 3 TRIPLE_REDUNDACY_CHECK ASCII_CONVERTER fsfw/src/fsfw/monitoring/TriplexMonitor.h fsfw/src/fsfw/globalfunctions/AsciiConverter.h
430 0x1a04 0x1701 TRC_BothValuesOol HHI_ObjectNotHealthy 4 1 TRIPLE_REDUNDACY_CHECK HAS_HEALTH_IF fsfw/src/fsfw/monitoring/TriplexMonitor.h fsfw/src/fsfw/health/HasHealthIF.h
431 0x1a05 0x1702 TRC_DuplexOol HHI_InvalidHealthState 5 2 TRIPLE_REDUNDACY_CHECK HAS_HEALTH_IF fsfw/src/fsfw/monitoring/TriplexMonitor.h fsfw/src/fsfw/health/HasHealthIF.h
432 0x3101 0x1703 LIM_Unchecked HHI_IsExternallyControlled 1 3 LIMITS_IF HAS_HEALTH_IF fsfw/src/fsfw/monitoring/MonitoringIF.h fsfw/src/fsfw/health/HasHealthIF.h
433 0x3102 0x3201 LIM_Invalid CF_ObjectHasNoFunctions 2 1 LIMITS_IF COMMANDS_ACTIONS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h fsfw/src/fsfw/action/CommandsActionsIF.h
434 0x3103 0x3202 LIM_Unselected CF_AlreadyCommanding 3 2 LIMITS_IF COMMANDS_ACTIONS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h fsfw/src/fsfw/action/CommandsActionsIF.h
435 0x3104 0x3301 LIM_BelowLowLimit HF_IsBusy 4 1 LIMITS_IF HAS_ACTIONS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h fsfw/src/fsfw/action/HasActionsIF.h
436 0x3105 0x3302 LIM_AboveHighLimit HF_InvalidParameters 5 2 LIMITS_IF HAS_ACTIONS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h fsfw/src/fsfw/action/HasActionsIF.h
437 0x3106 0x3303 LIM_UnexpectedValue HF_ExecutionFinished 6 3 LIMITS_IF HAS_ACTIONS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h fsfw/src/fsfw/action/HasActionsIF.h
438 0x3107 0x3304 LIM_OutOfRange HF_InvalidActionId 7 4 LIMITS_IF HAS_ACTIONS_IF fsfw/src/fsfw/monitoring/MonitoringIF.h fsfw/src/fsfw/action/HasActionsIF.h
439 0x31a0 0x1000 LIM_FirstSample TIM_UnsupportedTimeFormat 160 0 LIMITS_IF CCSDS_TIME_HELPER_CLASS fsfw/src/fsfw/monitoring/MonitoringIF.h fsfw/src/fsfw/timemanager/CCSDSTime.h
440 0x31e0 0x1001 LIM_InvalidSize TIM_NotEnoughInformationForTargetFormat 224 1 LIMITS_IF CCSDS_TIME_HELPER_CLASS fsfw/src/fsfw/monitoring/MonitoringIF.h fsfw/src/fsfw/timemanager/CCSDSTime.h
441 0x31e1 0x1002 LIM_WrongType TIM_LengthMismatch 225 2 LIMITS_IF CCSDS_TIME_HELPER_CLASS fsfw/src/fsfw/monitoring/MonitoringIF.h fsfw/src/fsfw/timemanager/CCSDSTime.h
442 0x31e2 0x1003 LIM_WrongPid TIM_InvalidTimeFormat 226 3 LIMITS_IF CCSDS_TIME_HELPER_CLASS fsfw/src/fsfw/monitoring/MonitoringIF.h fsfw/src/fsfw/timemanager/CCSDSTime.h
443 0x31e3 0x1004 LIM_WrongLimitId TIM_InvalidDayOfYear 227 4 LIMITS_IF CCSDS_TIME_HELPER_CLASS fsfw/src/fsfw/monitoring/MonitoringIF.h fsfw/src/fsfw/timemanager/CCSDSTime.h
444 0x31ee 0x1005 LIM_MonitorNotFound TIM_TimeDoesNotFitFormat 238 5 LIMITS_IF CCSDS_TIME_HELPER_CLASS fsfw/src/fsfw/monitoring/MonitoringIF.h fsfw/src/fsfw/timemanager/CCSDSTime.h
445 0x3b01 0x3701 SPH_SemaphoreTimeout TSI_BadTimestamp 1 SEMAPHORE_IF TIME_STAMPER_IF fsfw/src/fsfw/tasks/SemaphoreIF.h fsfw/src/fsfw/timemanager/TimeStampIF.h
446 0x3b02 0x3c00 SPH_SemaphoreNotOwned LPIF_PoolEntryNotFound 2 0 SEMAPHORE_IF LOCAL_POOL_OWNER_IF fsfw/src/fsfw/tasks/SemaphoreIF.h fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h
447 0x3b03 0x3c01 SPH_SemaphoreInvalid LPIF_PoolEntryTypeConflict 3 1 SEMAPHORE_IF LOCAL_POOL_OWNER_IF fsfw/src/fsfw/tasks/SemaphoreIF.h fsfw/src/fsfw/datapoollocal/localPoolDefinitions.h
448 0x4500 0x3e00 HSPI_OpeningFileFailed HKM_QueueOrDestinationInvalid 0 HAL_SPI HOUSEKEEPING_MANAGER fsfw/src/fsfw_hal/linux/spi/SpiComIF.h fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
449 0x4501 0x3e01 HSPI_FullDuplexTransferFailed HKM_WrongHkPacketType 1 HAL_SPI HOUSEKEEPING_MANAGER fsfw/src/fsfw_hal/linux/spi/SpiComIF.h fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
450 0x4502 0x3e02 HSPI_HalfDuplexTransferFailed HKM_ReportingStatusUnchanged 2 HAL_SPI HOUSEKEEPING_MANAGER fsfw/src/fsfw_hal/linux/spi/SpiComIF.h fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
451 0x4601 0x3e03 HURT_UartReadFailure HKM_PeriodicHelperInvalid 1 3 HAL_UART HOUSEKEEPING_MANAGER fsfw/src/fsfw_hal/linux/serial/SerialComIF.h fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
452 0x4602 0x3e04 HURT_UartReadSizeMissmatch HKM_PoolobjectNotFound 2 4 HAL_UART HOUSEKEEPING_MANAGER fsfw/src/fsfw_hal/linux/serial/SerialComIF.h fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
453 0x4603 0x3e05 HURT_UartRxBufferTooSmall HKM_DatasetNotFound 3 5 HAL_UART HOUSEKEEPING_MANAGER fsfw/src/fsfw_hal/linux/serial/SerialComIF.h fsfw/src/fsfw/datapoollocal/LocalDataPoolManager.h
454 0x4801 0x2901 HGIO_UnknownGpioId TC_InvalidTargetState 1 HAL_GPIO THERMAL_COMPONENT_IF fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h fsfw/src/fsfw/thermal/ThermalComponentIF.h
455 0x4802 0x29f1 HGIO_DriveGpioFailure TC_AboveOperationalLimit 2 241 HAL_GPIO THERMAL_COMPONENT_IF fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h fsfw/src/fsfw/thermal/ThermalComponentIF.h
456 0x4803 0x29f2 HGIO_GpioTypeFailure TC_BelowOperationalLimit 3 242 HAL_GPIO THERMAL_COMPONENT_IF fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h fsfw/src/fsfw/thermal/ThermalComponentIF.h
457 0x4804 0x2001 HGIO_GpioInvalidInstance CSB_ExecutionComplete 4 1 HAL_GPIO COMMAND_SERVICE_BASE fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
458 0x4805 0x2002 HGIO_GpioDuplicateDetected CSB_NoStepMessage 5 2 HAL_GPIO COMMAND_SERVICE_BASE fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
459 0x4806 0x2003 HGIO_GpioInitFailed CSB_ObjectBusy 6 3 HAL_GPIO COMMAND_SERVICE_BASE fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
460 0x4807 0x2004 HGIO_GpioGetValueFailed CSB_Busy 7 4 HAL_GPIO COMMAND_SERVICE_BASE fsfw/src/fsfw_hal/linux/gpio/LinuxLibgpioIF.h fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
461 0x4400 0x2005 UXOS_ExecutionFinished CSB_InvalidTc Execution of the current command has finished 0 5 LINUX_OSAL COMMAND_SERVICE_BASE fsfw/src/fsfw_hal/linux/CommandExecutor.h fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
462 0x4401 0x2006 UXOS_CommandPending CSB_InvalidObject Command is pending. This will also be returned if the user tries to load another command but a command is still pending 1 6 LINUX_OSAL COMMAND_SERVICE_BASE fsfw/src/fsfw_hal/linux/CommandExecutor.h fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
463 0x4402 0x2007 UXOS_BytesRead CSB_InvalidReply Some bytes have been read from the executing process 2 7 LINUX_OSAL COMMAND_SERVICE_BASE fsfw/src/fsfw_hal/linux/CommandExecutor.h fsfw/src/fsfw/tmtcservices/CommandingServiceBase.h
464 0x4403 0x4c00 UXOS_CommandError SPPA_NoPacketFound Command execution failed 3 0 LINUX_OSAL SPACE_PACKET_PARSER fsfw/src/fsfw_hal/linux/CommandExecutor.h fsfw/src/fsfw/tmtcservices/SpacePacketParser.h
465 0x4404 0x4c01 UXOS_NoCommandLoadedOrPending SPPA_SplitPacket 4 1 LINUX_OSAL SPACE_PACKET_PARSER fsfw/src/fsfw_hal/linux/CommandExecutor.h fsfw/src/fsfw/tmtcservices/SpacePacketParser.h
466 0x4406 0x1d01 UXOS_PcloseCallError ATC_ActivityStarted 6 1 LINUX_OSAL ACCEPTS_TELECOMMANDS_IF fsfw/src/fsfw_hal/linux/CommandExecutor.h fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h
467 0x1d02 ATC_InvalidSubservice 2 ACCEPTS_TELECOMMANDS_IF fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h
468 0x1d03 ATC_IllegalApplicationData 3 ACCEPTS_TELECOMMANDS_IF fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h
469 0x1d04 ATC_SendTmFailed 4 ACCEPTS_TELECOMMANDS_IF fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h
470 0x1d05 ATC_Timeout 5 ACCEPTS_TELECOMMANDS_IF fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h
471 0x6b00 SCBU_KeyNotFound 0 SCRATCH_BUFFER bsp_q7s/memory/scratchApi.h
472 0x64a0 FSHLP_SdNotMounted SD card specified with path string not mounted 160 FILE_SYSTEM_HELPER bsp_q7s/fs/FilesystemHelper.h
473 0x64a1 FSHLP_FileNotExists Specified file does not exist on filesystem 161 FILE_SYSTEM_HELPER bsp_q7s/fs/FilesystemHelper.h
474 0x6a00 SDMA_OpOngoing 0 SD_CARD_MANAGER bsp_q7s/fs/SdCardManager.h
475 0x6a01 SDMA_AlreadyOn 1 SD_CARD_MANAGER bsp_q7s/fs/SdCardManager.h
476 0x6a02 SDMA_AlreadyMounted 2 SD_CARD_MANAGER bsp_q7s/fs/SdCardManager.h
481 0x6a0d SDMA_UnmountError 13 SD_CARD_MANAGER bsp_q7s/fs/SdCardManager.h
482 0x6a0e SDMA_SystemCallError 14 SD_CARD_MANAGER bsp_q7s/fs/SdCardManager.h
483 0x6a0f SDMA_PopenCallError 15 SD_CARD_MANAGER bsp_q7s/fs/SdCardManager.h
0x64a0 FSHLP_SdNotMounted SD card specified with path string not mounted 160 FILE_SYSTEM_HELPER bsp_q7s/fs/FilesystemHelper.h
0x64a1 FSHLP_FileNotExists Specified file does not exist on filesystem 161 FILE_SYSTEM_HELPER bsp_q7s/fs/FilesystemHelper.h
0x6b00 SCBU_KeyNotFound 0 SCRATCH_BUFFER bsp_q7s/memory/scratchApi.h

View File

@ -12,11 +12,11 @@ from typing import Union
from spacepackets.ecss import PusTelecommand from spacepackets.ecss import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.util import ObjectIdU32, ObjectIdBase from tmtccmd.util import ObjectIdU32, ObjectIdBase
class GomspaceDeviceActionIds(enum.IntEnum): class GomspaceDeviceActionId(enum.IntEnum):
PING = 1 PING = 1
REBOOT = 4 REBOOT = 4
PARAM_GET = 0 PARAM_GET = 0
@ -63,8 +63,8 @@ class Channel:
def pack_request_config_command(object_id: bytes) -> PusTelecommand: def pack_request_config_command(object_id: bytes) -> PusTelecommand:
return make_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=GomspaceDeviceActionIds.REQUEST_CONFIG_TABLE object_id=object_id, action_id=GomspaceDeviceActionId.REQUEST_CONFIG_TABLE
) )
@ -88,9 +88,9 @@ def pack_get_param_command(
else: else:
app_data += memory_address app_data += memory_address
app_data += struct.pack("!B", parameter_size) app_data += struct.pack("!B", parameter_size)
return make_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, object_id=object_id,
action_id=GomspaceDeviceActionIds.PARAM_GET, action_id=GomspaceDeviceActionId.PARAM_GET,
user_data=app_data, user_data=app_data,
) )
@ -98,12 +98,12 @@ def pack_get_param_command(
def pack_set_float_param_command( def pack_set_float_param_command(
object_id: bytes, memory_address: bytes, parameter: float object_id: bytes, memory_address: bytes, parameter: float
) -> PusTelecommand: ) -> PusTelecommand:
action_id = GomspaceDeviceActionIds.PARAM_SET action_id = GomspaceDeviceActionId.PARAM_SET
app_data = bytearray() app_data = bytearray()
app_data += memory_address app_data += memory_address
app_data.append(4) app_data.append(4)
app_data += struct.pack("!f", parameter) app_data += struct.pack("!f", parameter)
return make_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=action_id, user_data=app_data object_id=object_id, action_id=action_id, user_data=app_data
) )
@ -111,12 +111,12 @@ def pack_set_float_param_command(
def pack_set_u8_param_command( def pack_set_u8_param_command(
object_id: bytes, memory_address: bytes, parameter: int object_id: bytes, memory_address: bytes, parameter: int
) -> PusTelecommand: ) -> PusTelecommand:
action_id = GomspaceDeviceActionIds.PARAM_SET action_id = GomspaceDeviceActionId.PARAM_SET
app_data = bytearray() app_data = bytearray()
app_data += memory_address app_data += memory_address
app_data.append(1) app_data.append(1)
app_data.append(parameter) app_data.append(parameter)
return make_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=action_id, user_data=app_data object_id=object_id, action_id=action_id, user_data=app_data
) )
@ -124,12 +124,12 @@ def pack_set_u8_param_command(
def pack_set_i8_param_command( def pack_set_i8_param_command(
object_id: bytes, memory_address: bytes, parameter: int object_id: bytes, memory_address: bytes, parameter: int
) -> PusTelecommand: ) -> PusTelecommand:
action_id = GomspaceDeviceActionIds.PARAM_SET action_id = GomspaceDeviceActionId.PARAM_SET
app_data = bytearray() app_data = bytearray()
app_data += memory_address app_data += memory_address
app_data.append(1) app_data.append(1)
app_data += struct.pack("!b", parameter) app_data += struct.pack("!b", parameter)
return make_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=action_id, user_data=app_data object_id=object_id, action_id=action_id, user_data=app_data
) )
@ -137,12 +137,12 @@ def pack_set_i8_param_command(
def pack_set_u16_param_command( def pack_set_u16_param_command(
object_id: bytes, memory_address: bytes, parameter: int object_id: bytes, memory_address: bytes, parameter: int
) -> PusTelecommand: ) -> PusTelecommand:
action_id = GomspaceDeviceActionIds.PARAM_SET action_id = GomspaceDeviceActionId.PARAM_SET
app_data = bytearray() app_data = bytearray()
app_data += memory_address app_data += memory_address
app_data.append(2) app_data.append(2)
app_data += struct.pack("!H", parameter) app_data += struct.pack("!H", parameter)
return make_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=action_id, user_data=app_data object_id=object_id, action_id=action_id, user_data=app_data
) )
@ -150,34 +150,34 @@ def pack_set_u16_param_command(
def pack_set_i16_param_command( def pack_set_i16_param_command(
object_id: bytes, memory_address: bytes, parameter: int object_id: bytes, memory_address: bytes, parameter: int
) -> PusTelecommand: ) -> PusTelecommand:
action_id = GomspaceDeviceActionIds.PARAM_SET action_id = GomspaceDeviceActionId.PARAM_SET
app_data = bytearray() app_data = bytearray()
app_data += memory_address app_data += memory_address
app_data.append(2) app_data.append(2)
app_data += struct.pack("!h", parameter) app_data += struct.pack("!h", parameter)
return make_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=action_id, user_data=app_data object_id=object_id, action_id=action_id, user_data=app_data
) )
def pack_set_u32_param_command(object_id: bytes, memory_address: bytes, parameter: int): def pack_set_u32_param_command(object_id: bytes, memory_address: bytes, parameter: int):
action_id = GomspaceDeviceActionIds.PARAM_SET action_id = GomspaceDeviceActionId.PARAM_SET
app_data = bytearray() app_data = bytearray()
app_data += memory_address app_data += memory_address
app_data.append(4) app_data.append(4)
app_data += struct.pack("!I", parameter) app_data += struct.pack("!I", parameter)
return make_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=action_id, user_data=app_data object_id=object_id, action_id=action_id, user_data=app_data
) )
def pack_set_i32_param_command(object_id: bytes, memory_address: bytes, parameter: int): def pack_set_i32_param_command(object_id: bytes, memory_address: bytes, parameter: int):
action_id = GomspaceDeviceActionIds.PARAM_SET action_id = GomspaceDeviceActionId.PARAM_SET
app_data = bytearray() app_data = bytearray()
app_data += memory_address app_data += memory_address
app_data.append(4) app_data.append(4)
app_data += struct.pack("!i", parameter) app_data += struct.pack("!i", parameter)
return make_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=action_id, user_data=app_data object_id=object_id, action_id=action_id, user_data=app_data
) )
@ -224,9 +224,9 @@ def pack_ping_command(object_id: ObjectIdU32, data: bytearray) -> PusTelecommand
@note The ping request sends the specified data to a gompsace device. These @note The ping request sends the specified data to a gompsace device. These
data are simply copied by the device and then sent back. data are simply copied by the device and then sent back.
""" """
return make_fsfw_action_cmd( return create_action_cmd(
object_id=object_id.as_bytes, object_id=object_id.as_bytes,
action_id=GomspaceDeviceActionIds.PING, action_id=GomspaceDeviceActionId.PING,
user_data=data, user_data=data,
) )
@ -235,8 +235,8 @@ def pack_gnd_wdt_reset_command(object_id: ObjectIdBase) -> PusTelecommand:
""" " Function to generate the command to reset the watchdog of a gomspace device. """ " Function to generate the command to reset the watchdog of a gomspace device.
@param object_id Object Id of the gomspace device handler. @param object_id Object Id of the gomspace device handler.
""" """
return make_fsfw_action_cmd( return create_action_cmd(
object_id=object_id.as_bytes, action_id=GomspaceDeviceActionIds.WDT_RESET object_id=object_id.as_bytes, action_id=GomspaceDeviceActionId.WDT_RESET
) )
@ -244,8 +244,8 @@ def pack_reboot_command(object_id: ObjectIdU32) -> PusTelecommand:
"""Function to generate the command which triggers a reboot of a gomspace device """Function to generate the command which triggers a reboot of a gomspace device
@param object_id The object id of the gomspace device handler. @param object_id The object id of the gomspace device handler.
""" """
return make_fsfw_action_cmd( return create_action_cmd(
object_id=object_id.as_bytes, action_id=GomspaceDeviceActionIds.REBOOT object_id=object_id.as_bytes, action_id=GomspaceDeviceActionId.REBOOT
) )
@ -254,6 +254,6 @@ def pack_request_full_hk_table_command(object_id: ObjectIdU32) -> PusTelecommand
device. device.
@param object_id The object id of the gomspace device handler. @param object_id The object id of the gomspace device handler.
""" """
return make_fsfw_action_cmd( return create_action_cmd(
object_id=object_id.as_bytes, action_id=GomspaceDeviceActionIds.REQUEST_HK_TABLE object_id=object_id.as_bytes, action_id=GomspaceDeviceActionId.REQUEST_HK_TABLE
) )

View File

@ -39,21 +39,6 @@ def add_pdec_cmds(defs: TmtcDefinitionWrapper):
defs.add_service(CustomServiceList.PDEC_HANDLER.value, "PDEC Handler", oce) 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 @tmtc_definitions_provider
def add_str_cmds(defs: TmtcDefinitionWrapper): def add_str_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
@ -121,11 +106,11 @@ def add_str_cmds(defs: TmtcDefinitionWrapper):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_time_cmds(defs: TmtcDefinitionWrapper): def add_time_cmds(defs: TmtcDefinitionWrapper):
from eive_tmtc.pus_tc.system.time import OpCodes, Info from eive_tmtc.pus_tc.system.time import OpCode, Info
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add( oce.add(
keys=OpCodes.SET_CURRENT_TIME, keys=OpCode.SET_CURRENT_TIME,
info=Info.SET_CURRENT_TIME, info=Info.SET_CURRENT_TIME,
) )
defs.add_service( defs.add_service(
@ -141,11 +126,11 @@ def add_system_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add( oce.add(
keys=controllers.OpCodes.THERMAL_CONTROLLER, keys=controllers.OpCode.THERMAL_CONTROLLER,
info=controllers.Info.THERMAL_CONTROLLER, info=controllers.Info.THERMAL_CONTROLLER,
) )
oce.add( oce.add(
keys=controllers.OpCodes.CORE_CONTROLLER, keys=controllers.OpCode.CORE_CONTROLLER,
info=controllers.Info.CORE_CONTROLLER, info=controllers.Info.CORE_CONTROLLER,
) )
defs.add_service( defs.add_service(

View File

@ -9,25 +9,25 @@ from tmtccmd.config.tmtc import (
) )
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.tc.pus_3_fsfw_hk import generate_one_hk_command, make_sid from tmtccmd.tc.pus_3_fsfw_hk import generate_one_hk_command, make_sid
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
from tmtccmd.tc.pus_200_fsfw_modes import Subservices as ModeSubservices from tmtccmd.tc.pus_200_fsfw_modes import Subservice as ModeSubservices
class BpxSetIds: class BpxSetId:
GET_HK_SET = 0 GET_HK_SET = 0
GET_CFG_SET = 5 GET_CFG_SET = 5
class BpxActionIds: class BpxActionId:
REBOOT = 2 REBOOT = 2
RESET_COUNTERS = 3 RESET_COUNTERS = 3
SET_CFG = 4 SET_CFG = 4
GET_CFG = 5 GET_CFG = 5
class BpxOpCodes: class BpxOpCode:
HK = ["0", "hk"] HK = ["0", "hk"]
OFF = ["off"] OFF = ["off"]
ON = ["on"] ON = ["on"]
@ -40,15 +40,15 @@ class BpxOpCodes:
@tmtc_definitions_provider @tmtc_definitions_provider
def add_bpx_cmd_definitions(defs: TmtcDefinitionWrapper): def add_bpx_cmd_definitions(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=BpxOpCodes.ON, info="On command") oce.add(keys=BpxOpCode.ON, info="On command")
oce.add(keys=BpxOpCodes.OFF, info="Off command") oce.add(keys=BpxOpCode.OFF, info="Off command")
oce.add(keys=BpxOpCodes.HK, info="Request BPX HK") oce.add(keys=BpxOpCode.HK, info="Request BPX HK")
oce.add(keys=BpxOpCodes.RST_BOOT_CNT, info="Reset Boot Count") oce.add(keys=BpxOpCode.RST_BOOT_CNT, info="Reset Boot Count")
oce.add(keys=BpxOpCodes.REQUEST_CFG, info="Request Configuration Struct (Step 1)") oce.add(keys=BpxOpCode.REQUEST_CFG, info="Request Configuration Struct (Step 1)")
oce.add( oce.add(
keys=BpxOpCodes.REQUEST_CFG_HK, info="Request Configuration Struct HK (Step 2)" keys=BpxOpCode.REQUEST_CFG_HK, info="Request Configuration Struct HK (Step 2)"
) )
oce.add(keys=BpxOpCodes.REBOOT, info="Reboot Command") oce.add(keys=BpxOpCode.REBOOT, info="Reboot Command")
defs.add_service( defs.add_service(
name=CustomServiceList.BPX_BATTERY.value, name=CustomServiceList.BPX_BATTERY.value,
info="BPX Battery Handler", info="BPX Battery Handler",
@ -60,13 +60,13 @@ def add_bpx_cmd_definitions(defs: TmtcDefinitionWrapper):
def pack_bpx_commands(p: ServiceProviderParams): def pack_bpx_commands(p: ServiceProviderParams):
op_code = p.op_code op_code = p.op_code
q = p.queue_helper q = p.queue_helper
if op_code in BpxOpCodes.HK: if op_code in BpxOpCode.HK:
q.add_log_cmd("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) sid = make_sid(object_id=BPX_HANDLER_ID, set_id=BpxSetId.GET_HK_SET)
q.add_pus_tc(generate_one_hk_command(sid=sid)) q.add_pus_tc(generate_one_hk_command(sid=sid))
if op_code in BpxOpCodes.OFF: if op_code in BpxOpCode.OFF:
q.add_log_cmd("Off mode") q.add_log_cmd("Off mode")
mode_cmd = pack_mode_data(BPX_HANDLER_ID, Modes.OFF, 0) mode_cmd = pack_mode_data(BPX_HANDLER_ID, Mode.OFF, 0)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, service=200,
@ -74,9 +74,9 @@ def pack_bpx_commands(p: ServiceProviderParams):
app_data=mode_cmd, app_data=mode_cmd,
) )
) )
if op_code in BpxOpCodes.ON: if op_code in BpxOpCode.ON:
q.add_log_cmd("On mode") q.add_log_cmd("On mode")
mode_cmd = pack_mode_data(BPX_HANDLER_ID, Modes.ON, 0) mode_cmd = pack_mode_data(BPX_HANDLER_ID, Mode.ON, 0)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, service=200,
@ -84,28 +84,24 @@ def pack_bpx_commands(p: ServiceProviderParams):
app_data=mode_cmd, app_data=mode_cmd,
) )
) )
if op_code in BpxOpCodes.RST_BOOT_CNT: if op_code in BpxOpCode.RST_BOOT_CNT:
q.add_log_cmd("Resetting reboot counters") q.add_log_cmd("Resetting reboot counters")
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(
object_id=BPX_HANDLER_ID, action_id=BpxActionIds.RESET_COUNTERS object_id=BPX_HANDLER_ID, action_id=BpxActionId.RESET_COUNTERS
) )
) )
if op_code in BpxOpCodes.REQUEST_CFG: if op_code in BpxOpCode.REQUEST_CFG:
q.add_log_cmd("Requesting configuration struct") q.add_log_cmd("Requesting configuration struct")
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(object_id=BPX_HANDLER_ID, action_id=BpxActionId.GET_CFG)
object_id=BPX_HANDLER_ID, action_id=BpxActionIds.GET_CFG
)
) )
if op_code in BpxOpCodes.REQUEST_CFG_HK: if op_code in BpxOpCode.REQUEST_CFG_HK:
q.add_log_cmd("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) sid = make_sid(object_id=BPX_HANDLER_ID, set_id=BpxSetId.GET_CFG_SET)
q.add_pus_tc(generate_one_hk_command(sid=sid)) q.add_pus_tc(generate_one_hk_command(sid=sid))
if op_code in BpxOpCodes.REBOOT: if op_code in BpxOpCode.REBOOT:
q.add_log_cmd("Rebooting BPX battery") q.add_log_cmd("Rebooting BPX battery")
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(object_id=BPX_HANDLER_ID, action_id=BpxActionId.REBOOT)
object_id=BPX_HANDLER_ID, action_id=BpxActionIds.REBOOT
)
) )

View File

@ -1,80 +0,0 @@
# -*- coding: utf-8 -*-
"""
@file ccsds_handler.py
@brief Test commanding of CCSDS Handler
@author J. Meier
@date 20.11.2021
"""
import struct
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.util import ObjectIdU32
class CommandIds:
# Configures input rate of syrlinks to 400 Khz (results in downlink rate of 200 kbps)
SET_LOW_RATE = 0
# Configures input rate of syrlinks to 2000 Khz (results in downlink rate of 1000 kbps)
SET_HIGH_RATE = 1
# Enables the syrlinks transmitter (by using RS485 enables lines)
EN_TRANSMITTER = 2
# Disables the syrlinks transmitter (by using RS485 enables lines)
DIS_TRANSMITTER = 3
# Sets an arbitrary bitrate. Normally only set low and set high rate commands should be
# required
ARBITRARY_BITRATE = 4
ENABLE_TX_CLK_MANIPULATOR = 5
DISABLE_TX_CLK_MANIPULATOR = 6
# Tx data will be updated on rising edge of tx clock
UPDATE_ON_RISING_EDGE = 7
# Tx data will be updated on falling edge of tx clock
UPDATE_ON_FALLING_EDGE = 8
def pack_ccsds_handler_test(
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":
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":
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":
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":
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":
q.add_log_cmd("CCSDS Handler: Set arbitrary bitrate")
bitrate = int(input("Specify bit rate (bps): "))
command = (
obyt
+ struct.pack("!I", CommandIds.ARBITRARY_BITRATE)
+ struct.pack("!I", bitrate)
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "5":
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":
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":
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":
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))

View File

@ -11,7 +11,7 @@ from tmtccmd.logging import get_console_logger
LOGGER = get_console_logger() LOGGER = get_console_logger()
class OpCodes: class OpCode:
REQ_OS_HK = ["0", "hk-os"] REQ_OS_HK = ["0", "hk-os"]
RESET_GNSS = ["5", "reset"] RESET_GNSS = ["5", "reset"]
@ -21,15 +21,15 @@ class Info:
RESET_GNSS = "Reset GNSS using reset pin" RESET_GNSS = "Reset GNSS using reset pin"
class SetIds: class SetId:
HK = 0 HK = 0
@tmtc_definitions_provider @tmtc_definitions_provider
def add_gps_cmds(defs: TmtcDefinitionWrapper): def add_gps_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.RESET_GNSS, info=Info.RESET_GNSS) oce.add(keys=OpCode.RESET_GNSS, info=Info.RESET_GNSS)
oce.add(keys=OpCodes.REQ_OS_HK, info=Info.REQ_OS_HK) oce.add(keys=OpCode.REQ_OS_HK, info=Info.REQ_OS_HK)
defs.add_service( defs.add_service(
name=CustomServiceList.GPS_CTRL.value, name=CustomServiceList.GPS_CTRL.value,
info="GPS/GNSS Controller", info="GPS/GNSS Controller",
@ -38,11 +38,11 @@ def add_gps_cmds(defs: TmtcDefinitionWrapper):
def pack_gps_command(object_id: bytes, q: DefaultPusQueueHelper, op_code: str): def pack_gps_command(object_id: bytes, q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCodes.RESET_GNSS: if op_code in OpCode.RESET_GNSS:
# TODO: This needs to be re-implemented # TODO: This needs to be re-implemented
LOGGER.warning("Reset pin handling needs to be re-implemented") LOGGER.warning("Reset pin handling needs to be re-implemented")
if op_code in OpCodes.REQ_OS_HK: if op_code in OpCode.REQ_OS_HK:
q.add_log_cmd(f"GMSS: {Info.REQ_OS_HK}") q.add_log_cmd(f"GMSS: {Info.REQ_OS_HK}")
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(sid=make_sid(object_id=object_id, set_id=SetIds.HK)) generate_one_hk_command(sid=make_sid(object_id=object_id, set_id=SetId.HK))
) )

View File

@ -1,10 +1,10 @@
import enum import enum
class AdisGyroSetIds(enum.IntEnum): class AdisGyroSetId(enum.IntEnum):
CORE_HK = 0 CORE_HK = 0
CFG_HK = 1 CFG_HK = 1
class L3gGyroSetIds(enum.IntEnum): class L3gGyroSetId(enum.IntEnum):
CORE_HK = 0 CORE_HK = 0

View File

@ -11,16 +11,16 @@ from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.util.obj_id import ObjectIdU32 from tmtccmd.util.obj_id import ObjectIdU32
from tmtccmd.tc.pus_201_fsfw_health import ( from tmtccmd.pus.s201_fsfw_health import (
pack_set_health_cmd_data, pack_set_health_cmd_data,
FsfwHealth, FsfwHealth,
Subservices, Subservice,
) )
from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
class SwitchNumbers: class SwitchNumber(enum.IntEnum):
HEATER_0_OBC_BRD = 0 HEATER_0_OBC_BRD = 0
HEATER_1_PLOC_PROC_BRD = 1 HEATER_1_PLOC_PROC_BRD = 1
HEATER_2_ACS_BRD = 2 HEATER_2_ACS_BRD = 2
@ -32,7 +32,7 @@ class SwitchNumbers:
NUMBER_OF_SWITCHES = 8 NUMBER_OF_SWITCHES = 8
class OpCodes: class OpCode:
HEATER_CMD = ["0", "switch-cmd"] HEATER_CMD = ["0", "switch-cmd"]
HEATER_EXT_CTRL = ["1", "set-ext-ctrl"] HEATER_EXT_CTRL = ["1", "set-ext-ctrl"]
HEATER_FAULTY_CMD = ["2", "set-faulty"] HEATER_FAULTY_CMD = ["2", "set-faulty"]
@ -57,10 +57,10 @@ class ActionIds(enum.IntEnum):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_heater_cmds(defs: TmtcDefinitionWrapper): def add_heater_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.HEATER_CMD, info=Info.HEATER_CMD) oce.add(keys=OpCode.HEATER_CMD, info=Info.HEATER_CMD)
oce.add(keys=OpCodes.HEATER_HEALTHY_CMD, info=Info.HEATER_HEALTHY_CMD) oce.add(keys=OpCode.HEATER_HEALTHY_CMD, info=Info.HEATER_HEALTHY_CMD)
oce.add(keys=OpCodes.HEATER_EXT_CTRL, info=Info.HEATER_EXT_CTRL) oce.add(keys=OpCode.HEATER_EXT_CTRL, info=Info.HEATER_EXT_CTRL)
oce.add(keys=OpCodes.HEATER_FAULTY_CMD, info=Info.HEATER_FAULTY_CMD) oce.add(keys=OpCode.HEATER_FAULTY_CMD, info=Info.HEATER_FAULTY_CMD)
defs.add_service( defs.add_service(
name=CustomServiceList.HEATER.value, name=CustomServiceList.HEATER.value,
info="Heater Device", info="Heater Device",
@ -69,7 +69,7 @@ def add_heater_cmds(defs: TmtcDefinitionWrapper):
def pack_heater_cmds(object_id: bytearray, op_code: str, q: DefaultPusQueueHelper): def pack_heater_cmds(object_id: bytearray, op_code: str, q: DefaultPusQueueHelper):
if op_code in OpCodes.HEATER_CMD: if op_code in OpCode.HEATER_CMD:
q.add_log_cmd("Heater Switching") q.add_log_cmd("Heater Switching")
heater_number = prompt_heater() heater_number = prompt_heater()
while True: while True:
@ -89,7 +89,7 @@ def pack_heater_cmds(object_id: bytearray, op_code: str, q: DefaultPusQueueHelpe
debug_string = f"Switching heater {heater_number} {act_str}" debug_string = f"Switching heater {heater_number} {act_str}"
q.add_log_cmd(debug_string) q.add_log_cmd(debug_string)
q.add_pus_tc(pack_switch_heater_command(object_id, heater_number, action)) q.add_pus_tc(pack_switch_heater_command(object_id, heater_number, action))
if op_code in OpCodes.HEATER_EXT_CTRL: if op_code in OpCode.HEATER_EXT_CTRL:
heater_number = prompt_heater() heater_number = prompt_heater()
obj_id = heater_idx_to_obj(heater_number) obj_id = heater_idx_to_obj(heater_number)
health_cmd( health_cmd(
@ -99,7 +99,7 @@ def pack_heater_cmds(object_id: bytearray, op_code: str, q: DefaultPusQueueHelpe
health_str="External Control", health_str="External Control",
heater_idx=heater_number, heater_idx=heater_number,
) )
if op_code in OpCodes.HEATER_FAULTY_CMD: if op_code in OpCode.HEATER_FAULTY_CMD:
heater_number = prompt_heater() heater_number = prompt_heater()
obj_id = heater_idx_to_obj(heater_number) obj_id = heater_idx_to_obj(heater_number)
health_cmd( health_cmd(
@ -109,7 +109,7 @@ def pack_heater_cmds(object_id: bytearray, op_code: str, q: DefaultPusQueueHelpe
health_str="Faulty", health_str="Faulty",
heater_idx=heater_number, heater_idx=heater_number,
) )
if op_code in OpCodes.HEATER_HEALTHY_CMD: if op_code in OpCode.HEATER_HEALTHY_CMD:
heater_number = prompt_heater() heater_number = prompt_heater()
obj_id = heater_idx_to_obj(heater_number) obj_id = heater_idx_to_obj(heater_number)
health_cmd( health_cmd(
@ -165,7 +165,7 @@ def prompt_heater() -> int:
print("Heater number not a digit") print("Heater number not a digit")
continue continue
heater_number = int(heater_number) heater_number = int(heater_number)
if heater_number >= SwitchNumbers.NUMBER_OF_SWITCHES or heater_number < 0: if heater_number >= SwitchNumber.NUMBER_OF_SWITCHES or heater_number < 0:
print("Invalid heater switch number") print("Invalid heater switch number")
continue continue
break break
@ -183,7 +183,7 @@ def health_cmd(
app_data = pack_set_health_cmd_data(object_id=object_id.as_bytes, health=health) app_data = pack_set_health_cmd_data(object_id=object_id.as_bytes, health=health)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=201, subservice=Subservices.TC_SET_HEALTH, app_data=app_data service=201, subservice=Subservice.TC_SET_HEALTH, app_data=app_data
) )
) )
@ -200,6 +200,6 @@ def pack_switch_heater_command(
command.append(switch_nr) command.append(switch_nr)
command.append(switch_action) command.append(switch_action)
command.append(COMMAND_SOURCE_PARAM_EXTERNAL) command.append(COMMAND_SOURCE_PARAM_EXTERNAL)
return make_fsfw_action_cmd( return create_action_cmd(
object_id=object_id, action_id=ActionIds.SWITCH_HEATER, user_data=command object_id=object_id, action_id=ActionIds.SWITCH_HEATER, user_data=command
) )

View File

@ -1,9 +1,9 @@
import enum import enum
class MgmLis3SetIds(enum.IntEnum): class MgmLis3SetId(enum.IntEnum):
CORE_HK = 0 CORE_HK = 0
class MgmRm3100SetIds(enum.IntEnum): class MgmRm3100SetId(enum.IntEnum):
CORE_HK = 0 CORE_HK = 0

View File

@ -9,7 +9,7 @@ from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
class CommandIds: class CommandId:
# prints the clcw to the console. Useful for debugging # prints the clcw to the console. Useful for debugging
PRINT_CLCW = bytearray([0x0, 0x0, 0x0, 0x0]) PRINT_CLCW = bytearray([0x0, 0x0, 0x0, 0x0])
# Print PDEC monitor register # Print PDEC monitor register
@ -22,9 +22,9 @@ def pack_pdec_handler_test(
q.add_log_cmd(f"Testing PDEC handler with object id: {object_id.hex()}") q.add_log_cmd(f"Testing PDEC handler with object id: {object_id.hex()}")
if op_code == "0": if op_code == "0":
q.add_log_cmd("PDEC Handler: Print CLCW") q.add_log_cmd("PDEC Handler: Print CLCW")
command = object_id + CommandIds.PRINT_CLCW command = object_id + CommandId.PRINT_CLCW
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "1": if op_code == "1":
q.add_log_cmd("PDEC Handler: Print PDEC monitor register") q.add_log_cmd("PDEC Handler: Print PDEC monitor register")
command = object_id + CommandIds.PRINT_PDEC_MON command = object_id + CommandId.PRINT_PDEC_MON
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))

View File

@ -15,13 +15,13 @@ from tmtccmd.tc.pus_3_fsfw_hk import (
disable_periodic_hk_command, disable_periodic_hk_command,
) )
from tmtccmd.tc.pus_11_tc_sched import ( from tmtccmd.tc.pus_11_tc_sched import (
generate_enable_tc_sched_cmd, create_enable_tc_sched_cmd,
generate_time_tagged_cmd, create_time_tagged_cmd,
) )
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes, Subservices from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode, Subservice
from tmtccmd.tc.pus_20_params import ( from tmtccmd.tc.pus_20_fsfw_params import (
pack_scalar_double_param_app_data, pack_scalar_double_param_app_data,
pack_fsfw_load_param_cmd, create_load_param_cmd,
pack_boolean_parameter_app_data, pack_boolean_parameter_app_data,
) )
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
@ -31,7 +31,7 @@ from eive_tmtc.config.object_ids import PL_PCDU_ID
LOGGER = get_console_logger() LOGGER = get_console_logger()
class OpCodes: class OpCode:
SWITCH_HPA_ON_PROC = ["0", "proc_hpa"] SWITCH_HPA_ON_PROC = ["0", "proc_hpa"]
SWITCH_ON = ["2", "on"] SWITCH_ON = ["2", "on"]
SWITCH_OFF = ["3", "off"] SWITCH_OFF = ["3", "off"]
@ -70,7 +70,7 @@ class Info:
DISABLE_HK = "Disable HK" DISABLE_HK = "Disable HK"
class SetIds(enum.IntEnum): class SetId(enum.IntEnum):
ADC = 0 ADC = 0
@ -124,116 +124,116 @@ class ParamIds(enum.IntEnum):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_pl_pcdu_cmds(defs: TmtcDefinitionWrapper): def add_pl_pcdu_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.SWITCH_HPA_ON_PROC, info=Info.SWITCH_HPA_ON_PROC) oce.add(keys=OpCode.SWITCH_HPA_ON_PROC, info=Info.SWITCH_HPA_ON_PROC)
oce.add(keys=OpCodes.SWITCH_ON, info=Info.SWITCH_ON) oce.add(keys=OpCode.SWITCH_ON, info=Info.SWITCH_ON)
oce.add(keys=OpCodes.SWITCH_OFF, info=Info.SWITCH_OFF) oce.add(keys=OpCode.SWITCH_OFF, info=Info.SWITCH_OFF)
oce.add(keys=OpCodes.NORMAL_SSR, info=Info.NORMAL_SSR) oce.add(keys=OpCode.NORMAL_SSR, info=Info.NORMAL_SSR)
oce.add(keys=OpCodes.NORMAL_DRO, info=Info.NORMAL_DRO) oce.add(keys=OpCode.NORMAL_DRO, info=Info.NORMAL_DRO)
oce.add(keys=OpCodes.NORMAL_X8, info=Info.NORMAL_X8) oce.add(keys=OpCode.NORMAL_X8, info=Info.NORMAL_X8)
oce.add(keys=OpCodes.NORMAL_TX, info=Info.NORMAL_TX) oce.add(keys=OpCode.NORMAL_TX, info=Info.NORMAL_TX)
oce.add(keys=OpCodes.NORMAL_MPA, info=Info.NORMAL_MPA) oce.add(keys=OpCode.NORMAL_MPA, info=Info.NORMAL_MPA)
oce.add(keys=OpCodes.NORMAL_HPA, info=Info.NORMAL_HPA) oce.add(keys=OpCode.NORMAL_HPA, info=Info.NORMAL_HPA)
oce.add(keys=OpCodes.REQ_OS_HK, info=Info.REQ_OS_HK) oce.add(keys=OpCode.REQ_OS_HK, info=Info.REQ_OS_HK)
oce.add(keys=OpCodes.ENABLE_HK, info=Info.ENABLE_HK) oce.add(keys=OpCode.ENABLE_HK, info=Info.ENABLE_HK)
oce.add( oce.add(
keys=OpCodes.INJECT_SSR_TO_DRO_FAILURE, keys=OpCode.INJECT_SSR_TO_DRO_FAILURE,
info="Inject failure SSR to DRO transition", info="Inject failure SSR to DRO transition",
) )
oce.add( oce.add(
keys=OpCodes.INJECT_DRO_TO_X8_FAILURE, keys=OpCode.INJECT_DRO_TO_X8_FAILURE,
info="Inject failure in DRO to X8 transition", info="Inject failure in DRO to X8 transition",
) )
oce.add( oce.add(
keys=OpCodes.INJECT_X8_TO_TX_FAILURE, keys=OpCode.INJECT_X8_TO_TX_FAILURE,
info="Inject failure in X8 to TX transition", info="Inject failure in X8 to TX transition",
) )
oce.add( oce.add(
keys=OpCodes.INJECT_TX_TO_MPA_FAILURE, keys=OpCode.INJECT_TX_TO_MPA_FAILURE,
info="Inject failure in TX to MPA transition", info="Inject failure in TX to MPA transition",
) )
oce.add( oce.add(
keys=OpCodes.INJECT_MPA_TO_HPA_FAILURE, keys=OpCode.INJECT_MPA_TO_HPA_FAILURE,
info="Inject failure in MPA to HPA transition", info="Inject failure in MPA to HPA transition",
) )
oce.add(keys=OpCodes.INJECT_ALL_ON_FAILURE, info="Inject failure in all on mode") oce.add(keys=OpCode.INJECT_ALL_ON_FAILURE, info="Inject failure in all on mode")
defs.add_service(CustomServiceList.PL_PCDU.value, "PL PCDU", oce) defs.add_service(CustomServiceList.PL_PCDU.value, "PL PCDU", oce)
def pack_pl_pcdu_commands(q: DefaultPusQueueHelper, op_code: str): def pack_pl_pcdu_commands(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCodes.SWITCH_ON: if op_code in OpCode.SWITCH_ON:
pack_pl_pcdu_mode_cmd(q=q, info=Info.SWITCH_ON, mode=Modes.ON, submode=0) pack_pl_pcdu_mode_cmd(q=q, info=Info.SWITCH_ON, mode=Mode.ON, submode=0)
if op_code in OpCodes.SWITCH_OFF: if op_code in OpCode.SWITCH_OFF:
pack_pl_pcdu_mode_cmd(q=q, info=Info.SWITCH_OFF, mode=Modes.OFF, submode=0) pack_pl_pcdu_mode_cmd(q=q, info=Info.SWITCH_OFF, mode=Mode.OFF, submode=0)
if op_code in OpCodes.ENABLE_HK: if op_code in OpCode.ENABLE_HK:
interval = float( interval = float(
input("Please enter HK collection interval in floating point seconds: ") input("Please enter HK collection interval in floating point seconds: ")
) )
cmds = enable_periodic_hk_command_with_interval( cmds = enable_periodic_hk_command_with_interval(
diag=True, sid=make_sid(PL_PCDU_ID, SetIds.ADC), interval_seconds=interval diag=True, sid=make_sid(PL_PCDU_ID, SetId.ADC), interval_seconds=interval
) )
q.add_log_cmd(f"Enable PL PCDU HK with interval of {interval} seconds") q.add_log_cmd(f"Enable PL PCDU HK with interval of {interval} seconds")
for cmd in cmds: for cmd in cmds:
q.add_pus_tc(cmd) q.add_pus_tc(cmd)
if op_code in OpCodes.DISABLE_HK: if op_code in OpCode.DISABLE_HK:
cmd = disable_periodic_hk_command( cmd = disable_periodic_hk_command(
diag=True, sid=make_sid(PL_PCDU_ID, SetIds.ADC) diag=True, sid=make_sid(PL_PCDU_ID, SetId.ADC)
) )
q.add_log_cmd("Disabling PL PCDU HK") q.add_log_cmd("Disabling PL PCDU HK")
q.add_pus_tc(cmd) q.add_pus_tc(cmd)
if op_code in OpCodes.NORMAL_SSR: if op_code in OpCode.NORMAL_SSR:
pack_pl_pcdu_mode_cmd( pack_pl_pcdu_mode_cmd(
q=q, q=q,
info=Info.NORMAL_SSR, info=Info.NORMAL_SSR,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode( submode=submode_mask_to_submode(
NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON
), ),
) )
if op_code in OpCodes.NORMAL_DRO: if op_code in OpCode.NORMAL_DRO:
pack_pl_pcdu_mode_cmd( pack_pl_pcdu_mode_cmd(
q=q, q=q,
info=Info.NORMAL_DRO, info=Info.NORMAL_DRO,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.DRO_ON), submode=submode_mask_to_submode(NormalSubmodesMask.DRO_ON),
) )
if op_code in OpCodes.NORMAL_X8: if op_code in OpCode.NORMAL_X8:
pack_pl_pcdu_mode_cmd( pack_pl_pcdu_mode_cmd(
q=q, q=q,
info=Info.NORMAL_X8, info=Info.NORMAL_X8,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.X8_ON), submode=submode_mask_to_submode(NormalSubmodesMask.X8_ON),
) )
if op_code in OpCodes.NORMAL_TX: if op_code in OpCode.NORMAL_TX:
pack_pl_pcdu_mode_cmd( pack_pl_pcdu_mode_cmd(
q=q, q=q,
info=Info.NORMAL_TX, info=Info.NORMAL_TX,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.TX_ON), submode=submode_mask_to_submode(NormalSubmodesMask.TX_ON),
) )
if op_code in OpCodes.NORMAL_MPA: if op_code in OpCode.NORMAL_MPA:
pack_pl_pcdu_mode_cmd( pack_pl_pcdu_mode_cmd(
q=q, q=q,
info=Info.NORMAL_MPA, info=Info.NORMAL_MPA,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.MPA_ON), submode=submode_mask_to_submode(NormalSubmodesMask.MPA_ON),
) )
if op_code in OpCodes.NORMAL_HPA: if op_code in OpCode.NORMAL_HPA:
pack_pl_pcdu_mode_cmd( pack_pl_pcdu_mode_cmd(
q=q, q=q,
info=Info.NORMAL_HPA, info=Info.NORMAL_HPA,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.HPA_ON), submode=submode_mask_to_submode(NormalSubmodesMask.HPA_ON),
) )
if op_code in OpCodes.REQ_OS_HK: if op_code in OpCode.REQ_OS_HK:
q.add_log_cmd(f"PL PCDU: {Info.REQ_OS_HK}") q.add_log_cmd(f"PL PCDU: {Info.REQ_OS_HK}")
q.add_pus_tc( q.add_pus_tc(
generate_one_diag_command( generate_one_diag_command(
sid=make_sid(object_id=PL_PCDU_ID, set_id=SetIds.ADC) sid=make_sid(object_id=PL_PCDU_ID, set_id=SetId.ADC)
) )
) )
if op_code in OpCodes.SWITCH_HPA_ON_PROC: if op_code in OpCode.SWITCH_HPA_ON_PROC:
hpa_on_procedure(q) hpa_on_procedure(q)
if op_code in OpCodes.INJECT_ALL_ON_FAILURE: if op_code in OpCode.INJECT_ALL_ON_FAILURE:
pack_failure_injection_cmd( pack_failure_injection_cmd(
q=q, q=q,
param_id=ParamIds.INJECT_ALL_ON_FAILURE, param_id=ParamIds.INJECT_ALL_ON_FAILURE,
@ -251,15 +251,15 @@ def hpa_on_procedure(q: DefaultPusQueueHelper):
) )
pl_pcdu_on = PusTelecommand( pl_pcdu_on = PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data(object_id=PL_PCDU_ID, mode=Modes.ON, submode=0), app_data=pack_mode_data(object_id=PL_PCDU_ID, mode=Mode.ON, submode=0),
) )
ssr_on = PusTelecommand( ssr_on = PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data( app_data=pack_mode_data(
object_id=PL_PCDU_ID, object_id=PL_PCDU_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode( submode=submode_mask_to_submode(
NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON NormalSubmodesMask.SOLID_STATE_RELAYS_ADC_ON
), ),
@ -267,95 +267,95 @@ def hpa_on_procedure(q: DefaultPusQueueHelper):
) )
dro_on = PusTelecommand( dro_on = PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data( app_data=pack_mode_data(
object_id=PL_PCDU_ID, object_id=PL_PCDU_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.DRO_ON), submode=submode_mask_to_submode(NormalSubmodesMask.DRO_ON),
), ),
) )
x8_on = PusTelecommand( x8_on = PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data( app_data=pack_mode_data(
object_id=PL_PCDU_ID, object_id=PL_PCDU_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.X8_ON), submode=submode_mask_to_submode(NormalSubmodesMask.X8_ON),
), ),
) )
tx_on = PusTelecommand( tx_on = PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data( app_data=pack_mode_data(
object_id=PL_PCDU_ID, object_id=PL_PCDU_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.TX_ON), submode=submode_mask_to_submode(NormalSubmodesMask.TX_ON),
), ),
) )
mpa_on = PusTelecommand( mpa_on = PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data( app_data=pack_mode_data(
object_id=PL_PCDU_ID, object_id=PL_PCDU_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.MPA_ON), submode=submode_mask_to_submode(NormalSubmodesMask.MPA_ON),
), ),
) )
hpa_on = PusTelecommand( hpa_on = PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data( app_data=pack_mode_data(
object_id=PL_PCDU_ID, object_id=PL_PCDU_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=submode_mask_to_submode(NormalSubmodesMask.HPA_ON), submode=submode_mask_to_submode(NormalSubmodesMask.HPA_ON),
), ),
) )
current_time = time.time() current_time = time.time()
enb_sched = generate_enable_tc_sched_cmd() enb_sched = create_enable_tc_sched_cmd()
sched_time = int(round(current_time + 10)) sched_time = int(round(current_time + 10))
q.add_pus_tc(enb_sched) q.add_pus_tc(enb_sched)
tagged_on_cmd = generate_time_tagged_cmd( tagged_on_cmd = create_time_tagged_cmd(
release_time=struct.pack("!I", sched_time), release_time=struct.pack("!I", sched_time),
tc_to_insert=pl_pcdu_on, tc_to_insert=pl_pcdu_on,
) )
q.add_pus_tc(tagged_on_cmd) q.add_pus_tc(tagged_on_cmd)
sched_time += 5 sched_time += 5
tagged_ssr_cmd = generate_time_tagged_cmd( tagged_ssr_cmd = create_time_tagged_cmd(
release_time=struct.pack("!I", sched_time), release_time=struct.pack("!I", sched_time),
tc_to_insert=ssr_on, tc_to_insert=ssr_on,
) )
q.add_pus_tc(tagged_ssr_cmd) q.add_pus_tc(tagged_ssr_cmd)
sched_time += 5 sched_time += 5
tagged_dro_cmd = generate_time_tagged_cmd( tagged_dro_cmd = create_time_tagged_cmd(
release_time=struct.pack("!I", sched_time), tc_to_insert=dro_on release_time=struct.pack("!I", sched_time), tc_to_insert=dro_on
) )
q.add_pus_tc(tagged_dro_cmd) q.add_pus_tc(tagged_dro_cmd)
sched_time += delay_dro_to_x8 sched_time += delay_dro_to_x8
sched_time = int(round(sched_time)) sched_time = int(round(sched_time))
tagged_x8_cmd = generate_time_tagged_cmd( tagged_x8_cmd = create_time_tagged_cmd(
release_time=struct.pack("!I", sched_time), tc_to_insert=x8_on release_time=struct.pack("!I", sched_time), tc_to_insert=x8_on
) )
q.add_pus_tc(tagged_x8_cmd) q.add_pus_tc(tagged_x8_cmd)
sched_time += 5 sched_time += 5
tagged_tx_cmd = generate_time_tagged_cmd( tagged_tx_cmd = create_time_tagged_cmd(
release_time=struct.pack("!I", sched_time), tc_to_insert=tx_on release_time=struct.pack("!I", sched_time), tc_to_insert=tx_on
) )
q.add_pus_tc(tagged_tx_cmd) q.add_pus_tc(tagged_tx_cmd)
sched_time += 5 sched_time += 5
tagged_mpa_cmd = generate_time_tagged_cmd( tagged_mpa_cmd = create_time_tagged_cmd(
release_time=struct.pack("!I", sched_time), tc_to_insert=mpa_on release_time=struct.pack("!I", sched_time), tc_to_insert=mpa_on
) )
q.add_pus_tc(tagged_mpa_cmd) q.add_pus_tc(tagged_mpa_cmd)
sched_time += 5 sched_time += 5
tagged_hpa_cmd = generate_time_tagged_cmd( tagged_hpa_cmd = create_time_tagged_cmd(
release_time=struct.pack("!I", sched_time), tc_to_insert=hpa_on release_time=struct.pack("!I", sched_time), tc_to_insert=hpa_on
) )
q.add_pus_tc(tagged_hpa_cmd) q.add_pus_tc(tagged_hpa_cmd)
@ -427,7 +427,7 @@ def pack_wait_time_cmd(q: DefaultPusQueueHelper, param_id: int, print_str: str):
unique_id=param_id, unique_id=param_id,
parameter=wait_time, parameter=wait_time,
) )
q.add_pus_tc(pack_fsfw_load_param_cmd(app_data=param_data)) q.add_pus_tc(create_load_param_cmd(app_data=param_data))
def pack_failure_injection_cmd(q: DefaultPusQueueHelper, param_id: int, print_str: str): def pack_failure_injection_cmd(q: DefaultPusQueueHelper, param_id: int, print_str: str):
@ -435,16 +435,16 @@ def pack_failure_injection_cmd(q: DefaultPusQueueHelper, param_id: int, print_st
param_data = pack_boolean_parameter_app_data( param_data = pack_boolean_parameter_app_data(
object_id=PL_PCDU_ID, domain_id=0, unique_id=param_id, parameter=True object_id=PL_PCDU_ID, domain_id=0, unique_id=param_id, parameter=True
) )
q.add_pus_tc(pack_fsfw_load_param_cmd(app_data=param_data)) q.add_pus_tc(create_load_param_cmd(app_data=param_data))
def pack_pl_pcdu_mode_cmd( def pack_pl_pcdu_mode_cmd(
q: DefaultPusQueueHelper, info: str, mode: Modes, submode: int q: DefaultPusQueueHelper, info: str, mode: Mode, submode: int
): ):
q.add_log_cmd(info) q.add_log_cmd(info)
mode_data = pack_mode_data(object_id=PL_PCDU_ID, mode=mode, submode=submode) mode_data = pack_mode_data(object_id=PL_PCDU_ID, mode=mode, submode=submode)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=mode_data service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=mode_data
) )
) )

View File

@ -10,7 +10,7 @@ import struct
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
from eive_tmtc.pus_tc.service_200_mode import pack_mode_data, Modes from eive_tmtc.pus_tc.service_200_mode import pack_mode_data, Mode
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
@ -18,11 +18,11 @@ from tmtccmd.tc.pus_3_fsfw_hk import generate_one_hk_command, make_sid
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
class SetIds: class SetId:
HK = 3 HK = 3
class OpCodes: class OpCode:
ON = ["0", "on"] ON = ["0", "on"]
NORMAL = ["1", "normal"] NORMAL = ["1", "normal"]
OFF = ["2", "off"] OFF = ["2", "off"]
@ -40,7 +40,7 @@ class Info:
DEBUG_OFF = "Switch debug output off" DEBUG_OFF = "Switch debug output off"
class CommandIds: class CommandId:
START_CONVERSIONS = 2 START_CONVERSIONS = 2
READ_CONVERSIONS = 3 READ_CONVERSIONS = 3
ENABLE_DEBUG_OUTPUT = 4 ENABLE_DEBUG_OUTPUT = 4
@ -50,12 +50,12 @@ class CommandIds:
@tmtc_definitions_provider @tmtc_definitions_provider
def add_rad_sens_cmds(defs: TmtcDefinitionWrapper): def add_rad_sens_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(info=Info.ON, keys=OpCodes.ON) oce.add(info=Info.ON, keys=OpCode.ON)
oce.add(info=Info.OFF, keys=OpCodes.OFF) oce.add(info=Info.OFF, keys=OpCode.OFF)
oce.add(info=Info.NORMAL, keys=OpCodes.NORMAL) oce.add(info=Info.NORMAL, keys=OpCode.NORMAL)
oce.add(info=Info.REQ_OS_HK, keys=OpCodes.REQ_HK_ONCE) oce.add(info=Info.REQ_OS_HK, keys=OpCode.REQ_HK_ONCE)
oce.add(info=Info.DEBUG_ON, keys=OpCodes.DEBUG_ON) oce.add(info=Info.DEBUG_ON, keys=OpCode.DEBUG_ON)
oce.add(info=Info.DEBUG_OFF, keys=OpCodes.DEBUG_OFF) oce.add(info=Info.DEBUG_OFF, keys=OpCode.DEBUG_OFF)
defs.add_service( defs.add_service(
name=CustomServiceList.RAD_SENSOR.value, name=CustomServiceList.RAD_SENSOR.value,
info="Radiation Sensor", info="Radiation Sensor",
@ -68,31 +68,29 @@ def pack_rad_sensor_test_into(
): ):
q.add_log_cmd(f"Commanding Radiation sensor handler {object_id}") q.add_log_cmd(f"Commanding Radiation sensor handler {object_id}")
if op_code in OpCodes.ON: if op_code in OpCode.ON:
rad_sensor_mode_cmd(object_id, Modes.ON, Info.ON, q) rad_sensor_mode_cmd(object_id, Mode.ON, Info.ON, q)
if op_code in OpCodes.NORMAL: if op_code in OpCode.NORMAL:
rad_sensor_mode_cmd(object_id, Modes.NORMAL, Info.NORMAL, q) rad_sensor_mode_cmd(object_id, Mode.NORMAL, Info.NORMAL, q)
if op_code in OpCodes.OFF: if op_code in OpCode.OFF:
rad_sensor_mode_cmd(object_id, Modes.OFF, Info.OFF, q) rad_sensor_mode_cmd(object_id, Mode.OFF, Info.OFF, q)
if op_code in OpCodes.REQ_HK_ONCE: if op_code in OpCode.REQ_HK_ONCE:
q.add_log_cmd(f"Rad sensor: {Info.REQ_OS_HK}") q.add_log_cmd(f"Rad sensor: {Info.REQ_OS_HK}")
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(sid=make_sid(object_id.as_bytes, set_id=SetIds.HK)) generate_one_hk_command(sid=make_sid(object_id.as_bytes, set_id=SetId.HK))
) )
if op_code in OpCodes.DEBUG_ON: if op_code in OpCode.DEBUG_ON:
q.add_log_cmd(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 = object_id.as_bytes + struct.pack("!I", CommandId.ENABLE_DEBUG_OUTPUT)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.DEBUG_OFF: if op_code in OpCode.DEBUG_OFF:
q.add_log_cmd(f"Rad sensor: {Info.DEBUG_OFF}") q.add_log_cmd(f"Rad sensor: {Info.DEBUG_OFF}")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack("!I", CommandId.DISABLE_DEBUG_OUTPUT)
"!I", CommandIds.DISABLE_DEBUG_OUTPUT
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
def rad_sensor_mode_cmd( def rad_sensor_mode_cmd(
object_id: ObjectIdU32, mode: Modes, info: str, q: DefaultPusQueueHelper object_id: ObjectIdU32, mode: Mode, info: str, q: DefaultPusQueueHelper
): ):
q.add_log_cmd(f"Rad sensor: {info}") q.add_log_cmd(f"Rad sensor: {info}")
mode_data = pack_mode_data(object_id.as_bytes, mode, 0) mode_data = pack_mode_data(object_id.as_bytes, mode, 0)

View File

@ -1,14 +1,15 @@
from typing import Optional from typing import Optional
import struct
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.pus_tc.devs.pdec_handler import CommandIds from eive_tmtc.pus_tc.devs.pdec_handler import CommandId
from spacepackets.ecss import PusTelecommand from spacepackets.ecss import PusTelecommand
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
from tmtccmd.tc.pus_200_fsfw_modes import Modes, pack_mode_data, Subservices from tmtccmd.tc.pus_200_fsfw_modes import Mode, pack_mode_data, Subservice
import eive_tmtc.config.object_ids as oids import eive_tmtc.config.object_ids as oids
from eive_tmtc.config.object_ids import get_object_ids from eive_tmtc.config.object_ids import get_object_ids
@ -32,26 +33,31 @@ RTD_IDS = [
] ]
class OpCodes: class CommandId:
WRITE_CONFIG = 6
class OpCode:
ON = ["0", "on"] ON = ["0", "on"]
OFF = ["1", "off"] OFF = ["1", "off"]
NORMAL = ["2", "normal"] NORMAL = ["2", "normal"]
CONFIG_CMD = ["3", "Write config"] WRITE_CONFIG = ["3", "Write config"]
class Info: class Info:
ON = "Switch handler on" ON = "Switch handler on"
OFF = "Switch handler off" OFF = "Switch handler off"
NORMAL = "Switch handler normal" NORMAL = "Switch handler normal"
WIRTE_CONFIG = "Write config" WRITE_CONFIG = "Write config"
@tmtc_definitions_provider @tmtc_definitions_provider
def specify_rtd_cmds(defs: TmtcDefinitionWrapper): def specify_rtd_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.ON, info=Info.ON) oce.add(keys=OpCode.ON, info=Info.ON)
oce.add(keys=OpCodes.NORMAL, info=Info.NORMAL) oce.add(keys=OpCode.NORMAL, info=Info.NORMAL)
oce.add(keys=OpCodes.OFF, info=Info.OFF) oce.add(keys=OpCode.OFF, info=Info.OFF)
oce.add(keys=OpCode.WRITE_CONFIG, info=Info.WRITE_CONFIG)
defs.add_service( defs.add_service(
name=CustomServiceList.RTD.value, info="RTD commands", op_code_entry=oce name=CustomServiceList.RTD.value, info="RTD commands", op_code_entry=oce
) )
@ -67,35 +73,33 @@ def pack_rtd_commands(
tgt_rtd_idx = prompt_rtd_idx() tgt_rtd_idx = prompt_rtd_idx()
object_id_dict = get_object_ids() object_id_dict = get_object_ids()
object_id = object_id_dict.get(RTD_IDS[tgt_rtd_idx]) object_id = object_id_dict.get(RTD_IDS[tgt_rtd_idx])
if op_code in OpCodes.ON: if op_code in OpCode.ON:
app_data = pack_mode_data(object_id=object_id.as_bytes, mode=Mode.ON, submode=0)
q.add_pus_tc(
PusTelecommand(
service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=app_data
)
)
if op_code in OpCode.NORMAL:
app_data = pack_mode_data( app_data = pack_mode_data(
object_id=object_id.as_bytes, mode=Modes.ON, submode=0 object_id=object_id.as_bytes, mode=Mode.NORMAL, submode=0
) )
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=app_data service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=app_data
) )
) )
if op_code in OpCodes.NORMAL: if op_code in OpCode.OFF:
app_data = pack_mode_data( app_data = pack_mode_data(
object_id=object_id.as_bytes, mode=Modes.NORMAL, submode=0 object_id=object_id.as_bytes, mode=Mode.OFF, submode=0
) )
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=app_data service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=app_data
) )
) )
if op_code in OpCodes.OFF: if op_code in OpCode.WRITE_CONFIG:
app_data = pack_mode_data( command = object_id.as_bytes + struct.pack("!I", CommandId.WRITE_CONFIG)
object_id=object_id.as_bytes, mode=Modes.OFF, submode=0
)
q.add_pus_tc(
PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=app_data
)
)
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)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))

View File

@ -5,10 +5,10 @@ from spacepackets.ecss import PusTelecommand
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc.pus_200_fsfw_modes import Modes, pack_mode_data, Subservices from tmtccmd.tc.pus_200_fsfw_modes import Mode, pack_mode_data, Subservice
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.config import OpCodeEntry, TmtcDefinitionWrapper from tmtccmd.config import OpCodeEntry, TmtcDefinitionWrapper
from eive_tmtc.config.object_ids import SCEX_HANDLER_ID from eive_tmtc.config.object_ids import SCEX_HANDLER_ID
@ -16,7 +16,7 @@ from eive_tmtc.config.object_ids import SCEX_HANDLER_ID
USE_SCEX_CONF_FILE = True USE_SCEX_CONF_FILE = True
class OpCodes: class OpCode:
PING = ["0", "ping"] PING = ["0", "ping"]
ION_CMD = ["1", "ion"] ION_CMD = ["1", "ion"]
TEMP_CMD = ["2", "temp"] TEMP_CMD = ["2", "temp"]
@ -30,7 +30,7 @@ class OpCodes:
SWITCH_OFF = ["8", "off"] SWITCH_OFF = ["8", "off"]
class ActionIds(enum.IntEnum): class ActionId(enum.IntEnum):
PING = 7 PING = 7
ION_CMD = 4 ION_CMD = 4
TEMP_CMD = 3 TEMP_CMD = 3
@ -58,16 +58,16 @@ class Info:
@tmtc_definitions_provider @tmtc_definitions_provider
def add_scex_cmds(defs: TmtcDefinitionWrapper): def add_scex_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.PING, info=Info.PING) oce.add(keys=OpCode.PING, info=Info.PING)
oce.add(keys=OpCodes.ION_CMD, info=Info.ION_CMD) oce.add(keys=OpCode.ION_CMD, info=Info.ION_CMD)
oce.add(keys=OpCodes.TEMP_CMD, info=Info.TEMP_CMD) oce.add(keys=OpCode.TEMP_CMD, info=Info.TEMP_CMD)
oce.add(keys=OpCodes.EXP_STATUS_CMD, info=Info.EXP_STATUS_CMD) oce.add(keys=OpCode.EXP_STATUS_CMD, info=Info.EXP_STATUS_CMD)
oce.add(keys=OpCodes.ONE_CELLS_CMD, info=Info.ONE_CELLS_CMD) oce.add(keys=OpCode.ONE_CELLS_CMD, info=Info.ONE_CELLS_CMD)
oce.add(keys=OpCodes.ALL_CELLS_CMD, info=Info.ALL_CELLS_CMD) oce.add(keys=OpCode.ALL_CELLS_CMD, info=Info.ALL_CELLS_CMD)
oce.add(keys=OpCodes.FRAM, info=Info.FRAM) oce.add(keys=OpCode.FRAM, info=Info.FRAM)
oce.add(keys=OpCodes.SWITCH_ON, info=Info.SWITCH_ON) oce.add(keys=OpCode.SWITCH_ON, info=Info.SWITCH_ON)
oce.add(keys=OpCodes.SWITCH_OFF, info=Info.SWITCH_OFF) oce.add(keys=OpCode.SWITCH_OFF, info=Info.SWITCH_OFF)
defs.add_service( defs.add_service(
name=CustomServiceList.SCEX.value, info="SCEX Device", op_code_entry=oce name=CustomServiceList.SCEX.value, info="SCEX Device", op_code_entry=oce
@ -78,48 +78,46 @@ def add_scex_cmds(defs: TmtcDefinitionWrapper):
def pack_scex_cmds(p: ServiceProviderParams): def pack_scex_cmds(p: ServiceProviderParams):
op_code = p.op_code op_code = p.op_code
q = p.queue_helper q = p.queue_helper
if op_code in OpCodes.SWITCH_ON: if op_code in OpCode.SWITCH_ON:
q.add_log_cmd(Info.SWITCH_ON) q.add_log_cmd(Info.SWITCH_ON)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data(SCEX_HANDLER_ID, Modes.ON, 0), app_data=pack_mode_data(SCEX_HANDLER_ID, Mode.ON, 0),
) )
) )
if op_code in OpCodes.SWITCH_OFF: if op_code in OpCode.SWITCH_OFF:
q.add_log_cmd(Info.SWITCH_OFF) q.add_log_cmd(Info.SWITCH_OFF)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, service=200,
subservice=Subservices.TC_MODE_COMMAND, subservice=Subservice.TC_MODE_COMMAND,
app_data=pack_mode_data(SCEX_HANDLER_ID, Modes.OFF, 0), app_data=pack_mode_data(SCEX_HANDLER_ID, Mode.OFF, 0),
) )
) )
if op_code in OpCodes.PING: if op_code in OpCode.PING:
q.add_log_cmd(Info.PING) q.add_log_cmd(Info.PING)
app_data = bytes([0]) app_data = bytes([0])
q.add_pus_tc(make_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.PING, app_data)) q.add_pus_tc(create_action_cmd(SCEX_HANDLER_ID, ActionId.PING, app_data))
if op_code in OpCodes.ION_CMD: if op_code in OpCode.ION_CMD:
q.add_log_cmd(Info.ION_CMD) q.add_log_cmd(Info.ION_CMD)
app_data = bytes([0]) app_data = bytes([0])
q.add_pus_tc(make_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.ION_CMD, app_data)) q.add_pus_tc(create_action_cmd(SCEX_HANDLER_ID, ActionId.ION_CMD, app_data))
if op_code in OpCodes.TEMP_CMD: if op_code in OpCode.TEMP_CMD:
q.add_log_cmd(Info.TEMP_CMD) q.add_log_cmd(Info.TEMP_CMD)
app_data = bytes([0]) app_data = bytes([0])
q.add_pus_tc( q.add_pus_tc(create_action_cmd(SCEX_HANDLER_ID, ActionId.TEMP_CMD, app_data))
make_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.TEMP_CMD, app_data)
)
if op_code in OpCodes.EXP_STATUS_CMD: if op_code in OpCode.EXP_STATUS_CMD:
q.add_log_cmd(Info.EXP_STATUS_CMD) q.add_log_cmd(Info.EXP_STATUS_CMD)
app_data = bytes([0]) app_data = bytes([0])
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.EXP_STATUS_CMD, app_data) create_action_cmd(SCEX_HANDLER_ID, ActionId.EXP_STATUS_CMD, app_data)
) )
# one cell # one cell
if op_code in OpCodes.ONE_CELLS_CMD: if op_code in OpCode.ONE_CELLS_CMD:
q.add_log_cmd(Info.ONE_CELLS_CMD) q.add_log_cmd(Info.ONE_CELLS_CMD)
app_data = bytearray([0]) app_data = bytearray([0])
@ -164,10 +162,10 @@ def pack_scex_cmds(p: ServiceProviderParams):
app_data.append(dac_weight3[cn]) app_data.append(dac_weight3[cn])
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.ONE_CELLS_CMD, app_data) create_action_cmd(SCEX_HANDLER_ID, ActionId.ONE_CELLS_CMD, app_data)
) )
if op_code in OpCodes.ALL_CELLS_CMD: if op_code in OpCode.ALL_CELLS_CMD:
q.add_log_cmd(Info.ALL_CELLS_CMD) q.add_log_cmd(Info.ALL_CELLS_CMD)
app_data = bytearray([0]) app_data = bytearray([0])
@ -196,13 +194,13 @@ def pack_scex_cmds(p: ServiceProviderParams):
app_data.append(dac_weight3[cn]) app_data.append(dac_weight3[cn])
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.ALL_CELLS_CMD, app_data) create_action_cmd(SCEX_HANDLER_ID, ActionId.ALL_CELLS_CMD, app_data)
) )
if op_code in OpCodes.FRAM: if op_code in OpCode.FRAM:
q.add_log_cmd(Info.FRAM) q.add_log_cmd(Info.FRAM)
app_data = bytes([0]) app_data = bytes([0])
q.add_pus_tc(make_fsfw_action_cmd(SCEX_HANDLER_ID, ActionIds.FRAM, app_data)) q.add_pus_tc(create_action_cmd(SCEX_HANDLER_ID, ActionId.FRAM, app_data))
def append_16_bit_val(packet: bytearray, val: int): def append_16_bit_val(packet: bytearray, val: int):

View File

@ -1,2 +1,2 @@
class SetIds: class SetId:
HK = 3 HK = 3

View File

@ -1,178 +0,0 @@
# -*- coding: utf-8 -*-
"""
@file syrlinks_hk_handler.py
@brief Syrlinks Hk Handler tests
@author J. Meier
@date 13.12.2020
"""
from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config.tmtc import (
tmtc_definitions_provider,
TmtcDefinitionWrapper,
OpCodeEntry,
)
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
TX_REGISTERS_DATASET = 2
class OpCodes:
OFF = "off"
ON = "on"
NORMAL = "nml"
STANDBY = "set_tx_standby"
SET_CW = "set_tx_carrier_wave"
MODULATION = "modulation"
HK_RX_REGS = "hk_rx_regs"
HK_TX_REGS = "hk_tx_regs"
TX_STATUS = "tx_status"
RX_STATUS = "rx_status"
class Info:
HK_RX_REGS = "Request RX register set"
HK_TX_REGS = "Request TX register set"
TX_STATUS = "Read TX status (always read in normal mode)"
RX_STATUS = "Read RX status (always read in normal mode)"
SET_CW = "Set TX carrier wave"
class CommandIds:
READ_RX_STATUS_REGISTERS = 2
SET_TX_MODE_STANDBY = 3
SET_TX_MODE_MODULATION = 4
SET_TX_MODE_CW = 5
READ_TX_STATUS = 7
READ_TX_WAVEFORM = 8
READ_TX_AGC_VALUE_HIGH_BYTE = 9
READ_TX_AGC_VALUE_LOW_BYTE = 10
WRITE_LCL_CONFIG = 11
READ_LCL_CONFIG_REGISTER = 12
SET_WAVEFORM_OQPSK = 17
SET_WAVEFORM_BPSK = 18
SET_SECOND_CONFIG = 19
ENABLE_DEBUG = 20
DISABLE_DEBUG = 21
@tmtc_definitions_provider
def add_syrlinks_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(OpCodes.OFF, "Syrlinks Handler: Set mode off")
oce.add(OpCodes.ON, "Syrlinks Handler: Set mode on")
oce.add(OpCodes.NORMAL, "Syrlinks Handler: Set mode normal")
oce.add(OpCodes.STANDBY, "Syrlinks Handler: Set TX standby")
oce.add(OpCodes.MODULATION, "Syrlinks Handler: Set TX modulation")
oce.add(OpCodes.HK_RX_REGS, Info.HK_RX_REGS)
oce.add(OpCodes.HK_TX_REGS, Info.HK_TX_REGS)
oce.add(OpCodes.SET_CW, Info.SET_CW)
oce.add(OpCodes.TX_STATUS, Info.TX_STATUS)
oce.add(OpCodes.RX_STATUS, Info.RX_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("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)
def pack_syrlinks_command(
object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str
):
obyt = object_id.as_bytes
prefix = "Syrlinks"
q.add_log_cmd(f"Testing Syrlinks with object id: {object_id.as_hex_string}")
if op_code == OpCodes.OFF:
q.add_log_cmd(f"{prefix}: 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 == OpCodes.ON:
q.add_log_cmd(f"{prefix}: 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 == OpCodes.NORMAL:
q.add_log_cmd(f"{prefix}: 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 == OpCodes.STANDBY:
q.add_log_cmd(f"{prefix}: 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 == OpCodes.MODULATION:
q.add_log_cmd(f"{prefix}: 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 in OpCodes.SET_CW:
q.add_log_cmd(f"{prefix}: {Info.SET_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 in OpCodes.HK_RX_REGS:
q.add_log_cmd(f"{prefix}: {Info.HK_RX_REGS}")
sid = make_sid(obyt, SetIds.RX_REGISTERS_DATASET)
q.add_pus_tc(generate_one_hk_command(sid))
if op_code in OpCodes.HK_TX_REGS:
q.add_log_cmd(f"{prefix}: {Info.HK_TX_REGS}")
sid = make_sid(obyt, SetIds.TX_REGISTERS_DATASET)
q.add_pus_tc(generate_one_hk_command(sid))
if op_code in OpCodes.TX_STATUS:
q.add_log_cmd(f"{prefix}: {Info.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":
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":
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":
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":
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":
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":
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":
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":
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":
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":
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":
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))

View File

@ -5,10 +5,13 @@
@author J. Meier @author J. Meier
@date 06.01.2021 @date 06.01.2021
""" """
import enum
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
from eive_tmtc.pus_tc.service_200_mode import pack_mode_data from eive_tmtc.pus_tc.service_200_mode import pack_mode_data
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import Modes from tmtccmd.tc.pus_200_fsfw_modes import Mode
from tmtccmd.pus.s8_fsfw_funccmd import make_action_id
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
@ -28,9 +31,9 @@ class Tmp1075TestProcedure:
set_mode_on = False # If mode is MODE_ON, temperature will only be read on command set_mode_on = False # If mode is MODE_ON, temperature will only be read on command
class Tmp1075ActionIds: class Tmp1075ActionId(enum.IntEnum):
get_temp = bytearray([0x0, 0x0, 0x0, 0x01]) GET_TEMP = 1
start_adc_conversion = bytearray([0x0, 0x0, 0x0, 0x02]) START_ADC_CONV = 2
def pack_tmp1075_test_into( def pack_tmp1075_test_into(
@ -42,21 +45,21 @@ def pack_tmp1075_test_into(
obyt = object_id.as_bytes obyt = object_id.as_bytes
if Tmp1075TestProcedure.all or Tmp1075TestProcedure.start_adc_conversion: if Tmp1075TestProcedure.all or Tmp1075TestProcedure.start_adc_conversion:
q.add_log_cmd("TMP1075: Starting new temperature conversion") q.add_log_cmd("TMP1075: Starting new temperature conversion")
command = obyt + Tmp1075ActionIds.start_adc_conversion command = obyt + make_action_id(Tmp1075ActionId.GET_TEMP)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if Tmp1075TestProcedure.all or Tmp1075TestProcedure.get_temp: if Tmp1075TestProcedure.all or Tmp1075TestProcedure.get_temp:
q.add_log_cmd("TMP1075: Read temperature") q.add_log_cmd("TMP1075: Read temperature")
command = obyt + Tmp1075ActionIds.get_temp command = obyt + make_action_id(Tmp1075ActionId.START_ADC_CONV)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if Tmp1075TestProcedure.set_mode_normal: if Tmp1075TestProcedure.set_mode_normal:
q.add_log_cmd("TMP1075: Set Mode Normal") q.add_log_cmd("TMP1075: Set Mode Normal")
mode_data = pack_mode_data(obyt, Modes.NORMAL, 0) mode_data = pack_mode_data(obyt, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if Tmp1075TestProcedure.set_mode_on: if Tmp1075TestProcedure.set_mode_on:
q.add_log_cmd("TMP1075: Set Mode On") q.add_log_cmd("TMP1075: Set Mode On")
mode_data = pack_mode_data(obyt, Modes.ON, 0) mode_data = pack_mode_data(obyt, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
return q return q

View File

@ -9,6 +9,7 @@ from eive_tmtc.pus_tc.system.controllers import (
pack_cmd_ctrl_to_prompted_mode, pack_cmd_ctrl_to_prompted_mode,
get_object_from_op_code, get_object_from_op_code,
) )
from eive_tmtc.tmtc.tcs import pack_tcs_sys_commands
from tmtccmd import DefaultProcedureInfo, TcHandlerBase from tmtccmd import DefaultProcedureInfo, TcHandlerBase
from tmtccmd.config import CoreServiceList from tmtccmd.config import CoreServiceList
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
@ -20,7 +21,6 @@ from tmtccmd.tc.decorator import (
from tmtccmd.tc.pus_5_event import ( from tmtccmd.tc.pus_5_event import (
pack_generic_service_5_test_into, pack_generic_service_5_test_into,
) )
from tmtccmd.pus.pus_17_test import pack_service_17_ping_command
from eive_tmtc.pus_tc.service_200_mode import pack_service_200_test_into from eive_tmtc.pus_tc.service_200_mode import pack_service_200_test_into
from eive_tmtc.tmtc.power.p60dock import pack_p60dock_cmds from eive_tmtc.tmtc.power.p60dock import pack_p60dock_cmds
@ -36,16 +36,14 @@ from eive_tmtc.tmtc.acs.reaction_wheels import (
) )
from eive_tmtc.pus_tc.devs.rad_sensor import pack_rad_sensor_test_into from eive_tmtc.pus_tc.devs.rad_sensor import pack_rad_sensor_test_into
from eive_tmtc.tmtc.payload.ploc_memory_dumper import pack_ploc_memory_dumper_cmd from eive_tmtc.tmtc.payload.ploc_memory_dumper import pack_ploc_memory_dumper_cmd
from eive_tmtc.pus_tc.devs.ccsds_handler import pack_ccsds_handler_test from eive_tmtc.tmtc.com.ccsds_handler import pack_ccsds_handler_test
from eive_tmtc.tmtc.core import pack_core_commands from eive_tmtc.tmtc.core import pack_core_commands
from eive_tmtc.pus_tc.devs.star_tracker import pack_star_tracker_commands from eive_tmtc.tmtc.acs.star_tracker import pack_star_tracker_commands
from eive_tmtc.pus_tc.devs.syrlinks_hk_handler import pack_syrlinks_command from eive_tmtc.tmtc.com.syrlinks_handler import pack_syrlinks_command
from eive_tmtc.pus_tc.devs.gps import pack_gps_command from eive_tmtc.pus_tc.devs.gps import pack_gps_command
from eive_tmtc.tmtc.acs.acs_board import pack_acs_command from eive_tmtc.tmtc.acs.acs_board import pack_acs_command
from eive_tmtc.tmtc.acs.sus_board import pack_sus_cmds
from eive_tmtc.pus_tc.devs.plpcdu import pack_pl_pcdu_commands from eive_tmtc.pus_tc.devs.plpcdu import pack_pl_pcdu_commands
from eive_tmtc.pus_tc.devs.str_img_helper import pack_str_img_helper_command from eive_tmtc.pus_tc.devs.str_img_helper import pack_str_img_helper_command
from eive_tmtc.pus_tc.system.tcs import pack_tcs_sys_commands
from eive_tmtc.pus_tc.system.proc import pack_proc_commands from eive_tmtc.pus_tc.system.proc import pack_proc_commands
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.config.object_ids import ( from eive_tmtc.config.object_ids import (
@ -168,8 +166,9 @@ def handle_default_procedure(
object_id=oids.GPS_CONTROLLER, q=queue_helper, op_code=op_code object_id=oids.GPS_CONTROLLER, q=queue_helper, op_code=op_code
) )
if service == CustomServiceList.CCSDS_HANDLER.value: if service == CustomServiceList.CCSDS_HANDLER.value:
object_id = cast(ObjectIdU32, obj_id_man.get(CCSDS_HANDLER_ID))
return pack_ccsds_handler_test( return pack_ccsds_handler_test(
object_id=CCSDS_HANDLER_ID, q=queue_helper, op_code=op_code object_id=object_id, q=queue_helper, op_code=op_code
) )
if service == CustomServiceList.PDEC_HANDLER.value: if service == CustomServiceList.PDEC_HANDLER.value:
return pack_ccsds_handler_test( return pack_ccsds_handler_test(

View File

@ -7,7 +7,7 @@
""" """
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
from eive_tmtc.config.object_ids import TEST_DEVICE_ID from eive_tmtc.config.object_ids import TEST_DEVICE_ID
TEST_DEVICE_OBJ_ID = TEST_DEVICE_ID TEST_DEVICE_OBJ_ID = TEST_DEVICE_ID
@ -19,17 +19,17 @@ def pack_service_200_test_into(q: DefaultPusQueueHelper):
obj_id = TEST_DEVICE_OBJ_ID obj_id = TEST_DEVICE_OBJ_ID
# Set On Mode # Set On Mode
q.add_log_cmd("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) mode_data = pack_mode_data(obj_id, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
# Set Normal mode # Set Normal mode
q.add_log_cmd("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) mode_data = pack_mode_data(obj_id, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
# Set Raw Mode # Set Raw Mode
q.add_log_cmd("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) mode_data = pack_mode_data(obj_id, Mode.RAW, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
# Set Off Mode # Set Off Mode
q.add_log_cmd("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) mode_data = pack_mode_data(obj_id, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))

View File

@ -1,14 +1,14 @@
from typing import Union from typing import Union
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import Modes from tmtccmd.tc.pus_200_fsfw_modes import Mode
from tmtccmd.util import ObjectIdU32, ObjectIdBase from tmtccmd.util import ObjectIdU32, ObjectIdBase
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
import eive_tmtc.config.object_ids as obj_ids import eive_tmtc.config.object_ids as obj_ids
class OpCodes: class OpCode:
THERMAL_CONTROLLER = [obj_ids.THERMAL_CONTROLLER_ID.hex(), "ctrl-th"] THERMAL_CONTROLLER = [obj_ids.THERMAL_CONTROLLER_ID.hex(), "ctrl-th"]
CORE_CONTROLLER = [obj_ids.CORE_CONTROLLER_ID.hex(), "ctrl-core"] CORE_CONTROLLER = [obj_ids.CORE_CONTROLLER_ID.hex(), "ctrl-core"]
@ -54,7 +54,7 @@ def pack_cmd_ctrl_to_off(
): ):
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=object_id.as_bytes, object_id=object_id.as_bytes,
mode=Modes.OFF, mode=Mode.OFF,
submode=0, submode=0,
q=q, q=q,
info=f"Commanding {object_id} OFF", info=f"Commanding {object_id} OFF",
@ -64,7 +64,7 @@ def pack_cmd_ctrl_to_off(
def pack_cmd_ctrl_to_on(q: DefaultPusQueueHelper, object_id: ObjectIdU32): def pack_cmd_ctrl_to_on(q: DefaultPusQueueHelper, object_id: ObjectIdU32):
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=object_id.as_bytes, object_id=object_id.as_bytes,
mode=Modes.ON, mode=Mode.ON,
submode=0, submode=0,
q=q, q=q,
info=f"Commanding {object_id} ON", info=f"Commanding {object_id} ON",
@ -76,7 +76,7 @@ def pack_cmd_ctrl_to_nml(
): ):
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=object_id.as_bytes, object_id=object_id.as_bytes,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=0, submode=0,
q=q, q=q,
info=f"Commanding {object_id} NORMAL", info=f"Commanding {object_id} NORMAL",
@ -89,7 +89,7 @@ def get_object_from_op_code(op_code: str):
except: except:
pass pass
if op_code in OpCodes.THERMAL_CONTROLLER: if op_code in OpCode.THERMAL_CONTROLLER:
return obj_ids.THERMAL_CONTROLLER_ID return obj_ids.THERMAL_CONTROLLER_ID
if op_code in OpCodes.CORE_CONTROLLER: if op_code in OpCode.CORE_CONTROLLER:
return obj_ids.CORE_CONTROLLER_ID return obj_ids.CORE_CONTROLLER_ID

View File

@ -5,36 +5,34 @@ from datetime import timedelta
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.config.object_ids import get_object_ids from eive_tmtc.config.object_ids import get_object_ids
from eive_tmtc.pus_tc.system.tcs import pack_tcs_sys_commands
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.pus.s11_tc_sched import (
from tmtccmd.tc.pus_11_tc_sched import ( create_time_tagged_cmd,
generate_time_tagged_cmd, create_enable_tc_sched_cmd,
generate_enable_tc_sched_cmd, create_reset_tc_sched_cmd,
generate_reset_tc_sched_cmd,
) )
from tmtccmd.tc.pus_3_fsfw_hk import * from tmtccmd.tc.pus_3_fsfw_hk import *
import eive_tmtc.config.object_ids as oids import eive_tmtc.config.object_ids as oids
from eive_tmtc.pus_tc.system.tcs import OpCodes as TcsOpCodes from eive_tmtc.tmtc.tcs import OpCodeAssy as TcsOpCodes, pack_tcs_sys_commands
from eive_tmtc.pus_tc.devs.bpx_batt import BpxSetIds from eive_tmtc.pus_tc.devs.bpx_batt import BpxSetId
from eive_tmtc.tmtc.core import SetIds as CoreSetIds from eive_tmtc.tmtc.core import SetId as CoreSetIds
from eive_tmtc.tmtc.power.common_power import SetId as GsSetIds from eive_tmtc.tmtc.power.common_power import SetId as GsSetIds
from eive_tmtc.pus_tc.devs.rad_sensor import SetIds as RadSetIds from eive_tmtc.pus_tc.devs.rad_sensor import SetId as RadSetIds
from eive_tmtc.pus_tc.devs.mgms import MgmLis3SetIds as MgmLis3SetIds_0_2 from eive_tmtc.pus_tc.devs.mgms import MgmLis3SetId as MgmLis3SetIds_0_2
from eive_tmtc.pus_tc.devs.mgms import MgmRm3100SetIds as MgmRm3100SetIds_1_3 from eive_tmtc.pus_tc.devs.mgms import MgmRm3100SetId as MgmRm3100SetIds_1_3
from eive_tmtc.pus_tc.devs.gyros import AdisGyroSetIds as AdisGyroSetIds_0_2 from eive_tmtc.pus_tc.devs.gyros import AdisGyroSetId as AdisGyroSetIds_0_2
from eive_tmtc.pus_tc.devs.gyros import L3gGyroSetIds as L3gGyroSetIds_1_3 from eive_tmtc.pus_tc.devs.gyros import L3gGyroSetId as L3gGyroSetIds_1_3
from eive_tmtc.pus_tc.devs.syrlinks_hk_handler import SetIds as SyrlinksSetIds from eive_tmtc.tmtc.com.syrlinks_handler import SetId as SyrlinksSetIds
from eive_tmtc.pus_tc.devs.gps import SetIds as GpsSetIds from eive_tmtc.pus_tc.devs.gps import SetId as GpsSetIds
from eive_tmtc.tmtc.acs.imtq import ImtqSetIds from eive_tmtc.tmtc.acs.imtq import ImtqSetId
from eive_tmtc.pus_tc.devs.sus import SetIds from eive_tmtc.pus_tc.devs.sus import SetId
from eive_tmtc.pus_tc.devs.star_tracker import SetIds as StrSetIds from eive_tmtc.tmtc.acs.star_tracker import SetId as StrSetIds
from eive_tmtc.tmtc.acs.reaction_wheels import ( from eive_tmtc.tmtc.acs.reaction_wheels import (
RwSetIds, RwSetId,
rw_speed_up_cmd_consec, rw_speed_up_cmd_consec,
rw_speed_down_cmd_consec, rw_speed_down_cmd_consec,
) )
@ -45,11 +43,11 @@ from eive_tmtc.pus_tc.system.controllers import (
from eive_tmtc.tmtc.acs.acs_board import pack_acs_command from eive_tmtc.tmtc.acs.acs_board import pack_acs_command
from eive_tmtc.tmtc.acs.sus_board import pack_sus_cmds from eive_tmtc.tmtc.acs.sus_board import pack_sus_cmds
from eive_tmtc.tmtc.acs.imtq import pack_imtq_test_into, pack_dipole_command from eive_tmtc.tmtc.acs.imtq import pack_imtq_test_into, pack_dipole_command
from eive_tmtc.pus_tc.devs.star_tracker import pack_star_tracker_commands from eive_tmtc.tmtc.acs.star_tracker import pack_star_tracker_commands
from eive_tmtc.tmtc.acs.reaction_wheels import pack_rw_ass_cmds, pack_set_speed_command from eive_tmtc.tmtc.acs.reaction_wheels import pack_rw_ass_cmds, pack_set_speed_command
class OpCodes: class OpCode:
"""FT: Functional Test""" """FT: Functional Test"""
TV_SETUP_TCS_FT_ON = ["s", "tcs-ft-on"] TV_SETUP_TCS_FT_ON = ["s", "tcs-ft-on"]
@ -93,34 +91,34 @@ KAI = KeyAndInfo
PROC_INFO_DICT = { PROC_INFO_DICT = {
KAI.TV_SETUP_TCS_FT_ON[0]: [ KAI.TV_SETUP_TCS_FT_ON[0]: [
OpCodes.TV_SETUP_TCS_FT_ON, OpCode.TV_SETUP_TCS_FT_ON,
KAI.TV_SETUP_TCS_FT_ON[1], KAI.TV_SETUP_TCS_FT_ON[1],
120.0, 120.0,
10.0, 10.0,
], ],
KAI.TV_TEARDOWN_TCS_FT_OFF[0]: [ KAI.TV_TEARDOWN_TCS_FT_OFF[0]: [
OpCodes.TV_TEARDOWN_TCS_FT_OFF, OpCode.TV_TEARDOWN_TCS_FT_OFF,
KAI.TV_TEARDOWN_TCS_FT_OFF[1], KAI.TV_TEARDOWN_TCS_FT_OFF[1],
120.0, 120.0,
10.0, 10.0,
], ],
KAI.BAT_FT[0]: [OpCodes.BAT_FT, KAI.BAT_FT[1], 120.0, 10.0], KAI.BAT_FT[0]: [OpCode.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.CORE_FT[0]: [OpCode.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.PCDU_FT[0]: [OpCode.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.RAD_SEN_FT[0]: [OpCode.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.ACS_FT[0]: [OpCode.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], KAI.MGT_FT[0]: [OpCode.MGT_FT, KAI.MGT_FT[1], 120.0, 10.0],
# collection_time for KAI.MGT_FT_DP maybe be reduced as a full 120 # collection_time for KAI.MGT_FT_DP maybe be reduced as a full 120
# seconds is not needed after MGTs are tested # seconds is not needed after MGTs are tested
KAI.MGT_FT_DP[0]: [OpCodes.MGT_FT_DP, KAI.MGT_FT_DP[1], 10.0, 10.0], KAI.MGT_FT_DP[0]: [OpCode.MGT_FT_DP, KAI.MGT_FT_DP[1], 10.0, 10.0],
KAI.SUS_FT[0]: [OpCodes.SUS_FT, KAI.SUS_FT[1], 120.0, 10.0], KAI.SUS_FT[0]: [OpCode.SUS_FT, KAI.SUS_FT[1], 120.0, 10.0],
KAI.STR_FT[0]: [OpCodes.STR_FT, KAI.STR_FT[1], 120.0, 10.0], KAI.STR_FT[0]: [OpCode.STR_FT, KAI.STR_FT[1], 120.0, 10.0],
# collection_time for KAI.RW_FT_ONE_RW maybe be reduced as a full 120 # collection_time for KAI.RW_FT_ONE_RW maybe be reduced as a full 120
# seconds is not needed after RWs are tested # seconds is not needed after RWs are tested
KAI.RW_FT_ONE_RW[0]: [OpCodes.RW_FT_ONE_RW, KAI.RW_FT_ONE_RW[1], 10.0, 1.0], KAI.RW_FT_ONE_RW[0]: [OpCode.RW_FT_ONE_RW, KAI.RW_FT_ONE_RW[1], 10.0, 1.0],
# collection_time for KAI.RW_FT_ONE_RW maybe be reduced as a full 120 # collection_time for KAI.RW_FT_ONE_RW maybe be reduced as a full 120
# seconds is not needed after RWs are tested # seconds is not needed after RWs are tested
KAI.RW_FT_TWO_RWS[0]: [OpCodes.RW_FT_TWO_RWS, KAI.RW_FT_TWO_RWS[1], 10.0, 1.0], KAI.RW_FT_TWO_RWS[0]: [OpCode.RW_FT_TWO_RWS, KAI.RW_FT_TWO_RWS[1], 10.0, 1.0],
} }
@ -209,7 +207,7 @@ def pack_generic_hk_listening_cmds(
else: else:
for cmd in disable_cmd_list: for cmd in disable_cmd_list:
q.add_pus_tc( q.add_pus_tc(
generate_time_tagged_cmd( create_time_tagged_cmd(
release_time=struct.pack("!I", int(current_time)), tc_to_insert=cmd release_time=struct.pack("!I", int(current_time)), tc_to_insert=cmd
) )
) )
@ -223,12 +221,12 @@ def pack_generic_hk_listening_cmds(
def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str): def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
sid_list = [] sid_list = []
obj_id_dict = get_object_ids() obj_id_dict = get_object_ids()
if op_code in OpCodes.RESET_SCHED: if op_code in OpCode.RESET_SCHED:
q.add_log_cmd("Resetting/Clearing TC schedule") q.add_log_cmd("Resetting/Clearing TC schedule")
q.add_pus_tc(generate_reset_tc_sched_cmd()) q.add_pus_tc(create_reset_tc_sched_cmd())
if op_code in OpCodes.BAT_FT: if op_code in OpCode.BAT_FT:
key = KAI.BAT_FT[0] key = KAI.BAT_FT[0]
sid_list.append(make_sid(oids.BPX_HANDLER_ID, BpxSetIds.GET_HK_SET)) sid_list.append(make_sid(oids.BPX_HANDLER_ID, BpxSetId.GET_HK_SET))
diag_list = [False] diag_list = [False]
pack_generic_hk_listening_cmds( pack_generic_hk_listening_cmds(
q=q, q=q,
@ -238,7 +236,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(), cfg=GenericHkListeningCfg.default(),
) )
if op_code in OpCodes.CORE_FT: if op_code in OpCode.CORE_FT:
key = KAI.CORE_FT[0] key = KAI.CORE_FT[0]
sid_list.append(make_sid(oids.CORE_CONTROLLER_ID, CoreSetIds.HK)) sid_list.append(make_sid(oids.CORE_CONTROLLER_ID, CoreSetIds.HK))
diag_list = [False] diag_list = [False]
@ -250,7 +248,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(), cfg=GenericHkListeningCfg.default(),
) )
if op_code in OpCodes.PCDU_FT: if op_code in OpCode.PCDU_FT:
key = KAI.PCDU_FT[0] key = KAI.PCDU_FT[0]
pcdu_pairs = [ pcdu_pairs = [
(oids.P60_DOCK_HANDLER, GsSetIds.CORE), (oids.P60_DOCK_HANDLER, GsSetIds.CORE),
@ -286,7 +284,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(), cfg=GenericHkListeningCfg.default(),
) )
if op_code in OpCodes.RAD_SEN_FT: if op_code in OpCode.RAD_SEN_FT:
key = KAI.RAD_SEN_FT[0] key = KAI.RAD_SEN_FT[0]
sid_list.append(make_sid(oids.RAD_SENSOR_ID, RadSetIds.HK)) sid_list.append(make_sid(oids.RAD_SENSOR_ID, RadSetIds.HK))
diag_list = [False] diag_list = [False]
@ -298,18 +296,18 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
cfg=GenericHkListeningCfg.default(), cfg=GenericHkListeningCfg.default(),
) )
if op_code in OpCodes.TV_SETUP_TCS_FT_ON: if op_code in OpCode.TV_SETUP_TCS_FT_ON:
# Enable scheduling # Enable scheduling
q.add_pus_tc(generate_enable_tc_sched_cmd()) q.add_pus_tc(create_enable_tc_sched_cmd())
# check whether tcs_assembly also has to be commanded to NORMAL Mode # check whether tcs_assembly also has to be commanded to NORMAL Mode
pack_tcs_sys_commands(q=q, op_code=TcsOpCodes.TCS_BOARD_ASS_NORMAL[0]) 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)) 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: if op_code in OpCode.TV_TEARDOWN_TCS_FT_OFF:
# TCS board should always be on anyway, do not command it off here # 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)) pack_cmd_ctrl_to_off(q=q, object_id=obj_id_dict.get(oids.THERMAL_CONTROLLER_ID))
if op_code in OpCodes.ACS_FT: if op_code in OpCode.ACS_FT:
key = KAI.ACS_FT[0] key = KAI.ACS_FT[0]
a_side_pairs = [ a_side_pairs = [
(oids.MGM_0_LIS3_HANDLER_ID, MgmLis3SetIds_0_2.CORE_HK), (oids.MGM_0_LIS3_HANDLER_ID, MgmLis3SetIds_0_2.CORE_HK),
@ -392,12 +390,12 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
pack_acs_command(q=q, op_code="acs-off") pack_acs_command(q=q, op_code="acs-off")
if op_code in OpCodes.MGT_FT: if op_code in OpCode.MGT_FT:
key = KAI.MGT_FT[0] key = KAI.MGT_FT[0]
imtq_pairs = [ imtq_pairs = [
(oids.IMTQ_HANDLER_ID, ImtqSetIds.ENG_HK_SET), (oids.IMTQ_HANDLER_ID, ImtqSetId.ENG_HK_SET),
(oids.IMTQ_HANDLER_ID, ImtqSetIds.CAL_MTM_SET), (oids.IMTQ_HANDLER_ID, ImtqSetId.CAL_MTM_SET),
(oids.IMTQ_HANDLER_ID, ImtqSetIds.RAW_MTM_SET), (oids.IMTQ_HANDLER_ID, ImtqSetId.RAW_MTM_SET),
] ]
diag_list = [ diag_list = [
True, True,
@ -425,7 +423,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="0") pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="0")
if op_code in OpCodes.MGT_FT_DP: if op_code in OpCode.MGT_FT_DP:
key = KAI.MGT_FT_DP[0] key = KAI.MGT_FT_DP[0]
a_side_pairs = [ a_side_pairs = [
(oids.MGM_0_LIS3_HANDLER_ID, MgmLis3SetIds_0_2.CORE_HK), (oids.MGM_0_LIS3_HANDLER_ID, MgmLis3SetIds_0_2.CORE_HK),
@ -442,9 +440,9 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
(oids.GPS_CONTROLLER, GpsSetIds.HK), (oids.GPS_CONTROLLER, GpsSetIds.HK),
] ]
imtq_pairs = [ imtq_pairs = [
(oids.IMTQ_HANDLER_ID, ImtqSetIds.ENG_HK_SET), (oids.IMTQ_HANDLER_ID, ImtqSetId.ENG_HK_SET),
(oids.IMTQ_HANDLER_ID, ImtqSetIds.CAL_MTM_SET), (oids.IMTQ_HANDLER_ID, ImtqSetId.CAL_MTM_SET),
(oids.IMTQ_HANDLER_ID, ImtqSetIds.RAW_MTM_SET), (oids.IMTQ_HANDLER_ID, ImtqSetId.RAW_MTM_SET),
] ]
d_side_and_imtq_pairs = a_side_pairs + b_side_pairs + imtq_pairs d_side_and_imtq_pairs = a_side_pairs + b_side_pairs + imtq_pairs
diag_list = [ diag_list = [
@ -487,7 +485,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="0") pack_imtq_test_into(oids.IMTQ_HANDLER_ID, q=q, op_code="0")
pack_acs_command(q=q, op_code="acs-off") pack_acs_command(q=q, op_code="acs-off")
if op_code in OpCodes.SUS_FT: if op_code in OpCode.SUS_FT:
key = KAI.SUS_FT[0] key = KAI.SUS_FT[0]
pack_sus_cmds(q=q, op_code="sus-nom") pack_sus_cmds(q=q, op_code="sus-nom")
@ -519,7 +517,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
# SUSs # SUSs
for nom_sus in sus_n_ids: for nom_sus in sus_n_ids:
sid_list.append(make_sid(nom_sus, SetIds.HK)) sid_list.append(make_sid(nom_sus, SetId.HK))
pack_generic_hk_listening_cmds( pack_generic_hk_listening_cmds(
q=q, q=q,
proc_key=key, proc_key=key,
@ -543,7 +541,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
# SUSs # SUSs
for red_sus in sus_r_ids: for red_sus in sus_r_ids:
sid_list.append(make_sid(red_sus, SetIds.HK)) sid_list.append(make_sid(red_sus, SetId.HK))
pack_generic_hk_listening_cmds( pack_generic_hk_listening_cmds(
q=q, q=q,
proc_key=key, proc_key=key,
@ -558,9 +556,9 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
# SUSs # SUSs
for nom_sus in sus_n_ids: for nom_sus in sus_n_ids:
sid_list.append(make_sid(nom_sus, SetIds.HK)) sid_list.append(make_sid(nom_sus, SetId.HK))
for red_sus in sus_r_ids: for red_sus in sus_r_ids:
sid_list.append(make_sid(red_sus, SetIds.HK)) sid_list.append(make_sid(red_sus, SetId.HK))
diag_list = [ diag_list = [
True, True,
True, True,
@ -585,7 +583,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
pack_acs_command(q=q, op_code="sus-off") pack_acs_command(q=q, op_code="sus-off")
if op_code in OpCodes.SYRLINKS_FT: if op_code in OpCode.SYRLINKS_FT:
key = KAI.SYRLINKS_FT[0] key = KAI.SYRLINKS_FT[0]
sid_list = [ sid_list = [
make_sid(oids.SYRLINKS_HANDLER_ID, SyrlinksSetIds.RX_REGISTERS_DATASET), make_sid(oids.SYRLINKS_HANDLER_ID, SyrlinksSetIds.RX_REGISTERS_DATASET),
@ -599,7 +597,7 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
diag_list=[False], diag_list=[False],
cfg=GenericHkListeningCfg.default(), cfg=GenericHkListeningCfg.default(),
) )
if op_code in OpCodes.STR_FT: if op_code in OpCode.STR_FT:
key = KAI.STR_FT[0] key = KAI.STR_FT[0]
pack_star_tracker_commands(object_id=oids.STAR_TRACKER_ID, q=q, op_code="2") pack_star_tracker_commands(object_id=oids.STAR_TRACKER_ID, q=q, op_code="2")
@ -617,21 +615,21 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
pack_star_tracker_commands(object_id=oids.STAR_TRACKER_ID, q=q, 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: if op_code in OpCode.RW_FT_ONE_RW:
key = KAI.RW_FT_ONE_RW[0] key = KAI.RW_FT_ONE_RW[0]
rw_pairs = [ rw_pairs = [
(oids.RW1_ID, RwSetIds.STATUS_SET_ID), (oids.RW1_ID, RwSetId.STATUS_SET_ID),
(oids.RW1_ID, RwSetIds.LAST_RESET), (oids.RW1_ID, RwSetId.LAST_RESET),
(oids.RW1_ID, RwSetIds.TM_SET), (oids.RW1_ID, RwSetId.TM_SET),
(oids.RW2_ID, RwSetIds.STATUS_SET_ID), (oids.RW2_ID, RwSetId.STATUS_SET_ID),
(oids.RW2_ID, RwSetIds.LAST_RESET), (oids.RW2_ID, RwSetId.LAST_RESET),
(oids.RW2_ID, RwSetIds.TM_SET), (oids.RW2_ID, RwSetId.TM_SET),
(oids.RW3_ID, RwSetIds.STATUS_SET_ID), (oids.RW3_ID, RwSetId.STATUS_SET_ID),
(oids.RW3_ID, RwSetIds.LAST_RESET), (oids.RW3_ID, RwSetId.LAST_RESET),
(oids.RW3_ID, RwSetIds.TM_SET), (oids.RW3_ID, RwSetId.TM_SET),
(oids.RW4_ID, RwSetIds.STATUS_SET_ID), (oids.RW4_ID, RwSetId.STATUS_SET_ID),
(oids.RW4_ID, RwSetIds.LAST_RESET), (oids.RW4_ID, RwSetId.LAST_RESET),
(oids.RW4_ID, RwSetIds.TM_SET), (oids.RW4_ID, RwSetId.TM_SET),
] ]
diag_list = [ diag_list = [
True, True,
@ -666,25 +664,25 @@ def pack_proc_commands(q: DefaultPusQueueHelper, op_code: str):
pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, op_code="off") pack_rw_ass_cmds(object_id=oids.RW_ASSEMBLY, q=q, op_code="off")
# ass command with 2 rws to speed # ass command with 2 rws to speed
if op_code in OpCodes.RW_FT_TWO_RWS: if op_code in OpCode.RW_FT_TWO_RWS:
key = KAI.RW_FT_TWO_RWS[0] key = KAI.RW_FT_TWO_RWS[0]
rw_pairs = [ rw_pairs = [
(oids.RW1_ID, RwSetIds.STATUS_SET_ID), (oids.RW1_ID, RwSetId.STATUS_SET_ID),
(oids.RW1_ID, RwSetIds.TEMPERATURE_SET_ID), (oids.RW1_ID, RwSetId.TEMPERATURE_SET_ID),
(oids.RW1_ID, RwSetIds.LAST_RESET), (oids.RW1_ID, RwSetId.LAST_RESET),
(oids.RW1_ID, RwSetIds.TM_SET), (oids.RW1_ID, RwSetId.TM_SET),
(oids.RW2_ID, RwSetIds.STATUS_SET_ID), (oids.RW2_ID, RwSetId.STATUS_SET_ID),
(oids.RW2_ID, RwSetIds.TEMPERATURE_SET_ID), (oids.RW2_ID, RwSetId.TEMPERATURE_SET_ID),
(oids.RW2_ID, RwSetIds.LAST_RESET), (oids.RW2_ID, RwSetId.LAST_RESET),
(oids.RW2_ID, RwSetIds.TM_SET), (oids.RW2_ID, RwSetId.TM_SET),
(oids.RW3_ID, RwSetIds.STATUS_SET_ID), (oids.RW3_ID, RwSetId.STATUS_SET_ID),
(oids.RW3_ID, RwSetIds.TEMPERATURE_SET_ID), (oids.RW3_ID, RwSetId.TEMPERATURE_SET_ID),
(oids.RW3_ID, RwSetIds.LAST_RESET), (oids.RW3_ID, RwSetId.LAST_RESET),
(oids.RW3_ID, RwSetIds.TM_SET), (oids.RW3_ID, RwSetId.TM_SET),
(oids.RW4_ID, RwSetIds.STATUS_SET_ID), (oids.RW4_ID, RwSetId.STATUS_SET_ID),
(oids.RW4_ID, RwSetIds.TEMPERATURE_SET_ID), (oids.RW4_ID, RwSetId.TEMPERATURE_SET_ID),
(oids.RW4_ID, RwSetIds.LAST_RESET), (oids.RW4_ID, RwSetId.LAST_RESET),
(oids.RW4_ID, RwSetIds.TM_SET), (oids.RW4_ID, RwSetId.TM_SET),
] ]
diag_list = [ diag_list = [
False, False,
@ -736,7 +734,7 @@ def enable_listen_to_hk_for_x_seconds(
) )
for cmd in cmd_tuple: for cmd in cmd_tuple:
q.add_pus_tc(cmd) q.add_pus_tc(cmd)
generate_time_tagged_cmd( create_time_tagged_cmd(
struct.pack("!I", int(round(time.time() + interval_seconds))), struct.pack("!I", int(round(time.time() + interval_seconds))),
gen_disable_listen_to_hk_for_x_seconds(q, diag, device, sid), gen_disable_listen_to_hk_for_x_seconds(q, diag, device, sid),
) )

View File

@ -1,78 +0,0 @@
import enum
from eive_tmtc.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_hk_command,
)
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
from eive_tmtc.config.object_ids import TCS_BOARD_ASS_ID, TCS_CONTROLLER
class OpCodes:
TCS_BOARD_ASS_NORMAL = ["0", "normal"]
TCS_BOARD_ASS_OFF = ["1", "off"]
REQUEST_SENSOR_TEMP_SET = ["2", "temps"]
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"
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:
pack_mode_cmd_with_info(
object_id=TCS_BOARD_ASS_ID,
mode=Modes.NORMAL,
submode=0,
q=q,
info=Info.TCS_BOARD_ASS_NORMAL,
)
if op_code in OpCodes.TCS_BOARD_ASS_OFF:
pack_mode_cmd_with_info(
object_id=TCS_BOARD_ASS_ID,
mode=Modes.OFF,
submode=0,
q=q,
info=Info.TCS_BOARD_ASS_OFF,
)

View File

@ -11,7 +11,7 @@ from tmtccmd.tc.decorator import ServiceProviderParams
LOGGER = get_console_logger() LOGGER = get_console_logger()
class OpCodes: class OpCode:
SET_CURRENT_TIME = ["0", "set-curr-time"] SET_CURRENT_TIME = ["0", "set-curr-time"]

View File

@ -1,14 +1,15 @@
import struct import struct
from eive_tmtc.config.object_ids import * from eive_tmtc.config.object_ids import *
from eive_tmtc.tmtc.acs.imtq import ImtqActionIds from eive_tmtc.tmtc.acs.imtq import ImtqActionId
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.tmtc.payload.ploc_mpsoc import PlocReplyIds from eive_tmtc.tmtc.payload.ploc_mpsoc import PlocReplyIds
from eive_tmtc.tmtc.payload.ploc_supervisor import SupvActionIds from eive_tmtc.tmtc.payload.ploc_supervisor import SupvActionId
from eive_tmtc.pus_tc.devs.star_tracker import StarTrackerActionIds from eive_tmtc.tmtc.acs.star_tracker import StarTrackerActionId
from eive_tmtc.tmtc.power.tm import handle_get_param_data_reply from eive_tmtc.tmtc.power.tm import handle_get_param_data_reply
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
from tmtccmd.tm import Service8FsfwTm from tmtccmd.tm import Service8FsfwTm
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from spacepackets.ccsds.time import CdsShortTimestamp
LOGGER = get_console_logger() LOGGER = get_console_logger()
@ -19,7 +20,9 @@ def handle_action_reply(
"""Core Action reply handler """Core Action reply handler
:return: :return:
""" """
tm_packet = Service8FsfwTm.unpack(raw_telemetry=raw_tm) tm_packet = Service8FsfwTm.unpack(
raw_telemetry=raw_tm, time_reader=CdsShortTimestamp.empty()
)
printer.handle_long_tm_print(packet_if=tm_packet, info_if=tm_packet) 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) object_id = obj_id_dict.get(tm_packet.source_object_id_as_bytes)
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
@ -52,7 +55,7 @@ def handle_action_reply(
def handle_imtq_replies( def handle_imtq_replies(
action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray
): ):
if action_id == struct.unpack("!I", ImtqActionIds.get_commanded_dipole)[0]: if action_id == struct.unpack("!I", ImtqActionId.get_commanded_dipole)[0]:
header_list = [ header_list = [
"Commanded X-Dipole", "Commanded X-Dipole",
"Commanded Y-Dipole", "Commanded Y-Dipole",
@ -99,14 +102,14 @@ def handle_ploc_replies(
def handle_supervisor_replies( def handle_supervisor_replies(
action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray
): ):
if action_id == SupvActionIds.DUMP_MRAM: if action_id == SupvActionId.DUMP_MRAM:
header_list = ["MRAM Dump"] header_list = ["MRAM Dump"]
content_list = [custom_data[: len(custom_data)]] content_list = [custom_data[: len(custom_data)]]
print(header_list) print(header_list)
print(content_list) print(content_list)
printer.file_logger.info(header_list) printer.file_logger.info(header_list)
printer.file_logger.info(content_list) printer.file_logger.info(content_list)
elif action_id == SupvActionIds.READ_GPIO: elif action_id == SupvActionId.READ_GPIO:
header_list = ["GPIO state"] header_list = ["GPIO state"]
content_list = [struct.unpack("!H", custom_data[:2])[0]] content_list = [struct.unpack("!H", custom_data[:2])[0]]
print(header_list) print(header_list)
@ -118,7 +121,7 @@ def handle_supervisor_replies(
def handle_startracker_replies( def handle_startracker_replies(
action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray action_id: int, printer: FsfwTmTcPrinter, custom_data: bytearray
): ):
if action_id == StarTrackerActionIds.CHECKSUM: if action_id == StarTrackerActionId.CHECKSUM:
if len(custom_data) != 5: if len(custom_data) != 5:
LOGGER.warning( LOGGER.warning(
"Star tracker reply has invalid length {0}".format(len(custom_data)) "Star tracker reply has invalid length {0}".format(len(custom_data))

View File

@ -1,6 +1,6 @@
import struct import struct
from eive_tmtc.pus_tc.devs.bpx_batt import BpxSetIds from eive_tmtc.pus_tc.devs.bpx_batt import BpxSetId
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
@ -21,7 +21,7 @@ HEADER_LIST = [
def handle_bpx_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes): def handle_bpx_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
if set_id == BpxSetIds.GET_HK_SET: if set_id == BpxSetId.GET_HK_SET:
fmt_str = "!HHHHhhhhIB" fmt_str = "!HHHHhhhhIB"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)
( (
@ -52,7 +52,7 @@ def handle_bpx_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
pw.dlog(str(HEADER_LIST)) pw.dlog(str(HEADER_LIST))
pw.dlog(str(content_list)) pw.dlog(str(content_list))
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=10) printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=10)
elif set_id == BpxSetIds.GET_CFG_SET: elif set_id == BpxSetId.GET_CFG_SET:
battheat_mode = hk_data[0] battheat_mode = hk_data[0]
battheat_low = struct.unpack("!b", hk_data[1:2])[0] battheat_low = struct.unpack("!b", hk_data[1:2])[0]
battheat_high = struct.unpack("!b", hk_data[2:3])[0] battheat_high = struct.unpack("!b", hk_data[2:3])[0]

View File

@ -4,7 +4,7 @@ from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from eive_tmtc.pus_tc.devs.gyros import L3gGyroSetIds, AdisGyroSetIds from eive_tmtc.pus_tc.devs.gyros import L3gGyroSetId, AdisGyroSetId
import eive_tmtc.config.object_ids as obj_ids import eive_tmtc.config.object_ids as obj_ids
@ -30,7 +30,7 @@ def handle_gyros_hk_data(
def handle_adis_gyro_hk( def handle_adis_gyro_hk(
object_id: ObjectIdU32, 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: if set_id == AdisGyroSetId.CORE_HK:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
fmt_str = "!ddddddf" fmt_str = "!ddddddf"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)
@ -44,7 +44,7 @@ def handle_adis_gyro_hk(
) )
pw.dlog(f"Acceleration (m/s^2): X {accelX} | Y {accelY} | Z {accelZ}") pw.dlog(f"Acceleration (m/s^2): X {accelX} | Y {accelY} | Z {accelZ}")
pw.dlog(f"Temperature {temp} C") pw.dlog(f"Temperature {temp} C")
if set_id == AdisGyroSetIds.CFG_HK: if set_id == AdisGyroSetId.CFG_HK:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
fmt_str = "!HBHH" fmt_str = "!HBHH"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)
@ -60,7 +60,7 @@ def handle_adis_gyro_hk(
def handle_l3g_gyro_hk( def handle_l3g_gyro_hk(
object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
): ):
if set_id == L3gGyroSetIds.CORE_HK: if set_id == L3gGyroSetId.CORE_HK:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
fmt_str = "!ffff" fmt_str = "!ffff"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)

View File

@ -1,7 +1,7 @@
import struct import struct
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.pus_tc.devs.mgms import MgmRm3100SetIds, MgmLis3SetIds from eive_tmtc.pus_tc.devs.mgms import MgmRm3100SetId, MgmLis3SetId
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
import eive_tmtc.config.object_ids as obj_ids import eive_tmtc.config.object_ids as obj_ids
@ -26,7 +26,7 @@ def handle_mgm_hk_data(
def handle_mgm_lis3_hk_data( def handle_mgm_lis3_hk_data(
object_id: ObjectIdU32, 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: if set_id == MgmLis3SetId.CORE_HK:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
fmt_str = "!ffff" fmt_str = "!ffff"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)
@ -43,7 +43,7 @@ def handle_mgm_lis3_hk_data(
def handle_mgm_rm3100_hk_data( def handle_mgm_rm3100_hk_data(
object_id: ObjectIdU32, 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: if set_id == MgmRm3100SetId.CORE_HK:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
fmt_str = f"!fff" fmt_str = f"!fff"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)

View File

@ -2,7 +2,7 @@ import struct
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from eive_tmtc.pus_tc.devs.plpcdu import SetIds from eive_tmtc.pus_tc.devs.plpcdu import SetId
ADC_CHANNELS_NAMED = [ ADC_CHANNELS_NAMED = [
@ -22,7 +22,7 @@ ADC_CHANNELS_NAMED = [
def handle_plpcdu_hk(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes): def handle_plpcdu_hk(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
if set_id == SetIds.ADC: if set_id == SetId.ADC:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
current_idx = 0 current_idx = 0
pw.dlog("Received PL PCDU ADC HK data") pw.dlog("Received PL PCDU ADC HK data")

View File

@ -2,11 +2,11 @@ import struct
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from eive_tmtc.pus_tc.devs.rad_sensor import SetIds from eive_tmtc.pus_tc.devs.rad_sensor import SetId
def handle_rad_sensor_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes): def handle_rad_sensor_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
if set_id == SetIds.HK: if set_id == SetId.HK:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
current_idx = 0 current_idx = 0
pw.dlog("Received Radiation Sensor HK data") pw.dlog("Received Radiation Sensor HK data")

View File

@ -1,7 +1,7 @@
import struct import struct
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.pus_tc.devs.sus import SetIds from eive_tmtc.pus_tc.devs.sus import SetId
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
@ -11,7 +11,7 @@ def handle_sus_hk(
): ):
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
pw.dlog(f"Received SUS HK data from {object_id}") pw.dlog(f"Received SUS HK data from {object_id}")
if set_id == SetIds.HK: if set_id == SetId.HK:
current_idx = 0 current_idx = 0
temperature = struct.unpack("!f", hk_data[current_idx : current_idx + 4])[0] temperature = struct.unpack("!f", hk_data[current_idx : current_idx + 4])[0]
current_idx += 4 current_idx += 4

View File

@ -1,67 +0,0 @@
import struct
from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.pus_tc.devs.syrlinks_hk_handler import SetIds
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
def handle_syrlinks_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
if set_id == SetIds.RX_REGISTERS_DATASET:
return handle_syrlinks_rx_registers_dataset(printer, hk_data)
elif set_id == SetIds.TX_REGISTERS_DATASET:
return handle_syrlinks_tx_registers_dataset(printer, hk_data)
else:
pw = PrintWrapper(printer)
pw.dlog(f"Service 3 TM: Syrlinks handler reply with unknown set ID {set_id}")
def handle_syrlinks_rx_registers_dataset(printer: FsfwTmTcPrinter, hk_data: bytes):
pw = PrintWrapper(printer)
header_list = [
"RX Status",
"RX Sensitivity",
"RX Frequency Shift",
"RX IQ Power",
"RX AGC Value",
"RX Demod Eb",
"RX Demod N0",
"RX Datarate",
]
rx_status = hk_data[0]
rx_sensitivity = struct.unpack("!I", hk_data[1:5])
rx_frequency_shift = struct.unpack("!I", hk_data[5:9])
rx_iq_power = struct.unpack("!H", hk_data[9:11])
rx_agc_value = struct.unpack("!H", hk_data[11:13])
rx_demod_eb = struct.unpack("!I", hk_data[13:17])
rx_demod_n0 = struct.unpack("!I", hk_data[17:21])
rx_data_rate = hk_data[21]
content_list = [
rx_status,
rx_sensitivity,
rx_frequency_shift,
rx_iq_power,
rx_agc_value,
rx_demod_eb,
rx_demod_n0,
rx_data_rate,
]
validity_buffer = hk_data[22:]
pw.dlog(str(header_list))
pw.dlog(str(content_list))
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=8)
def handle_syrlinks_tx_registers_dataset(
printer: FsfwTmTcPrinter,
hk_data: bytes,
):
pw = PrintWrapper(printer)
header_list = ["TX Status", "TX Waveform", "TX AGC value"]
tx_status = hk_data[0]
tx_waveform = hk_data[1]
tx_agc_value = struct.unpack("!H", hk_data[2:4])
content_list = [tx_status, tx_waveform, tx_agc_value]
validity_buffer = hk_data[4:]
pw.dlog(str(header_list))
pw.dlog(str(content_list))
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=3)

View File

@ -4,20 +4,21 @@ from eive_tmtc.config.events import get_event_dict
from eive_tmtc.config.object_ids import get_object_ids from eive_tmtc.config.object_ids import get_object_ids
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.pus_tm.verification_handler import generic_retval_printout from eive_tmtc.pus_tm.verification_handler import generic_retval_printout
from eive_tmtc.tmtc.acs.acs_subsystem import AcsModes from eive_tmtc.tmtc.acs.acs_subsystem import AcsMode
from tmtccmd.tc.pus_200_fsfw_modes import Modes from tmtccmd.tc.pus_200_fsfw_modes import Mode
from tmtccmd.tm import Service5Tm from tmtccmd.tm import Service5Tm
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from tmtccmd.fsfw import EventInfo from tmtccmd.fsfw import EventInfo
from spacepackets.ccsds.time import CdsShortTimestamp
LOGGER = get_console_logger() LOGGER = get_console_logger()
def handle_event_packet(raw_tm: bytes, printer: FsfwTmTcPrinter): def handle_event_packet(raw_tm: bytes, printer: FsfwTmTcPrinter):
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
tm = Service5Tm.unpack(raw_telemetry=raw_tm) tm = Service5Tm.unpack(raw_telemetry=raw_tm, time_reader=CdsShortTimestamp.empty())
event_dict = get_event_dict() event_dict = get_event_dict()
info = event_dict.get(tm.event_id) info = event_dict.get(tm.event_id)
if info is None: if info is None:
@ -55,24 +56,24 @@ def handle_event_packet(raw_tm: bytes, printer: FsfwTmTcPrinter):
if info.name == "MODE_INFO": if info.name == "MODE_INFO":
mode_name = "Unknown" mode_name = "Unknown"
if obj_name == "ACS_SUBSYSTEM": if obj_name == "ACS_SUBSYSTEM":
if tm.param_1 == Modes.OFF: if tm.param_1 == Mode.OFF:
mode_name = "Off" mode_name = "Off"
elif tm.param_1 == AcsModes.IDLE: elif tm.param_1 == AcsMode.IDLE:
mode_name = "Idle" mode_name = "Idle"
elif tm.param_1 == AcsModes.DETUMBLE: elif tm.param_1 == AcsMode.DETUMBLE:
mode_name = "Detumble" mode_name = "Detumble"
elif tm.param_1 == AcsModes.SAFE: elif tm.param_1 == AcsMode.SAFE:
mode_name = "Safe" mode_name = "Safe"
elif tm.param_1 == AcsModes.TARGET_PT: elif tm.param_1 == AcsMode.TARGET_PT:
mode_name = "Target Pointing" mode_name = "Target Pointing"
else: else:
if tm.param_1 == Modes.OFF: if tm.param_1 == Mode.OFF:
mode_name = "Off" mode_name = "Off"
elif tm.param_1 == Modes.ON: elif tm.param_1 == Mode.ON:
mode_name = "On" mode_name = "On"
elif tm.param_1 == Modes.NORMAL: elif tm.param_1 == Mode.NORMAL:
mode_name = "Normal" mode_name = "Normal"
elif tm.param_1 == Modes.RAW: elif tm.param_1 == Mode.RAW:
mode_name = "Raw" mode_name = "Raw"
pw.dlog(f"Mode Number {tm.param_1}, Mode Name {mode_name}") pw.dlog(f"Mode Number {tm.param_1}, Mode Name {mode_name}")
pw.dlog(f"Submode: {tm.param_2}") pw.dlog(f"Submode: {tm.param_2}")

View File

@ -4,11 +4,12 @@ from eive_tmtc.config.object_ids import get_object_ids
from spacepackets.ecss import PusTelemetry from spacepackets.ecss import PusTelemetry
from spacepackets.ecss.pus_17_test import Service17Tm from spacepackets.ecss.pus_17_test import Service17Tm
from spacepackets.util import PrintFormats from spacepackets.util import PrintFormats
from spacepackets.ccsds.time import CdsShortTimestamp
from tmtccmd import get_console_logger from tmtccmd import get_console_logger
from tmtccmd.logging.pus import RawTmtcTimedLogWrapper from tmtccmd.logging.pus import RawTmtcTimedLogWrapper
from tmtccmd.pus import VerificationWrapper from tmtccmd.pus import VerificationWrapper
from tmtccmd.tm import Service20FsfwTm, Service200FsfwTm from tmtccmd.tm import Service20FsfwTm, Service200FsfwTm
from tmtccmd.tm.pus_200_fsfw_modes import Subservices as ModeSubservices from tmtccmd.tm.pus_200_fsfw_modes import Subservice as ModeSubservices
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from .defs import PrintWrapper from .defs import PrintWrapper
@ -30,7 +31,7 @@ def pus_factory_hook(
LOGGER.warning("Detected packet shorter than 8 bytes!") LOGGER.warning("Detected packet shorter than 8 bytes!")
return return
try: try:
tm_packet = PusTelemetry.unpack(packet) tm_packet = PusTelemetry.unpack(packet, CdsShortTimestamp.empty())
except ValueError: except ValueError:
LOGGER.warning("Could not generate PUS TM object from raw data") LOGGER.warning("Could not generate PUS TM object from raw data")
LOGGER.warning(f"Raw Packet: [{packet.hex(sep=',')}], REPR: {packet!r}") LOGGER.warning(f"Raw Packet: [{packet.hex(sep=',')}], REPR: {packet!r}")
@ -48,15 +49,21 @@ def pus_factory_hook(
elif service == 8: elif service == 8:
handle_action_reply(raw_tm=packet, printer=printer, obj_id_dict=obj_id_dict) handle_action_reply(raw_tm=packet, printer=printer, obj_id_dict=obj_id_dict)
elif service == 17: elif service == 17:
tm_packet = Service17Tm.unpack(raw_telemetry=packet) tm_packet = Service17Tm.unpack(
raw_telemetry=packet, time_reader=CdsShortTimestamp.empty()
)
if tm_packet.subservice == 2: if tm_packet.subservice == 2:
verif_wrapper.dlog("Received Ping Reply TM[17,2]") verif_wrapper.dlog("Received Ping Reply TM[17,2]")
dedicated_handler = True dedicated_handler = True
elif service == 20: elif service == 20:
tm_packet = Service20FsfwTm.unpack(raw_telemetry=packet) tm_packet = Service20FsfwTm.unpack(
raw_telemetry=packet, time_reader=CdsShortTimestamp.empty()
)
dedicated_handler = False dedicated_handler = False
elif service == 200: elif service == 200:
tm_packet = Service200FsfwTm.unpack(raw_telemetry=packet) tm_packet = Service200FsfwTm.unpack(
raw_telemetry=packet, time_reader=CdsShortTimestamp.empty()
)
if tm_packet.subservice == ModeSubservices.TM_CANT_REACH_MODE: if tm_packet.subservice == ModeSubservices.TM_CANT_REACH_MODE:
obj_id = tm_packet.object_id obj_id = tm_packet.object_id
obj_id_obj = obj_id_dict.get(obj_id) obj_id_obj = obj_id_dict.get(obj_id)

View File

@ -4,9 +4,10 @@ from eive_tmtc.tmtc.acs.acs_ctrl import handle_raw_mgm_data, handle_acs_ctrl_hk_
from eive_tmtc.pus_tm.devs.plpcdu import handle_plpcdu_hk from eive_tmtc.pus_tm.devs.plpcdu import handle_plpcdu_hk
from eive_tmtc.pus_tm.devs.rad_sensor import handle_rad_sensor_data from eive_tmtc.pus_tm.devs.rad_sensor import handle_rad_sensor_data
from eive_tmtc.pus_tm.devs.sus import handle_sus_hk from eive_tmtc.pus_tm.devs.sus import handle_sus_hk
from eive_tmtc.pus_tm.system.tcs import handle_thermal_controller_hk_data
from eive_tmtc.tmtc.payload.ploc_supervisor import handle_supv_hk_data from eive_tmtc.tmtc.payload.ploc_supervisor import handle_supv_hk_data
from eive_tmtc.tmtc.acs.reaction_wheels import handle_rw_hk_data from eive_tmtc.tmtc.acs.reaction_wheels import handle_rw_hk_data
from eive_tmtc.tmtc.com.syrlinks_handler import handle_syrlinks_hk_data
from eive_tmtc.tmtc.tcs import handle_thermal_controller_hk_data
from tmtccmd.tm.pus_3_fsfw_hk import ( from tmtccmd.tm.pus_3_fsfw_hk import (
Service3Base, Service3Base,
HkContentType, HkContentType,
@ -23,9 +24,8 @@ from eive_tmtc.tmtc.power.tm import (
handle_p60_hk_data, handle_p60_hk_data,
handle_acu_hk_data, handle_acu_hk_data,
) )
from eive_tmtc.pus_tm.devs.syrlinks import handle_syrlinks_hk_data
from eive_tmtc.tmtc.acs.imtq import ( from eive_tmtc.tmtc.acs.imtq import (
ImtqSetIds, ImtqSetId,
handle_self_test_data, handle_self_test_data,
handle_eng_set, handle_eng_set,
handle_calibrated_mtm_measurement, handle_calibrated_mtm_measurement,
@ -95,15 +95,15 @@ def handle_regular_hk_print(
elif 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) handle_syrlinks_hk_data(printer=printer, hk_data=hk_data, set_id=set_id)
elif objb == obj_ids.IMTQ_HANDLER_ID: elif objb == obj_ids.IMTQ_HANDLER_ID:
if (set_id >= ImtqSetIds.POSITIVE_X_TEST) and ( if (set_id >= ImtqSetId.POSITIVE_X_TEST) and (
set_id <= ImtqSetIds.NEGATIVE_Z_TEST set_id <= ImtqSetId.NEGATIVE_Z_TEST
): ):
return handle_self_test_data(printer, hk_data) return handle_self_test_data(printer, hk_data)
elif set_id == ImtqSetIds.ENG_HK_SET: elif set_id == ImtqSetId.ENG_HK_SET:
return handle_eng_set(printer, hk_data) return handle_eng_set(printer, hk_data)
elif set_id == ImtqSetIds.CAL_MTM_SET: elif set_id == ImtqSetId.CAL_MTM_SET:
return handle_calibrated_mtm_measurement(printer, hk_data) return handle_calibrated_mtm_measurement(printer, hk_data)
elif set_id == ImtqSetIds.RAW_MTM_SET: elif set_id == ImtqSetId.RAW_MTM_SET:
return handle_raw_mtm_measurement(printer, hk_data) return handle_raw_mtm_measurement(printer, hk_data)
else: else:
LOGGER.info("Service 3 TM: IMTQ handler reply with unknown set id") LOGGER.info("Service 3 TM: IMTQ handler reply with unknown set id")

View File

@ -1,123 +0,0 @@
import enum
import pprint
import struct
from eive_tmtc.pus_tm.defs import PrintWrapper
from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
class SetIds(enum.IntEnum):
SENSOR_TEMPERATURE_SET = 0
DEVICE_TEMPERATURE_SET = 1
SUS_TEMPERATURE_SET = 2
def handle_thermal_controller_hk_data(
object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
# need a better solutuon for this is this is used again..
"""
if TCP_TEMP_SENS_SERVER is None:
TCP_TEMP_SENS_SERVER = TmTcpServer("localhost", 7305)
if TCP_TEMP_DEV_SERVER:
TCP_TEMP_DEV_SERVER = TmTcpServer("localhost", 7306)
"""
if set_id == SetIds.SENSOR_TEMPERATURE_SET:
pw = PrintWrapper(printer)
pw.dlog("Received sensor temperature data")
# get all the floats
tm_data = struct.unpack("!fffffffffffffffffffff", hk_data[: 21 * 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 TCS 0": tm_data[16],
"TMP1075 TCS 1": tm_data[17],
"TMP1075 PL PCDU 0": tm_data[18],
"TMP1075 PL PCDU 1": tm_data[19],
"TMP1075 IF BOARD": tm_data[20],
}
printer.file_logger.info(str(parsed_data))
pp = pprint.PrettyPrinter(depth=4)
pp.pprint(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],
}
printer.file_logger.info(str(parsed_data))
pp = pprint.PrettyPrinter(depth=4)
pp.pprint(parsed_data)
# 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

View File

@ -1,5 +1,6 @@
from typing import List, Optional from typing import List, Optional
from spacepackets.ccsds import CdsShortTimestamp
from spacepackets.ecss.pus_1_verification import UnpackParams, Service1Tm from spacepackets.ecss.pus_1_verification import UnpackParams, Service1Tm
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
from tmtccmd.pus import VerificationWrapper from tmtccmd.pus import VerificationWrapper
@ -15,7 +16,9 @@ def handle_service_1_fsfw_packet(wrapper: VerificationWrapper, raw_tm: bytes):
"Console logger or file logger not valid. Please set a valid one" "Console logger or file logger not valid. Please set a valid one"
) )
# Error code with length 2 is FSFW specific # Error code with length 2 is FSFW specific
tm_packet = Service1Tm.unpack(data=raw_tm, params=UnpackParams(1, 2)) tm_packet = Service1Tm.unpack(
data=raw_tm, params=UnpackParams(CdsShortTimestamp.empty(), 1, 2)
)
fsfw_wrapper = Service1FsfwWrapper(tm_packet) fsfw_wrapper = Service1FsfwWrapper(tm_packet)
res = wrapper.verificator.add_tm(tm_packet) res = wrapper.verificator.add_tm(tm_packet)
if res is None: if res is None:

View File

@ -1,2 +1,3 @@
from .payload.pl_subsystem import add_payload_subsystem_cmds from .payload.pl_subsystem import add_payload_subsystem_cmds
from .solar_array_deployment import add_sa_depl_cmds
from .test import add_test_defs from .test import add_test_defs

View File

@ -8,7 +8,7 @@ from tmtccmd.config.tmtc import (
) )
from tmtccmd.tc import service_provider, DefaultPusQueueHelper from tmtccmd.tc import service_provider, DefaultPusQueueHelper
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_200_fsfw_modes import Modes from tmtccmd.tc.pus_200_fsfw_modes import Mode
from eive_tmtc.config.object_ids import ACS_BOARD_ASS_ID from eive_tmtc.config.object_ids import ACS_BOARD_ASS_ID
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
@ -24,7 +24,7 @@ class AcsOpCodes:
ACS_ASS_DUAL_ON = ["6", "do"] ACS_ASS_DUAL_ON = ["6", "do"]
class DualSideSubmodes(enum.IntEnum): class DualSideSubmode(enum.IntEnum):
A_SIDE = 0 A_SIDE = 0
B_SIDE = 1 B_SIDE = 1
DUAL_SIDE = 2 DUAL_SIDE = 2
@ -34,55 +34,55 @@ def pack_acs_command(q: DefaultPusQueueHelper, op_code: str):
if op_code in AcsOpCodes.ACS_ASS_A_SIDE: if op_code in AcsOpCodes.ACS_ASS_A_SIDE:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID, object_id=ACS_BOARD_ASS_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=DualSideSubmodes.A_SIDE, submode=DualSideSubmode.A_SIDE,
q=q, q=q,
info="Switching to ACS board assembly A side", info="Switching to ACS board assembly A side",
) )
if op_code in AcsOpCodes.ACS_ASS_B_SIDE: if op_code in AcsOpCodes.ACS_ASS_B_SIDE:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID, object_id=ACS_BOARD_ASS_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=DualSideSubmodes.B_SIDE, submode=DualSideSubmode.B_SIDE,
q=q, q=q,
info="Switching to ACS board assembly B side", info="Switching to ACS board assembly B side",
) )
if op_code in AcsOpCodes.ACS_ASS_DUAL_MODE: if op_code in AcsOpCodes.ACS_ASS_DUAL_MODE:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID, object_id=ACS_BOARD_ASS_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=DualSideSubmodes.DUAL_SIDE, submode=DualSideSubmode.DUAL_SIDE,
q=q, q=q,
info="Switching to ACS board assembly dual mode", info="Switching to ACS board assembly dual mode",
) )
if op_code in AcsOpCodes.ACS_ASS_A_ON: if op_code in AcsOpCodes.ACS_ASS_A_ON:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID, object_id=ACS_BOARD_ASS_ID,
mode=Modes.ON, mode=Mode.ON,
submode=DualSideSubmodes.A_SIDE, submode=DualSideSubmode.A_SIDE,
q=q, q=q,
info="Switching ACS board assembly A side on", info="Switching ACS board assembly A side on",
) )
if op_code in AcsOpCodes.ACS_ASS_B_ON: if op_code in AcsOpCodes.ACS_ASS_B_ON:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID, object_id=ACS_BOARD_ASS_ID,
mode=Modes.ON, mode=Mode.ON,
submode=DualSideSubmodes.B_SIDE, submode=DualSideSubmode.B_SIDE,
q=q, q=q,
info="Switching ACS board assembly B side on", info="Switching ACS board assembly B side on",
) )
if op_code in AcsOpCodes.ACS_ASS_DUAL_ON: if op_code in AcsOpCodes.ACS_ASS_DUAL_ON:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID, object_id=ACS_BOARD_ASS_ID,
mode=Modes.ON, mode=Mode.ON,
submode=DualSideSubmodes.B_SIDE, submode=DualSideSubmode.B_SIDE,
q=q, q=q,
info="Switching ACS board assembly dual side on", info="Switching ACS board assembly dual side on",
) )
if op_code in AcsOpCodes.ACS_ASS_OFF: if op_code in AcsOpCodes.ACS_ASS_OFF:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=ACS_BOARD_ASS_ID, object_id=ACS_BOARD_ASS_ID,
mode=Modes.OFF, mode=Mode.OFF,
submode=0, submode=0,
q=q, q=q,
info="Switching to ACS board assembly off", info="Switching to ACS board assembly off",

View File

@ -13,8 +13,8 @@ from tmtccmd.config.tmtc import (
TmtcDefinitionWrapper, TmtcDefinitionWrapper,
OpCodeEntry, OpCodeEntry,
) )
from tmtccmd.tc.pus_20_params import pack_scalar_boolean_parameter_app_data
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.pus_200_fsfw_modes import Mode, pack_mode_command
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_3_fsfw_hk import ( from tmtccmd.tc.pus_3_fsfw_hk import (
generate_one_hk_command, generate_one_hk_command,
@ -28,7 +28,7 @@ from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
LOGGER = get_console_logger() LOGGER = get_console_logger()
class SetIds(enum.IntEnum): class SetId(enum.IntEnum):
MGM_RAW_SET = 0 MGM_RAW_SET = 0
MGM_PROC_SET = 1 MGM_PROC_SET = 1
SUS_RAW_SET = 2 SUS_RAW_SET = 2
@ -41,40 +41,54 @@ class SetIds(enum.IntEnum):
ACTUATOR_CMD_DATA = 9 ACTUATOR_CMD_DATA = 9
class Submode(enum.IntEnum):
SAFE = 2
DETUMBLE = 3
IDLE = 4
class OpCodes: class OpCodes:
OFF = ["off"]
SAFE = ["normal_safe"]
DTBL = ["normal_detumble"]
IDLE = ["normal_idle"]
REQUEST_RAW_MGM_HK = ["0", "mgm_raw_hk"] REQUEST_RAW_MGM_HK = ["0", "mgm_raw_hk"]
ENABLE_RAW_MGM_HK = ["1", "enable_mgm_raw_hk"] ENABLE_RAW_MGM_HK = ["1", "mgm_raw_enable_hk"]
DISABLE_RAW_MGM_HK = ["2", "disable_mgm_raw_hk"] DISABLE_RAW_MGM_HK = ["2", "mgm_raw_disable_hk"]
REQUEST_PROC_MGM_HK = ["3", "mgm_proc_hk"] REQUEST_PROC_MGM_HK = ["3", "mgm_proc_hk"]
ENABLE_PROC_MGM_HK = ["4", "enable_mgm_proc_hk"] ENABLE_PROC_MGM_HK = ["4", "mgm_proc_enable_hk"]
DISABLE_PROC_MGM_HK = ["5", "disable_mgm_proc_hk"] DISABLE_PROC_MGM_HK = ["5", "mgm_proc_disable_hk"]
REQUEST_RAW_SUS_HK = ["6", "sus_raw_hk"] REQUEST_RAW_SUS_HK = ["6", "sus_raw_hk"]
ENABLE_RAW_SUS_HK = ["7", "enable_sus_raw_hk"] ENABLE_RAW_SUS_HK = ["7", "sus_raw_enable_hk"]
DISABLE_RAW_SUS_HK = ["8", "disable_sus_raw_hk"] DISABLE_RAW_SUS_HK = ["8", "sus_raw_disable_hk"]
REQUEST_PROC_SUS_HK = ["9", "sus_proc_hk"] REQUEST_PROC_SUS_HK = ["9", "sus_proc_hk"]
ENABLE_PROC_SUS_HK = ["10", "enable_sus_proc_hk"] ENABLE_PROC_SUS_HK = ["10", "sus_proc_enable_hk"]
DISABLE_PROC_SUS_HK = ["11", "disable_sus_proc_hk"] DISABLE_PROC_SUS_HK = ["11", "sus_proc_disable_hk"]
REQUEST_RAW_GYR_HK = ["12", "gyr_raw_hk"] REQUEST_RAW_GYR_HK = ["12", "gyr_raw_hk"]
ENABLE_RAW_GYR_HK = ["13", "enable_gyr_raw_hk"] ENABLE_RAW_GYR_HK = ["13", "gyr_raw_enable_hk"]
DISABLE_RAW_GYR_HK = ["14", "disable_gyr_raw_hk"] DISABLE_RAW_GYR_HK = ["14", "gyr_raw_disable_hk"]
REQUEST_PROC_GYR_HK = ["15", "gyr_proc_hk"] REQUEST_PROC_GYR_HK = ["15", "gyr_proc_hk"]
ENABLE_PROC_GYR_HK = ["16", "enable_gyr_proc_hk"] ENABLE_PROC_GYR_HK = ["16", "gyr_proc_enable_hk"]
DISABLE_PROC_GYR_HK = ["17", "disable_gyr_proc_hk"] DISABLE_PROC_GYR_HK = ["17", "gyr_proc_disable_hk"]
REQUEST_PROC_GPS_HK = ["18", "gps_proc_hk"] REQUEST_PROC_GPS_HK = ["18", "gps_proc_hk"]
ENABLE_PROC_GPS_HK = ["19", "enable_gps_proc_hk"] ENABLE_PROC_GPS_HK = ["19", "gps_proc_enable_hk"]
DISABLE_PROC_GPS_HK = ["20", "disable_gps_proc_hk"] DISABLE_PROC_GPS_HK = ["20", "gps_proc_disable_hk"]
REQUEST_MEKF_HK = ["21", "mekf_hk"] REQUEST_MEKF_HK = ["21", "mekf_hk"]
ENABLE_MEKF_HK = ["22", "enable_mekf_hk"] ENABLE_MEKF_HK = ["22", "mekf_enable_hk"]
DISABLE_MEKF_HK = ["23", "disable_mekf_hk"] DISABLE_MEKF_HK = ["23", "mekf_disable_hk"]
REQUEST_CTRL_VAL_HK = ["24", "ctrl_val_hk"] REQUEST_CTRL_VAL_HK = ["24", "ctrl_val_hk"]
ENABLE_CTRL_VAL_HK = ["25", "enable_ctrl_val_hk"] ENABLE_CTRL_VAL_HK = ["25", "ctrl_val_enable_hk"]
DISABLE_CTRL_VAL_HK = ["26", "disable_ctrl_val_hk"] DISABLE_CTRL_VAL_HK = ["26", "ctrl_val_disable_hk"]
REQUEST_ACT_CMD_HK = ["27", "act_cmd_hk"] REQUEST_ACT_CMD_HK = ["27", "act_cmd_hk"]
ENABLE_ACT_CMD_HK = ["28", "enable act_cmd_hk"] ENABLE_ACT_CMD_HK = ["28", "act_cmd_enable_hk"]
DISABLE_ACT_CMD_HK = ["29", "disable act_cmd_hk"] DISABLE_ACT_CMD_HK = ["29", "act_cmd_disable_hk"]
class Info: class Info:
OFF = "Switch ACS CTRL off"
SAFE = "Switch ACS CTRL normal safe"
DTBL = "Switch ACS CTRL normal detumble"
IDLE = "Switch ACS CTRL normal idle"
REQUEST_RAW_MGM_HK = "Request Raw MGM HK once" REQUEST_RAW_MGM_HK = "Request Raw MGM HK once"
ENABLE_RAW_MGM_HK = "Enable Raw MGM HK data generation" ENABLE_RAW_MGM_HK = "Enable Raw MGM HK data generation"
DISABLE_RAW_MGM_HK = "Disable Raw MGM HK data generation" DISABLE_RAW_MGM_HK = "Disable Raw MGM HK data generation"
@ -122,6 +136,10 @@ if PERFORM_MGM_CALIBRATION:
@tmtc_definitions_provider @tmtc_definitions_provider
def acs_cmd_defs(defs: TmtcDefinitionWrapper): def acs_cmd_defs(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.OFF, info=Info.OFF)
oce.add(keys=OpCodes.SAFE, info=Info.SAFE)
oce.add(keys=OpCodes.DTBL, info=Info.DTBL)
oce.add(keys=OpCodes.IDLE, info=Info.IDLE)
oce.add(keys=OpCodes.REQUEST_RAW_MGM_HK, info=Info.REQUEST_RAW_MGM_HK) oce.add(keys=OpCodes.REQUEST_RAW_MGM_HK, info=Info.REQUEST_RAW_MGM_HK)
oce.add(keys=OpCodes.ENABLE_RAW_MGM_HK, info=Info.ENABLE_RAW_MGM_HK) oce.add(keys=OpCodes.ENABLE_RAW_MGM_HK, info=Info.ENABLE_RAW_MGM_HK)
oce.add(keys=OpCodes.DISABLE_RAW_MGM_HK, info=Info.DISABLE_RAW_MGM_HK) oce.add(keys=OpCodes.DISABLE_RAW_MGM_HK, info=Info.DISABLE_RAW_MGM_HK)
@ -161,15 +179,27 @@ def acs_cmd_defs(defs: TmtcDefinitionWrapper):
def pack_acs_ctrl_command(p: ServiceProviderParams): def pack_acs_ctrl_command(p: ServiceProviderParams):
op_code = p.op_code op_code = p.op_code
q = p.queue_helper q = p.queue_helper
if op_code in OpCodes.REQUEST_RAW_MGM_HK: if op_code in OpCodes.OFF:
q.add_log_cmd(f"{Info.OFF}")
q.add_pus_tc(pack_mode_command(ACS_CONTROLLER, Mode.OFF, 0))
elif op_code in OpCodes.SAFE:
q.add_log_cmd(f"{Info.SAFE}")
q.add_pus_tc(pack_mode_command(ACS_CONTROLLER, Mode.NORMAL, Submode.SAFE))
elif op_code in OpCodes.DTBL:
q.add_log_cmd(f"{Info.DTBL}")
q.add_pus_tc(pack_mode_command(ACS_CONTROLLER, Mode.NORMAL, Submode.DETUMBLE))
elif op_code in OpCodes.IDLE:
q.add_log_cmd(f"{Info.IDLE}")
q.add_pus_tc(pack_mode_command(ACS_CONTROLLER, Mode.NORMAL, Submode.IDLE))
elif op_code in OpCodes.REQUEST_RAW_MGM_HK:
q.add_log_cmd(Info.REQUEST_RAW_MGM_HK) q.add_log_cmd(Info.REQUEST_RAW_MGM_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.MGM_RAW_SET)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.MGM_RAW_SET))
) )
elif op_code in OpCodes.ENABLE_RAW_MGM_HK: elif op_code in OpCodes.ENABLE_RAW_MGM_HK:
q.add_log_cmd(Info.ENABLE_RAW_MGM_HK) q.add_log_cmd(Info.ENABLE_RAW_MGM_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.MGM_RAW_SET), 2.0 False, make_sid(ACS_CONTROLLER, SetId.MGM_RAW_SET), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -177,18 +207,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_RAW_MGM_HK) q.add_log_cmd(Info.DISABLE_RAW_MGM_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.MGM_RAW_SET) False, make_sid(ACS_CONTROLLER, SetId.MGM_RAW_SET)
) )
) )
elif op_code in OpCodes.REQUEST_PROC_MGM_HK: elif op_code in OpCodes.REQUEST_PROC_MGM_HK:
q.add_log_cmd(Info.REQUEST_PROC_MGM_HK) q.add_log_cmd(Info.REQUEST_PROC_MGM_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.MGM_PROC_SET)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.MGM_PROC_SET))
) )
elif op_code in OpCodes.ENABLE_PROC_MGM_HK: elif op_code in OpCodes.ENABLE_PROC_MGM_HK:
q.add_log_cmd(Info.ENABLE_PROC_MGM_HK) q.add_log_cmd(Info.ENABLE_PROC_MGM_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.MGM_PROC_SET), 2.0 False, make_sid(ACS_CONTROLLER, SetId.MGM_PROC_SET), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -196,18 +226,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_PROC_MGM_HK) q.add_log_cmd(Info.DISABLE_PROC_MGM_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.MGM_PROC_SET) False, make_sid(ACS_CONTROLLER, SetId.MGM_PROC_SET)
) )
) )
elif op_code in OpCodes.REQUEST_RAW_SUS_HK: elif op_code in OpCodes.REQUEST_RAW_SUS_HK:
q.add_log_cmd(Info.REQUEST_RAW_SUS_HK) q.add_log_cmd(Info.REQUEST_RAW_SUS_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.SUS_RAW_SET)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.SUS_RAW_SET))
) )
elif op_code in OpCodes.ENABLE_RAW_SUS_HK: elif op_code in OpCodes.ENABLE_RAW_SUS_HK:
q.add_log_cmd(Info.ENABLE_RAW_SUS_HK) q.add_log_cmd(Info.ENABLE_RAW_SUS_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.SUS_RAW_SET), 2.0 False, make_sid(ACS_CONTROLLER, SetId.SUS_RAW_SET), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -215,18 +245,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_RAW_SUS_HK) q.add_log_cmd(Info.DISABLE_RAW_SUS_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.SUS_RAW_SET) False, make_sid(ACS_CONTROLLER, SetId.SUS_RAW_SET)
) )
) )
elif op_code in OpCodes.REQUEST_PROC_SUS_HK: elif op_code in OpCodes.REQUEST_PROC_SUS_HK:
q.add_log_cmd(Info.REQUEST_PROC_SUS_HK) q.add_log_cmd(Info.REQUEST_PROC_SUS_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.SUS_PROC_SET)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.SUS_PROC_SET))
) )
elif op_code in OpCodes.ENABLE_PROC_SUS_HK: elif op_code in OpCodes.ENABLE_PROC_SUS_HK:
q.add_log_cmd(Info.ENABLE_PROC_SUS_HK) q.add_log_cmd(Info.ENABLE_PROC_SUS_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.SUS_PROC_SET), 2.0 False, make_sid(ACS_CONTROLLER, SetId.SUS_PROC_SET), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -234,18 +264,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_PROC_SUS_HK) q.add_log_cmd(Info.DISABLE_PROC_SUS_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.SUS_PROC_SET) False, make_sid(ACS_CONTROLLER, SetId.SUS_PROC_SET)
) )
) )
elif op_code in OpCodes.REQUEST_RAW_GYR_HK: elif op_code in OpCodes.REQUEST_RAW_GYR_HK:
q.add_log_cmd(Info.REQUEST_RAW_GYR_HK) q.add_log_cmd(Info.REQUEST_RAW_GYR_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.GYR_RAW_SET)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.GYR_RAW_SET))
) )
elif op_code in OpCodes.ENABLE_RAW_GYR_HK: elif op_code in OpCodes.ENABLE_RAW_GYR_HK:
q.add_log_cmd(Info.ENABLE_RAW_GYR_HK) q.add_log_cmd(Info.ENABLE_RAW_GYR_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.GYR_RAW_SET), 2.0 True, make_sid(ACS_CONTROLLER, SetId.GYR_RAW_SET), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -253,18 +283,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_RAW_GYR_HK) q.add_log_cmd(Info.DISABLE_RAW_GYR_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.GYR_RAW_SET) True, make_sid(ACS_CONTROLLER, SetId.GYR_RAW_SET)
) )
) )
elif op_code in OpCodes.REQUEST_PROC_GYR_HK: elif op_code in OpCodes.REQUEST_PROC_GYR_HK:
q.add_log_cmd(Info.REQUEST_PROC_GYR_HK) q.add_log_cmd(Info.REQUEST_PROC_GYR_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.GYR_PROC_SET)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.GYR_PROC_SET))
) )
elif op_code in OpCodes.ENABLE_PROC_GYR_HK: elif op_code in OpCodes.ENABLE_PROC_GYR_HK:
q.add_log_cmd(Info.ENABLE_PROC_GYR_HK) q.add_log_cmd(Info.ENABLE_PROC_GYR_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.GYR_PROC_SET), 2.0 False, make_sid(ACS_CONTROLLER, SetId.GYR_PROC_SET), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -272,18 +302,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_PROC_GYR_HK) q.add_log_cmd(Info.DISABLE_PROC_GYR_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.GYR_PROC_SET) False, make_sid(ACS_CONTROLLER, SetId.GYR_PROC_SET)
) )
) )
elif op_code in OpCodes.REQUEST_PROC_GPS_HK: elif op_code in OpCodes.REQUEST_PROC_GPS_HK:
q.add_log_cmd(Info.REQUEST_PROC_GPS_HK) q.add_log_cmd(Info.REQUEST_PROC_GPS_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.GPS_PROC_SET)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.GPS_PROC_SET))
) )
elif op_code in OpCodes.ENABLE_PROC_GPS_HK: elif op_code in OpCodes.ENABLE_PROC_GPS_HK:
q.add_log_cmd(Info.ENABLE_PROC_GPS_HK) q.add_log_cmd(Info.ENABLE_PROC_GPS_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.GPS_PROC_SET), 2.0 False, make_sid(ACS_CONTROLLER, SetId.GPS_PROC_SET), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -291,37 +321,33 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_PROC_GPS_HK) q.add_log_cmd(Info.DISABLE_PROC_GPS_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.GPS_PROC_SET) False, make_sid(ACS_CONTROLLER, SetId.GPS_PROC_SET)
) )
) )
elif op_code in OpCodes.REQUEST_MEKF_HK: elif op_code in OpCodes.REQUEST_MEKF_HK:
q.add_log_cmd(Info.REQUEST_MEKF_HK) q.add_log_cmd(Info.REQUEST_MEKF_HK)
q.add_pus_tc( q.add_pus_tc(generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.MEKF_DATA)))
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.MEKF_DATA))
)
elif op_code in OpCodes.ENABLE_MEKF_HK: elif op_code in OpCodes.ENABLE_MEKF_HK:
q.add_log_cmd(Info.ENABLE_MEKF_HK) q.add_log_cmd(Info.ENABLE_MEKF_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.MEKF_DATA), 2.0 True, make_sid(ACS_CONTROLLER, SetId.MEKF_DATA), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
elif op_code in OpCodes.DISABLE_MEKF_HK: elif op_code in OpCodes.DISABLE_MEKF_HK:
q.add_log_cmd(Info.DISABLE_MEKF_HK) q.add_log_cmd(Info.DISABLE_MEKF_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(True, make_sid(ACS_CONTROLLER, SetId.MEKF_DATA))
False, make_sid(ACS_CONTROLLER, SetIds.MEKF_DATA)
)
) )
elif op_code in OpCodes.REQUEST_CTRL_VAL_HK: elif op_code in OpCodes.REQUEST_CTRL_VAL_HK:
q.add_log_cmd(Info.REQUEST_CTRL_VAL_HK) q.add_log_cmd(Info.REQUEST_CTRL_VAL_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.CTRL_VAL_DATA)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.CTRL_VAL_DATA))
) )
elif op_code in OpCodes.ENABLE_CTRL_VAL_HK: elif op_code in OpCodes.ENABLE_CTRL_VAL_HK:
q.add_log_cmd(Info.ENABLE_CTRL_VAL_HK) q.add_log_cmd(Info.ENABLE_CTRL_VAL_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.CTRL_VAL_DATA), 2.0 False, make_sid(ACS_CONTROLLER, SetId.CTRL_VAL_DATA), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -329,18 +355,18 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_CTRL_VAL_HK) q.add_log_cmd(Info.DISABLE_CTRL_VAL_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.CTRL_VAL_DATA) False, make_sid(ACS_CONTROLLER, SetId.CTRL_VAL_DATA)
) )
) )
elif op_code in OpCodes.REQUEST_ACT_CMD_HK: elif op_code in OpCodes.REQUEST_ACT_CMD_HK:
q.add_log_cmd(Info.REQUEST_ACT_CMD_HK) q.add_log_cmd(Info.REQUEST_ACT_CMD_HK)
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command(make_sid(ACS_CONTROLLER, SetIds.ACTUATOR_CMD_DATA)) generate_one_hk_command(make_sid(ACS_CONTROLLER, SetId.ACTUATOR_CMD_DATA))
) )
elif op_code in OpCodes.ENABLE_ACT_CMD_HK: elif op_code in OpCodes.ENABLE_ACT_CMD_HK:
q.add_log_cmd(Info.ENABLE_ACT_CMD_HK) q.add_log_cmd(Info.ENABLE_ACT_CMD_HK)
cmd_tuple = enable_periodic_hk_command_with_interval( cmd_tuple = enable_periodic_hk_command_with_interval(
False, make_sid(ACS_CONTROLLER, SetIds.ACTUATOR_CMD_DATA), 2.0 False, make_sid(ACS_CONTROLLER, SetId.ACTUATOR_CMD_DATA), 2.0
) )
q.add_pus_tc(cmd_tuple[0]) q.add_pus_tc(cmd_tuple[0])
q.add_pus_tc(cmd_tuple[1]) q.add_pus_tc(cmd_tuple[1])
@ -348,7 +374,7 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
q.add_log_cmd(Info.DISABLE_ACT_CMD_HK) q.add_log_cmd(Info.DISABLE_ACT_CMD_HK)
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
False, make_sid(ACS_CONTROLLER, SetIds.ACTUATOR_CMD_DATA) False, make_sid(ACS_CONTROLLER, SetId.ACTUATOR_CMD_DATA)
) )
) )
else: else:
@ -358,25 +384,25 @@ def pack_acs_ctrl_command(p: ServiceProviderParams):
def handle_acs_ctrl_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes): def handle_acs_ctrl_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
match set_id: match set_id:
case SetIds.MGM_RAW_SET: case SetId.MGM_RAW_SET:
handle_raw_mgm_data(pw, hk_data) handle_raw_mgm_data(pw, hk_data)
case SetIds.MGM_PROC_SET: case SetId.MGM_PROC_SET:
handle_mgm_data_processed(pw, hk_data) handle_mgm_data_processed(pw, hk_data)
case SetIds.SUS_RAW_SET: case SetId.SUS_RAW_SET:
handle_acs_ctrl_sus_raw_data(pw, hk_data) handle_acs_ctrl_sus_raw_data(pw, hk_data)
case SetIds.SUS_PROC_SET: case SetId.SUS_PROC_SET:
handle_acs_ctrl_sus_processed_data(pw, hk_data) handle_acs_ctrl_sus_processed_data(pw, hk_data)
case SetIds.GYR_RAW_SET: case SetId.GYR_RAW_SET:
handle_gyr_data_raw(pw, hk_data) handle_gyr_data_raw(pw, hk_data)
case SetIds.GYR_PROC_SET: case SetId.GYR_PROC_SET:
handle_gyr_data_processed(pw, hk_data) handle_gyr_data_processed(pw, hk_data)
case SetIds.GPS_PROC_SET: case SetId.GPS_PROC_SET:
handle_gps_data_processed(pw, hk_data) handle_gps_data_processed(pw, hk_data)
case SetIds.MEKF_DATA: case SetId.MEKF_DATA:
handle_mekf_data(pw, hk_data) handle_mekf_data(pw, hk_data)
case SetIds.CTRL_VAL_DATA: case SetId.CTRL_VAL_DATA:
handle_ctrl_val_data(pw, hk_data) handle_ctrl_val_data(pw, hk_data)
case SetIds.ACTUATOR_CMD_DATA: case SetId.ACTUATOR_CMD_DATA:
handle_act_cmd_data(pw, hk_data) handle_act_cmd_data(pw, hk_data)
@ -403,10 +429,10 @@ def handle_acs_ctrl_sus_raw_data(pw: PrintWrapper, hk_data: bytes):
def handle_acs_ctrl_sus_processed_data(pw: PrintWrapper, hk_data: bytes): def handle_acs_ctrl_sus_processed_data(pw: PrintWrapper, hk_data: bytes):
if len(hk_data) < 3 * 4 * 12: if len(hk_data) < 3 * 4 * 12 + 3 * 8 * 3:
pw.dlog( pw.dlog(
f"SUS Raw dataset with size {len(hk_data)} does not have expected size" f"SUS Processed dataset with size {len(hk_data)} does not have expected size"
f" of {3 * 4 * 12} bytes" f" of {3 * 4 * 12 + 3 * 8 * 3} bytes"
) )
return return
current_idx = 0 current_idx = 0
@ -419,10 +445,9 @@ def handle_acs_ctrl_sus_processed_data(pw: PrintWrapper, hk_data: bytes):
pw.dlog(f"SUS {idx} CALIB: {sus_list_formatted}") pw.dlog(f"SUS {idx} CALIB: {sus_list_formatted}")
fmt_str = "!ddd" fmt_str = "!ddd"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)
sus_vec_tot = list( sus_vec_tot = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
) sus_vec_tot = [f"{val:8.3f}" for val in sus_vec_tot]
sus_vec_tot = [f"{val:8.3f}" for val in {sus_vec_tot}]
current_idx += inc_len current_idx += inc_len
pw.dlog(f"SUS Vector Total: {sus_vec_tot}") pw.dlog(f"SUS Vector Total: {sus_vec_tot}")
sus_vec_tot_deriv = struct.unpack( sus_vec_tot_deriv = struct.unpack(
@ -431,13 +456,11 @@ def handle_acs_ctrl_sus_processed_data(pw: PrintWrapper, hk_data: bytes):
sus_vec_tot_deriv = [f"{val:8.3f}" for val in {sus_vec_tot_deriv}] sus_vec_tot_deriv = [f"{val:8.3f}" for val in {sus_vec_tot_deriv}]
current_idx += inc_len current_idx += inc_len
pw.dlog(f"SUS Vector Derivative: {sus_vec_tot_deriv}") pw.dlog(f"SUS Vector Derivative: {sus_vec_tot_deriv}")
sun_ijk_model = list( sun_ijk_model = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len]) sun_ijk_model = [f"{val:8.3f}" for val in sun_ijk_model]
)
sun_ijk_model = [f"{val:8.3f}" for val in {sun_ijk_model}]
current_idx += inc_len current_idx += inc_len
pw.dlog(f"SUS ijk Model: {sun_ijk_model}") pw.dlog(f"SUS ijk Model: {sun_ijk_model}")
pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=12) pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=15)
def handle_raw_mgm_data(pw: PrintWrapper, hk_data: bytes): def handle_raw_mgm_data(pw: PrintWrapper, hk_data: bytes):
@ -478,8 +501,8 @@ def handle_raw_mgm_data(pw: PrintWrapper, hk_data: bytes):
float_str_fmt = "[{:8.3f}, {:8.3f}, {:8.3f}]" float_str_fmt = "[{:8.3f}, {:8.3f}, {:8.3f}]"
for mgm_entry in mgm_lists[0:4]: for mgm_entry in mgm_lists[0:4]:
formatted_list.append(float_str_fmt.format(*mgm_entry)) 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])) formatted_list.append(float_str_fmt.format(*mgm_lists[4]))
formatted_list.append(hk_data[current_idx])
print_str_list = [ print_str_list = [
"ACS Board MGM 0 LIS3MDL", "ACS Board MGM 0 LIS3MDL",
"ACS Board MGM 1 RM3100", "ACS Board MGM 1 RM3100",
@ -494,6 +517,7 @@ def handle_raw_mgm_data(pw: PrintWrapper, hk_data: bytes):
if PERFORM_MGM_CALIBRATION: if PERFORM_MGM_CALIBRATION:
perform_mgm_calibration(pw, mgm_0_lis3_floats_ut) perform_mgm_calibration(pw, mgm_0_lis3_floats_ut)
assert current_idx == 61 assert current_idx == 61
pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=6)
def handle_mgm_data_processed(pw: PrintWrapper, hk_data: bytes): def handle_mgm_data_processed(pw: PrintWrapper, hk_data: bytes):
@ -510,6 +534,7 @@ def handle_mgm_data_processed(pw: PrintWrapper, hk_data: bytes):
mgm_vec = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len]) mgm_vec = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
mgm_vec = [f"{val:8.3f}" for val in mgm_vec] mgm_vec = [f"{val:8.3f}" for val in mgm_vec]
pw.dlog(f"MGM {i}: {mgm_vec}") pw.dlog(f"MGM {i}: {mgm_vec}")
current_idx += inc_len
fmt_str = "!ddd" fmt_str = "!ddd"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)
mgm_vec_tot = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len]) mgm_vec_tot = struct.unpack(fmt_str, hk_data[current_idx : current_idx + inc_len])
@ -588,6 +613,7 @@ def handle_gyr_data_processed(pw: PrintWrapper, hk_data: bytes):
] ]
pw.dlog(f"GYR Vec Total: {gyr_vec_tot}") pw.dlog(f"GYR Vec Total: {gyr_vec_tot}")
current_idx += inc_len current_idx += inc_len
pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=5)
def handle_gps_data_processed(pw: PrintWrapper, hk_data: bytes): def handle_gps_data_processed(pw: PrintWrapper, hk_data: bytes):
@ -623,6 +649,7 @@ def handle_gps_data_processed(pw: PrintWrapper, hk_data: bytes):
pw.dlog(f"GPS Latitude: {lat} [rad]") pw.dlog(f"GPS Latitude: {lat} [rad]")
pw.dlog(f"GPS Longitude: {long} [rad]") pw.dlog(f"GPS Longitude: {long} [rad]")
pw.dlog(f"GPS Velocity: {velo} [m/s]") pw.dlog(f"GPS Velocity: {velo} [m/s]")
pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=3)
def handle_mekf_data(pw: PrintWrapper, hk_data: bytes): def handle_mekf_data(pw: PrintWrapper, hk_data: bytes):
@ -650,6 +677,7 @@ def handle_mekf_data(pw: PrintWrapper, hk_data: bytes):
] ]
pw.dlog(f"MEKF Quaternion: {quat}") pw.dlog(f"MEKF Quaternion: {quat}")
pw.dlog(f"MEKF Rotational Rate: {rate}") pw.dlog(f"MEKF Rotational Rate: {rate}")
pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=2)
def handle_ctrl_val_data(pw: PrintWrapper, hk_data: bytes): def handle_ctrl_val_data(pw: PrintWrapper, hk_data: bytes):
@ -685,6 +713,7 @@ def handle_ctrl_val_data(pw: PrintWrapper, hk_data: bytes):
pw.dlog(f"Control Values Target Quaternion: {tgt_quat}") pw.dlog(f"Control Values Target Quaternion: {tgt_quat}")
pw.dlog(f"Control Values Error Quaternion: {err_quat}") pw.dlog(f"Control Values Error Quaternion: {err_quat}")
pw.dlog(f"Control Values Error Angle: {err_ang} [rad]") pw.dlog(f"Control Values Error Angle: {err_ang} [rad]")
pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=3)
def handle_act_cmd_data(pw: PrintWrapper, hk_data: bytes): def handle_act_cmd_data(pw: PrintWrapper, hk_data: bytes):
@ -722,6 +751,7 @@ def handle_act_cmd_data(pw: PrintWrapper, hk_data: bytes):
pw.dlog(f"Actuator Commands RW Target Torque: {rw_tgt_torque}") pw.dlog(f"Actuator Commands RW Target Torque: {rw_tgt_torque}")
pw.dlog(f"Actuator Commands RW Target Speed: {rw_tgt_speed}") pw.dlog(f"Actuator Commands RW Target Speed: {rw_tgt_speed}")
pw.dlog(f"Actuator Commands MTQ Target Dipole: {mtq_tgt_dipole}") pw.dlog(f"Actuator Commands MTQ Target Dipole: {mtq_tgt_dipole}")
pw.printer.print_validity_buffer(hk_data[current_idx:], num_vars=3)
def perform_mgm_calibration(pw: PrintWrapper, mgm_tuple: Tuple): def perform_mgm_calibration(pw: PrintWrapper, mgm_tuple: Tuple):

View File

@ -10,12 +10,12 @@ from tmtccmd.config.tmtc import (
TmtcDefinitionWrapper, TmtcDefinitionWrapper,
OpCodeEntry, OpCodeEntry,
) )
from tmtccmd.tc.pus_200_fsfw_modes import Subservices as ModeSubservices from tmtccmd.tc.pus_200_fsfw_modes import Subservice as ModeSubservices
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
class OpCodes(str, enum.Enum): class OpCode(str, enum.Enum):
OFF = "off" OFF = "off"
SAFE = "safe" SAFE = "safe"
DETUMBLE = "detumble" DETUMBLE = "detumble"
@ -24,7 +24,7 @@ class OpCodes(str, enum.Enum):
REPORT_ALL_MODES = "all_modes" REPORT_ALL_MODES = "all_modes"
class AcsModes(enum.IntEnum): class AcsMode(enum.IntEnum):
OFF = 0 OFF = 0
SAFE = 1 << 24 SAFE = 1 << 24
DETUMBLE = 2 << 24 DETUMBLE = 2 << 24
@ -42,10 +42,10 @@ class Info(str, enum.Enum):
HANDLER_LIST: Dict[str, Tuple[int, str]] = { HANDLER_LIST: Dict[str, Tuple[int, str]] = {
OpCodes.OFF: (AcsModes.OFF, Info.OFF), OpCode.OFF: (AcsMode.OFF, Info.OFF),
OpCodes.IDLE: (AcsModes.IDLE, Info.IDLE), OpCode.IDLE: (AcsMode.IDLE, Info.IDLE),
OpCodes.SAFE: (AcsModes.SAFE, Info.SAFE), OpCode.SAFE: (AcsMode.SAFE, Info.SAFE),
OpCodes.DETUMBLE: (AcsModes.DETUMBLE, Info.DETUMBLE), OpCode.DETUMBLE: (AcsMode.DETUMBLE, Info.DETUMBLE),
} }
@ -54,7 +54,7 @@ def build_acs_subsystem_cmd(p: ServiceProviderParams):
op_code = p.op_code op_code = p.op_code
q = p.queue_helper q = p.queue_helper
info_prefix = "ACS Subsystem" info_prefix = "ACS Subsystem"
if op_code in OpCodes.REPORT_ALL_MODES: if op_code in OpCode.REPORT_ALL_MODES:
q.add_log_cmd(f"{info_prefix}: {Info.REPORT_ALL_MODES}") q.add_log_cmd(f"{info_prefix}: {Info.REPORT_ALL_MODES}")
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
@ -78,8 +78,8 @@ def build_acs_subsystem_cmd(p: ServiceProviderParams):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_acs_subsystem_cmds(defs: TmtcDefinitionWrapper): def add_acs_subsystem_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(OpCodes.OFF, Info.OFF) oce.add(OpCode.OFF, Info.OFF)
oce.add(OpCodes.SAFE, Info.SAFE) oce.add(OpCode.SAFE, Info.SAFE)
oce.add(OpCodes.IDLE, Info.IDLE) oce.add(OpCode.IDLE, Info.IDLE)
oce.add(OpCodes.REPORT_ALL_MODES, Info.REPORT_ALL_MODES) oce.add(OpCode.REPORT_ALL_MODES, Info.REPORT_ALL_MODES)
defs.add_service(CustomServiceList.ACS_SS, "ACS Subsystem", oce) defs.add_service(CustomServiceList.ACS_SS, "ACS Subsystem", oce)

View File

@ -22,19 +22,19 @@ from tmtccmd.tc.pus_3_fsfw_hk import (
generate_one_diag_command, generate_one_diag_command,
generate_one_hk_command, generate_one_hk_command,
) )
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
class OpCodes: class OpCode:
ON = ["on"] ON = ["on"]
NORMAL = ["normal"] NORMAL = ["normal"]
OFF = ["off"] OFF = ["off"]
SET_DIPOLE = ["set_dipole"] SET_DIPOLE = ["set_dipole"]
class ImtqSetIds: class ImtqSetId:
ENG_HK_SET = 1 ENG_HK_SET = 1
CAL_MTM_SET = 2 CAL_MTM_SET = 2
RAW_MTM_SET = 3 RAW_MTM_SET = 3
@ -46,7 +46,7 @@ class ImtqSetIds:
NEGATIVE_Z_TEST = 9 NEGATIVE_Z_TEST = 9
class ImtqActionIds: class ImtqActionId:
start_actuation_dipole = bytearray([0x0, 0x0, 0x0, 0x02]) start_actuation_dipole = bytearray([0x0, 0x0, 0x0, 0x02])
get_commanded_dipole = bytearray([0x0, 0x0, 0x0, 0x03]) get_commanded_dipole = bytearray([0x0, 0x0, 0x0, 0x03])
perform_positive_x_test = bytearray([0x0, 0x0, 0x0, 0x07]) perform_positive_x_test = bytearray([0x0, 0x0, 0x0, 0x07])
@ -63,16 +63,16 @@ class ImtqActionIds:
@tmtc_definitions_provider @tmtc_definitions_provider
def add_imtq_cmds(defs: TmtcDefinitionWrapper): def add_imtq_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(OpCodes.OFF, "Mode Off") oce.add(OpCode.OFF, "Mode Off")
oce.add(OpCodes.ON, "Mode On") oce.add(OpCode.ON, "Mode On")
oce.add(OpCodes.NORMAL, "Mode Normal") oce.add(OpCode.NORMAL, "Mode Normal")
oce.add("3", "IMTQ perform pos X self test") oce.add("3", "IMTQ perform pos X self test")
oce.add("4", "IMTQ perform neg X self test") oce.add("4", "IMTQ perform neg X self test")
oce.add("5", "IMTQ perform pos Y self test") oce.add("5", "IMTQ perform pos Y self test")
oce.add("6", "IMTQ perform neg Y self test") oce.add("6", "IMTQ perform neg Y self test")
oce.add("7", "IMTQ perform pos Z self test") oce.add("7", "IMTQ perform pos Z self test")
oce.add("8", "IMTQ perform neg Z self test") oce.add("8", "IMTQ perform neg Z self test")
oce.add(OpCodes.SET_DIPOLE, "IMTQ command dipole") oce.add(OpCode.SET_DIPOLE, "IMTQ command dipole")
oce.add("10", "IMTQ get commanded dipole") oce.add("10", "IMTQ get commanded dipole")
oce.add("11", "IMTQ get engineering hk set") oce.add("11", "IMTQ get engineering hk set")
oce.add("12", "IMTQ get calibrated MTM measurement one shot") oce.add("12", "IMTQ get calibrated MTM measurement one shot")
@ -85,92 +85,92 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
f"Testing ISIS IMTQ handler with object id: {object_id.as_hex_string}" f"Testing ISIS IMTQ handler with object id: {object_id.as_hex_string}"
) )
if op_code in OpCodes.OFF: if op_code in OpCode.OFF:
q.add_log_cmd("IMTQ: Set mode off") q.add_log_cmd("IMTQ: Set mode off")
command = pack_mode_data(object_id.as_bytes, Modes.OFF, 0) command = pack_mode_data(object_id.as_bytes, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCodes.ON: if op_code in OpCode.ON:
q.add_log_cmd("IMTQ: Set mode on") q.add_log_cmd("IMTQ: Set mode on")
command = pack_mode_data(object_id.as_bytes, Modes.ON, 0) command = pack_mode_data(object_id.as_bytes, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCodes.NORMAL: if op_code in OpCode.NORMAL:
q.add_log_cmd("IMTQ: Mode Normal") q.add_log_cmd("IMTQ: Mode Normal")
command = pack_mode_data(object_id.as_bytes, Modes.NORMAL, 0) command = pack_mode_data(object_id.as_bytes, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code == "3": if op_code == "3":
q.add_log_cmd("IMTQ: Perform positive x self test") q.add_log_cmd("IMTQ: Perform positive x self test")
command = object_id.as_bytes + ImtqActionIds.perform_positive_x_test command = object_id.as_bytes + ImtqActionId.perform_positive_x_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Initiate reading of positive x self test results") q.add_log_cmd("IMTQ: Initiate reading of positive x self test results")
command = object_id.as_bytes + ImtqActionIds.read_self_test_results command = object_id.as_bytes + ImtqActionId.read_self_test_results
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Request dataset with positive x self test results") q.add_log_cmd("IMTQ: Request dataset with positive x self test results")
sid = make_sid(object_id.as_bytes, ImtqSetIds.POSITIVE_X_TEST) sid = make_sid(object_id.as_bytes, ImtqSetId.POSITIVE_X_TEST)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "4": if op_code == "4":
q.add_log_cmd("IMTQ: Perform negative x self test") q.add_log_cmd("IMTQ: Perform negative x self test")
command = object_id.as_bytes + ImtqActionIds.perform_negative_x_test command = object_id.as_bytes + ImtqActionId.perform_negative_x_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) 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") q.add_log_cmd("IMTQ: Initiate reading of negative x self test results")
command = object_id.as_bytes + ImtqActionIds.read_self_test_results command = object_id.as_bytes + ImtqActionId.read_self_test_results
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) 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") q.add_log_cmd("IMTQ: Request dataset with negative x self test results")
sid = make_sid(object_id.as_bytes, ImtqSetIds.NEGATIVE_X_TEST) sid = make_sid(object_id.as_bytes, ImtqSetId.NEGATIVE_X_TEST)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "5": if op_code == "5":
q.add_log_cmd("IMTQ: Perform positive y self test") q.add_log_cmd("IMTQ: Perform positive y self test")
command = object_id.as_bytes + ImtqActionIds.perform_positive_y_test command = object_id.as_bytes + ImtqActionId.perform_positive_y_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) 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") q.add_log_cmd("IMTQ: Initiate reading of positive y self test results")
command = object_id.as_bytes + ImtqActionIds.read_self_test_results command = object_id.as_bytes + ImtqActionId.read_self_test_results
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Request dataset with positive y self test results") q.add_log_cmd("IMTQ: Request dataset with positive y self test results")
sid = make_sid(object_id.as_bytes, ImtqSetIds.POSITIVE_Y_TEST) sid = make_sid(object_id.as_bytes, ImtqSetId.POSITIVE_Y_TEST)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "6": if op_code == "6":
q.add_log_cmd("IMTQ: Perform negative y self test") q.add_log_cmd("IMTQ: Perform negative y self test")
command = object_id.as_bytes + ImtqActionIds.perform_negative_y_test command = object_id.as_bytes + ImtqActionId.perform_negative_y_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Initiate reading of negative y self test results") q.add_log_cmd("IMTQ: Initiate reading of negative y self test results")
command = object_id.as_bytes + ImtqActionIds.read_self_test_results command = object_id.as_bytes + ImtqActionId.read_self_test_results
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Request dataset with negative y self test results") q.add_log_cmd("IMTQ: Request dataset with negative y self test results")
sid = make_sid(object_id.as_bytes, ImtqSetIds.NEGATIVE_Y_TEST) sid = make_sid(object_id.as_bytes, ImtqSetId.NEGATIVE_Y_TEST)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "7": if op_code == "7":
q.add_log_cmd("IMTQ: Perform positive z self test") q.add_log_cmd("IMTQ: Perform positive z self test")
command = object_id.as_bytes + ImtqActionIds.perform_positive_z_test command = object_id.as_bytes + ImtqActionId.perform_positive_z_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Initiate reading of positive z self test results") q.add_log_cmd("IMTQ: Initiate reading of positive z self test results")
command = object_id.as_bytes + ImtqActionIds.read_self_test_results command = object_id.as_bytes + ImtqActionId.read_self_test_results
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_log_cmd("IMTQ: Request dataset with positive z self test results") q.add_log_cmd("IMTQ: Request dataset with positive z self test results")
sid = make_sid(object_id.as_bytes, ImtqSetIds.POSITIVE_Y_TEST) sid = make_sid(object_id.as_bytes, ImtqSetId.POSITIVE_Y_TEST)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
if op_code == "8": if op_code == "8":
q.add_log_cmd("IMTQ: Perform negative z self test") q.add_log_cmd("IMTQ: Perform negative z self test")
command = object_id.as_bytes + ImtqActionIds.perform_negative_z_test command = object_id.as_bytes + ImtqActionId.perform_negative_z_test
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) 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") q.add_log_cmd("IMTQ: Initiate reading of negative z self test results")
command = object_id.as_bytes + ImtqActionIds.read_self_test_results command = object_id.as_bytes + ImtqActionId.read_self_test_results
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) 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") q.add_log_cmd("IMTQ: Request dataset with negative z self test results")
sid = make_sid(object_id.as_bytes, ImtqSetIds.NEGATIVE_Z_TEST) sid = make_sid(object_id.as_bytes, ImtqSetId.NEGATIVE_Z_TEST)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
if op_code in OpCodes.SET_DIPOLE: if op_code in OpCode.SET_DIPOLE:
x_dipole = int(input("Specify X dipole [range [0, 2000] * 10^-4 * Am^2]: ")) x_dipole = int(input("Specify X dipole [range [0, 2000] * 10^-4 * Am^2]: "))
y_dipole = int(input("Specify Y dipole [range [0, 2000] * 10^-4 * Am^2]: ")) y_dipole = int(input("Specify Y dipole [range [0, 2000] * 10^-4 * Am^2]: "))
z_dipole = int(input("Specify Z dipole [range [0, 2000] * 10^-4 * Am^2]: ")) z_dipole = int(input("Specify Z dipole [range [0, 2000] * 10^-4 * Am^2]: "))
@ -192,14 +192,14 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
if op_code == "10": if op_code == "10":
q.add_log_cmd("IMTQ: Get commanded dipole") q.add_log_cmd("IMTQ: Get commanded dipole")
command = object_id.as_bytes + ImtqActionIds.get_commanded_dipole command = object_id.as_bytes + ImtqActionId.get_commanded_dipole
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "11": if op_code == "11":
q.add_log_cmd("IMTQ: Get engineering hk set") q.add_log_cmd("IMTQ: Get engineering hk set")
q.add_pus_tc( q.add_pus_tc(
generate_one_diag_command( generate_one_diag_command(
sid=make_sid(object_id=object_id.as_bytes, set_id=ImtqSetIds.ENG_HK_SET) sid=make_sid(object_id=object_id.as_bytes, set_id=ImtqSetId.ENG_HK_SET)
) )
) )
@ -207,9 +207,7 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
q.add_log_cmd("IMTQ: Get calibrated MTM hk set") q.add_log_cmd("IMTQ: Get calibrated MTM hk set")
q.add_pus_tc( q.add_pus_tc(
generate_one_diag_command( generate_one_diag_command(
sid=make_sid( sid=make_sid(object_id=object_id.as_bytes, set_id=ImtqSetId.CAL_MTM_SET)
object_id=object_id.as_bytes, set_id=ImtqSetIds.CAL_MTM_SET
)
) )
) )
@ -217,9 +215,7 @@ def pack_imtq_test_into(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_cod
q.add_log_cmd("IMTQ: Get raw MTM hk set") q.add_log_cmd("IMTQ: Get raw MTM hk set")
q.add_pus_tc( q.add_pus_tc(
generate_one_diag_command( generate_one_diag_command(
sid=make_sid( sid=make_sid(object_id=object_id.as_bytes, set_id=ImtqSetId.RAW_MTM_SET)
object_id=object_id.as_bytes, set_id=ImtqSetIds.RAW_MTM_SET
)
) )
) )
@ -236,7 +232,7 @@ def pack_dipole_command(
When set to 0, the dipole will be generated until a new dipole actuation When set to 0, the dipole will be generated until a new dipole actuation
command is sent. command is sent.
""" """
action_id = ImtqActionIds.start_actuation_dipole action_id = ImtqActionId.start_actuation_dipole
command = object_id + action_id command = object_id + action_id
x_dipole = int(round(x_dipole)) x_dipole = int(round(x_dipole))
y_dipole = int(round(y_dipole)) y_dipole = int(round(y_dipole))

View File

@ -20,13 +20,13 @@ from tmtccmd.tc.pus_3_fsfw_hk import (
disable_periodic_hk_command, disable_periodic_hk_command,
) )
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes, Subservices from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode, Subservice
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
class OpCodesDevs: class OpCodesDev:
SPEED = ["0", "speed"] SPEED = ["0", "speed"]
ON = ["1", "on"] ON = ["1", "on"]
NML = ["2", "nml"] NML = ["2", "nml"]
@ -37,7 +37,7 @@ class OpCodesDevs:
DISABLE_STATUS_HK = ["7", "disable_status_hk"] DISABLE_STATUS_HK = ["7", "disable_status_hk"]
class InfoDevs: class InfoDev:
SPEED = "Set speed" SPEED = "Set speed"
ON = "Set On" ON = "Set On"
NML = "Set Normal" NML = "Set Normal"
@ -64,14 +64,14 @@ class InfoAss:
ALL_SPEED_OFF = "Speed down to 0" ALL_SPEED_OFF = "Speed down to 0"
class RwSetIds: class RwSetId:
STATUS_SET_ID = 4 STATUS_SET_ID = 4
TEMPERATURE_SET_ID = 8 TEMPERATURE_SET_ID = 8
LAST_RESET = 2 LAST_RESET = 2
TM_SET = 9 TM_SET = 9
class RwCommandIds: class RwCommandId:
RESET_MCU = bytearray([0x0, 0x0, 0x0, 0x01]) RESET_MCU = bytearray([0x0, 0x0, 0x0, 0x01])
# Reads status information from reaction wheel into dataset with id 4 # Reads status information from reaction wheel into dataset with id 4
GET_RW_STATUS = bytearray([0x0, 0x0, 0x0, 0x04]) GET_RW_STATUS = bytearray([0x0, 0x0, 0x0, 0x04])
@ -94,14 +94,14 @@ class RampTime:
@tmtc_definitions_provider @tmtc_definitions_provider
def add_rw_cmds(defs: TmtcDefinitionWrapper): def add_rw_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(info=InfoDevs.SPEED, keys=OpCodesDevs.SPEED) oce.add(info=InfoDev.SPEED, keys=OpCodesDev.SPEED)
oce.add(info=InfoDevs.ON, keys=OpCodesDevs.ON) oce.add(info=InfoDev.ON, keys=OpCodesDev.ON)
oce.add(info=InfoDevs.OFF, keys=OpCodesDevs.OFF) oce.add(info=InfoDev.OFF, keys=OpCodesDev.OFF)
oce.add(info=InfoDevs.NML, keys=OpCodesDevs.NML) oce.add(info=InfoDev.NML, keys=OpCodesDev.NML)
oce.add(info=InfoDevs.GET_STATUS, keys=OpCodesDevs.GET_STATUS) oce.add(info=InfoDev.GET_STATUS, keys=OpCodesDev.GET_STATUS)
oce.add(info=InfoDevs.GET_TM, keys=OpCodesDevs.GET_TM) oce.add(info=InfoDev.GET_TM, keys=OpCodesDev.GET_TM)
oce.add(info=InfoDevs.ENABLE_STATUS_HK, keys=OpCodesDevs.ENABLE_STATUS_HK) oce.add(info=InfoDev.ENABLE_STATUS_HK, keys=OpCodesDev.ENABLE_STATUS_HK)
oce.add(info=InfoDevs.DISABLE_STATUS_HK, keys=OpCodesDevs.DISABLE_STATUS_HK) oce.add(info=InfoDev.DISABLE_STATUS_HK, keys=OpCodesDev.DISABLE_STATUS_HK)
defs.add_service( defs.add_service(
name=CustomServiceList.REACTION_WHEEL_1.value, name=CustomServiceList.REACTION_WHEEL_1.value,
info="Reaction Wheel 1", info="Reaction Wheel 1",
@ -138,80 +138,80 @@ def add_rw_cmds(defs: TmtcDefinitionWrapper):
def pack_single_rw_test_into( def pack_single_rw_test_into(
object_id: bytes, rw_idx: int, q: DefaultPusQueueHelper, op_code: str object_id: bytes, rw_idx: int, q: DefaultPusQueueHelper, op_code: str
): ):
if op_code in OpCodesDevs.SPEED: if op_code in OpCodesDev.SPEED:
speed, ramp_time = prompt_speed_ramp_time() speed, ramp_time = prompt_speed_ramp_time()
q.add_log_cmd( q.add_log_cmd(
f"RW {rw_idx}: {InfoDevs.SPEED} with target " f"RW {rw_idx}: {InfoDev.SPEED} with target "
f"speed {speed / 10.0} RPM and {ramp_time} ms ramp time" f"speed {speed / 10.0} RPM and {ramp_time} ms ramp time"
) )
q.add_pus_tc(pack_set_speed_command(object_id, speed, ramp_time)) q.add_pus_tc(pack_set_speed_command(object_id, speed, ramp_time))
if op_code in OpCodesDevs.ON: if op_code in OpCodesDev.ON:
q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.ON}") q.add_log_cmd(f"RW {rw_idx}: {InfoDev.ON}")
mode_data = pack_mode_data(object_id, Modes.ON, 0) mode_data = pack_mode_data(object_id, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if op_code in OpCodesDevs.NML: if op_code in OpCodesDev.NML:
q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.NML}") q.add_log_cmd(f"RW {rw_idx}: {InfoDev.NML}")
mode_data = pack_mode_data(object_id, Modes.NORMAL, 0) mode_data = pack_mode_data(object_id, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if op_code in OpCodesDevs.OFF: if op_code in OpCodesDev.OFF:
q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.OFF}") q.add_log_cmd(f"RW {rw_idx}: {InfoDev.OFF}")
mode_data = pack_mode_data(object_id, Modes.OFF, 0) mode_data = pack_mode_data(object_id, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=mode_data))
if op_code in OpCodesDevs.GET_TM: if op_code in OpCodesDev.GET_TM:
q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.GET_TM}") q.add_log_cmd(f"RW {rw_idx}: {InfoDev.GET_TM}")
q.add_pus_tc( q.add_pus_tc(
generate_one_hk_command( generate_one_hk_command(
sid=make_sid(object_id=object_id, set_id=RwSetIds.TM_SET) sid=make_sid(object_id=object_id, set_id=RwSetId.TM_SET)
) )
) )
if op_code in OpCodesDevs.GET_STATUS: if op_code in OpCodesDev.GET_STATUS:
q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.GET_STATUS}") q.add_log_cmd(f"RW {rw_idx}: {InfoDev.GET_STATUS}")
q.add_pus_tc( q.add_pus_tc(
generate_one_diag_command( generate_one_diag_command(
sid=make_sid(object_id=object_id, set_id=RwSetIds.STATUS_SET_ID) sid=make_sid(object_id=object_id, set_id=RwSetId.STATUS_SET_ID)
) )
) )
if op_code in OpCodesDevs.ENABLE_STATUS_HK: if op_code in OpCodesDev.ENABLE_STATUS_HK:
q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.ENABLE_STATUS_HK}") q.add_log_cmd(f"RW {rw_idx}: {InfoDev.ENABLE_STATUS_HK}")
interval = float(input("Please enter HK interval in floating point seconds: ")) interval = float(input("Please enter HK interval in floating point seconds: "))
cmds = enable_periodic_hk_command_with_interval( cmds = enable_periodic_hk_command_with_interval(
True, make_sid(object_id, RwSetIds.STATUS_SET_ID), interval True, make_sid(object_id, RwSetId.STATUS_SET_ID), interval
) )
for cmd in cmds: for cmd in cmds:
q.add_pus_tc(cmd) q.add_pus_tc(cmd)
if op_code in OpCodesDevs.DISABLE_STATUS_HK: if op_code in OpCodesDev.DISABLE_STATUS_HK:
q.add_log_cmd(f"RW {rw_idx}: {InfoDevs.DISABLE_STATUS_HK}") q.add_log_cmd(f"RW {rw_idx}: {InfoDev.DISABLE_STATUS_HK}")
q.add_pus_tc( q.add_pus_tc(
disable_periodic_hk_command( disable_periodic_hk_command(
True, make_sid(object_id, RwSetIds.STATUS_SET_ID) True, make_sid(object_id, RwSetId.STATUS_SET_ID)
) )
) )
def pack_rw_ass_cmds(q: DefaultPusQueueHelper, 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: if op_code in OpCodesAss.OFF:
data = pack_mode_data(object_id=object_id, mode=Modes.OFF, submode=0) data = pack_mode_data(object_id=object_id, mode=Mode.OFF, submode=0)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=data service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=data
) )
) )
if op_code in OpCodesAss.ON: if op_code in OpCodesAss.ON:
data = pack_mode_data(object_id=object_id, mode=Modes.ON, submode=0) data = pack_mode_data(object_id=object_id, mode=Mode.ON, submode=0)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=data service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=data
) )
) )
if op_code in OpCodesAss.NML: if op_code in OpCodesAss.NML:
data = pack_mode_data(object_id=object_id, mode=Modes.NORMAL, submode=0) data = pack_mode_data(object_id=object_id, mode=Mode.NORMAL, submode=0)
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=data service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=data
) )
) )
if op_code in OpCodesAss.ALL_SPEED_UP: if op_code in OpCodesAss.ALL_SPEED_UP:
@ -264,7 +264,7 @@ def pack_set_speed_command(
ramp_time_ms > 0 and (ramp_time_ms > 20000 or ramp_time_ms < 10) ramp_time_ms > 0 and (ramp_time_ms > 20000 or ramp_time_ms < 10)
): ):
raise ValueError("Invalid Ramp Speed time. Allowed range is [10-20000] ms") raise ValueError("Invalid Ramp Speed time. Allowed range is [10-20000] ms")
command_id = RwCommandIds.SET_SPEED command_id = RwCommandId.SET_SPEED
command = bytearray() command = bytearray()
command += object_id + command_id command += object_id + command_id
command = command + struct.pack("!i", speed) command = command + struct.pack("!i", speed)
@ -279,7 +279,7 @@ def handle_rw_hk_data(
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
current_idx = 0 current_idx = 0
if set_id == RwSetIds.STATUS_SET_ID: if set_id == RwSetId.STATUS_SET_ID:
pw.dlog( pw.dlog(
f"Received Status HK (ID {set_id}) from Reaction Wheel {object_id.name}" f"Received Status HK (ID {set_id}) from Reaction Wheel {object_id.name}"
) )
@ -303,7 +303,7 @@ def handle_rw_hk_data(
f"1: High Current Mode (0.6 A)" f"1: High Current Mode (0.6 A)"
) )
printer.print_validity_buffer(hk_data[current_idx:], 5) printer.print_validity_buffer(hk_data[current_idx:], 5)
if set_id == RwSetIds.LAST_RESET: if set_id == RwSetId.LAST_RESET:
pw.dlog( pw.dlog(
f"Received Last Reset HK (ID {set_id}) from Reaction Wheel {object_id.name}" f"Received Last Reset HK (ID {set_id}) from Reaction Wheel {object_id.name}"
) )
@ -317,7 +317,7 @@ def handle_rw_hk_data(
f"Last Non-Cleared (Cached) Reset Status {last_not_cleared_reset_status} | " f"Last Non-Cleared (Cached) Reset Status {last_not_cleared_reset_status} | "
f"Current Reset Status {current_reset_status}" f"Current Reset Status {current_reset_status}"
) )
if set_id == RwSetIds.TM_SET: if set_id == RwSetId.TM_SET:
pw.dlog(f"Received TM HK (ID {set_id}) from Reaction Wheel {object_id.name}") pw.dlog(f"Received TM HK (ID {set_id}) from Reaction Wheel {object_id.name}")
fmt_str = "!BiffBBiiIIIIIIIIIIIIIIII" fmt_str = "!BiffBBiiIIIIIIIIIIIIIIII"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)

View File

@ -5,10 +5,11 @@
@author J. Meier @author J. Meier
@date 14.08.2021 @date 14.08.2021
""" """
import enum
import struct import struct
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
@ -19,7 +20,7 @@ from eive_tmtc.utility.input_helper import InputHelper
LOGGER = get_console_logger() LOGGER = get_console_logger()
class StarTrackerActionIds: class StarTrackerActionId(enum.IntEnum):
PING = 0 PING = 0
BOOT = 1 BOOT = 1
REQ_VERSION = 2 REQ_VERSION = 2
@ -89,8 +90,18 @@ class OpCodes:
NORMAL = ["2", "nml"] NORMAL = ["2", "nml"]
class SetIds: class SetId(enum.IntEnum):
VERSION = 2
INTERFACE = 3
POWER = 11
TEMPERATURE = 25 TEMPERATURE = 25
SOLUTION = 24
HISTOGRAM = 28
CHECKSUM = 50
CAMERA = 67
LIMITS = 68
CENTROIDING = 72
LISA = 73
class FileDefs: class FileDefs:
@ -163,77 +174,77 @@ def pack_star_tracker_commands(
obyt = object_id.as_bytes obyt = object_id.as_bytes
if op_code == "0": if op_code == "0":
q.add_log_cmd("Star tracker: Mode On, Submode Bootloader") q.add_log_cmd("Star tracker: Mode On, Submode Bootloader")
data = pack_mode_data(obyt, Modes.ON, Submode.BOOTLOADER) data = pack_mode_data(obyt, Mode.ON, Submode.BOOTLOADER)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "1": if op_code == "1":
q.add_log_cmd("Star tracker: Mode On, Submode Firmware") q.add_log_cmd("Star tracker: Mode On, Submode Firmware")
data = pack_mode_data(obyt, Modes.ON, Submode.FIRMWARE) data = pack_mode_data(obyt, Mode.ON, Submode.FIRMWARE)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "2": if op_code == "2":
q.add_log_cmd("Star tracker: Mode Normal") q.add_log_cmd("Star tracker: Mode Normal")
data = pack_mode_data(obyt, Modes.NORMAL, 0) data = pack_mode_data(obyt, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "3": if op_code == "3":
q.add_log_cmd("Star tracker: Mode Off") q.add_log_cmd("Star tracker: Mode Off")
data = pack_mode_data(obyt, Modes.OFF, 0) data = pack_mode_data(obyt, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "4": if op_code == "4":
q.add_log_cmd("Star tracker: Mode Raw") q.add_log_cmd("Star tracker: Mode Raw")
data = pack_mode_data(obyt, Modes.RAW, 0) data = pack_mode_data(obyt, Mode.RAW, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "5": if op_code == "5":
q.add_log_cmd("Star tracker: Ping") q.add_log_cmd("Star tracker: Ping")
data = obyt + struct.pack("!I", StarTrackerActionIds.PING) data = obyt + struct.pack("!I", StarTrackerActionId.PING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "6": if op_code == "6":
q.add_log_cmd("Star tracker: Switch to bootloader program") q.add_log_cmd("Star tracker: Switch to bootloader program")
data = obyt + struct.pack( data = obyt + struct.pack(
"!I", StarTrackerActionIds.SWITCH_TO_BOOTLOADER_PROGRAM "!I", StarTrackerActionId.SWITCH_TO_BOOTLOADER_PROGRAM
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "7": if op_code == "7":
q.add_log_cmd("Star tracker: Temperature request") q.add_log_cmd("Star tracker: Temperature request")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_TEMPERATURE) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_TEMPERATURE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "8": if op_code == "8":
q.add_log_cmd("Star tracker: Request version") q.add_log_cmd("Star tracker: Request version")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_VERSION) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_VERSION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "9": if op_code == "9":
q.add_log_cmd("Star tracker: Request interface") q.add_log_cmd("Star tracker: Request interface")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_INTERFACE) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_INTERFACE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "10": if op_code == "10":
q.add_log_cmd("Star tracker: Request power") q.add_log_cmd("Star tracker: Request power")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_POWER) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_POWER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "11": if op_code == "11":
q.add_log_cmd("Star tracker: Set subscription parameters") q.add_log_cmd("Star tracker: Set subscription parameters")
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.SUBSCRIPTION) + struct.pack("!I", StarTrackerActionId.SUBSCRIPTION)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "12": if op_code == "12":
q.add_log_cmd("Star tracker: Boot") q.add_log_cmd("Star tracker: Boot")
data = obyt + struct.pack("!I", StarTrackerActionIds.BOOT) data = obyt + struct.pack("!I", StarTrackerActionId.BOOT)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "13": if op_code == "13":
q.add_log_cmd("Star tracker: Request time") q.add_log_cmd("Star tracker: Request time")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_TIME) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_TIME)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "14": if op_code == "14":
q.add_log_cmd("Star tracker: Request solution") q.add_log_cmd("Star tracker: Request solution")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_SOLUTION) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_SOLUTION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "15": if op_code == "15":
q.add_log_cmd("Star tracker: Upload image") q.add_log_cmd("Star tracker: Upload image")
image = get_upload_image() image = get_upload_image()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.UPLOAD_IMAGE) + struct.pack("!I", StarTrackerActionId.UPLOAD_IMAGE)
+ bytearray(image, "utf-8") + bytearray(image, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -244,7 +255,7 @@ def pack_star_tracker_commands(
path = FileDefs.download_path path = FileDefs.download_path
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_IMAGE) + struct.pack("!I", StarTrackerActionId.DOWNLOAD_IMAGE)
+ bytearray(path, "utf-8") + bytearray(path, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -253,7 +264,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.LIMITS) + struct.pack("!I", StarTrackerActionId.LIMITS)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -262,7 +273,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.TRACKING) + struct.pack("!I", StarTrackerActionId.TRACKING)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -271,7 +282,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.MOUNTING) + struct.pack("!I", StarTrackerActionId.MOUNTING)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -280,7 +291,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.CAMERA) + struct.pack("!I", StarTrackerActionId.CAMERA)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -289,7 +300,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.CENTROIDING) + struct.pack("!I", StarTrackerActionId.CENTROIDING)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -298,7 +309,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.LISA) + struct.pack("!I", StarTrackerActionId.LISA)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -307,7 +318,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.MATCHING) + struct.pack("!I", StarTrackerActionId.MATCHING)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -316,7 +327,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.VALIDATION) + struct.pack("!I", StarTrackerActionId.VALIDATION)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -325,7 +336,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.ALGO) + struct.pack("!I", StarTrackerActionId.ALGO)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -334,37 +345,37 @@ def pack_star_tracker_commands(
actionid = int(input("Specify parameter ID (take image - 4): ")) actionid = int(input("Specify parameter ID (take image - 4): "))
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.TAKE_IMAGE) + struct.pack("!I", StarTrackerActionId.TAKE_IMAGE)
+ struct.pack("!B", actionid) + struct.pack("!B", actionid)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "28": if op_code == "28":
q.add_log_cmd("Star tracker: Stop str helper") q.add_log_cmd("Star tracker: Stop str helper")
data = obyt + struct.pack("!I", StarTrackerActionIds.STOP_STR_HELPER) data = obyt + struct.pack("!I", StarTrackerActionId.STOP_STR_HELPER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "30": if op_code == "30":
q.add_log_cmd("Star tracker: Set name of download image") q.add_log_cmd("Star tracker: Set name of download image")
filename = input("Specify download image name: ") filename = input("Specify download image name: ")
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.CHANGE_DOWNLOAD_IMAGE) + struct.pack("!I", StarTrackerActionId.CHANGE_DOWNLOAD_IMAGE)
+ bytearray(filename, "utf-8") + bytearray(filename, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "31": if op_code == "31":
q.add_log_cmd("Star tracker: Request histogram") q.add_log_cmd("Star tracker: Request histogram")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_HISTOGRAM) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_HISTOGRAM)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "32": if op_code == "32":
q.add_log_cmd("Star tracker: Request contrast") q.add_log_cmd("Star tracker: Request contrast")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_CONTRAST) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_CONTRAST)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "33": if op_code == "33":
q.add_log_cmd("Star tracker: Set json filename") q.add_log_cmd("Star tracker: Set json filename")
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.SET_JSON_FILE_NAME) + struct.pack("!I", StarTrackerActionId.SET_JSON_FILE_NAME)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -377,7 +388,7 @@ def pack_star_tracker_commands(
filename = input("Specify filename: ") filename = input("Specify filename: ")
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.SET_FLASH_READ_FILENAME) + struct.pack("!I", StarTrackerActionId.SET_FLASH_READ_FILENAME)
+ bytearray(filename, "utf-8") + bytearray(filename, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -390,7 +401,7 @@ def pack_star_tracker_commands(
unix_time = 1640783543 unix_time = 1640783543
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.SET_TIME) + struct.pack("!I", StarTrackerActionId.SET_TIME)
+ struct.pack("!Q", unix_time) + struct.pack("!Q", unix_time)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -399,7 +410,7 @@ def pack_star_tracker_commands(
id = 0 id = 0
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_CENTROID) + struct.pack("!I", StarTrackerActionId.DOWNLOAD_CENTROID)
+ struct.pack("!B", id) + struct.pack("!B", id)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -408,7 +419,7 @@ def pack_star_tracker_commands(
id = 0 id = 0
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_MATCHED_STAR) + struct.pack("!I", StarTrackerActionId.DOWNLOAD_MATCHED_STAR)
+ struct.pack("!B", id) + struct.pack("!B", id)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -417,7 +428,7 @@ def pack_star_tracker_commands(
id = 0 id = 0
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_DBIMAGE) + struct.pack("!I", StarTrackerActionId.DOWNLOAD_DBIMAGE)
+ struct.pack("!B", id) + struct.pack("!B", id)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -427,7 +438,7 @@ def pack_star_tracker_commands(
type = 1 # 0 - normal, 1 - fast type = 1 # 0 - normal, 1 - fast
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_BLOBPIXEL) + struct.pack("!I", StarTrackerActionId.DOWNLOAD_BLOBPIXEL)
+ struct.pack("!B", id) + struct.pack("!B", id)
+ struct.pack("!B", type) + struct.pack("!B", type)
) )
@ -438,7 +449,7 @@ def pack_star_tracker_commands(
length = int(input("Size to download: ")) length = int(input("Size to download: "))
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.DOWNLOAD_FPGA_IMAGE) + struct.pack("!I", StarTrackerActionId.DOWNLOAD_FPGA_IMAGE)
+ struct.pack("!I", position) + struct.pack("!I", position)
+ struct.pack("!I", length) + struct.pack("!I", length)
+ bytearray(FileDefs.downloadFpgaImagePath, "utf-8") + bytearray(FileDefs.downloadFpgaImagePath, "utf-8")
@ -448,7 +459,7 @@ def pack_star_tracker_commands(
q.add_log_cmd("Star tracker: Change donwload FPGA image file name") q.add_log_cmd("Star tracker: Change donwload FPGA image file name")
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.CHANGE_FPGA_DOWNLOAD_FILE) + struct.pack("!I", StarTrackerActionId.CHANGE_FPGA_DOWNLOAD_FILE)
+ bytearray(FileDefs.downloadFpgaImageName, "utf-8") + bytearray(FileDefs.downloadFpgaImageName, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -456,7 +467,7 @@ def pack_star_tracker_commands(
q.add_log_cmd("Star tracker: Upload FPGA image") q.add_log_cmd("Star tracker: Upload FPGA image")
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.UPLOAD_FPGA_IMAGE) + struct.pack("!I", StarTrackerActionId.UPLOAD_FPGA_IMAGE)
+ bytearray(FileDefs.uploadFpgaImageName, "utf-8") + bytearray(FileDefs.uploadFpgaImageName, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -465,28 +476,28 @@ def pack_star_tracker_commands(
id = 3 id = 3
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.FPGA_ACTION) + struct.pack("!I", StarTrackerActionId.FPGA_ACTION)
+ struct.pack("!B", id) + struct.pack("!B", id)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "48": if op_code == "48":
q.add_log_cmd("Star tracker: Unlock") q.add_log_cmd("Star tracker: Unlock")
data = obyt + struct.pack("!I", StarTrackerActionIds.UNLOCK) data = obyt + struct.pack("!I", StarTrackerActionId.UNLOCK)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "49": if op_code == "49":
q.add_log_cmd("Star tracker: Request camera parameters") q.add_log_cmd("Star tracker: Request camera parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_CAMERA_PARAMS) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_CAMERA_PARAMS)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "50": if op_code == "50":
q.add_log_cmd("Star tracker: Request limits") q.add_log_cmd("Star tracker: Request limits")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_LIMITS) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_LIMITS)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "51": if op_code == "51":
q.add_log_cmd("Star tracker: Set image processor parameters") q.add_log_cmd("Star tracker: Set image processor parameters")
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.IMAGE_PROCESSOR) + struct.pack("!I", StarTrackerActionId.IMAGE_PROCESSOR)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -494,7 +505,7 @@ def pack_star_tracker_commands(
q.add_log_cmd("Star tracker: EGSE load ground config camera parameters") q.add_log_cmd("Star tracker: EGSE load ground config camera parameters")
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.CAMERA) + struct.pack("!I", StarTrackerActionId.CAMERA)
+ bytearray(FileDefs.egse_ground_config, "utf-8") + bytearray(FileDefs.egse_ground_config, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -502,64 +513,64 @@ def pack_star_tracker_commands(
q.add_log_cmd("Star tracker: EGSE load flight config camera parameters") q.add_log_cmd("Star tracker: EGSE load flight config camera parameters")
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.CAMERA) + struct.pack("!I", StarTrackerActionId.CAMERA)
+ bytearray(FileDefs.egse_flight_config, "utf-8") + bytearray(FileDefs.egse_flight_config, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "54": if op_code == "54":
q.add_log_cmd("Star tracker: Request log level parameters") q.add_log_cmd("Star tracker: Request log level parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_LOG_LEVEL) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_LOG_LEVEL)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "55": if op_code == "55":
q.add_log_cmd("Star tracker: Request mounting parameters") q.add_log_cmd("Star tracker: Request mounting parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_MOUNTING) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_MOUNTING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "56": if op_code == "56":
q.add_log_cmd("Star tracker: Request image processor parameters") q.add_log_cmd("Star tracker: Request image processor parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_IMAGE_PROCESSOR) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_IMAGE_PROCESSOR)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "57": if op_code == "57":
q.add_log_cmd("Star tracker: Request centroiding parameters") q.add_log_cmd("Star tracker: Request centroiding parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_CENTROIDING) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_CENTROIDING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "58": if op_code == "58":
q.add_log_cmd("Star tracker: Request lisa parameters") q.add_log_cmd("Star tracker: Request lisa parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_LISA) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_LISA)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "59": if op_code == "59":
q.add_log_cmd("Star tracker: Request matching parameters") q.add_log_cmd("Star tracker: Request matching parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_MATCHING) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_MATCHING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "60": if op_code == "60":
q.add_log_cmd("Star tracker: Request tracking parameters") q.add_log_cmd("Star tracker: Request tracking parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_TRACKING) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_TRACKING)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "61": if op_code == "61":
q.add_log_cmd("Star tracker: Request validation parameters") q.add_log_cmd("Star tracker: Request validation parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_VALIDATION) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_VALIDATION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "62": if op_code == "62":
q.add_log_cmd("Star tracker: Request algo parameters") q.add_log_cmd("Star tracker: Request algo parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_ALGO) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_ALGO)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "63": if op_code == "63":
q.add_log_cmd("Star tracker: Request subscription parameters") q.add_log_cmd("Star tracker: Request subscription parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_SUBSCRIPTION) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_SUBSCRIPTION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "64": if op_code == "64":
q.add_log_cmd("Star tracker: Request log subscription parameters") q.add_log_cmd("Star tracker: Request log subscription parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_LOG_SUBSCRIPTION) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_LOG_SUBSCRIPTION)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "65": if op_code == "65":
q.add_log_cmd("Star tracker: Request debug camera parameters") q.add_log_cmd("Star tracker: Request debug camera parameters")
data = obyt + struct.pack("!I", StarTrackerActionIds.REQ_DEBUG_CAMERA) data = obyt + struct.pack("!I", StarTrackerActionId.REQ_DEBUG_CAMERA)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "66": if op_code == "66":
q.add_log_cmd("Star tracker: Set log level parameters") q.add_log_cmd("Star tracker: Set log level parameters")
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.LOGLEVEL) + struct.pack("!I", StarTrackerActionId.LOGLEVEL)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -569,7 +580,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.LOG_SUBSCRIPTION) + struct.pack("!I", StarTrackerActionId.LOG_SUBSCRIPTION)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -578,7 +589,7 @@ def pack_star_tracker_commands(
json_file = get_config_file() json_file = get_config_file()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.DEBUG_CAMERA) + struct.pack("!I", StarTrackerActionId.DEBUG_CAMERA)
+ bytearray(json_file, "utf-8") + bytearray(json_file, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -587,20 +598,20 @@ def pack_star_tracker_commands(
firmware = get_firmware() firmware = get_firmware()
data = ( data = (
obyt obyt
+ struct.pack("!I", StarTrackerActionIds.FIRMWARE_UPDATE) + struct.pack("!I", StarTrackerActionId.FIRMWARE_UPDATE)
+ bytearray(firmware, "utf-8") + bytearray(firmware, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "70": if op_code == "70":
q.add_log_cmd("Star tracker: Disable timestamp generation") q.add_log_cmd("Star tracker: Disable timestamp generation")
command = obyt + struct.pack( command = obyt + struct.pack(
"!I", StarTrackerActionIds.DISBALE_TIMESTAMP_GENERATION "!I", StarTrackerActionId.DISBALE_TIMESTAMP_GENERATION
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "71": if op_code == "71":
q.add_log_cmd("Star tracker: Enable timestamp generation") q.add_log_cmd("Star tracker: Enable timestamp generation")
command = obyt + struct.pack( command = obyt + struct.pack(
"!I", StarTrackerActionIds.ENABLE_TIMESTAMP_GENERATION "!I", StarTrackerActionId.ENABLE_TIMESTAMP_GENERATION
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
@ -613,7 +624,7 @@ def pack_read_command(object_id: bytes) -> bytearray:
path = FileDefs.download_path path = FileDefs.download_path
data = ( data = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.FLASH_READ) + struct.pack("!I", StarTrackerActionId.FLASH_READ)
+ struct.pack("!B", start_region) + struct.pack("!B", start_region)
+ struct.pack("!I", size) + struct.pack("!I", size)
+ bytearray(path, "utf-8") + bytearray(path, "utf-8")
@ -627,7 +638,7 @@ def pack_checksum_command(object_id: bytes) -> bytearray:
size = PartitionSize.STAR_TRACKER_FIRMWARE size = PartitionSize.STAR_TRACKER_FIRMWARE
data = ( data = (
object_id object_id
+ struct.pack("!I", StarTrackerActionIds.CHECKSUM) + struct.pack("!I", StarTrackerActionId.CHECKSUM)
+ struct.pack("!B", start_region) + struct.pack("!B", start_region)
+ struct.pack("!I", address) + struct.pack("!I", address)
+ struct.pack("!I", size) + struct.pack("!I", size)

View File

@ -1,6 +1,6 @@
from eive_tmtc.config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from eive_tmtc.config.object_ids import SUS_BOARD_ASS_ID from eive_tmtc.config.object_ids import SUS_BOARD_ASS_ID
from eive_tmtc.tmtc.acs.acs_board import DualSideSubmodes from eive_tmtc.tmtc.acs.acs_board import DualSideSubmode
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
from tmtccmd.config.tmtc import ( from tmtccmd.config.tmtc import (
tmtc_definitions_provider, tmtc_definitions_provider,
@ -9,10 +9,10 @@ from tmtccmd.config.tmtc import (
) )
from tmtccmd.tc import service_provider, DefaultPusQueueHelper from tmtccmd.tc import service_provider, DefaultPusQueueHelper
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_200_fsfw_modes import Modes from tmtccmd.tc.pus_200_fsfw_modes import Mode
class SusOpCodes: class SusOpCode:
SUS_ASS_NOM_SIDE = ["0", "nom"] SUS_ASS_NOM_SIDE = ["0", "nom"]
SUS_ASS_RED_SIDE = ["1", "red"] SUS_ASS_RED_SIDE = ["1", "red"]
SUS_ASS_DUAL_MODE = ["2", "dual"] SUS_ASS_DUAL_MODE = ["2", "dual"]
@ -20,35 +20,35 @@ class SusOpCodes:
def pack_sus_cmds(q: DefaultPusQueueHelper, op_code: str): def pack_sus_cmds(q: DefaultPusQueueHelper, op_code: str):
if op_code in SusOpCodes.SUS_ASS_NOM_SIDE: if op_code in SusOpCode.SUS_ASS_NOM_SIDE:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=SUS_BOARD_ASS_ID, object_id=SUS_BOARD_ASS_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=DualSideSubmodes.A_SIDE, submode=DualSideSubmode.A_SIDE,
q=q, q=q,
info="Switching to SUS board to nominal side", info="Switching to SUS board to nominal side",
) )
if op_code in SusOpCodes.SUS_ASS_RED_SIDE: if op_code in SusOpCode.SUS_ASS_RED_SIDE:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=SUS_BOARD_ASS_ID, object_id=SUS_BOARD_ASS_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=DualSideSubmodes.B_SIDE, submode=DualSideSubmode.B_SIDE,
q=q, q=q,
info="Switching to SUS board to redundant side", info="Switching to SUS board to redundant side",
) )
if op_code in SusOpCodes.SUS_ASS_OFF: if op_code in SusOpCode.SUS_ASS_OFF:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=SUS_BOARD_ASS_ID, object_id=SUS_BOARD_ASS_ID,
mode=Modes.OFF, mode=Mode.OFF,
submode=0, submode=0,
q=q, q=q,
info="Switching SUS board off", info="Switching SUS board off",
) )
if op_code in SusOpCodes.SUS_ASS_DUAL_MODE: if op_code in SusOpCode.SUS_ASS_DUAL_MODE:
pack_mode_cmd_with_info( pack_mode_cmd_with_info(
object_id=SUS_BOARD_ASS_ID, object_id=SUS_BOARD_ASS_ID,
mode=Modes.NORMAL, mode=Mode.NORMAL,
submode=DualSideSubmodes.DUAL_SIDE, submode=DualSideSubmode.DUAL_SIDE,
q=q, q=q,
info="Switching to SUS board to dual side", info="Switching to SUS board to dual side",
) )
@ -65,19 +65,19 @@ def pack_sus_cmds_prvoider(p: ServiceProviderParams):
def add_sus_board_cmds(defs: TmtcDefinitionWrapper): def add_sus_board_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add( oce.add(
keys=SusOpCodes.SUS_ASS_NOM_SIDE, keys=SusOpCode.SUS_ASS_NOM_SIDE,
info="Switch SUS board to nominal side", info="Switch SUS board to nominal side",
) )
oce.add( oce.add(
keys=SusOpCodes.SUS_ASS_RED_SIDE, keys=SusOpCode.SUS_ASS_RED_SIDE,
info="Switch SUS board to redundant side", info="Switch SUS board to redundant side",
) )
oce.add( oce.add(
keys=SusOpCodes.SUS_ASS_OFF, keys=SusOpCode.SUS_ASS_OFF,
info="Switch off SUS board", info="Switch off SUS board",
) )
oce.add( oce.add(
keys=SusOpCodes.SUS_ASS_DUAL_MODE, keys=SusOpCode.SUS_ASS_DUAL_MODE,
info="Switch SUS board to dual mode", info="Switch SUS board to dual mode",
) )
defs.add_service( defs.add_service(

View File

View File

@ -0,0 +1,132 @@
# -*- coding: utf-8 -*-
"""
@file ccsds_handler.py
@brief Test commanding of CCSDS Handler
@author J. Meier
@date 20.11.2021
"""
import enum
import struct
from eive_tmtc.config.definitions import CustomServiceList
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.config.tmtc import (
tmtc_definitions_provider,
OpCodeEntry,
TmtcDefinitionWrapper,
)
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import create_mode_command, Mode
from tmtccmd.util import ObjectIdU32
from eive_tmtc.config.object_ids import CCSDS_HANDLER_ID
class ActionId(enum.IntEnum):
# Configures input rate of syrlinks to 400 Khz (results in downlink rate of 200 kbps)
# SET_LOW_RATE = 0
# Configures input rate of syrlinks to 2000 Khz (results in downlink rate of 1000 kbps)
# SET_HIGH_RATE = 1
# Enables the syrlinks transmitter (by using RS485 enables lines). Please note that this
# is a legacy command. It is recommended to use mode commands instead
EN_TRANSMITTER = 2
# Disables the syrlinks transmitter (by using RS485 enables lines). Please note that this is
# a legacy command. It is recommended to use mode commands instead.
DIS_TRANSMITTER = 3
# Sets an arbitrary bitrate. Normally only set low and set high rate commands should be
# required
ARBITRARY_BITRATE = 4
ENABLE_TX_CLK_MANIPULATOR = 5
DISABLE_TX_CLK_MANIPULATOR = 6
# Tx data will be updated on rising edge of tx clock
UPDATE_ON_RISING_EDGE = 7
# Tx data will be updated on falling edge of tx clock
UPDATE_ON_FALLING_EDGE = 8
class Submode(enum.IntEnum):
# Informative, do not command this.
UNSET = 0
DATARATE_LOW = 1
DATARATE_HIGH = 2
class OpCode:
ENABLE_WITH_LOW_DATARATE = ["enable_low_datarate"]
ENABLE_WITH_HIGH_DATARATE = ["enable_high_datarate"]
DISABLE = ["disable"]
ENABLE_ACTION = ["legacy_enable_tx"]
DISABLE_ACTION = ["legacy_disable_tx"]
class Info:
ENABLE_WITH_LOW_DATARATE = "Enable TX with low datarate"
ENABLE_WITH_HIGH_DATARATE = "Enable TX with high datarate"
DISABLE = "Disable TX"
ENABLE_ACTION = "Enable TX (legacy)"
DISABLE_ACTION = "Disable TX (legacy)"
def pack_ccsds_handler_test(
object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str
):
obyt = object_id.as_bytes
prefix = "CCSDS Handler"
q.add_log_cmd(f"Testing CCSDS handler with object id: {object_id.as_hex_string}")
if op_code in OpCode.ENABLE_WITH_LOW_DATARATE:
q.add_log_cmd(f"{prefix}: {Info.ENABLE_WITH_LOW_DATARATE}")
q.add_pus_tc(create_mode_command(obyt, Mode.ON, Submode.DATARATE_LOW))
if op_code in OpCode.ENABLE_WITH_HIGH_DATARATE:
q.add_log_cmd(f"{prefix}: {Info.ENABLE_WITH_HIGH_DATARATE}")
q.add_pus_tc(create_mode_command(obyt, Mode.ON, Submode.DATARATE_HIGH))
if op_code in OpCode.DISABLE:
q.add_log_cmd(f"{prefix}: {Info.DISABLE}")
q.add_pus_tc(create_mode_command(obyt, Mode.OFF, 0))
if op_code in OpCode.ENABLE_ACTION:
q.add_log_cmd(f"{prefix}: {Info.ENABLE_ACTION}")
command = obyt + struct.pack("!I", ActionId.EN_TRANSMITTER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCode.DISABLE_ACTION:
q.add_log_cmd(f"{prefix}: {Info.DISABLE_ACTION}")
command = obyt + struct.pack("!I", ActionId.DIS_TRANSMITTER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "4":
q.add_log_cmd("CCSDS Handler: Set arbitrary bitrate")
bitrate = int(input("Specify bit rate (bps): "))
command = (
obyt
+ struct.pack("!I", ActionId.ARBITRARY_BITRATE)
+ struct.pack("!I", bitrate)
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "5":
q.add_log_cmd("CCSDS Handler: Enable tx clock manipulator")
command = obyt + struct.pack("!I", ActionId.ENABLE_TX_CLK_MANIPULATOR)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "6":
q.add_log_cmd("CCSDS Handler: Disable tx clock manipulator")
command = obyt + struct.pack("!I", ActionId.DISABLE_TX_CLK_MANIPULATOR)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "7":
q.add_log_cmd("CCSDS Handler: Update tx data on rising edge of tx clock")
command = obyt + struct.pack("!I", ActionId.UPDATE_ON_RISING_EDGE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "8":
q.add_log_cmd("CCSDS Handler: Update tx data on falling edge of tx clock")
command = obyt + struct.pack("!I", ActionId.UPDATE_ON_FALLING_EDGE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
@tmtc_definitions_provider
def add_ccsds_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(OpCode.ENABLE_WITH_LOW_DATARATE, Info.ENABLE_WITH_LOW_DATARATE)
oce.add(OpCode.ENABLE_WITH_HIGH_DATARATE, Info.ENABLE_WITH_HIGH_DATARATE)
oce.add(OpCode.DISABLE, Info.DISABLE)
oce.add(OpCode.ENABLE_ACTION, Info.ENABLE_ACTION)
oce.add(OpCode.DISABLE_ACTION, Info.DISABLE_ACTION)
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)

View File

@ -0,0 +1,352 @@
# -*- coding: utf-8 -*-
"""
@file syrlinks_hk_handler.py
@brief Syrlinks Hk Handler tests
@author J. Meier
@date 13.12.2020
"""
import enum
from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.config.definitions import CustomServiceList
from tmtccmd.config.tmtc import (
tmtc_definitions_provider,
TmtcDefinitionWrapper,
OpCodeEntry,
)
from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_3_fsfw_hk import (
make_sid,
create_request_one_diag_command,
create_enable_periodic_hk_command_with_interval,
create_disable_periodic_hk_command,
)
from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc.pus_200_fsfw_modes import Mode, create_mode_command
from tmtccmd.tc.pus_20_fsfw_params import (
pack_scalar_u8_parameter_app_data,
create_load_param_cmd,
)
from eive_tmtc.config.object_ids import SYRLINKS_HANDLER_ID
import struct
from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
class SetId:
RX_REGISTERS_DATASET = 1
TX_REGISTERS_DATASET = 2
TEMPERATURE_SET_ID = 3
class OpCode:
OFF = "off"
ON = "on"
NORMAL_RX_ONLY = "nml_rx_only"
NORMAL_RX_AND_TX_CW = "nml_carrier_wave"
NORMAL_RX_AND_TX_DEF_DATARATE = "nml_default_datarate"
NORMAL_RX_AND_TX_LOW_DATARATE = "nml_low_datarate"
NORMAL_RX_AND_TX_HIGH_DATARATE = "nml_high_datarate"
UPDATE_DEFAULT_DATARATE_LOW_RATE = "param_low_datarate"
UPDATE_DEFAULT_DATARATE_HIGH_RATE = "param_high_datarate"
HK_RX_REGS = "hk_rx_regs"
ENABLE_HK_RX_REGS = "enable_hk_rx"
DISABLE_HK_RX_REGS = "disable_hk_rx"
ENABLE_HK_TX_REGS = "enable_hk_tx"
DISABLE_HK_TX_REGS = "disable_hk_tx"
HK_TX_REGS = "hk_tx_regs"
TX_STATUS = "tx_status"
RX_STATUS = "rx_status"
class Info:
OFF = "Switch OFF"
ON = "Switch ON"
NORMAL_RX_ONLY = "NORMAL RX Only, set TX to standby"
NORMAL_RX_AND_TX_CW = "NORMAL RX and TX, TX Carrier Wave"
NORMAL_RX_AND_TX_DEF_DATARATE = "NORMAL RX and TX, TX with default datarate"
NORMAL_RX_AND_TX_LOW_DATARATE = "NORMAL RX and TX, TX with low datarate"
NORMAL_RX_AND_TX_HIGH_DATARATE = "NORMAL RX and TX, TX with high datarate"
UPDATE_DEFAULT_DATARATE_LOW_RATE = "Update default datarate to low rate (BPSK)"
UPDATE_DEFAULT_DATARATE_HIGH_RATE = "Update default datarate to high rate (0QPSK)"
HK_RX_REGS = "Request RX register set"
HK_TX_REGS = "Request TX register set"
ENABLE_HK_RX_REGS = "Enable periodic RX register HK"
DISABLE_HK_RX_REGS = "Disable periodic RX register HK"
ENABLE_HK_TX_REGS = "Enable periodic TX register HK"
DISABLE_HK_TX_REGS = "Disable periodic TX register HK"
TX_STATUS = "Read TX status (always read in normal mode)"
RX_STATUS = "Read RX status (always read in normal mode)"
SET_CW = "Set TX carrier wave"
class CommandId(enum.IntEnum):
READ_RX_STATUS_REGISTERS = 2
SET_TX_MODE_STANDBY = 3
SET_TX_MODE_MODULATION = 4
SET_TX_MODE_CW = 5
READ_TX_STATUS = 7
READ_TX_WAVEFORM = 8
READ_TX_AGC_VALUE_HIGH_BYTE = 9
READ_TX_AGC_VALUE_LOW_BYTE = 10
WRITE_LCL_CONFIG = 11
READ_LCL_CONFIG_REGISTER = 12
SET_WAVEFORM_OQPSK = 17
SET_WAVEFORM_BPSK = 18
SET_SECOND_CONFIG = 19
ENABLE_DEBUG = 20
DISABLE_DEBUG = 21
class Submode(enum.IntEnum):
RX_ONLY = 0
RX_AND_TX_DEFAULT_DATARATE = 1
RX_AND_TX_LOW_DATARATE = 2
RX_AND_TX_HIGH_DATARATE = 3
RX_AND_TX_CW = 4
class ParameterId(enum.IntEnum):
DATARATE = 0
class Datarate(enum.IntEnum):
LOW_RATE_MODULATION_BPSK = 0
HIGH_RATE_MODULATION_0QPSK = 1
@tmtc_definitions_provider
def add_syrlinks_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry()
oce.add(OpCode.OFF, Info.OFF)
oce.add(OpCode.ON, Info.ON)
oce.add(OpCode.NORMAL_RX_ONLY, Info.NORMAL_RX_ONLY)
oce.add(OpCode.NORMAL_RX_AND_TX_CW, Info.NORMAL_RX_AND_TX_CW)
oce.add(OpCode.NORMAL_RX_AND_TX_DEF_DATARATE, Info.NORMAL_RX_AND_TX_DEF_DATARATE)
oce.add(OpCode.NORMAL_RX_AND_TX_LOW_DATARATE, Info.NORMAL_RX_AND_TX_LOW_DATARATE)
oce.add(OpCode.NORMAL_RX_AND_TX_HIGH_DATARATE, Info.NORMAL_RX_AND_TX_HIGH_DATARATE)
oce.add(
OpCode.UPDATE_DEFAULT_DATARATE_LOW_RATE, Info.UPDATE_DEFAULT_DATARATE_LOW_RATE
)
oce.add(
OpCode.UPDATE_DEFAULT_DATARATE_HIGH_RATE, Info.UPDATE_DEFAULT_DATARATE_HIGH_RATE
)
oce.add(OpCode.HK_RX_REGS, Info.HK_RX_REGS)
oce.add(OpCode.HK_TX_REGS, Info.HK_TX_REGS)
oce.add(OpCode.TX_STATUS, Info.TX_STATUS)
oce.add(OpCode.RX_STATUS, Info.RX_STATUS)
oce.add(OpCode.ENABLE_HK_RX_REGS, Info.ENABLE_HK_RX_REGS)
oce.add(OpCode.DISABLE_HK_RX_REGS, Info.DISABLE_HK_RX_REGS)
oce.add(OpCode.ENABLE_HK_TX_REGS, Info.ENABLE_HK_TX_REGS)
oce.add(OpCode.DISABLE_HK_TX_REGS, Info.DISABLE_HK_TX_REGS)
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("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)
_PREFIX = "Syrlinks"
def normal_mode_cmd(q: DefaultPusQueueHelper, info: str, submode: int):
q.add_log_cmd(f"{_PREFIX}: {info}")
q.add_pus_tc(create_mode_command(SYRLINKS_HANDLER_ID, Mode.NORMAL, submode))
def pack_syrlinks_command(
object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str
):
obyt = object_id.as_bytes
prefix = "Syrlinks"
q.add_log_cmd(f"Testing Syrlinks with object id: {object_id.as_hex_string}")
if op_code == OpCode.OFF:
q.add_log_cmd(f"{prefix}: {Info.OFF}")
q.add_pus_tc(create_mode_command(obyt, Mode.OFF, 0))
if op_code == OpCode.ON:
q.add_log_cmd(f"{prefix}: {Info.ON}")
q.add_pus_tc(create_mode_command(obyt, Mode.ON, 0))
if op_code == OpCode.NORMAL_RX_ONLY:
normal_mode_cmd(q, Info.NORMAL_RX_ONLY, Submode.RX_ONLY)
if op_code == OpCode.NORMAL_RX_AND_TX_LOW_DATARATE:
normal_mode_cmd(
q, Info.NORMAL_RX_AND_TX_LOW_DATARATE, Submode.RX_AND_TX_LOW_DATARATE
)
if op_code == OpCode.NORMAL_RX_AND_TX_DEF_DATARATE:
normal_mode_cmd(
q, Info.NORMAL_RX_AND_TX_DEF_DATARATE, Submode.RX_AND_TX_DEFAULT_DATARATE
)
if op_code == OpCode.NORMAL_RX_AND_TX_HIGH_DATARATE:
normal_mode_cmd(
q, Info.NORMAL_RX_AND_TX_HIGH_DATARATE, Submode.RX_AND_TX_HIGH_DATARATE
)
if op_code == OpCode.UPDATE_DEFAULT_DATARATE_LOW_RATE:
q.add_log_cmd(f"{prefix}: {Info.UPDATE_DEFAULT_DATARATE_LOW_RATE}")
q.add_pus_tc(
create_load_param_cmd(
pack_scalar_u8_parameter_app_data(
obyt, 0, ParameterId.DATARATE, Datarate.LOW_RATE_MODULATION_BPSK
)
)
)
if op_code == OpCode.UPDATE_DEFAULT_DATARATE_HIGH_RATE:
q.add_log_cmd(f"{prefix}: {Info.UPDATE_DEFAULT_DATARATE_HIGH_RATE}")
q.add_pus_tc(
create_load_param_cmd(
pack_scalar_u8_parameter_app_data(
obyt, 0, ParameterId.DATARATE, Datarate.HIGH_RATE_MODULATION_0QPSK
)
)
)
if op_code in OpCode.NORMAL_RX_AND_TX_CW:
normal_mode_cmd(q, Info.NORMAL_RX_AND_TX_CW, Submode.RX_AND_TX_CW)
if op_code in OpCode.HK_RX_REGS:
q.add_log_cmd(f"{prefix}: {Info.HK_RX_REGS}")
sid = make_sid(obyt, SetId.RX_REGISTERS_DATASET)
q.add_pus_tc(create_request_one_diag_command(sid))
if op_code in OpCode.ENABLE_HK_RX_REGS:
q.add_log_cmd(f"{prefix}: {Info.ENABLE_HK_RX_REGS}")
sid = make_sid(obyt, SetId.RX_REGISTERS_DATASET)
interval = float(input("HK interval in floating point seconds"))
cmds = create_enable_periodic_hk_command_with_interval(True, sid, interval)
for cmd in cmds:
q.add_pus_tc(cmd)
if op_code in OpCode.DISABLE_HK_RX_REGS:
q.add_log_cmd(f"{prefix}: {Info.DISABLE_HK_RX_REGS}")
sid = make_sid(obyt, SetId.RX_REGISTERS_DATASET)
q.add_pus_tc(create_disable_periodic_hk_command(True, sid))
if op_code in OpCode.ENABLE_HK_TX_REGS:
q.add_log_cmd(f"{prefix}: {Info.ENABLE_HK_TX_REGS}")
sid = make_sid(obyt, SetId.TX_REGISTERS_DATASET)
interval = float(input("HK interval in floating point seconds"))
cmds = create_enable_periodic_hk_command_with_interval(True, sid, interval)
for cmd in cmds:
q.add_pus_tc(cmd)
if op_code in OpCode.DISABLE_HK_TX_REGS:
q.add_log_cmd(f"{prefix}: {Info.DISABLE_HK_TX_REGS}")
sid = make_sid(obyt, SetId.TX_REGISTERS_DATASET)
q.add_pus_tc(create_disable_periodic_hk_command(True, sid))
if op_code in OpCode.HK_TX_REGS:
q.add_log_cmd(f"{prefix}: {Info.HK_TX_REGS}")
sid = make_sid(obyt, SetId.TX_REGISTERS_DATASET)
q.add_pus_tc(create_request_one_diag_command(sid))
if op_code in OpCode.TX_STATUS:
q.add_log_cmd(f"{prefix}: {Info.TX_STATUS}")
command = obyt + struct.pack("!I", CommandId.READ_TX_STATUS)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "9":
q.add_log_cmd("Syrlinks: Read TX waveform")
command = obyt + struct.pack("!I", CommandId.READ_TX_WAVEFORM)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "10":
q.add_log_cmd("Syrlinks: Read TX AGC value high byte")
command = obyt + struct.pack("!I", CommandId.READ_TX_AGC_VALUE_HIGH_BYTE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "11":
q.add_log_cmd("Syrlinks: Read TX AGC value low byte")
command = obyt + struct.pack("!I", CommandId.READ_TX_AGC_VALUE_LOW_BYTE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "12":
q.add_log_cmd("Syrlinks: Write LCL config")
command = obyt + struct.pack("!I", CommandId.WRITE_LCL_CONFIG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "13":
q.add_log_cmd("Syrlinks: Read RX status registers")
command = obyt + struct.pack("!I", CommandId.READ_RX_STATUS_REGISTERS)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "14":
q.add_log_cmd("Syrlinks: Read LCL config register")
command = obyt + struct.pack("!I", CommandId.READ_LCL_CONFIG_REGISTER)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "15":
q.add_log_cmd("Syrlinks: Set waveform OQPSK")
command = obyt + struct.pack("!I", CommandId.SET_WAVEFORM_OQPSK)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "16":
q.add_log_cmd("Syrlinks: Set waveform BPSK")
command = obyt + struct.pack("!I", CommandId.SET_WAVEFORM_BPSK)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "17":
q.add_log_cmd("Syrlinks: Set second config")
command = obyt + struct.pack("!I", CommandId.SET_SECOND_CONFIG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "18":
q.add_log_cmd("Syrlinks: Enable debug printout")
command = obyt + struct.pack("!I", CommandId.ENABLE_DEBUG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "19":
q.add_log_cmd("Syrlinks: Disable debug printout")
command = obyt + struct.pack("!I", CommandId.DISABLE_DEBUG)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
def handle_syrlinks_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
if set_id == SetId.RX_REGISTERS_DATASET:
return handle_syrlinks_rx_registers_dataset(printer, hk_data)
elif set_id == SetId.TX_REGISTERS_DATASET:
return handle_syrlinks_tx_registers_dataset(printer, hk_data)
else:
pw = PrintWrapper(printer)
pw.dlog(f"Service 3 TM: Syrlinks handler reply with unknown set ID {set_id}")
def handle_syrlinks_rx_registers_dataset(printer: FsfwTmTcPrinter, hk_data: bytes):
pw = PrintWrapper(printer)
header_list = [
"RX Status",
"RX Sensitivity",
"RX Frequency Shift",
"RX IQ Power",
"RX AGC Value",
"RX Demod Eb",
"RX Demod N0",
"RX Datarate",
]
rx_status = hk_data[0]
rx_sensitivity = struct.unpack("!I", hk_data[1:5])[0]
rx_frequency_shift = struct.unpack("!i", hk_data[5:9])[0]
freq_shift_hz = rx_frequency_shift / 8.0
freq_shift_printout = f"Raw: {rx_frequency_shift}, Eng: {freq_shift_hz} Hz"
rx_iq_power = struct.unpack("!H", hk_data[9:11])[0]
rx_agc_value = struct.unpack("!H", hk_data[11:13])[0]
rx_demod_eb = struct.unpack("!I", hk_data[13:17])[0]
rx_demod_n0 = struct.unpack("!I", hk_data[17:21])[0]
rx_data_rate = hk_data[21]
content_list = [
rx_status,
rx_sensitivity,
freq_shift_printout,
rx_iq_power,
rx_agc_value,
rx_demod_eb,
rx_demod_n0,
rx_data_rate,
]
validity_buffer = hk_data[22:]
for header, content in zip(header_list, content_list):
pw.dlog(f"{header}: {content}")
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=8)
def handle_syrlinks_tx_registers_dataset(
printer: FsfwTmTcPrinter,
hk_data: bytes,
):
pw = PrintWrapper(printer)
header_list = ["TX Status", "TX Waveform", "TX AGC value"]
tx_status = hk_data[0]
tx_waveform = hk_data[1]
tx_agc_value = struct.unpack("!H", hk_data[2:4])[0]
content_list = [tx_status, tx_waveform, tx_agc_value]
validity_buffer = hk_data[4:]
for header, content in zip(header_list, content_list):
pw.dlog(f"{header}: {content}")
printer.print_validity_buffer(validity_buffer=validity_buffer, num_vars=3)

View File

@ -2,13 +2,13 @@ from typing import Union
from spacepackets.ecss.tc import PusTelecommand from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes, Subservices from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode, Subservice
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
def pack_mode_cmd_with_info( def pack_mode_cmd_with_info(
object_id: Union[ObjectIdU32, bytes], object_id: Union[ObjectIdU32, bytes],
mode: Union[int, Modes], mode: Union[int, Mode],
submode: int, submode: int,
q: DefaultPusQueueHelper, q: DefaultPusQueueHelper,
info: str, info: str,
@ -27,6 +27,6 @@ def pack_mode_cmd_with_info(
) )
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, subservice=Subservices.TC_MODE_COMMAND, app_data=mode_data service=200, subservice=Subservice.TC_MODE_COMMAND, app_data=mode_data
) )
) )

View File

@ -8,7 +8,7 @@ from spacepackets.ecss import PusTelecommand
from tmtccmd.config import TmtcDefinitionWrapper from tmtccmd.config import TmtcDefinitionWrapper
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
from tmtccmd.tc.pus_3_fsfw_hk import make_sid, generate_one_hk_command from tmtccmd.tc.pus_3_fsfw_hk import make_sid, generate_one_hk_command
from tmtccmd.config.tmtc import OpCodeEntry, tmtc_definitions_provider from tmtccmd.config.tmtc import OpCodeEntry, tmtc_definitions_provider
@ -18,7 +18,7 @@ from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
LOGGER = get_console_logger() LOGGER = get_console_logger()
class ActionIds(enum.IntEnum): class ActionId(enum.IntEnum):
LIST_DIR_INTO_FILE = 0 LIST_DIR_INTO_FILE = 0
SWITCH_REBOOT_FILE_HANDLING = 5 SWITCH_REBOOT_FILE_HANDLING = 5
RESET_REBOOT_COUNTER = 6 RESET_REBOOT_COUNTER = 6
@ -34,11 +34,11 @@ class ActionIds(enum.IntEnum):
FULL_REBOOT = 34 FULL_REBOOT = 34
class SetIds(enum.IntEnum): class SetId(enum.IntEnum):
HK = 5 HK = 5
class OpCodes: class OpCode:
REBOOT_XSC = ["0", "reboot_xsc"] REBOOT_XSC = ["0", "reboot_xsc"]
XSC_REBOOT_SELF = ["1", "reboot_self"] XSC_REBOOT_SELF = ["1", "reboot_self"]
XSC_REBOOT_0_0 = ["2", "reboot_00"] XSC_REBOOT_0_0 = ["2", "reboot_00"]
@ -89,60 +89,60 @@ class Copy(enum.IntEnum):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_core_controller_definitions(defs: TmtcDefinitionWrapper): def add_core_controller_definitions(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.REBOOT_XSC, info=Info.REBOOT_XSC) oce.add(keys=OpCode.REBOOT_XSC, info=Info.REBOOT_XSC)
oce.add(keys=OpCodes.REBOOT_XSC, info=Info.REBOOT_XSC) oce.add(keys=OpCode.REBOOT_XSC, info=Info.REBOOT_XSC)
oce.add(keys=OpCodes.REBOOT_FULL, info=Info.REBOOT_FULL) oce.add(keys=OpCode.REBOOT_FULL, info=Info.REBOOT_FULL)
oce.add(keys=OpCodes.XSC_REBOOT_SELF, info="Reboot Self") oce.add(keys=OpCode.XSC_REBOOT_SELF, info="Reboot Self")
oce.add(keys=OpCodes.XSC_REBOOT_0_0, info="Reboot 0 0") oce.add(keys=OpCode.XSC_REBOOT_0_0, info="Reboot 0 0")
oce.add(keys=OpCodes.XSC_REBOOT_0_1, info="Reboot 0 1") oce.add(keys=OpCode.XSC_REBOOT_0_1, info="Reboot 0 1")
oce.add(keys=OpCodes.XSC_REBOOT_1_0, info="Reboot 1 0") oce.add(keys=OpCode.XSC_REBOOT_1_0, info="Reboot 1 0")
oce.add(keys=OpCodes.XSC_REBOOT_1_1, info="Reboot 1 1") oce.add(keys=OpCode.XSC_REBOOT_1_1, info="Reboot 1 1")
oce.add(keys=OpCodes.OBSW_UPDATE_FROM_TMP, info=Info.OBSW_UPDATE_FROM_TMP) oce.add(keys=OpCode.OBSW_UPDATE_FROM_TMP, info=Info.OBSW_UPDATE_FROM_TMP)
oce.add(keys=OpCodes.OBSW_UPDATE_FROM_SD_0, info=Info.OBSW_UPDATE_FROM_SD_0) oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_0, info=Info.OBSW_UPDATE_FROM_SD_0)
oce.add(keys=OpCodes.OBSW_UPDATE_FROM_SD_1, info=Info.OBSW_UPDATE_FROM_SD_1) oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_1, info=Info.OBSW_UPDATE_FROM_SD_1)
oce.add( oce.add(
keys=OpCodes.GET_HK, keys=OpCode.GET_HK,
info="Request housekeeping set", info="Request housekeeping set",
) )
oce.add( oce.add(
keys=OpCodes.ENABLE_REBOOT_FILE_HANDLING, keys=OpCode.ENABLE_REBOOT_FILE_HANDLING,
info="Enable reboot file handling", info="Enable reboot file handling",
) )
oce.add( oce.add(
keys=OpCodes.DISABLE_REBOOT_FILE_HANDLING, keys=OpCode.DISABLE_REBOOT_FILE_HANDLING,
info="Disable reboot file handling", info="Disable reboot file handling",
) )
oce.add( oce.add(
keys=OpCodes.RESET_ALL_REBOOT_COUNTERS, keys=OpCode.RESET_ALL_REBOOT_COUNTERS,
info="Reset all reboot counters", info="Reset all reboot counters",
) )
oce.add( oce.add(
keys=OpCodes.RESET_REBOOT_COUNTER_00, keys=OpCode.RESET_REBOOT_COUNTER_00,
info="Reset reboot counter 0 0", info="Reset reboot counter 0 0",
) )
oce.add( oce.add(
keys=OpCodes.RESET_REBOOT_COUNTER_01, keys=OpCode.RESET_REBOOT_COUNTER_01,
info="Reset reboot counter 0 1", info="Reset reboot counter 0 1",
) )
oce.add( oce.add(
keys=OpCodes.RESET_REBOOT_COUNTER_10, keys=OpCode.RESET_REBOOT_COUNTER_10,
info="Reset reboot counter 1 0", info="Reset reboot counter 1 0",
) )
oce.add( oce.add(
keys=OpCodes.RESET_REBOOT_COUNTER_11, keys=OpCode.RESET_REBOOT_COUNTER_11,
info="Reset reboot counter 1 1", info="Reset reboot counter 1 1",
) )
oce.add(keys=OpCodes.OBSW_UPDATE_FROM_SD_0, info=Info.OBSW_UPDATE_FROM_SD_0) oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_0, info=Info.OBSW_UPDATE_FROM_SD_0)
oce.add(keys=OpCodes.OBSW_UPDATE_FROM_SD_1, info=Info.OBSW_UPDATE_FROM_SD_1) oce.add(keys=OpCode.OBSW_UPDATE_FROM_SD_1, info=Info.OBSW_UPDATE_FROM_SD_1)
oce.add(keys=OpCodes.OBSW_UPDATE_FROM_TMP, info=Info.OBSW_UPDATE_FROM_TMP) oce.add(keys=OpCode.OBSW_UPDATE_FROM_TMP, info=Info.OBSW_UPDATE_FROM_TMP)
oce.add(keys=OpCodes.SWITCH_TO_SD_0, info=Info.SWITCH_TO_SD_0) oce.add(keys=OpCode.SWITCH_TO_SD_0, info=Info.SWITCH_TO_SD_0)
oce.add(keys=OpCodes.SWITCH_TO_SD_1, info=Info.SWITCH_TO_SD_1) oce.add(keys=OpCode.SWITCH_TO_SD_1, info=Info.SWITCH_TO_SD_1)
oce.add(keys=OpCodes.SWITCH_TO_BOTH_SD_CARDS, info=Info.SWITCH_TO_BOTH_SD_CARDS) oce.add(keys=OpCode.SWITCH_TO_BOTH_SD_CARDS, info=Info.SWITCH_TO_BOTH_SD_CARDS)
defs.add_service(CustomServiceList.CORE.value, "Core Controller", oce) defs.add_service(CustomServiceList.CORE.value, "Core Controller", oce)
def pack_core_commands(q: DefaultPusQueueHelper, op_code: str): def pack_core_commands(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCodes.REBOOT_XSC: if op_code in OpCode.REBOOT_XSC:
reboot_self, chip_select, copy_select = determine_reboot_params() reboot_self, chip_select, copy_select = determine_reboot_params()
add_xsc_reboot_cmd( add_xsc_reboot_cmd(
q=q, q=q,
@ -150,93 +150,97 @@ def pack_core_commands(q: DefaultPusQueueHelper, op_code: str):
chip=chip_select, chip=chip_select,
copy=copy_select, copy=copy_select,
) )
if op_code in OpCodes.REBOOT_FULL: if op_code in OpCode.REBOOT_FULL:
q.add_log_cmd(f"Core Command: {Info.REBOOT_FULL}") q.add_log_cmd(f"Core Command: {Info.REBOOT_FULL}")
q.add_pus_tc(create_full_reboot_cmds()) q.add_pus_tc(
if op_code in OpCodes.XSC_REBOOT_SELF: create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionId.FULL_REBOOT
)
)
if op_code in OpCode.XSC_REBOOT_SELF:
add_xsc_reboot_cmd(q=q, reboot_self=True) add_xsc_reboot_cmd(q=q, reboot_self=True)
if op_code in OpCodes.XSC_REBOOT_0_0: if op_code in OpCode.XSC_REBOOT_0_0:
add_xsc_reboot_cmd( add_xsc_reboot_cmd(
q=q, 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: if op_code in OpCode.XSC_REBOOT_0_1:
add_xsc_reboot_cmd( add_xsc_reboot_cmd(
q=q, q=q,
reboot_self=False, reboot_self=False,
chip=Chip.CHIP_0, chip=Chip.CHIP_0,
copy=Copy.COPY_1_GOLD, copy=Copy.COPY_1_GOLD,
) )
if op_code in OpCodes.XSC_REBOOT_1_0: if op_code in OpCode.XSC_REBOOT_1_0:
add_xsc_reboot_cmd( add_xsc_reboot_cmd(
q=q, 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: if op_code in OpCode.XSC_REBOOT_1_1:
add_xsc_reboot_cmd( add_xsc_reboot_cmd(
q=q, q=q,
reboot_self=False, reboot_self=False,
chip=Chip.CHIP_1, chip=Chip.CHIP_1,
copy=Copy.COPY_1_GOLD, copy=Copy.COPY_1_GOLD,
) )
if op_code in OpCodes.DISABLE_REBOOT_FILE_HANDLING: if op_code in OpCode.DISABLE_REBOOT_FILE_HANDLING:
q.add_log_cmd("Disabling reboot file handling") q.add_log_cmd("Disabling reboot file handling")
user_data = bytearray([0]) user_data = bytearray([0])
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING, action_id=ActionId.SWITCH_REBOOT_FILE_HANDLING,
user_data=user_data, user_data=user_data,
) )
) )
if op_code in OpCodes.ENABLE_REBOOT_FILE_HANDLING: if op_code in OpCode.ENABLE_REBOOT_FILE_HANDLING:
q.add_log_cmd("Enabling reboot file handling") q.add_log_cmd("Enabling reboot file handling")
user_data = bytearray([1]) user_data = bytearray([1])
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING, action_id=ActionId.SWITCH_REBOOT_FILE_HANDLING,
user_data=user_data, user_data=user_data,
) )
) )
if op_code in OpCodes.RESET_ALL_REBOOT_COUNTERS: if op_code in OpCode.RESET_ALL_REBOOT_COUNTERS:
q.add_log_cmd("Resetting all reboot counters") q.add_log_cmd("Resetting all reboot counters")
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.RESET_REBOOT_COUNTER, action_id=ActionId.RESET_REBOOT_COUNTER,
) )
) )
if op_code in OpCodes.RESET_REBOOT_COUNTER_00: if op_code in OpCode.RESET_REBOOT_COUNTER_00:
reset_specific_boot_counter(q, 0, 0) reset_specific_boot_counter(q, 0, 0)
if op_code in OpCodes.RESET_REBOOT_COUNTER_01: if op_code in OpCode.RESET_REBOOT_COUNTER_01:
reset_specific_boot_counter(q, 0, 1) reset_specific_boot_counter(q, 0, 1)
if op_code in OpCodes.RESET_REBOOT_COUNTER_10: if op_code in OpCode.RESET_REBOOT_COUNTER_10:
reset_specific_boot_counter(q, 1, 0) reset_specific_boot_counter(q, 1, 0)
if op_code in OpCodes.RESET_REBOOT_COUNTER_11: if op_code in OpCode.RESET_REBOOT_COUNTER_11:
reset_specific_boot_counter(q, 1, 1) reset_specific_boot_counter(q, 1, 1)
if op_code in OpCodes.OBSW_UPDATE_FROM_SD_0: if op_code in OpCode.OBSW_UPDATE_FROM_SD_0:
q.add_log_cmd(Info.OBSW_UPDATE_FROM_SD_0) q.add_log_cmd(Info.OBSW_UPDATE_FROM_SD_0)
q.add_pus_tc(pack_obsw_update_cmd(ActionIds.UPDATE_OBSW_FROM_SD_0)) q.add_pus_tc(pack_obsw_update_cmd(ActionId.UPDATE_OBSW_FROM_SD_0))
if op_code in OpCodes.OBSW_UPDATE_FROM_SD_1: if op_code in OpCode.OBSW_UPDATE_FROM_SD_1:
q.add_log_cmd(Info.OBSW_UPDATE_FROM_SD_1) q.add_log_cmd(Info.OBSW_UPDATE_FROM_SD_1)
q.add_pus_tc(pack_obsw_update_cmd(ActionIds.UPDATE_OBSW_FROM_SD_1)) q.add_pus_tc(pack_obsw_update_cmd(ActionId.UPDATE_OBSW_FROM_SD_1))
if op_code in OpCodes.OBSW_UPDATE_FROM_TMP: if op_code in OpCode.OBSW_UPDATE_FROM_TMP:
q.add_log_cmd(Info.OBSW_UPDATE_FROM_TMP) q.add_log_cmd(Info.OBSW_UPDATE_FROM_TMP)
q.add_pus_tc(pack_obsw_update_cmd(ActionIds.UPDATE_OBSW_FROM_TMP)) q.add_pus_tc(pack_obsw_update_cmd(ActionId.UPDATE_OBSW_FROM_TMP))
if op_code in OpCodes.SWITCH_TO_SD_0: if op_code in OpCode.SWITCH_TO_SD_0:
q.add_log_cmd(Info.SWITCH_TO_SD_0) q.add_log_cmd(Info.SWITCH_TO_SD_0)
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.SWITCH_TO_SD_0 object_id=CORE_CONTROLLER_ID, action_id=ActionId.SWITCH_TO_SD_0
) )
) )
if op_code in OpCodes.SWITCH_TO_SD_1: if op_code in OpCode.SWITCH_TO_SD_1:
q.add_log_cmd(Info.SWITCH_TO_SD_1) q.add_log_cmd(Info.SWITCH_TO_SD_1)
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.SWITCH_TO_SD_1 object_id=CORE_CONTROLLER_ID, action_id=ActionId.SWITCH_TO_SD_1
) )
) )
if op_code in OpCodes.SWITCH_TO_BOTH_SD_CARDS: if op_code in OpCode.SWITCH_TO_BOTH_SD_CARDS:
while True: while True:
active_sd_card = int(input("Please specify active SD cqrd [0/1]: ")) active_sd_card = int(input("Please specify active SD cqrd [0/1]: "))
if active_sd_card not in [0, 1]: if active_sd_card not in [0, 1]:
@ -244,32 +248,32 @@ def pack_core_commands(q: DefaultPusQueueHelper, op_code: str):
break break
q.add_log_cmd(Info.SWITCH_TO_BOTH_SD_CARDS) q.add_log_cmd(Info.SWITCH_TO_BOTH_SD_CARDS)
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.SWITCH_TO_BOTH_SD_CARDS, action_id=ActionId.SWITCH_TO_BOTH_SD_CARDS,
user_data=bytes([active_sd_card]), user_data=bytes([active_sd_card]),
) )
) )
if op_code in OpCodes.GET_HK: if op_code in OpCode.GET_HK:
q.add_log_cmd("Requesting housekeeping set") q.add_log_cmd("Requesting housekeeping set")
sid = make_sid(object_id=CORE_CONTROLLER_ID, set_id=SetIds.HK) sid = make_sid(object_id=CORE_CONTROLLER_ID, set_id=SetId.HK)
q.add_pus_tc(generate_one_hk_command(sid)) q.add_pus_tc(generate_one_hk_command(sid))
def reset_specific_boot_counter(q: DefaultPusQueueHelper, chip: int, copy: int): def reset_specific_boot_counter(q: DefaultPusQueueHelper, chip: int, copy: int):
q.add_log_cmd(f"Resetting boot counter {chip} {copy}") q.add_log_cmd(f"Resetting boot counter {chip} {copy}")
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(
object_id=CORE_CONTROLLER_ID, object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.RESET_REBOOT_COUNTER, action_id=ActionId.RESET_REBOOT_COUNTER,
user_data=bytes([chip, copy]), user_data=bytes([chip, copy]),
) )
) )
def create_full_reboot_cmds() -> PusTelecommand: def create_full_reboot_cmds() -> PusTelecommand:
return make_fsfw_action_cmd( return create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.FULL_REBOOT object_id=CORE_CONTROLLER_ID, action_id=ActionId.FULL_REBOOT
) )
@ -311,7 +315,7 @@ def determine_chip_and_copy() -> (int, int):
def pack_obsw_update_cmd(action_id: int) -> PusTelecommand: def pack_obsw_update_cmd(action_id: int) -> PusTelecommand:
chip, copy = determine_chip_and_copy() chip, copy = determine_chip_and_copy()
user_data = bytes([chip, copy]) user_data = bytes([chip, copy])
return make_fsfw_action_cmd( return create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=action_id, user_data=user_data object_id=CORE_CONTROLLER_ID, action_id=action_id, user_data=user_data
) )
@ -341,13 +345,13 @@ def create_xsc_reboot_cmds(
tc_data.append(False) tc_data.append(False)
tc_data.append(chip) tc_data.append(chip)
tc_data.append(copy) tc_data.append(copy)
return make_fsfw_action_cmd( return create_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.XSC_REBOOT, user_data=tc_data object_id=CORE_CONTROLLER_ID, action_id=ActionId.XSC_REBOOT, user_data=tc_data
) )
def handle_core_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes): def handle_core_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
if set_id == SetIds.HK: if set_id == SetId.HK:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
fmt_str = "!fff" fmt_str = "!fff"
inc_len = struct.calcsize(fmt_str) inc_len = struct.calcsize(fmt_str)

View File

@ -9,15 +9,15 @@ from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_200_fsfw_modes import Subservices as ModeSubservices from tmtccmd.tc.pus_200_fsfw_modes import Subservice as ModeSubservice
class OpCodes(str, enum.Enum): class OpCode(str, enum.Enum):
OFF = "off" OFF = "off"
REPORT_ALL_MODES = "report_modes" REPORT_ALL_MODES = "report_modes"
class PayloadModes(enum.IntEnum): class PayloadMode(enum.IntEnum):
OFF = 0 OFF = 0
@ -27,7 +27,7 @@ class Info(str, enum.Enum):
HANDLER_LIST: Dict[str, Tuple[int, str]] = { HANDLER_LIST: Dict[str, Tuple[int, str]] = {
OpCodes.OFF: (PayloadModes.OFF, Info.OFF), OpCode.OFF: (PayloadMode.OFF, Info.OFF),
} }
@ -36,12 +36,12 @@ def build_acs_subsystem_cmd(p: ServiceProviderParams):
op_code = p.op_code op_code = p.op_code
q = p.queue_helper q = p.queue_helper
info_prefix = "ACS Subsystem" info_prefix = "ACS Subsystem"
if op_code in OpCodes.REPORT_ALL_MODES: if op_code in OpCode.REPORT_ALL_MODES:
q.add_log_cmd(f"{info_prefix}: {Info.REPORT_ALL_MODES}") q.add_log_cmd(f"{info_prefix}: {Info.REPORT_ALL_MODES}")
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=200, service=200,
subservice=ModeSubservices.TC_MODE_ANNOUNCE_RECURSIVE, subservice=ModeSubservice.TC_MODE_ANNOUNCE_RECURSIVE,
app_data=PL_SUBSYSTEM_ID, app_data=PL_SUBSYSTEM_ID,
) )
) )
@ -60,6 +60,6 @@ def build_acs_subsystem_cmd(p: ServiceProviderParams):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_payload_subsystem_cmds(defs: TmtcDefinitionWrapper): def add_payload_subsystem_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(OpCodes.OFF, Info.OFF) oce.add(OpCode.OFF, Info.OFF)
oce.add(OpCodes.REPORT_ALL_MODES, Info.REPORT_ALL_MODES) oce.add(OpCode.REPORT_ALL_MODES, Info.REPORT_ALL_MODES)
defs.add_service(CustomServiceList.PL_SS, "Payload Subsystem", oce) defs.add_service(CustomServiceList.PL_SS, "Payload Subsystem", oce)

View File

@ -16,7 +16,7 @@ from tmtccmd.tc import DefaultPusQueueHelper
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
class ActionIds: class ActionId:
DUMP_MRAM = 1 DUMP_MRAM = 1
@ -43,7 +43,7 @@ def pack_ploc_memory_dumper_cmd(
def pack_mram_dump_cmd(object_id: bytes) -> bytearray: def pack_mram_dump_cmd(object_id: bytes) -> bytearray:
start = int(input("Start address: 0x"), 16) start = int(input("Start address: 0x"), 16)
end = int(input("End address: 0x"), 16) end = int(input("End address: 0x"), 16)
command = object_id + struct.pack("!I", ActionIds.DUMP_MRAM) command = object_id + struct.pack("!I", ActionId.DUMP_MRAM)
command = command + struct.pack("!I", start) command = command + struct.pack("!I", start)
command = command + struct.pack("!I", end) command = command + struct.pack("!I", end)
return bytearray(command) return bytearray(command)

View File

@ -21,7 +21,7 @@ from spacepackets.ecss.tc import PusTelecommand
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from eive_tmtc.utility.input_helper import InputHelper from eive_tmtc.utility.input_helper import InputHelper
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Mode
LOGGER = get_console_logger() LOGGER = get_console_logger()
@ -50,7 +50,7 @@ SEQ_FILE_DICT = {
CARRIAGE_RETURN = 0xD CARRIAGE_RETURN = 0xD
class CommandIds(enum.IntEnum): class CommandId(enum.IntEnum):
TC_MEM_WRITE = 1 TC_MEM_WRITE = 1
TC_MEM_READ = 2 TC_MEM_READ = 2
FLASH_WRITE = 9 FLASH_WRITE = 9
@ -68,7 +68,7 @@ class CommandIds(enum.IntEnum):
RELEASE_UART_TX = 21 RELEASE_UART_TX = 21
class OpCodes: class OpCode:
ON = ["on"] ON = ["on"]
OFF = ["off"] OFF = ["off"]
NORMAL = ["normal"] NORMAL = ["normal"]
@ -104,22 +104,22 @@ class PlocReplyIds(enum.IntEnum):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_ploc_mpsoc_cmds(defs: TmtcDefinitionWrapper): def add_ploc_mpsoc_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(OpCodes.OFF, Info.OFF) oce.add(OpCode.OFF, Info.OFF)
oce.add(OpCodes.ON, Info.ON) oce.add(OpCode.ON, Info.ON)
oce.add(OpCodes.NORMAL, Info.NORMAL) oce.add(OpCode.NORMAL, Info.NORMAL)
oce.add("3", "Ploc MPSoC: Memory write") oce.add("3", "Ploc MPSoC: Memory write")
oce.add("4", "Ploc MPSoC: Memory read") oce.add("4", "Ploc MPSoC: Memory read")
oce.add("5", "Ploc MPSoC: Flash write") oce.add("5", "Ploc MPSoC: Flash write")
oce.add("6", "Ploc MPSoC: Flash delete") oce.add("6", "Ploc MPSoC: Flash delete")
oce.add(OpCodes.REPLAY_START, Info.REPLAY_START) oce.add(OpCode.REPLAY_START, Info.REPLAY_START)
oce.add("8", "Ploc MPSoC: Replay stop") oce.add("8", "Ploc MPSoC: Replay stop")
oce.add(OpCodes.DOWNLINK_PWR_ON, Info.DOWNLINK_PWR_ON) oce.add(OpCode.DOWNLINK_PWR_ON, Info.DOWNLINK_PWR_ON)
oce.add("10", "Ploc MPSoC: Downlink pwr off") oce.add("10", "Ploc MPSoC: Downlink pwr off")
oce.add(OpCodes.REPLAY_WRITE_SEQ, Info.REPLAY_WRITE_SEQ) oce.add(OpCode.REPLAY_WRITE_SEQ, Info.REPLAY_WRITE_SEQ)
oce.add("12", "Ploc MPSoC: OBSW reset sequence count") oce.add("12", "Ploc MPSoC: OBSW reset sequence count")
oce.add(OpCodes.VERIFY_BOOT, "Ploc MPSoC: Read DEADBEEF address") oce.add(OpCode.VERIFY_BOOT, "Ploc MPSoC: Read DEADBEEF address")
oce.add(OpCodes.MODE_REPLAY, Info.MODE_REPLAY) oce.add(OpCode.MODE_REPLAY, Info.MODE_REPLAY)
oce.add(OpCodes.MODE_IDLE, Info.MODE_IDLE) oce.add(OpCode.MODE_IDLE, Info.MODE_IDLE)
oce.add("16", "Ploc MPSoC: Tc cam command send") oce.add("16", "Ploc MPSoC: Tc cam command send")
oce.add("17", "Ploc MPSoC: Set UART TX tristate") oce.add("17", "Ploc MPSoC: Set UART TX tristate")
oce.add("18", "Ploc MPSoC: Relesase UART TX") oce.add("18", "Ploc MPSoC: Relesase UART TX")
@ -136,17 +136,17 @@ def pack_ploc_mpsoc_commands(p: ServiceProviderParams):
f"Generate command for PLOC MPSoC with object id: {object_id.as_hex_string}" f"Generate command for PLOC MPSoC with object id: {object_id.as_hex_string}"
) )
obyt = object_id.as_bytes obyt = object_id.as_bytes
if op_code in OpCodes.OFF: if op_code in OpCode.OFF:
q.add_log_cmd(f"{prefix}: {Info.OFF}") q.add_log_cmd(f"{prefix}: {Info.OFF}")
command = pack_mode_data(obyt, Modes.OFF, 0) command = pack_mode_data(obyt, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCodes.ON: if op_code in OpCode.ON:
q.add_log_cmd(f"{prefix}: {Info.ON}") q.add_log_cmd(f"{prefix}: {Info.ON}")
data = pack_mode_data(obyt, Modes.ON, 0) data = pack_mode_data(obyt, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code in OpCodes.NORMAL: if op_code in OpCode.NORMAL:
q.add_log_cmd(f"{prefix}: {Info.NORMAL}") q.add_log_cmd(f"{prefix}: {Info.NORMAL}")
data = pack_mode_data(object_id.as_bytes, Modes.NORMAL, 0) data = pack_mode_data(object_id.as_bytes, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=data))
if op_code == "3": if op_code == "3":
q.add_log_cmd("PLOC MPSoC: TC mem write test") q.add_log_cmd("PLOC MPSoC: TC mem write test")
@ -172,64 +172,64 @@ def pack_ploc_mpsoc_commands(p: ServiceProviderParams):
q.add_log_cmd("PLOC MPSoC: Flash delete") q.add_log_cmd("PLOC MPSoC: Flash delete")
data = prepare_flash_delete_cmd(object_id.as_bytes) data = prepare_flash_delete_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCodes.REPLAY_START: if op_code in OpCode.REPLAY_START:
q.add_log_cmd(f"{prefix}: {Info.REPLAY_START}") q.add_log_cmd(f"{prefix}: {Info.REPLAY_START}")
data = prepare_replay_start_cmd(object_id.as_bytes) data = prepare_replay_start_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "8": if op_code == "8":
q.add_log_cmd("PLOC MPSoC: Replay stop") q.add_log_cmd("PLOC MPSoC: Replay stop")
data = object_id.as_bytes + struct.pack("!I", CommandIds.TC_REPLAY_STOP) data = object_id.as_bytes + struct.pack("!I", CommandId.TC_REPLAY_STOP)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCodes.DOWNLINK_PWR_ON: if op_code in OpCode.DOWNLINK_PWR_ON:
q.add_log_cmd(f"{prefix}: {OpCodes.DOWNLINK_PWR_ON}") q.add_log_cmd(f"{prefix}: {OpCode.DOWNLINK_PWR_ON}")
data = prepare_downlink_pwr_on_cmd(object_id.as_bytes) data = prepare_downlink_pwr_on_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "10": if op_code == "10":
q.add_log_cmd("PLOC MPSoC: Downlink pwr off") q.add_log_cmd("PLOC MPSoC: Downlink pwr off")
data = object_id.as_bytes + struct.pack("!I", CommandIds.TC_DOWNLINK_PWR_OFF) data = object_id.as_bytes + struct.pack("!I", CommandId.TC_DOWNLINK_PWR_OFF)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCodes.REPLAY_WRITE_SEQ: if op_code in OpCode.REPLAY_WRITE_SEQ:
q.add_log_cmd(f"{prefix}: {Info.REPLAY_WRITE_SEQ}") q.add_log_cmd(f"{prefix}: {Info.REPLAY_WRITE_SEQ}")
data = prepare_replay_write_sequence_cmd(object_id.as_bytes) data = prepare_replay_write_sequence_cmd(object_id.as_bytes)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "12": if op_code == "12":
q.add_log_cmd("PLOC MPSoC: Reset OBSW sequence count") q.add_log_cmd("PLOC MPSoC: Reset OBSW sequence count")
data = object_id.as_bytes + struct.pack("!I", CommandIds.OBSW_RESET_SEQ_COUNT) data = object_id.as_bytes + struct.pack("!I", CommandId.OBSW_RESET_SEQ_COUNT)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCodes.VERIFY_BOOT: if op_code in OpCode.VERIFY_BOOT:
num_words = 1 num_words = 1
q.add_log_cmd(f"{prefix} {Info.VERIFY_BOOT}") q.add_log_cmd(f"{prefix} {Info.VERIFY_BOOT}")
data = ( data = (
object_id.as_bytes object_id.as_bytes
+ struct.pack("!I", CommandIds.TC_MEM_READ) + struct.pack("!I", CommandId.TC_MEM_READ)
+ struct.pack("!I", MemAddresses.DEADBEEF) + struct.pack("!I", MemAddresses.DEADBEEF)
+ struct.pack("!H", num_words) + struct.pack("!H", num_words)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCodes.MODE_REPLAY: if op_code in OpCode.MODE_REPLAY:
q.add_log_cmd("PLOC MPSoC: Tc mode replay") q.add_log_cmd("PLOC MPSoC: Tc mode replay")
data = object_id.as_bytes + struct.pack("!I", CommandIds.TC_MODE_REPLAY) data = object_id.as_bytes + struct.pack("!I", CommandId.TC_MODE_REPLAY)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code in OpCodes.MODE_IDLE: if op_code in OpCode.MODE_IDLE:
q.add_log_cmd("PLOC MPSoC: Tc mode idle") q.add_log_cmd("PLOC MPSoC: Tc mode idle")
data = object_id.as_bytes + struct.pack("!I", CommandIds.TC_MODE_IDLE) data = object_id.as_bytes + struct.pack("!I", CommandId.TC_MODE_IDLE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "16": if op_code == "16":
q.add_log_cmd("PLOC MPSoC: Tc cam command send") q.add_log_cmd("PLOC MPSoC: Tc cam command send")
cam_cmd = input("Specify cam command string: ") cam_cmd = input("Specify cam command string: ")
data = ( data = (
object_id.as_bytes object_id.as_bytes
+ struct.pack("!I", CommandIds.TC_CAM_CMD_SEND) + struct.pack("!I", CommandId.TC_CAM_CMD_SEND)
+ bytearray(cam_cmd, "utf-8") + bytearray(cam_cmd, "utf-8")
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "17": if op_code == "17":
q.add_log_cmd("PLOC MPSoC: Set UART TX tristate") q.add_log_cmd("PLOC MPSoC: Set UART TX tristate")
data = object_id.as_bytes + struct.pack("!I", CommandIds.SET_UART_TX_TRISTATE) data = object_id.as_bytes + struct.pack("!I", CommandId.SET_UART_TX_TRISTATE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
if op_code == "18": if op_code == "18":
q.add_log_cmd("PLOC MPSoC: Release UART TX") q.add_log_cmd("PLOC MPSoC: Release UART TX")
data = object_id.as_bytes + struct.pack("!I", CommandIds.RELEASE_UART_TX) data = object_id.as_bytes + struct.pack("!I", CommandId.RELEASE_UART_TX)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=data))
@ -246,7 +246,7 @@ def generate_write_mem_command(
""" """
command = ( command = (
object_id object_id
+ struct.pack("!I", CommandIds.TC_MEM_WRITE) + struct.pack("!I", CommandId.TC_MEM_WRITE)
+ struct.pack("!I", memory_address) + struct.pack("!I", memory_address)
+ struct.pack("!H", mem_len) + struct.pack("!H", mem_len)
+ struct.pack("!I", memory_data) + struct.pack("!I", memory_data)
@ -259,7 +259,7 @@ def prepare_mem_read_command(object_id: bytes) -> bytearray:
num_words = int(input("PLOC MPSoC specify number of words (32-bit) to read: ")) num_words = int(input("PLOC MPSoC specify number of words (32-bit) to read: "))
command = ( command = (
object_id object_id
+ struct.pack("!I", CommandIds.TC_MEM_READ) + struct.pack("!I", CommandId.TC_MEM_READ)
+ struct.pack("!I", memory_address) + struct.pack("!I", memory_address)
+ struct.pack("!H", num_words) + struct.pack("!H", num_words)
) )
@ -271,7 +271,7 @@ def prepare_flash_write_cmd(object_id: bytes) -> bytearray:
mpsocFile = get_mpsoc_file() mpsocFile = get_mpsoc_file()
command = ( command = (
object_id object_id
+ struct.pack("!I", CommandIds.FLASH_WRITE) + struct.pack("!I", CommandId.FLASH_WRITE)
+ bytearray(obcFile, "utf-8") + bytearray(obcFile, "utf-8")
+ bytearray(mpsocFile, "utf-8") + bytearray(mpsocFile, "utf-8")
) )
@ -282,7 +282,7 @@ def prepare_flash_delete_cmd(object_id: bytes) -> bytearray:
file = get_mpsoc_file() file = get_mpsoc_file()
command = ( command = (
object_id object_id
+ struct.pack("!I", CommandIds.TC_FLASH_DELETE) + struct.pack("!I", CommandId.TC_FLASH_DELETE)
+ bytearray(file, "utf-8") + bytearray(file, "utf-8")
) )
return bytearray(command) return bytearray(command)
@ -292,7 +292,7 @@ def prepare_replay_start_cmd(object_id: bytes) -> bytearray:
replay = int(input("Specify replay mode (0 - once, 1 - repeated): ")) replay = int(input("Specify replay mode (0 - once, 1 - repeated): "))
command = ( command = (
object_id object_id
+ struct.pack("!I", CommandIds.TC_REPLAY_START) + struct.pack("!I", CommandId.TC_REPLAY_START)
+ struct.pack("!B", replay) + struct.pack("!B", replay)
) )
return bytearray(command) return bytearray(command)
@ -303,7 +303,7 @@ def prepare_downlink_pwr_on_cmd(object_id: bytes) -> bytearray:
lane_rate = int(input("Specify lane rate (0 - 9): ")) lane_rate = int(input("Specify lane rate (0 - 9): "))
command = ( command = (
object_id object_id
+ struct.pack("!I", CommandIds.TC_DOWNLINK_PWR_ON) + struct.pack("!I", CommandId.TC_DOWNLINK_PWR_ON)
+ struct.pack("!B", mode) + struct.pack("!B", mode)
+ struct.pack("!B", lane_rate) + struct.pack("!B", lane_rate)
) )
@ -315,7 +315,7 @@ def prepare_replay_write_sequence_cmd(object_id: bytes) -> bytearray:
file = get_sequence_file() file = get_sequence_file()
command = ( command = (
object_id object_id
+ struct.pack("!I", CommandIds.TC_REPLAY_WRITE_SEQUENCE) + struct.pack("!I", CommandId.TC_REPLAY_WRITE_SEQUENCE)
+ struct.pack("!B", use_decoding) + struct.pack("!B", use_decoding)
+ bytearray(file, "utf-8") + bytearray(file, "utf-8")
# + bytes([0]) # + bytes([0])

View File

@ -19,8 +19,8 @@ from tmtccmd.config.tmtc import tmtc_definitions_provider, OpCodeEntry
from tmtccmd.logging import get_console_logger from tmtccmd.logging import get_console_logger
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd.tc.pus_200_fsfw_modes import pack_mode_data, Modes from tmtccmd.pus.s200_fsfw_mode import pack_mode_data, Mode
from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from eive_tmtc.utility.input_helper import InputHelper from eive_tmtc.utility.input_helper import InputHelper
@ -83,7 +83,7 @@ FACTORY_RESET_OPS = {
} }
class SupvActionIds: class SupvActionId:
HK_REPORT = 1 HK_REPORT = 1
START_MPSOC = 3 START_MPSOC = 3
SHUTWOWN_MPSOC = 4 SHUTWOWN_MPSOC = 4
@ -232,19 +232,19 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
prefix = "PLOC Supervisor" prefix = "PLOC Supervisor"
if op_code in OpCodes.OFF: if op_code in OpCodes.OFF:
q.add_log_cmd(f"{prefix}: {Info.OFF}") q.add_log_cmd(f"{prefix}: {Info.OFF}")
command = pack_mode_data(object_id.as_bytes, Modes.OFF, 0) command = pack_mode_data(object_id.as_bytes, Mode.OFF, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCodes.ON: if op_code in OpCodes.ON:
q.add_log_cmd(f"{prefix}: {Info.ON}") q.add_log_cmd(f"{prefix}: {Info.ON}")
command = pack_mode_data(object_id.as_bytes, Modes.ON, 0) command = pack_mode_data(object_id.as_bytes, Mode.ON, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCodes.NORMAL: if op_code in OpCodes.NORMAL:
q.add_log_cmd(f"{prefix}: {Info.NML}") q.add_log_cmd(f"{prefix}: {Info.NML}")
command = pack_mode_data(object_id.as_bytes, Modes.NORMAL, 0) command = pack_mode_data(object_id.as_bytes, Mode.NORMAL, 0)
q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command)) q.add_pus_tc(PusTelecommand(service=200, subservice=1, app_data=command))
if op_code in OpCodes.HK_TO_OBC: if op_code in OpCodes.HK_TO_OBC:
q.add_log_cmd(f"{prefix}: {Info.HK_TO_OBC}") q.add_log_cmd(f"{prefix}: {Info.HK_TO_OBC}")
command = obyt + struct.pack("!I", SupvActionIds.HK_REPORT) command = obyt + struct.pack("!I", SupvActionId.HK_REPORT)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.REQUEST_HK: if op_code in OpCodes.REQUEST_HK:
q.add_log_cmd(f"{prefix}: {Info.REQUEST_HK}") q.add_log_cmd(f"{prefix}: {Info.REQUEST_HK}")
@ -253,11 +253,11 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
q.add_pus_tc(cmd) q.add_pus_tc(cmd)
elif op_code in OpCodes.START_MPSOC: elif op_code in OpCodes.START_MPSOC:
q.add_log_cmd("PLOC Supervisor: Start MPSoC") q.add_log_cmd("PLOC Supervisor: Start MPSoC")
command = obyt + struct.pack("!I", SupvActionIds.START_MPSOC) command = obyt + struct.pack("!I", SupvActionId.START_MPSOC)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.SHUTDOWN_MPSOC: if op_code in OpCodes.SHUTDOWN_MPSOC:
q.add_log_cmd("PLOC Supervisor: Shutdown MPSoC") q.add_log_cmd("PLOC Supervisor: Shutdown MPSoC")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.SHUTWOWN_MPSOC) command = object_id.as_bytes + struct.pack("!I", SupvActionId.SHUTWOWN_MPSOC)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.SEL_NVM: if op_code in OpCodes.SEL_NVM:
q.add_log_cmd("PLOC Supervisor: Select MPSoC boot image") q.add_log_cmd("PLOC Supervisor: Select MPSoC boot image")
@ -279,9 +279,9 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
print("Key invalid!") print("Key invalid!")
break break
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(
object_id=PLOC_SUPV_ID, object_id=PLOC_SUPV_ID,
action_id=SupvActionIds.FACTORY_RESET, action_id=SupvActionId.FACTORY_RESET,
user_data=bytes([key]), user_data=bytes([key]),
) )
) )
@ -290,35 +290,35 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
restart_tries = int(input("Specify maximum restart tries: ")) restart_tries = int(input("Specify maximum restart tries: "))
command = ( command = (
object_id.as_bytes object_id.as_bytes
+ struct.pack("!I", SupvActionIds.SET_MAX_RESTART_TRIES) + struct.pack("!I", SupvActionId.SET_MAX_RESTART_TRIES)
+ struct.pack("!B", restart_tries) + struct.pack("!B", restart_tries)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "9": if op_code == "9":
q.add_log_cmd("PLOC Supervisor: Reset MPSoC") q.add_log_cmd("PLOC Supervisor: Reset MPSoC")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.RESET_MPSOC) command = object_id.as_bytes + struct.pack("!I", SupvActionId.RESET_MPSOC)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.SET_TIME_REF: if op_code in OpCodes.SET_TIME_REF:
q.add_log_cmd("PLOC Supervisor: Set time reference") q.add_log_cmd("PLOC Supervisor: Set time reference")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.SET_TIME_REF) command = object_id.as_bytes + struct.pack("!I", SupvActionId.SET_TIME_REF)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "11": if op_code == "11":
q.add_log_cmd("PLOC Supervisor: Set boot timeout") q.add_log_cmd("PLOC Supervisor: Set boot timeout")
boot_timeout = int(input("Specify boot timeout [ms]: ")) boot_timeout = int(input("Specify boot timeout [ms]: "))
command = ( command = (
object_id.as_bytes object_id.as_bytes
+ struct.pack("!I", SupvActionIds.SET_BOOT_TIMEOUT) + struct.pack("!I", SupvActionId.SET_BOOT_TIMEOUT)
+ struct.pack("!I", boot_timeout) + struct.pack("!I", boot_timeout)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "12": if op_code == "12":
q.add_log_cmd("PLOC Supervisor: Disable HK") q.add_log_cmd("PLOC Supervisor: Disable HK")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.DISABLE_HK) command = object_id.as_bytes + struct.pack("!I", SupvActionId.DISABLE_HK)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.REQ_BOOT_STATUS_REPORT: if op_code in OpCodes.REQ_BOOT_STATUS_REPORT:
q.add_log_cmd(f"{prefix}: {Info.REQ_BOOT_STATUS_REPORT}") q.add_log_cmd(f"{prefix}: {Info.REQ_BOOT_STATUS_REPORT}")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.GET_BOOT_STATUS_REPORT "!I", SupvActionId.GET_BOOT_STATUS_REPORT
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
q.add_wait_seconds(2.0) q.add_wait_seconds(2.0)
@ -352,13 +352,13 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
if op_code == "26": if op_code == "26":
q.add_log_cmd("PLOC Supervisor: Request latchup status report") q.add_log_cmd("PLOC Supervisor: Request latchup status report")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.GET_LATCHUP_STATUS_REPORT "!I", SupvActionId.GET_LATCHUP_STATUS_REPORT
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "27": if op_code == "27":
q.add_log_cmd("PLOC Supervisor: Copy ADC data to MRAM") q.add_log_cmd("PLOC Supervisor: Copy ADC data to MRAM")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.COPY_ADC_DATA_TO_MRAM "!I", SupvActionId.COPY_ADC_DATA_TO_MRAM
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "30": if op_code == "30":
@ -380,7 +380,7 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
if op_code == "37": if op_code == "37":
q.add_log_cmd("PLOC Supervisor: Restart supervisor") q.add_log_cmd("PLOC Supervisor: Restart supervisor")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.RESTART_SUPERVISOR "!I", SupvActionId.RESTART_SUPERVISOR
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.START_UPDATE: if op_code in OpCodes.START_UPDATE:
@ -394,14 +394,12 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
if op_code == "43": if op_code == "43":
q.add_log_cmd("PLOC Supervisor: Terminate supervisor process") q.add_log_cmd("PLOC Supervisor: Terminate supervisor process")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.TERMINATE_SUPV_HELPER "!I", SupvActionId.TERMINATE_SUPV_HELPER
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "44": if op_code == "44":
q.add_log_cmd("PLOC Supervisor: Start MPSoC quiet") q.add_log_cmd("PLOC Supervisor: Start MPSoC quiet")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack("!I", SupvActionId.START_MPSOC_QUIET)
"!I", SupvActionIds.START_MPSOC_QUIET
)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "45": if op_code == "45":
q.add_log_cmd("PLOC Supervisor: Set shutdown timeout") q.add_log_cmd("PLOC Supervisor: Set shutdown timeout")
@ -409,15 +407,15 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.FACTORY_FLASH: if op_code in OpCodes.FACTORY_FLASH:
q.add_log_cmd(f"{prefix}: {Info.FACTORY_FLASH}") q.add_log_cmd(f"{prefix}: {Info.FACTORY_FLASH}")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.FACTORY_FLASH) command = object_id.as_bytes + struct.pack("!I", SupvActionId.FACTORY_FLASH)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "47": if op_code == "47":
q.add_log_cmd("PLOC Supervisor: Enable auto TM") q.add_log_cmd("PLOC Supervisor: Enable auto TM")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.ENABLE_AUTO_TM) command = object_id.as_bytes + struct.pack("!I", SupvActionId.ENABLE_AUTO_TM)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "48": if op_code == "48":
q.add_log_cmd("PLOC Supervisor: Disable auto TM") q.add_log_cmd("PLOC Supervisor: Disable auto TM")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.DISABLE_AUTO_TM) command = object_id.as_bytes + struct.pack("!I", SupvActionId.DISABLE_AUTO_TM)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "51": if op_code == "51":
q.add_log_cmd("PLOC Supervisor: Logging request event buffers") q.add_log_cmd("PLOC Supervisor: Logging request event buffers")
@ -426,7 +424,7 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
if op_code == "52": if op_code == "52":
q.add_log_cmd("PLOC Supervisor: Logging clear counters") q.add_log_cmd("PLOC Supervisor: Logging clear counters")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.LOGGING_CLEAR_COUNTERS "!I", SupvActionId.LOGGING_CLEAR_COUNTERS
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "53": if op_code == "53":
@ -436,18 +434,18 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
if op_code == "54": if op_code == "54":
q.add_log_cmd("PLOC Supervisor: Logging request counters") q.add_log_cmd("PLOC Supervisor: Logging request counters")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.LOGGING_REQUEST_COUNTERS "!I", SupvActionId.LOGGING_REQUEST_COUNTERS
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "55": if op_code == "55":
q.add_log_cmd("PLOC Supervisor: Request ADC report") q.add_log_cmd("PLOC Supervisor: Request ADC report")
command = object_id.as_bytes + struct.pack( command = object_id.as_bytes + struct.pack(
"!I", SupvActionIds.REQUEST_ADC_REPORT "!I", SupvActionId.REQUEST_ADC_REPORT
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "56": if op_code == "56":
q.add_log_cmd("PLOC Supervisor: Reset PL") q.add_log_cmd("PLOC Supervisor: Reset PL")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.RESET_PL) command = object_id.as_bytes + struct.pack("!I", SupvActionId.RESET_PL)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "57": if op_code == "57":
q.add_log_cmd("PLOC Supervisor: Enable NVMs") q.add_log_cmd("PLOC Supervisor: Enable NVMs")
@ -455,14 +453,14 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
nvm3 = int(input("Enable (1) or disable(0) NVM 3: ")) nvm3 = int(input("Enable (1) or disable(0) NVM 3: "))
command = ( command = (
object_id.as_bytes object_id.as_bytes
+ struct.pack("!I", SupvActionIds.ENABLE_NVMS) + struct.pack("!I", SupvActionId.ENABLE_NVMS)
+ struct.pack("B", nvm01) + struct.pack("B", nvm01)
+ struct.pack("B", nvm3) + struct.pack("B", nvm3)
) )
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code == "58": if op_code == "58":
q.add_log_cmd("PLOC Supervisor: Continue update") q.add_log_cmd("PLOC Supervisor: Continue update")
command = object_id.as_bytes + struct.pack("!I", SupvActionIds.CONTINUE_UPDATE) command = object_id.as_bytes + struct.pack("!I", SupvActionId.CONTINUE_UPDATE)
q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command)) q.add_pus_tc(PusTelecommand(service=8, subservice=128, app_data=command))
if op_code in OpCodes.MEM_CHECK: if op_code in OpCodes.MEM_CHECK:
custom_data = bytearray() custom_data = bytearray()
@ -477,8 +475,8 @@ def pack_ploc_supv_commands(p: ServiceProviderParams):
f"{prefix}: {Info.MEM_CHECK} for file {update_file} at memory ID {memory_id} at start " f"{prefix}: {Info.MEM_CHECK} for file {update_file} at memory ID {memory_id} at start "
f"address {start_address}" f"address {start_address}"
) )
command = make_fsfw_action_cmd( command = create_action_cmd(
object_id.as_bytes, SupvActionIds.MEM_CHECK, custom_data object_id.as_bytes, SupvActionId.MEM_CHECK, custom_data
) )
q.add_pus_tc(command) q.add_pus_tc(command)
@ -493,7 +491,7 @@ def pack_sel_boot_image_cmd(
@param bp1 Partition pin 1 @param bp1 Partition pin 1
@param bp2 Partition pin 2 @param bp2 Partition pin 2
""" """
command = object_id + struct.pack("!I", SupvActionIds.SEL_MPSOC_BOOT_IMAGE) command = object_id + struct.pack("!I", SupvActionId.SEL_MPSOC_BOOT_IMAGE)
command = command + struct.pack("!B", mem) command = command + struct.pack("!B", mem)
command = command + struct.pack("!B", bp0) command = command + struct.pack("!B", bp0)
command = command + struct.pack("!B", bp1) command = command + struct.pack("!B", bp1)
@ -511,7 +509,7 @@ def pack_update_available_cmd(object_id: bytes) -> bytearray:
image_size = 222 image_size = 222
image_crc = 0x0 image_crc = 0x0
number_of_packets = 150 number_of_packets = 150
command = object_id + struct.pack("!I", SupvActionIds.UPDATE_AVAILABLE) command = object_id + struct.pack("!I", SupvActionId.UPDATE_AVAILABLE)
command = command + struct.pack("!B", image_select) command = command + struct.pack("!B", image_select)
command = command + struct.pack("!B", image_partition) command = command + struct.pack("!B", image_partition)
command = command + struct.pack("!I", image_size) command = command + struct.pack("!I", image_size)
@ -529,9 +527,9 @@ def pack_lachtup_alert_cmd(object_id: bytes, state: bool) -> bytearray:
latchup_id = get_latchup_id() latchup_id = get_latchup_id()
command = bytearray() command = bytearray()
if state: if state:
command = object_id + struct.pack("!I", SupvActionIds.ENABLE_LATCHUP_ALERT) command = object_id + struct.pack("!I", SupvActionId.ENABLE_LATCHUP_ALERT)
else: else:
command = object_id + struct.pack("!I", SupvActionIds.DISABLE_LATCHUP_ALERT) command = object_id + struct.pack("!I", SupvActionId.DISABLE_LATCHUP_ALERT)
command = command + struct.pack("!B", latchup_id) command = command + struct.pack("!B", latchup_id)
return bytearray(command) return bytearray(command)
@ -560,7 +558,7 @@ def pack_set_alert_limit_cmd(object_id: bytes) -> bytearray:
latchup_id = get_latchup_id() latchup_id = get_latchup_id()
dutycycle = int(input("Specify dutycycle: ")) dutycycle = int(input("Specify dutycycle: "))
command = bytearray() command = bytearray()
command = object_id + struct.pack("!I", SupvActionIds.SET_ALERT_LIMIT) command = object_id + struct.pack("!I", SupvActionId.SET_ALERT_LIMIT)
command = command + struct.pack("!B", latchup_id) command = command + struct.pack("!B", latchup_id)
command = command + struct.pack("!I", dutycycle) command = command + struct.pack("!I", dutycycle)
return bytearray(command) return bytearray(command)
@ -572,7 +570,7 @@ def pack_set_adc_enabled_channels_cmd(object_id: bytes) -> bytearray:
@param object_id The object id of the PLOC supervisor handler. @param object_id The object id of the PLOC supervisor handler.
""" """
ch = int(input("Specify ch: 0x"), 16) ch = int(input("Specify ch: 0x"), 16)
cmd = object_id + struct.pack("!I", SupvActionIds.SET_ADC_ENABLED_CHANNELS) cmd = object_id + struct.pack("!I", SupvActionId.SET_ADC_ENABLED_CHANNELS)
cmd = cmd + struct.pack("!H", ch) cmd = cmd + struct.pack("!H", ch)
return bytearray(cmd) return bytearray(cmd)
@ -580,7 +578,7 @@ def pack_set_adc_enabled_channels_cmd(object_id: bytes) -> bytearray:
def pack_set_adc_window_and_stride_cmd(object_id: bytes) -> bytearray: def pack_set_adc_window_and_stride_cmd(object_id: bytes) -> bytearray:
window_size = int(input("Specify window size: ")) window_size = int(input("Specify window size: "))
striding_step_size = int(input("Specify striding step size: ")) striding_step_size = int(input("Specify striding step size: "))
command = object_id + struct.pack("!I", SupvActionIds.SET_ADC_WINDOW_AND_STRIDE) command = object_id + struct.pack("!I", SupvActionId.SET_ADC_WINDOW_AND_STRIDE)
command = command + struct.pack("!H", window_size) command = command + struct.pack("!H", window_size)
command = command + struct.pack("!H", striding_step_size) command = command + struct.pack("!H", striding_step_size)
return bytearray(command) return bytearray(command)
@ -588,21 +586,21 @@ def pack_set_adc_window_and_stride_cmd(object_id: bytes) -> bytearray:
def pack_set_adc_threshold_cmd(object_id: bytes) -> bytearray: def pack_set_adc_threshold_cmd(object_id: bytes) -> bytearray:
threshold = int(input("Specify threshold: ")) threshold = int(input("Specify threshold: "))
command = object_id + struct.pack("!I", SupvActionIds.SET_ADC_THRESHOLD) command = object_id + struct.pack("!I", SupvActionId.SET_ADC_THRESHOLD)
command = command + struct.pack("!I", threshold) command = command + struct.pack("!I", threshold)
return bytearray(command) return bytearray(command)
def pack_select_nvm_cmd(object_id: bytes) -> bytearray: def pack_select_nvm_cmd(object_id: bytes) -> bytearray:
mem = int(input("Specify NVM (0 - NVM0, 1 - MVM1): ")) mem = int(input("Specify NVM (0 - NVM0, 1 - MVM1): "))
command = object_id + struct.pack("!I", SupvActionIds.SELECT_NVM) command = object_id + struct.pack("!I", SupvActionId.SELECT_NVM)
command = command + struct.pack("!B", mem) command = command + struct.pack("!B", mem)
return bytearray(command) return bytearray(command)
def pack_auto_em_tests_cmd(object_id: bytes) -> bytearray: def pack_auto_em_tests_cmd(object_id: bytes) -> bytearray:
test = int(input("Specify test (1 - complete, 2 - short): ")) test = int(input("Specify test (1 - complete, 2 - short): "))
command = object_id + struct.pack("!I", SupvActionIds.RUN_AUTO_EM_TESTS) command = object_id + struct.pack("!I", SupvActionId.RUN_AUTO_EM_TESTS)
command = command + struct.pack("!B", test) command = command + struct.pack("!B", test)
return bytearray(command) return bytearray(command)
@ -610,7 +608,7 @@ def pack_auto_em_tests_cmd(object_id: bytes) -> bytearray:
def pack_mram_wipe_cmd(object_id: bytes) -> bytearray: def pack_mram_wipe_cmd(object_id: bytes) -> bytearray:
start = int(input("Start address: 0x"), 16) start = int(input("Start address: 0x"), 16)
stop = int(input("Stop address: 0x"), 16) stop = int(input("Stop address: 0x"), 16)
command = object_id + struct.pack("!I", SupvActionIds.WIPE_MRAM) command = object_id + struct.pack("!I", SupvActionId.WIPE_MRAM)
command = command + struct.pack("!I", start) command = command + struct.pack("!I", start)
command = command + struct.pack("!I", stop) command = command + struct.pack("!I", stop)
return bytearray(command) return bytearray(command)
@ -642,7 +640,7 @@ def pack_update_command(object_id: bytes, new_update: bool) -> bytearray:
else: else:
raise ValueError("Invalid input, use y or n") raise ValueError("Invalid input, use y or n")
command += object_id command += object_id
command += struct.pack("!I", SupvActionIds.PERFORM_UPDATE) command += struct.pack("!I", SupvActionId.PERFORM_UPDATE)
command += bytearray(update_file, "utf-8") command += bytearray(update_file, "utf-8")
# Adding null terminator # Adding null terminator
command += struct.pack("!B", 0) command += struct.pack("!B", 0)
@ -657,7 +655,7 @@ def pack_update_command(object_id: bytes, new_update: bool) -> bytearray:
def pack_set_shutdown_timeout_command(object_id: bytes) -> bytearray: def pack_set_shutdown_timeout_command(object_id: bytes) -> bytearray:
command = bytearray() command = bytearray()
command += object_id command += object_id
command += struct.pack("!I", SupvActionIds.SET_SHUTDOWN_TIMEOUT) command += struct.pack("!I", SupvActionId.SET_SHUTDOWN_TIMEOUT)
timeout = int(input("Specify shutdown timeout (ms): ")) timeout = int(input("Specify shutdown timeout (ms): "))
command += struct.pack("!I", timeout) command += struct.pack("!I", timeout)
return command return command
@ -666,7 +664,7 @@ def pack_set_shutdown_timeout_command(object_id: bytes) -> bytearray:
def pack_logging_buffer_request(object_id: bytes) -> bytearray: def pack_logging_buffer_request(object_id: bytes) -> bytearray:
command = bytearray() command = bytearray()
command += object_id command += object_id
command += struct.pack("!I", SupvActionIds.LOGGING_REQUEST_EVENT_BUFFERS) command += struct.pack("!I", SupvActionId.LOGGING_REQUEST_EVENT_BUFFERS)
path = get_event_buffer_path() path = get_event_buffer_path()
command += bytearray(path, "utf-8") command += bytearray(path, "utf-8")
return command return command
@ -676,7 +674,7 @@ def pack_set_gpio_cmd(object_id: bytes) -> bytearray:
port = int(input("Specify port: 0x"), 16) port = int(input("Specify port: 0x"), 16)
pin = int(input("Specify pin: 0x"), 16) pin = int(input("Specify pin: 0x"), 16)
val = int(input("Specify val: 0x"), 16) val = int(input("Specify val: 0x"), 16)
command = object_id + struct.pack("!I", SupvActionIds.SET_GPIO) command = object_id + struct.pack("!I", SupvActionId.SET_GPIO)
command = command + struct.pack("!B", port) command = command + struct.pack("!B", port)
command = command + struct.pack("!B", pin) command = command + struct.pack("!B", pin)
command = command + struct.pack("!B", val) command = command + struct.pack("!B", val)
@ -686,14 +684,14 @@ def pack_set_gpio_cmd(object_id: bytes) -> bytearray:
def pack_read_gpio_cmd(object_id: bytes) -> bytearray: def pack_read_gpio_cmd(object_id: bytes) -> bytearray:
port = int(input("Specify port: 0x"), 16) port = int(input("Specify port: 0x"), 16)
pin = int(input("Specify pin: 0x"), 16) pin = int(input("Specify pin: 0x"), 16)
command = object_id + struct.pack("!I", SupvActionIds.READ_GPIO) command = object_id + struct.pack("!I", SupvActionId.READ_GPIO)
command = command + struct.pack("!B", port) command = command + struct.pack("!B", port)
command = command + struct.pack("!B", pin) command = command + struct.pack("!B", pin)
return bytearray(command) return bytearray(command)
def pack_logging_set_topic(object_id: bytes) -> bytearray: def pack_logging_set_topic(object_id: bytes) -> bytearray:
command = object_id + struct.pack("!I", SupvActionIds.LOGGING_SET_TOPIC) command = object_id + struct.pack("!I", SupvActionId.LOGGING_SET_TOPIC)
tpc = int(input("Specify logging topic: ")) tpc = int(input("Specify logging topic: "))
command += struct.pack("!B", tpc) command += struct.pack("!B", tpc)
return bytearray(command) return bytearray(command)

View File

@ -42,7 +42,7 @@ class ACUHkTable:
wdt_gnd_left = gs.TableEntry(bytearray([0x00, 0x74]), gs.TableEntry.uint32_size) wdt_gnd_left = gs.TableEntry(bytearray([0x00, 0x74]), gs.TableEntry.uint32_size)
class OpCodes: class OpCode:
TEST = ["0", "test"] TEST = ["0", "test"]
@ -55,7 +55,7 @@ def add_acu_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
add_gomspace_cmd_defs(oce) add_gomspace_cmd_defs(oce)
oce.add(keys=OpCodes.TEST, info=Info.TEST) oce.add(keys=OpCode.TEST, info=Info.TEST)
defs.add_service( defs.add_service(
name=CustomServiceList.ACU.value, name=CustomServiceList.ACU.value,
info="ACU Device", info="ACU Device",

View File

@ -4,7 +4,7 @@ from typing import List
from eive_tmtc.gomspace.gomspace_common import ( from eive_tmtc.gomspace.gomspace_common import (
pack_set_u8_param_command, pack_set_u8_param_command,
Channel, Channel,
GomspaceDeviceActionIds, GomspaceDeviceActionId,
prompt_and_pack_set_integer_param_command, prompt_and_pack_set_integer_param_command,
prompt_and_pack_get_param_command, prompt_and_pack_get_param_command,
pack_request_config_command, pack_request_config_command,
@ -23,11 +23,11 @@ from tmtccmd.tc.pus_3_fsfw_hk import (
enable_periodic_hk_command_with_interval, enable_periodic_hk_command_with_interval,
disable_periodic_hk_command, disable_periodic_hk_command,
) )
from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.util import ObjectIdU32, ObjectIdBase from tmtccmd.util import ObjectIdU32, ObjectIdBase
class GomspaceOpCodes: class GomspaceOpCode:
GET_PARAM = ["get_param"] GET_PARAM = ["get_param"]
SET_INTEGER_PARAM = ["set_int_param"] SET_INTEGER_PARAM = ["set_int_param"]
SAVE_TABLE = ["save_table"] SAVE_TABLE = ["save_table"]
@ -53,6 +53,7 @@ class PowerInfo:
INFO_CORE = "Core Information" INFO_CORE = "Core Information"
INFO_AUX = "Auxiliary Information" INFO_AUX = "Auxiliary Information"
INFO_ALL = "All Information" INFO_ALL = "All Information"
REQUEST_SWITCHER_SET = "Request Switcher Information"
ENABLE_INFO_HK = "Enable Core Info HK" ENABLE_INFO_HK = "Enable Core Info HK"
DISABLE_INFO_HK = "Disable Core Info HK" DISABLE_INFO_HK = "Disable Core Info HK"
RESET_ALL_GND_WDTS = "Reset all Ground Watchdogs" RESET_ALL_GND_WDTS = "Reset all Ground Watchdogs"
@ -101,6 +102,7 @@ class PowerOpCodes:
REBOOT = ["reboot"] REBOOT = ["reboot"]
INFO_CORE = ["info"] INFO_CORE = ["info"]
REQUEST_SWITCHER_SET = ["request_switchers"]
ENABLE_INFO_HK = ["info_hk_on"] ENABLE_INFO_HK = ["info_hk_on"]
DISABLE_INFO_HK = ["info_hk_off"] DISABLE_INFO_HK = ["info_hk_off"]
INFO_AUX = ["info_aux"] INFO_AUX = ["info_aux"]
@ -143,8 +145,8 @@ def pack_common_gomspace_cmds(
if op_code in PowerOpCodes.PRINT_SWITCH_V_I: if op_code in PowerOpCodes.PRINT_SWITCH_V_I:
q.add_log_cmd(f"{prefix}: {PowerInfo.PRINT_SWITCH_V_I}") q.add_log_cmd(f"{prefix}: {PowerInfo.PRINT_SWITCH_V_I}")
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(
object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_SWITCH_V_I object_id=objb, action_id=GomspaceDeviceActionId.PRINT_SWITCH_V_I
) )
) )
if op_code in PowerOpCodes.REBOOT: if op_code in PowerOpCodes.REBOOT:
@ -153,24 +155,24 @@ def pack_common_gomspace_cmds(
if op_code in PowerOpCodes.PRINT_LATCHUPS: if op_code in PowerOpCodes.PRINT_LATCHUPS:
q.add_log_cmd(f"{prefix}: {PowerInfo.PRINT_LATCHUPS}") q.add_log_cmd(f"{prefix}: {PowerInfo.PRINT_LATCHUPS}")
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(
object_id=objb, action_id=GomspaceDeviceActionIds.PRINT_LATCHUPS object_id=objb, action_id=GomspaceDeviceActionId.PRINT_LATCHUPS
) )
) )
if op_code in GomspaceOpCodes.SET_INTEGER_PARAM: if op_code in GomspaceOpCode.SET_INTEGER_PARAM:
q.add_log_cmd(f"{prefix}: {GsInfo.SET_PARAMETER}") q.add_log_cmd(f"{prefix}: {GsInfo.SET_PARAMETER}")
print("Please specify the parameter type from index") print("Please specify the parameter type from index")
for idx, v in enumerate(ParamTypes): for idx, v in enumerate(ParamTypes):
print(f"{idx}: {v.name}") print(f"{idx}: {v.name}")
ptype = int(input("Index: ")) ptype = int(input("Index: "))
prompt_and_pack_set_integer_param_command(q, object_id, ParamTypes(ptype)) prompt_and_pack_set_integer_param_command(q, object_id, ParamTypes(ptype))
if op_code in GomspaceOpCodes.GET_PARAM: if op_code in GomspaceOpCode.GET_PARAM:
q.add_log_cmd(f"{prefix}: {GsInfo.GET_PARAMETER}") q.add_log_cmd(f"{prefix}: {GsInfo.GET_PARAMETER}")
prompt_and_pack_get_param_command(q, object_id) prompt_and_pack_get_param_command(q, object_id)
if op_code in GomspaceOpCodes.REQUEST_CONFIG_TABLE: if op_code in GomspaceOpCode.REQUEST_CONFIG_TABLE:
q.add_log_cmd(f"{prefix}: {GsInfo.REQUEST_CONFIG_TABLE}") q.add_log_cmd(f"{prefix}: {GsInfo.REQUEST_CONFIG_TABLE}")
q.add_pus_tc(pack_request_config_command(object_id.as_bytes)) q.add_pus_tc(pack_request_config_command(object_id.as_bytes))
if op_code in GomspaceOpCodes.SAVE_TABLE: if op_code in GomspaceOpCode.SAVE_TABLE:
q.add_log_cmd(f"{prefix}: {GsInfo.SAVE_TABLE}") q.add_log_cmd(f"{prefix}: {GsInfo.SAVE_TABLE}")
source_table = int( source_table = int(
input( input(
@ -187,13 +189,13 @@ def pack_common_gomspace_cmds(
)) ))
""" """
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(
object_id=object_id.as_bytes, object_id=object_id.as_bytes,
action_id=GomspaceDeviceActionIds.SAVE_TABLE, action_id=GomspaceDeviceActionId.SAVE_TABLE,
user_data=bytes([source_table]), user_data=bytes([source_table]),
) )
) )
if op_code in GomspaceOpCodes.SAVE_TABLE_DEFAULT: if op_code in GomspaceOpCode.SAVE_TABLE_DEFAULT:
source_table = int( source_table = int(
input( input(
"Source table [0: Board Config, 1: Module Config, 2: Calibration Parameter]: " "Source table [0: Board Config, 1: Module Config, 2: Calibration Parameter]: "
@ -202,13 +204,13 @@ def pack_common_gomspace_cmds(
if source_table not in [0, 1, 2]: if source_table not in [0, 1, 2]:
raise ValueError("Invalid source table index") raise ValueError("Invalid source table index")
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(
object_id=object_id.as_bytes, object_id=object_id.as_bytes,
action_id=GomspaceDeviceActionIds.SAVE_TABLE_DEFAULT, action_id=GomspaceDeviceActionId.SAVE_TABLE_DEFAULT,
user_data=bytes([source_table]), user_data=bytes([source_table]),
) )
) )
if op_code in GomspaceOpCodes.LOAD_TABLE: if op_code in GomspaceOpCode.LOAD_TABLE:
target_table = int( target_table = int(
input( input(
"Target table ID [0: Board Config, 1: Module Config, 2: Calibration Parameter, " "Target table ID [0: Board Config, 1: Module Config, 2: Calibration Parameter, "
@ -230,13 +232,13 @@ def pack_common_gomspace_cmds(
# Will be ignored # Will be ignored
source_table = 4 source_table = 4
q.add_pus_tc( q.add_pus_tc(
make_fsfw_action_cmd( create_action_cmd(
object_id=object_id.as_bytes, object_id=object_id.as_bytes,
action_id=GomspaceDeviceActionIds.LOAD_TABLE, action_id=GomspaceDeviceActionId.LOAD_TABLE,
user_data=bytes([source_table, target_table]), user_data=bytes([source_table, target_table]),
) )
) )
if op_code in GomspaceOpCodes.RESET_GND_WATCHDOG: if op_code in GomspaceOpCode.RESET_GND_WATCHDOG:
q.add_log_cmd(f"{prefix}: {GsInfo.RESET_GND_WATCHDOG}") q.add_log_cmd(f"{prefix}: {GsInfo.RESET_GND_WATCHDOG}")
q.add_pus_tc(pack_gnd_wdt_reset_command(object_id)) q.add_pus_tc(pack_gnd_wdt_reset_command(object_id))
@ -316,14 +318,14 @@ def add_gomspace_cmd_defs(oce: OpCodeEntry):
info=PowerInfo.REQUEST_AUX_HK_ONCE, info=PowerInfo.REQUEST_AUX_HK_ONCE,
) )
oce.add(keys=PowerOpCodes.PRINT_LATCHUPS, info=PowerInfo.PRINT_LATCHUPS) oce.add(keys=PowerOpCodes.PRINT_LATCHUPS, info=PowerInfo.PRINT_LATCHUPS)
oce.add(keys=GomspaceOpCodes.GET_PARAM, info=GsInfo.GET_PARAMETER) oce.add(keys=GomspaceOpCode.GET_PARAM, info=GsInfo.GET_PARAMETER)
oce.add(keys=GomspaceOpCodes.REBOOT, info=GsInfo.REBOOT) oce.add(keys=GomspaceOpCode.REBOOT, info=GsInfo.REBOOT)
oce.add(keys=GomspaceOpCodes.SET_INTEGER_PARAM, info=GsInfo.SET_PARAMETER) oce.add(keys=GomspaceOpCode.SET_INTEGER_PARAM, info=GsInfo.SET_PARAMETER)
oce.add(keys=GomspaceOpCodes.REQUEST_CONFIG_TABLE, info=GsInfo.REQUEST_CONFIG_TABLE) oce.add(keys=GomspaceOpCode.REQUEST_CONFIG_TABLE, info=GsInfo.REQUEST_CONFIG_TABLE)
oce.add(keys=GomspaceOpCodes.SAVE_TABLE, info=GsInfo.SAVE_TABLE) oce.add(keys=GomspaceOpCode.SAVE_TABLE, info=GsInfo.SAVE_TABLE)
oce.add(keys=GomspaceOpCodes.SAVE_TABLE_DEFAULT, info=GsInfo.SAVE_TABLE_DEFAULT) oce.add(keys=GomspaceOpCode.SAVE_TABLE_DEFAULT, info=GsInfo.SAVE_TABLE_DEFAULT)
oce.add(keys=GomspaceOpCodes.LOAD_TABLE, info=GsInfo.LOAD_TABLE) oce.add(keys=GomspaceOpCode.LOAD_TABLE, info=GsInfo.LOAD_TABLE)
oce.add(keys=GomspaceOpCodes.RESET_GND_WATCHDOG, info=GsInfo.RESET_GND_WATCHDOG) oce.add(keys=GomspaceOpCode.RESET_GND_WATCHDOG, info=GsInfo.RESET_GND_WATCHDOG)
OBC_ENDIANNESS = "<" OBC_ENDIANNESS = "<"

View File

@ -27,7 +27,7 @@ from eive_tmtc.config.object_ids import P60_DOCK_HANDLER
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
class P60OpCodes: class P60OpCode:
STACK_3V3_ON = ["stack_3v3_on", "1"] STACK_3V3_ON = ["stack_3v3_on", "1"]
STACK_3V3_OFF = ["stack_3v3_off", "2"] STACK_3V3_OFF = ["stack_3v3_off", "2"]
STACK_5V_ON = ["stack_5v_on", "3"] STACK_5V_ON = ["stack_5v_on", "3"]
@ -103,7 +103,7 @@ def pack_p60dock_cmds(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code:
pack_common_power_cmds("P60 Dock", object_id, q, op_code) pack_common_power_cmds("P60 Dock", object_id, q, op_code)
pack_common_gomspace_cmds("P60 Dock", object_id, q, op_code) pack_common_gomspace_cmds("P60 Dock", object_id, q, op_code)
p60_dock_req_hk_cmds(q, op_code) p60_dock_req_hk_cmds(q, op_code)
if op_code in P60OpCodes.STACK_3V3_ON: if op_code in P60OpCode.STACK_3V3_ON:
q.add_log_cmd(P60Info.STACK_3V3_ON) q.add_log_cmd(P60Info.STACK_3V3_ON)
q.add_pus_tc( q.add_pus_tc(
pack_set_u8_param_command( pack_set_u8_param_command(
@ -112,7 +112,7 @@ def pack_p60dock_cmds(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code:
Channel.on, Channel.on,
) )
) )
if op_code in P60OpCodes.STACK_3V3_OFF: if op_code in P60OpCode.STACK_3V3_OFF:
q.add_log_cmd(P60Info.STACK_3V3_OFF) q.add_log_cmd(P60Info.STACK_3V3_OFF)
q.add_pus_tc( q.add_pus_tc(
pack_set_u8_param_command( pack_set_u8_param_command(
@ -121,7 +121,7 @@ def pack_p60dock_cmds(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code:
Channel.off, Channel.off,
) )
) )
if op_code in P60OpCodes.STACK_5V_ON: if op_code in P60OpCode.STACK_5V_ON:
q.add_log_cmd(P60Info.STACK_5V_ON) q.add_log_cmd(P60Info.STACK_5V_ON)
q.add_pus_tc( q.add_pus_tc(
pack_set_u8_param_command( pack_set_u8_param_command(
@ -130,7 +130,7 @@ def pack_p60dock_cmds(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code:
Channel.on, Channel.on,
) )
) )
if op_code in P60OpCodes.STACK_5V_OFF: if op_code in P60OpCode.STACK_5V_OFF:
q.add_log_cmd(P60Info.STACK_5V_OFF) q.add_log_cmd(P60Info.STACK_5V_OFF)
q.add_pus_tc( q.add_pus_tc(
pack_set_u8_param_command( pack_set_u8_param_command(

View File

@ -15,7 +15,7 @@ from eive_tmtc.tmtc.power.common_power import (
create_generic_on_cmd, create_generic_on_cmd,
create_generic_off_cmd, create_generic_off_cmd,
pack_common_power_cmds, pack_common_power_cmds,
GomspaceOpCodes, GomspaceOpCode,
GsInfo, GsInfo,
PowerInfo, PowerInfo,
add_common_power_defs, add_common_power_defs,
@ -166,7 +166,7 @@ def add_pdu1_cmds(defs: TmtcDefinitionWrapper):
keys=PowerOpCodes.PRINT_SWITCH_V_I, keys=PowerOpCodes.PRINT_SWITCH_V_I,
info="PDU1: Print Switches, Voltages, Currents", info="PDU1: Print Switches, Voltages, Currents",
) )
oce.add(keys=GomspaceOpCodes.GET_PARAM, info=GsInfo.GET_PARAMETER) oce.add(keys=GomspaceOpCode.GET_PARAM, info=GsInfo.GET_PARAMETER)
defs.add_service( defs.add_service(
name=CustomServiceList.PDU1.value, name=CustomServiceList.PDU1.value,

View File

@ -79,7 +79,7 @@ class PDU2TestProcedure:
def pack_pdu2_commands(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str): def pack_pdu2_commands(object_id: ObjectIdU32, q: DefaultPusQueueHelper, op_code: str):
q.add_log_cmd("Testing PDU2") q.add_log_cmd("Testing PDU2")
objb = object_id.as_bytes objb = object_id.as_bytes
pdu2_cmds(q, op_code) pdu2_switch_cmds(q, op_code)
pdu2_req_hk_cmds(q, op_code) pdu2_req_hk_cmds(q, op_code)
pack_common_power_cmds("PDU2", object_id, q, op_code) pack_common_power_cmds("PDU2", object_id, q, op_code)
pack_common_gomspace_cmds("PDU2", object_id, q, op_code) pack_common_gomspace_cmds("PDU2", object_id, q, op_code)
@ -159,7 +159,7 @@ def add_pdu2_cmds(defs: TmtcDefinitionWrapper):
) )
def pdu2_cmds(q: DefaultPusQueueHelper, op_code: str): def pdu2_switch_cmds(q: DefaultPusQueueHelper, op_code: str):
if op_code in PowerOpCodes.PL_PCDU_VBAT_NOM_ON: if op_code in PowerOpCodes.PL_PCDU_VBAT_NOM_ON:
pl_pcdu_bat_nom_on_cmd(q) pl_pcdu_bat_nom_on_cmd(q)
elif op_code in PowerOpCodes.PL_PCDU_VBAT_NOM_OFF: elif op_code in PowerOpCodes.PL_PCDU_VBAT_NOM_OFF:

View File

@ -1,3 +1,5 @@
import enum
from eive_tmtc.tmtc.power.common_power import ( from eive_tmtc.tmtc.power.common_power import (
PowerOpCodes, PowerOpCodes,
PowerInfo, PowerInfo,
@ -10,6 +12,7 @@ from eive_tmtc.config.object_ids import (
ACU_HANDLER_ID, ACU_HANDLER_ID,
PDU_1_HANDLER_ID, PDU_1_HANDLER_ID,
PDU_2_HANDLER_ID, PDU_2_HANDLER_ID,
PCDU_HANDLER_ID,
get_object_ids, get_object_ids,
) )
from eive_tmtc.tmtc.power.pdu1 import ( from eive_tmtc.tmtc.power.pdu1 import (
@ -21,14 +24,15 @@ from eive_tmtc.tmtc.power.pdu1 import (
from eive_tmtc.tmtc.power.pdu2 import ( from eive_tmtc.tmtc.power.pdu2 import (
pdu2_req_hk_cmds, pdu2_req_hk_cmds,
add_pdu2_common_defs, add_pdu2_common_defs,
pdu2_cmds, pdu2_switch_cmds,
add_pdu2_cmds, add_pdu2_cmds,
) )
from tmtccmd import get_console_logger from tmtccmd import get_console_logger
from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry from tmtccmd.config import TmtcDefinitionWrapper, OpCodeEntry
from eive_tmtc.tmtc.power.p60dock import P60OpCodes, P60Info, p60_dock_req_hk_cmds from eive_tmtc.tmtc.power.p60dock import P60OpCode, P60Info, p60_dock_req_hk_cmds
from eive_tmtc.tmtc.power.acu import add_acu_cmds, acu_req_hk_cmds from eive_tmtc.tmtc.power.acu import add_acu_cmds, acu_req_hk_cmds
from tmtccmd.tc.pus_3_fsfw_hk import create_request_one_diag_command, make_sid
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper from tmtccmd.tc import DefaultPusQueueHelper
@ -36,9 +40,13 @@ from tmtccmd.tc import DefaultPusQueueHelper
LOGGER = get_console_logger() LOGGER = get_console_logger()
class SetId(enum.IntEnum):
SWITCHER_SET = 0
def pack_power_commands(q: DefaultPusQueueHelper, op_code: str): def pack_power_commands(q: DefaultPusQueueHelper, op_code: str):
pdu1_switch_cmds(q, op_code) pdu1_switch_cmds(q, op_code)
pdu2_cmds(q, op_code) pdu2_switch_cmds(q, op_code)
if op_code in PowerOpCodes.INFO_CORE: if op_code in PowerOpCodes.INFO_CORE:
pdu1_req_hk_cmds(q, PowerOpCodes.REQUEST_CORE_HK_ONCE[0]) pdu1_req_hk_cmds(q, PowerOpCodes.REQUEST_CORE_HK_ONCE[0])
pdu2_req_hk_cmds(q, PowerOpCodes.REQUEST_CORE_HK_ONCE[0]) pdu2_req_hk_cmds(q, PowerOpCodes.REQUEST_CORE_HK_ONCE[0])
@ -68,6 +76,13 @@ def pack_power_commands(q: DefaultPusQueueHelper, op_code: str):
pack_reset_gnd_wdt_cmd(q, "PDU1", oids[PDU_1_HANDLER_ID]) pack_reset_gnd_wdt_cmd(q, "PDU1", oids[PDU_1_HANDLER_ID])
pack_reset_gnd_wdt_cmd(q, "PDU2", oids[PDU_2_HANDLER_ID]) pack_reset_gnd_wdt_cmd(q, "PDU2", oids[PDU_2_HANDLER_ID])
q.add_wait_seconds(5.0) q.add_wait_seconds(5.0)
elif op_code in PowerOpCodes.REQUEST_SWITCHER_SET:
q.add_log_cmd("PCDU: Requesting Switcher Set")
q.add_pus_tc(
create_request_one_diag_command(
make_sid(PCDU_HANDLER_ID, SetId.SWITCHER_SET)
)
)
if q.empty(): if q.empty():
LOGGER.info(f"Queue is empty, no stack for op code {op_code}") LOGGER.info(f"Queue is empty, no stack for op code {op_code}")
@ -75,12 +90,12 @@ def pack_power_commands(q: DefaultPusQueueHelper, op_code: str):
@tmtc_definitions_provider @tmtc_definitions_provider
def add_p60_cmds(defs: TmtcDefinitionWrapper): def add_p60_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=P60OpCodes.STACK_3V3_ON, info=P60Info.STACK_3V3_ON) oce.add(keys=P60OpCode.STACK_3V3_ON, info=P60Info.STACK_3V3_ON)
oce.add(keys=P60OpCodes.STACK_3V3_OFF, info=P60Info.STACK_3V3_OFF) oce.add(keys=P60OpCode.STACK_3V3_OFF, info=P60Info.STACK_3V3_OFF)
oce.add(keys=P60OpCodes.STACK_5V_ON, info=P60Info.STACK_5V_ON) oce.add(keys=P60OpCode.STACK_5V_ON, info=P60Info.STACK_5V_ON)
oce.add(keys=P60OpCodes.STACK_5V_OFF, info=P60Info.STACK_5V_OFF) oce.add(keys=P60OpCode.STACK_5V_OFF, info=P60Info.STACK_5V_OFF)
add_gomspace_cmd_defs(oce) add_gomspace_cmd_defs(oce)
oce.add(keys=P60OpCodes.TEST, info="P60 Tests") oce.add(keys=P60OpCode.TEST, info="P60 Tests")
defs.add_service( defs.add_service(
name=CustomServiceList.P60DOCK.value, info="P60 Device", op_code_entry=oce name=CustomServiceList.P60DOCK.value, info="P60 Device", op_code_entry=oce
) )
@ -94,6 +109,7 @@ def add_power_cmd_defs(defs: TmtcDefinitionWrapper):
oce.add(keys=PowerOpCodes.INFO_ALL, info=PowerInfo.INFO_ALL) 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_CORE, info=PowerInfo.INFO_CORE)
oce.add(keys=PowerOpCodes.INFO_AUX, info=PowerInfo.INFO_AUX) oce.add(keys=PowerOpCodes.INFO_AUX, info=PowerInfo.INFO_AUX)
oce.add(keys=PowerOpCodes.REQUEST_SWITCHER_SET, info=PowerInfo.REQUEST_SWITCHER_SET)
oce.add(keys=PowerOpCodes.RESET_ALL_GND_WDTS, info=PowerInfo.RESET_ALL_GND_WDTS) oce.add(keys=PowerOpCodes.RESET_ALL_GND_WDTS, info=PowerInfo.RESET_ALL_GND_WDTS)
defs.add_service( defs.add_service(
name=CustomServiceList.POWER.value, name=CustomServiceList.POWER.value,

View File

@ -10,7 +10,7 @@ from eive_tmtc.tmtc.power.common_power import (
from tmtccmd.util import ObjectIdBase from tmtccmd.util import ObjectIdBase
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
from eive_tmtc.pus_tm.defs import PrintWrapper from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.gomspace.gomspace_common import GomspaceDeviceActionIds from eive_tmtc.gomspace.gomspace_common import GomspaceDeviceActionId
from eive_tmtc.config.object_ids import ( from eive_tmtc.config.object_ids import (
PDU_1_HANDLER_ID, PDU_1_HANDLER_ID,
PDU_2_HANDLER_ID, PDU_2_HANDLER_ID,
@ -439,7 +439,7 @@ def handle_acu_hk_data(printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes):
def handle_get_param_data_reply( def handle_get_param_data_reply(
obj_id: ObjectIdBase, action_id: int, pw: PrintWrapper, custom_data: bytearray obj_id: ObjectIdBase, action_id: int, pw: PrintWrapper, custom_data: bytearray
): ):
if action_id == GomspaceDeviceActionIds.PARAM_GET: if action_id == GomspaceDeviceActionId.PARAM_GET:
pw.dlog(f"Parameter Get Request received for object {obj_id}") pw.dlog(f"Parameter Get Request received for object {obj_id}")
header_list = [ header_list = [
"Gomspace Request Code", "Gomspace Request Code",
@ -461,7 +461,7 @@ def handle_get_param_data_reply(
] ]
pw.dlog(f"{header_list}") pw.dlog(f"{header_list}")
pw.dlog(f"{content_list}") pw.dlog(f"{content_list}")
elif action_id == GomspaceDeviceActionIds.REQUEST_CONFIG_TABLE: elif action_id == GomspaceDeviceActionId.REQUEST_CONFIG_TABLE:
print(f"Received config table with size {len(custom_data)} for object {obj_id}") print(f"Received config table with size {len(custom_data)} for object {obj_id}")
if obj_id.as_bytes == PDU_1_HANDLER_ID or obj_id.as_bytes == PDU_2_HANDLER_ID: if obj_id.as_bytes == PDU_1_HANDLER_ID or obj_id.as_bytes == PDU_2_HANDLER_ID:
pdu_config_table_handler(pw, custom_data, obj_id) pdu_config_table_handler(pw, custom_data, obj_id)

View File

@ -7,37 +7,44 @@
""" """
import struct import struct
from config.definitions import CustomServiceList from eive_tmtc.config.definitions import CustomServiceList
from config.object_ids import SOLAR_ARRAY_DEPLOYMENT_ID from eive_tmtc.config.object_ids import SOLAR_ARRAY_DEPLOYMENT_ID
from spacepackets.ecss import PusTelecommand
from tmtccmd.config.tmtc import ( from tmtccmd.config.tmtc import (
tmtc_definitions_provider, tmtc_definitions_provider,
TmtcDefinitionWrapper, TmtcDefinitionWrapper,
OpCodeEntry, OpCodeEntry,
) )
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider, DefaultPusQueueHelper
from tmtccmd.tc.pus_8_funccmd import make_fsfw_action_cmd from tmtccmd.pus.s8_fsfw_funccmd import create_action_cmd
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
from tmtccmd import get_console_logger from tmtccmd import get_console_logger
LOGGER = get_console_logger() LOGGER = get_console_logger()
class OpCodes: class OpCode:
MANUAL_DEPLOYMENT = "man_depl" MANUAL_DEPLOYMENT = "man_depl"
BURN_SA_0_ONLY = "burn_sa_0"
BURN_SA_1_ONLY = "burn_sa_1"
class Info: class Info:
MANUAL_DEPLOYMENT = "Manual Solar Array Deployment" MANUAL_DEPLOYMENT = "Manual Solar Array Deployment"
BURN_SA_0_ONLY = "Only burn SA0"
BURN_SA_1_ONLY = "Only burn SA1"
class ActionIds: class ActionId:
MANUAL_DEPLOYMENT = 5 MANUAL_DEPLOYMENT = 5
@tmtc_definitions_provider @tmtc_definitions_provider
def pack_sa_depl_cmds(defs: TmtcDefinitionWrapper): def add_sa_depl_cmds(defs: TmtcDefinitionWrapper):
oce = OpCodeEntry() oce = OpCodeEntry()
oce.add(keys=OpCodes.MANUAL_DEPLOYMENT, info=Info.MANUAL_DEPLOYMENT) oce.add(keys=OpCode.MANUAL_DEPLOYMENT, info=Info.MANUAL_DEPLOYMENT)
oce.add(keys=OpCode.BURN_SA_0_ONLY, info=Info.BURN_SA_0_ONLY)
oce.add(keys=OpCode.BURN_SA_1_ONLY, info=Info.BURN_SA_1_ONLY)
defs.add_service( defs.add_service(
name=CustomServiceList.SA_DEPLYOMENT, name=CustomServiceList.SA_DEPLYOMENT,
info="Solar Array Deployment", info="Solar Array Deployment",
@ -48,31 +55,102 @@ def pack_sa_depl_cmds(defs: TmtcDefinitionWrapper):
@service_provider(CustomServiceList.SA_DEPLYOMENT) @service_provider(CustomServiceList.SA_DEPLYOMENT)
def pack_solar_array_deployment_test_into(p: ServiceProviderParams): def pack_solar_array_deployment_test_into(p: ServiceProviderParams):
q = p.queue_helper q = p.queue_helper
user_data = bytearray() op_code = p.op_code
while True: switch_interval_ms = 0
burn_time = int(input("Please specify burn time in seconds [0-120 secs]: ")) if op_code == OpCode.MANUAL_DEPLOYMENT:
if burn_time < 0 or burn_time > 120: while True:
LOGGER.warning(f"Invalid burn time {burn_time}") burn_time_secs = prompt_burn_time()
continue if burn_time_secs < 0:
user_data.extend(struct.pack("!I", burn_time)) continue
break # Default configuration: Burn each side for half of the burn time.
while True: switch_interval_ms = int(round(burn_time_secs * 0.5 * 1000))
dry_run = input("Dry run? [y/n]: ") break
if dry_run in ["yes", "y", "1"]: while True:
dry_run = 1 dry_run = prompt_dry_run()
elif dry_run in ["no", "n", "0"]: if dry_run < 0:
dry_run = 0 continue
dry_run = bool(dry_run)
break
if dry_run:
dry_run_str = " as dry run"
else: else:
LOGGER.warning("Invalid input for dry run parameter") dry_run_str = ""
q.add_log_cmd(
f"Testing S/A Deployment with burn time {burn_time_secs}{dry_run_str}"
)
q.add_pus_tc(
pack_manual_array_depl_cmd(burn_time_secs, switch_interval_ms, dry_run)
)
elif op_code in OpCode.BURN_SA_0_ONLY:
burn_one_channel_only(q, 0)
elif op_code in OpCode.BURN_SA_1_ONLY:
burn_one_channel_only(q, 1)
def prompt_burn_time() -> int:
burn_time = int(input("Please specify burn time in seconds [0-120 secs]: "))
if burn_time < 0 or burn_time > 120:
LOGGER.warning(f"Invalid burn time {burn_time}")
return -1
return burn_time
def prompt_dry_run() -> int:
dry_run = input("Dry run? [y/n]: ")
if dry_run in ["yes", "y", "1"]:
return 1
elif dry_run in ["no", "n", "0"]:
return 0
else:
LOGGER.warning("Invalid input for dry run parameter")
return -1
def burn_one_channel_only(q: DefaultPusQueueHelper, channel: int):
while True:
burn_time_secs = prompt_burn_time()
if burn_time_secs < 0:
continue continue
user_data.append(dry_run)
break break
if dry_run == 1: while True:
dry_run = prompt_dry_run()
if dry_run < 0:
continue
dry_run = bool(dry_run)
break
if dry_run:
dry_run_str = " as dry run" dry_run_str = " as dry run"
else: else:
dry_run_str = "" dry_run_str = ""
q.add_log_cmd(f"Testing S/A Deployment with burn time {burn_time}{dry_run_str}") q.add_log_cmd(
command = make_fsfw_action_cmd( f"Testing S/A Deployment Channel {channel} only with "
SOLAR_ARRAY_DEPLOYMENT_ID, ActionIds.MANUAL_DEPLOYMENT, user_data f"burn time {burn_time_secs}{dry_run_str}"
)
q.add_pus_tc(pack_one_channel_only_cmd(burn_time_secs, channel, dry_run))
def pack_one_channel_only_cmd(
burn_time_seconds: int, channel: int, dry_run: bool
) -> PusTelecommand:
user_data = bytearray()
user_data.extend(struct.pack("!I", burn_time_seconds))
# Burn channel for the entire time
user_data.extend(struct.pack("!I", round(int((burn_time_seconds + 1) * 1000))))
user_data.append(channel)
user_data.append(dry_run)
return create_action_cmd(
SOLAR_ARRAY_DEPLOYMENT_ID, ActionId.MANUAL_DEPLOYMENT, user_data
)
def pack_manual_array_depl_cmd(
burn_time_seconds: int, channel_switch_interval_ms: int, dry_run: bool
) -> PusTelecommand:
user_data = bytearray()
user_data.extend(struct.pack("!I", burn_time_seconds))
user_data.extend(struct.pack("!I", channel_switch_interval_ms))
user_data.append(0)
user_data.append(dry_run)
return create_action_cmd(
SOLAR_ARRAY_DEPLOYMENT_ID, ActionId.MANUAL_DEPLOYMENT, user_data
) )
q.add_pus_tc(command)

235
eive_tmtc/tmtc/tcs.py Normal file
View File

@ -0,0 +1,235 @@
import enum
import pprint
import struct
from eive_tmtc.pus_tm.defs import PrintWrapper
from eive_tmtc.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 Mode
from tmtccmd.tc.pus_3_fsfw_hk import (
make_sid,
generate_one_hk_command,
)
from eive_tmtc.tmtc.common import pack_mode_cmd_with_info
from eive_tmtc.config.object_ids import (
TCS_BOARD_ASS_ID,
TCS_CONTROLLER,
TCS_SUBSYSTEM_ID,
)
from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
class OpCodeAssy:
TCS_BOARD_ASS_NORMAL = ["nml"]
TCS_BOARD_ASS_OFF = ["off"]
class OpCodeSys:
OFF = ["off"]
NML = ["nml"]
REQUEST_PRIMARY_TEMP_SET = ["temp"]
REQUEST_DEVICE_TEMP_SET = ["temp_devs"]
REQUEST_DEVICE_SUS_SET = ["temp_sus"]
class InfoSys:
OFF = "Switch TCS subsystem OFF"
NML = "Switch TCS subsystem NORMAL (nominal)"
REQUEST_PRIMARY_TEMP_SET = "Request HK set of primary sensor temperatures"
REQUEST_DEVICE_TEMP_SET = "Request HK set of device sensor temperatures"
REQUEST_DEVICE_SUS_SET = "Request HK set of the SUS temperatures"
class InfoAssy:
TCS_BOARD_ASS_NORMAL = "Switching TCS board assembly on"
TCS_BOARD_ASS_OFF = "Switching TCS board assembly off"
class SetId(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=OpCodeAssy.TCS_BOARD_ASS_NORMAL,
info=InfoAssy.TCS_BOARD_ASS_NORMAL,
)
oce.add(
keys=OpCodeAssy.TCS_BOARD_ASS_OFF,
info=InfoAssy.TCS_BOARD_ASS_OFF,
)
defs.add_service(
name=CustomServiceList.TCS_ASS.value,
info="TCS Board Assembly",
op_code_entry=oce,
)
oce = OpCodeEntry()
oce.add(keys=OpCodeSys.OFF, info=InfoSys.OFF)
oce.add(keys=OpCodeSys.NML, info=InfoSys.NML)
oce.add(
keys=OpCodeSys.REQUEST_PRIMARY_TEMP_SET, info=InfoSys.REQUEST_PRIMARY_TEMP_SET
)
oce.add(
keys=OpCodeSys.REQUEST_DEVICE_TEMP_SET, info=InfoSys.REQUEST_DEVICE_TEMP_SET
)
oce.add(keys=OpCodeSys.REQUEST_DEVICE_SUS_SET, info=InfoSys.REQUEST_DEVICE_SUS_SET)
defs.add_service(
name=CustomServiceList.TCS,
info="TCS Board",
op_code_entry=oce,
)
def pack_tcs_sys_commands(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCodeSys.REQUEST_PRIMARY_TEMP_SET:
sensor_set_sid = make_sid(TCS_CONTROLLER, SetId.PRIMARY_SENSORS)
q.add_log_cmd(InfoSys.REQUEST_PRIMARY_TEMP_SET)
q.add_pus_tc(generate_one_hk_command(sensor_set_sid))
if op_code in OpCodeSys.REQUEST_DEVICE_TEMP_SET:
q.add_log_cmd(InfoSys.REQUEST_DEVICE_TEMP_SET)
q.add_pus_tc(
generate_one_hk_command(make_sid(TCS_CONTROLLER, SetId.DEVICE_SENSORS))
)
if op_code in OpCodeSys.REQUEST_DEVICE_SUS_SET:
q.add_log_cmd(InfoSys.REQUEST_DEVICE_SUS_SET)
q.add_pus_tc(
generate_one_hk_command(make_sid(TCS_CONTROLLER, SetId.SUS_TEMP_SENSORS))
)
if op_code in OpCodeSys.OFF:
q.add_log_cmd(InfoSys.OFF)
pack_mode_cmd_with_info(TCS_SUBSYSTEM_ID, Mode.OFF, 0, q, InfoSys.OFF)
if op_code in OpCodeSys.NML:
q.add_log_cmd(InfoSys.NML)
pack_mode_cmd_with_info(TCS_SUBSYSTEM_ID, Mode.NORMAL, 0, q, InfoSys.OFF)
pack_tcs_ass_cmds(q, op_code)
def pack_tcs_ass_cmds(q: DefaultPusQueueHelper, op_code: str):
if op_code in OpCodeAssy.TCS_BOARD_ASS_NORMAL:
pack_mode_cmd_with_info(
object_id=TCS_BOARD_ASS_ID,
mode=Mode.NORMAL,
submode=0,
q=q,
info=InfoAssy.TCS_BOARD_ASS_NORMAL,
)
if op_code in OpCodeAssy.TCS_BOARD_ASS_OFF:
pack_mode_cmd_with_info(
object_id=TCS_BOARD_ASS_ID,
mode=Mode.OFF,
submode=0,
q=q,
info=InfoAssy.TCS_BOARD_ASS_OFF,
)
def handle_thermal_controller_hk_data(
object_id: ObjectIdU32, printer: FsfwTmTcPrinter, set_id: int, hk_data: bytes
):
# need a better solutuon for this is this is used again..
"""
if TCP_TEMP_SENS_SERVER is None:
TCP_TEMP_SENS_SERVER = TmTcpServer("localhost", 7305)
if TCP_TEMP_DEV_SERVER:
TCP_TEMP_DEV_SERVER = TmTcpServer("localhost", 7306)
"""
if set_id == SetId.PRIMARY_SENSORS:
pw = PrintWrapper(printer)
pw.dlog("Received sensor temperature data")
# get all the floats
tm_data = struct.unpack("!fffffffffffffffffffff", hk_data[: 21 * 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 TCS 0": tm_data[16],
"TMP1075 TCS 1": tm_data[17],
"TMP1075 PL PCDU 0": tm_data[18],
"TMP1075 PL PCDU 1": tm_data[19],
"TMP1075 IF BOARD": tm_data[20],
}
printer.file_logger.info(str(parsed_data))
pp = pprint.PrettyPrinter(depth=4)
pp.pprint(parsed_data)
elif set_id == SetId.DEVICE_SENSORS:
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],
}
printer.file_logger.info(str(parsed_data))
pp = pprint.PrettyPrinter(depth=4)
pp.pprint(parsed_data)
elif set_id == SetId.SUS_TEMP_SENSORS:
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],
}
printer.file_logger.info(str(parsed_data))
pp = pprint.PrettyPrinter(depth=4)
pp.pprint(parsed_data)

View File

@ -1,11 +1,11 @@
from spacepackets.ecss import PusTelecommand, PusServices from spacepackets.ecss import PusTelecommand, PusService
from tmtccmd.config import CoreServiceList from tmtccmd.config import CoreServiceList
from tmtccmd.config.tmtc import ( from tmtccmd.config.tmtc import (
tmtc_definitions_provider, tmtc_definitions_provider,
TmtcDefinitionWrapper, TmtcDefinitionWrapper,
OpCodeEntry, OpCodeEntry,
) )
from tmtccmd.pus.pus_17_test import pack_service_17_ping_command from tmtccmd.pus.s17_test import create_service_17_ping_command
from tmtccmd.tc import service_provider from tmtccmd.tc import service_provider
from tmtccmd.tc.decorator import ServiceProviderParams from tmtccmd.tc.decorator import ServiceProviderParams
@ -42,10 +42,10 @@ def pack_test_command(p: ServiceProviderParams):
q = p.queue_helper q = p.queue_helper
if info.op_code == OpCodes.PING: if info.op_code == OpCodes.PING:
q.add_log_cmd("Sending PUS TC [17,1]") q.add_log_cmd("Sending PUS TC [17,1]")
q.add_pus_tc(pack_service_17_ping_command()) q.add_pus_tc(create_service_17_ping_command())
if info.op_code == OpCodes.TRIGGER_EVENT: if info.op_code == OpCodes.TRIGGER_EVENT:
q.add_log_cmd("Sending PUS TC Event Trigger [17, 128]") q.add_log_cmd("Sending PUS TC Event Trigger [17, 128]")
q.add_pus_tc(PusTelecommand(service=PusServices.S17_TEST, subservice=128)) q.add_pus_tc(PusTelecommand(service=PusService.S17_TEST, subservice=128))
if info.op_code == OpCodes.PING_WITH_DATA: if info.op_code == OpCodes.PING_WITH_DATA:
q.add_log_cmd("Sending Ping With Data, Size Reported Back [17, 129]") q.add_log_cmd("Sending Ping With Data, Size Reported Back [17, 129]")
while True: while True:
@ -60,6 +60,6 @@ def pack_test_command(p: ServiceProviderParams):
next_byte = not next_byte next_byte = not next_byte
q.add_pus_tc( q.add_pus_tc(
PusTelecommand( PusTelecommand(
service=PusServices.S17_TEST, subservice=130, app_data=dummy_data service=PusService.S17_TEST, subservice=130, app_data=dummy_data
) )
) )

View File

@ -5,7 +5,7 @@ version = attr: eive_tmtc.__version__
long_description = file: README.md long_description = file: README.md
long_description_content_type = text/markdown long_description_content_type = text/markdown
license = Apache-2.0 license = Apache-2.0
author = Robin Mueller author = Robin Mueller, Jakob Meier
author_email = muellerr@irs.uni-stuttgart.de author_email = muellerr@irs.uni-stuttgart.de
platform = any platform = any
@ -27,9 +27,10 @@ classifiers =
[options] [options]
install_requires = install_requires =
tmtccmd @ git+https://github.com/robamu-org/tmtccmd@v4.0.0a1 # tmtccmd @ git+https://github.com/robamu-org/tmtccmd@v4.0.0a2
tmtccmd @ git+https://github.com/robamu-org/tmtccmd@c978286a856a2f3a59efc96887dd15c2c17bac6e#egg=tmtccmd
packages = find: packages = find:
python_requires = >=3.8 python_requires = >=3.10
include_package_data = True include_package_data = True
[options.extras_require] [options.extras_require]