Compare commits

..

52 Commits

Author SHA1 Message Date
cb2772328d bump version 2022-10-13 18:07:55 +02:00
50abe69f26 add some p60dock cfg TM entries 2022-10-13 17:34:10 +02:00
4c3f5f2825 bump tmtccmd 2022-10-11 22:43:06 +02:00
656a534ba7 basic info event handling 2022-10-10 11:20:10 +02:00
f35c96eecc re-run generators 2022-10-10 11:15:58 +02:00
9cc079d71c Merge pull request 'update csv files' (#116) from petri_dev into main
Reviewed-on: #116
2022-10-04 13:18:06 +02:00
bcdc0615c1 Merge branch 'main' into petri_dev 2022-10-04 13:17:56 +02:00
b73f2fa4e6 better cmd strings 2022-09-30 14:22:13 +02:00
8c48255eb3 renamed some defs 2022-09-30 14:14:32 +02:00
c8eaf180dc clean up TCS server printout 2022-09-29 17:41:37 +02:00
648779e8b6 Merge remote-tracking branch 'origin/main' into petri_dev 2022-09-29 14:20:33 +02:00
52d91fe857 Revert "bump csv files"
This reverts commit a0f346332f.
2022-09-29 13:48:41 +02:00
a19b659939 update csv files 2022-09-29 13:45:25 +02:00
a0f346332f bump csv files 2022-09-29 13:40:28 +02:00
439ca2a471 Merge pull request 'OBSW Update Commands' (#114) from mueller/obsw-update-cmds into main
Reviewed-on: #114
Reviewed-by: Jakob Meier <meierj@irs.uni-stuttgart.de>
2022-09-29 13:30:36 +02:00
3b5e484de1 Merge remote-tracking branch 'origin/main' into mueller/obsw-update-cmds 2022-09-29 13:28:09 +02:00
5a49e76ad9 Merge pull request 'TMTC CFDP integration' (#113) from mueller/cfdp-integration into main
Reviewed-on: #113
Reviewed-by: Jakob Meier <meierj@irs.uni-stuttgart.de>
2022-09-29 13:26:14 +02:00
debbe9813b Merge pull request 'scex code additions' (#115) from scex-additions into main
Reviewed-on: #115
Reviewed-by: Robin Müller <muellerr@irs.uni-stuttgart.de>
2022-09-29 11:48:26 +02:00
6caf06248b add off command 2022-09-28 17:01:26 +02:00
a7714747bc on cmd for SCEX 2022-09-27 17:35:58 +02:00
135afdff3b Merge remote-tracking branch 'origin/main' into irini 2022-09-27 16:49:37 +02:00
f8e8f9a125 command to transfer OBSW archive 2022-09-27 14:47:53 +02:00
a2991988f5 larger delay 2022-09-27 14:29:27 +02:00
02730f9070 add delay for commands 2022-09-27 13:58:55 +02:00
aae1fbddf4 add SD card switch commands 2022-09-27 12:09:27 +02:00
801afb9550 added SD card switch cmds 2022-09-27 12:05:36 +02:00
eaf79ba03d re-run generators 2022-09-27 09:33:10 +02:00
4307620a56 add cmd configs 2022-09-26 22:27:53 +02:00
947f377147 add TMTC commands for OBSW update 2022-09-26 22:25:47 +02:00
847a9dc000 tweak changelog 2022-09-16 18:29:20 +02:00
8c9fe8f4d2 update changelog 2022-09-16 18:27:28 +02:00
e2811947dc track new run configs 2022-09-16 18:16:39 +02:00
2210ddb168 run last adaptions 2022-09-16 17:37:01 +02:00
611855e347 add two files for filetest 2022-09-16 17:31:05 +02:00
91f85537ce CFDP integration 2022-09-16 17:28:19 +02:00
d3e3acc152 bump tmtc deps 2022-09-16 17:20:11 +02:00
603b7e8574 Merge pull request 'update gomspace commands' (#112) from mueller/gomspace-save-load-table into main
Reviewed-on: #112
Reviewed-by: Jakob Meier <meierj@irs.uni-stuttgart.de>
2022-09-02 12:32:22 +02:00
f366b1c3f6 prompt fix 2022-09-01 17:40:03 +02:00
6085c6543c add command to load table 2022-09-01 17:31:24 +02:00
e1d84c5b99 update csvs 2022-08-31 16:07:19 +02:00
395dbe9df3 Merge remote-tracking branch 'origin/main' into irini 2022-08-31 15:46:27 +02:00
c84f2c2b35 bump deps 2022-08-31 15:44:13 +02:00
b4d4a51164 update scex commands 2022-08-30 18:35:26 +02:00
b1eafd92c2 bugfixes for commands 2022-08-30 16:32:50 +02:00
6b5c005b73 Merge remote-tracking branch 'origin/main' into irini 2022-08-24 16:54:16 +02:00
631dc9ea9c Merge remote-tracking branch 'origin/main' into irini 2022-08-16 18:52:09 +02:00
77a2f82d82 re-run generators 2022-08-12 13:06:25 +02:00
0d75dfe44a re-run gen 2022-08-12 12:34:02 +02:00
22c57bd0ed Merge remote-tracking branch 'origin/main' into irini 2022-08-12 12:33:27 +02:00
6cb629c3c3 re-run generators 2022-08-08 17:10:41 +02:00
219116a773 Merge remote-tracking branch 'origin/main' into irini 2022-08-08 17:09:53 +02:00
937eb48298 update one cell cfg 2022-07-13 15:49:28 +02:00
38 changed files with 808 additions and 149 deletions

2
.gitignore vendored
View File

@ -8,4 +8,4 @@ log
/scex_conf.json /scex_conf.json
/tmtc_conf.json /tmtc_conf.json
/seqcnt.txt /seqcnt*.txt

24
.run/CFDP Help.run.xml Normal file
View File

@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="CFDP Help" type="PythonConfigurationType" factoryName="Python" folderName="CFDP">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="cfdp -h" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

View File

@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="CFDP Test File Large" type="PythonConfigurationType" factoryName="Python" folderName="CFDP">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="cfdp filetest/obsw_update.bin /tmp/obsw_update.bin -d 0.3" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

View File

@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="CFDP Test File Small" type="PythonConfigurationType" factoryName="Python" folderName="CFDP">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="cfdp filetest/cfdp_test.txt /tmp/cfdp_test.txt -d 0.2" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

View File

@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="OBSW Switch to Both SDs" type="PythonConfigurationType" factoryName="Python" folderName="Core">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="-s core -o switch_to_both_sd_cards -d 8" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

View File

@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="OBSW Switch to SD 0" type="PythonConfigurationType" factoryName="Python" folderName="Core">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="-s core -o switch_to_sd_0 -d 8" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

View File

@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="OBSW Switch to SD 1" type="PythonConfigurationType" factoryName="Python" folderName="Core">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="-s core -o switch_to_sd_1 -d 8" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

View File

@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="OBSW Update from SD 0" type="PythonConfigurationType" factoryName="Python" folderName="Core">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="-s core -o obsw_update_sd0 -d 20" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

View File

@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="OBSW Update from SD 1" type="PythonConfigurationType" factoryName="Python" folderName="Core">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="-s core -o obsw_update_sd1 -d 20" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

View File

@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="OBSW Update from tmp" type="PythonConfigurationType" factoryName="Python" folderName="Core">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="-s core -o obsw_update_tmp -d 20" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

24
.run/SCEX FRAM .run.xml Normal file
View File

@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="SCEX FRAM " type="PythonConfigurationType" factoryName="Python" folderName="SCEX">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="-s scex -o fram -l" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="true" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

View File

@ -1,5 +1,5 @@
<component name="ProjectRunConfigurationManager"> <component name="ProjectRunConfigurationManager">
<configuration default="false" name="SCEX " type="PythonConfigurationType" factoryName="Python" folderName="Devices"> <configuration default="false" name="SCEX " type="PythonConfigurationType" factoryName="Python" folderName="SCEX">
<module name="tmtc" /> <module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" /> <option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" /> <option name="PARENT_ENVS" value="true" />
@ -13,7 +13,7 @@
<option name="ADD_SOURCE_ROOTS" value="true" /> <option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" /> <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" /> <option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="-s scex" /> <option name="PARAMETERS" value="-s scex -d 8" />
<option name="SHOW_COMMAND_LINE" value="false" /> <option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="true" /> <option name="EMULATE_TERMINAL" value="true" />
<option name="MODULE_MODE" value="false" /> <option name="MODULE_MODE" value="false" />

View File

@ -1,5 +1,5 @@
<component name="ProjectRunConfigurationManager"> <component name="ProjectRunConfigurationManager">
<configuration default="false" name="SCEX Ping" type="PythonConfigurationType" factoryName="Python" folderName="Devices"> <configuration default="false" name="SCEX Ping" type="PythonConfigurationType" factoryName="Python" folderName="SCEX">
<module name="tmtc" /> <module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" /> <option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" /> <option name="PARENT_ENVS" value="true" />
@ -12,7 +12,7 @@
<option name="ADD_CONTENT_ROOTS" value="true" /> <option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" /> <option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" /> <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtccli.py" /> <option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="-s scex -o ping" /> <option name="PARAMETERS" value="-s scex -o ping" />
<option name="SHOW_COMMAND_LINE" value="false" /> <option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="true" /> <option name="EMULATE_TERMINAL" value="true" />

View File

@ -1,5 +1,5 @@
<component name="ProjectRunConfigurationManager"> <component name="ProjectRunConfigurationManager">
<configuration default="false" name="SCEX oneCell" type="PythonConfigurationType" factoryName="Python" folderName="Devices"> <configuration default="false" name="SCEX oneCell" type="PythonConfigurationType" factoryName="Python" folderName="SCEX">
<module name="tmtc" /> <module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" /> <option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" /> <option name="PARENT_ENVS" value="true" />
@ -13,7 +13,7 @@
<option name="ADD_SOURCE_ROOTS" value="true" /> <option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" /> <EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" /> <option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="-s scex -o 4 -d 4" /> <option name="PARAMETERS" value="-s scex -o onecell -l" />
<option name="SHOW_COMMAND_LINE" value="false" /> <option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="true" /> <option name="EMULATE_TERMINAL" value="true" />
<option name="MODULE_MODE" value="false" /> <option name="MODULE_MODE" value="false" />

View File

@ -0,0 +1,24 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Transfer OBSW CFDP" type="PythonConfigurationType" factoryName="Python" folderName="Core">
<module name="tmtc" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tmtcc.py" />
<option name="PARAMETERS" value="cfdp ../cmake-build-release-q7s/eive-sw-update.tar.xz /tmp/eive-sw-update.tar.xz -d 0.3" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>

View File

@ -12,6 +12,8 @@ list yields a list of all related PRs for each release.
# [v1.13.0] # [v1.13.0]
- CFDP integration
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/113
- Major Update for `tmtccmd` and `spacepackets` dependencies which improves user API significantly. - Major Update for `tmtccmd` and `spacepackets` dependencies which improves user API significantly.
PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/102 PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/102
- Add commands to request MGM HK or enable/disable periodic HK for it - Add commands to request MGM HK or enable/disable periodic HK for it

View File

@ -1,6 +1,6 @@
SW_NAME = "eive" SW_NAME = "eive"
VERSION_MAJOR = 1 VERSION_MAJOR = 1
VERSION_MINOR = 11 VERSION_MINOR = 13
VERSION_SUBMINOR = 0 VERSION_SUBMINOR = 0
__version__ = "1.11.0" __version__ = "1.13.0"

View File

@ -6,9 +6,14 @@
import enum import enum
from spacepackets.util import UnsignedByteField
PUS_APID = 0x65 PUS_APID = 0x65
SPACE_PACKET_IDS = (0x08 << 8 | PUS_APID,) SPACE_PACKET_IDS = (0x08 << 8 | PUS_APID,)
CFDP_APID = 0x66
CFDP_LOCAL_ENTITY_ID = UnsignedByteField(byte_len=2, val=1)
CFDP_REMOTE_ENTITY_ID = UnsignedByteField(byte_len=2, val=CFDP_APID)
class CustomServiceList(str, enum.Enum): class CustomServiceList(str, enum.Enum):
@ -31,11 +36,11 @@ class CustomServiceList(str, enum.Enum):
PCDU = "pcdu" PCDU = "pcdu"
PL_PCDU = "plpcdu" PL_PCDU = "plpcdu"
SA_DEPLYOMENT = "sa_depl" SA_DEPLYOMENT = "sa_depl"
REACTION_WHEEL_1 = "rw-1" REACTION_WHEEL_1 = "rw_1"
REACTION_WHEEL_2 = "rw-2" REACTION_WHEEL_2 = "rw_2"
REACTION_WHEEL_3 = "rw-3" REACTION_WHEEL_3 = "rw_3"
REACTION_WHEEL_4 = "rw-4" REACTION_WHEEL_4 = "rw_4"
RW_ASSEMBLY = "rw-ass" RW_ASSEMBLY = "rw_ass"
RAD_SENSOR = "rad_sensor" RAD_SENSOR = "rad_sensor"
GPS_CTRL = "gnss-ctrl" GPS_CTRL = "gnss-ctrl"
PLOC_MEMORY_DUMPER = "ploc_memory_dumper" PLOC_MEMORY_DUMPER = "ploc_memory_dumper"
@ -45,11 +50,11 @@ class CustomServiceList(str, enum.Enum):
PDEC_HANDLER = "pdec_handler" PDEC_HANDLER = "pdec_handler"
STR_IMG_HELPER = "str_img_helper" STR_IMG_HELPER = "str_img_helper"
SYRLINKS = "syrlinks" SYRLINKS = "syrlinks"
ACS_CTRL = "acs-ctrl" ACS_CTRL = "acs_ctrl"
ACS_ASS = "acs-ass" ACS_ASS = "acs_ass"
SUS_ASS = "sus-ass" SUS_ASS = "sus_ass"
TCS = "tcs" TCS = "tcs"
TCS_ASS = "tcs-ass" TCS_ASS = "tcs_ass"
TIME = "time" TIME = "time"
PROCEDURE = "proc" PROCEDURE = "proc"
RTD = "rtd" RTD = "rtd"

View File

@ -69,6 +69,7 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
7510;0x1d56;TRYING_RECOVERY;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h 7510;0x1d56;TRYING_RECOVERY;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h
7511;0x1d57;RECOVERY_STEP;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h 7511;0x1d57;RECOVERY_STEP;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h
7512;0x1d58;RECOVERY_DONE;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h 7512;0x1d58;RECOVERY_DONE;MEDIUM;;fsfw/src/fsfw/health/HasHealthIF.h
7600;0x1db0;HANDLE_PACKET_FAILED;LOW;;fsfw/src/fsfw/tcdistribution/definitions.h
7900;0x1edc;RF_AVAILABLE;INFO;A RF available signal was detected. P1: raw RFA state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h 7900;0x1edc;RF_AVAILABLE;INFO;A RF available signal was detected. P1: raw RFA state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
7901;0x1edd;RF_LOST;INFO;A previously found RF available signal was lost. P1: raw RFA state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h 7901;0x1edd;RF_LOST;INFO;A previously found RF available signal was lost. P1: raw RFA state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
7902;0x1ede;BIT_LOCK;INFO;A Bit Lock signal. Was detected. P1: raw BLO state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h 7902;0x1ede;BIT_LOCK;INFO;A Bit Lock signal. Was detected. P1: raw BLO state, P2: 0;fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
@ -119,8 +120,8 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
12003;0x2ee3;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report P1: ID of command for which the execution failed P2: Status code sent by the supervisor handler;linux/devices/ploc/PlocSupervisorHandler.h 12003;0x2ee3;SUPV_EXE_FAILURE;LOW;PLOC received execution failure report P1: ID of command for which the execution failed P2: Status code sent by the supervisor handler;linux/devices/ploc/PlocSupervisorHandler.h
12004;0x2ee4;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;linux/devices/ploc/PlocSupervisorHandler.h 12004;0x2ee4;SUPV_CRC_FAILURE_EVENT;LOW;PLOC supervisor reply has invalid crc;linux/devices/ploc/PlocSupervisorHandler.h
12005;0x2ee5;SUPV_MPSOC_SHUWDOWN_BUILD_FAILED;LOW;Failed to build the command to shutdown the MPSoC;linux/devices/ploc/PlocSupervisorHandler.h 12005;0x2ee5;SUPV_MPSOC_SHUWDOWN_BUILD_FAILED;LOW;Failed to build the command to shutdown the MPSoC;linux/devices/ploc/PlocSupervisorHandler.h
12100;0x2f44;SANITIZATION_FAILED;LOW;;bsp_q7s/memory/SdCardManager.h 12100;0x2f44;SANITIZATION_FAILED;LOW;;bsp_q7s/fs/SdCardManager.h
12101;0x2f45;MOUNTED_SD_CARD;INFO;;bsp_q7s/memory/SdCardManager.h 12101;0x2f45;MOUNTED_SD_CARD;INFO;;bsp_q7s/fs/SdCardManager.h
12300;0x300c;SEND_MRAM_DUMP_FAILED;LOW;Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command;linux/devices/ploc/PlocMemoryDumper.h 12300;0x300c;SEND_MRAM_DUMP_FAILED;LOW;Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command;linux/devices/ploc/PlocMemoryDumper.h
12301;0x300d;MRAM_DUMP_FAILED;LOW;Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command;linux/devices/ploc/PlocMemoryDumper.h 12301;0x300d;MRAM_DUMP_FAILED;LOW;Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command;linux/devices/ploc/PlocMemoryDumper.h
12302;0x300e;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;linux/devices/ploc/PlocMemoryDumper.h 12302;0x300e;MRAM_DUMP_FINISHED;LOW;MRAM dump finished successfully;linux/devices/ploc/PlocMemoryDumper.h
@ -215,3 +216,11 @@ Event ID (dec); Event ID (hex); Name; Severity; Description; File Path
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;REBOOT_SW;MEDIUM; Software reboot occurred. Can also be a systemd reboot. P1: Current Chip, P2: Current Copy;bsp_q7s/core/CoreController.h
13702;0x3586;REBOOT_MECHANISM_TRIGGERED;MEDIUM;The reboot mechanism was triggered. P1: First 16 bits: Last Chip, Last 16 bits: Last Copy, P2: Each byte is the respective reboot count for the slots;bsp_q7s/core/CoreController.h 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
13703;0x3587;REBOOT_HW;MEDIUM;;bsp_q7s/core/CoreController.h 13703;0x3587;REBOOT_HW;MEDIUM;;bsp_q7s/core/CoreController.h
13800;0x35e8;MISSING_PACKET;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
13901;0x364d;SET_CONFIGFILEVALUE_FAILED;MEDIUM;;mission/utility/GlobalConfigHandler.h
13902;0x364e;GET_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
13905;0x3651;READ_CONFIGFILE_FAILED;MEDIUM;;mission/utility/GlobalConfigHandler.h

1 Event ID (dec) Event ID (hex) Name Severity Description File Path
69 7510 0x1d56 TRYING_RECOVERY MEDIUM fsfw/src/fsfw/health/HasHealthIF.h
70 7511 0x1d57 RECOVERY_STEP MEDIUM fsfw/src/fsfw/health/HasHealthIF.h
71 7512 0x1d58 RECOVERY_DONE MEDIUM fsfw/src/fsfw/health/HasHealthIF.h
72 7600 0x1db0 HANDLE_PACKET_FAILED LOW fsfw/src/fsfw/tcdistribution/definitions.h
73 7900 0x1edc RF_AVAILABLE INFO A RF available signal was detected. P1: raw RFA state, P2: 0 fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
74 7901 0x1edd RF_LOST INFO A previously found RF available signal was lost. P1: raw RFA state, P2: 0 fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
75 7902 0x1ede BIT_LOCK INFO A Bit Lock signal. Was detected. P1: raw BLO state, P2: 0 fsfw/src/fsfw/datalinklayer/DataLinkLayer.h
120 12003 0x2ee3 SUPV_EXE_FAILURE LOW PLOC received execution failure report P1: ID of command for which the execution failed P2: Status code sent by the supervisor handler linux/devices/ploc/PlocSupervisorHandler.h
121 12004 0x2ee4 SUPV_CRC_FAILURE_EVENT LOW PLOC supervisor reply has invalid crc linux/devices/ploc/PlocSupervisorHandler.h
122 12005 0x2ee5 SUPV_MPSOC_SHUWDOWN_BUILD_FAILED LOW Failed to build the command to shutdown the MPSoC linux/devices/ploc/PlocSupervisorHandler.h
123 12100 0x2f44 SANITIZATION_FAILED LOW bsp_q7s/memory/SdCardManager.h bsp_q7s/fs/SdCardManager.h
124 12101 0x2f45 MOUNTED_SD_CARD INFO bsp_q7s/memory/SdCardManager.h bsp_q7s/fs/SdCardManager.h
125 12300 0x300c SEND_MRAM_DUMP_FAILED LOW Failed to send mram dump command to supervisor handler P1: Return value of commandAction function P2: Start address of MRAM to dump with this command linux/devices/ploc/PlocMemoryDumper.h
126 12301 0x300d MRAM_DUMP_FAILED LOW Received completion failure report form PLOC supervisor handler P1: MRAM start address of failing dump command linux/devices/ploc/PlocMemoryDumper.h
127 12302 0x300e MRAM_DUMP_FINISHED LOW MRAM dump finished successfully linux/devices/ploc/PlocMemoryDumper.h
216 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
217 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
218 13703 0x3587 REBOOT_HW MEDIUM bsp_q7s/core/CoreController.h
219 13800 0x35e8 MISSING_PACKET LOW mission/devices/devicedefinitions/ScexDefinitions.h
220 13801 0x35e9 EXPERIMENT_TIMEDOUT LOW mission/devices/devicedefinitions/ScexDefinitions.h
221 13802 0x35ea MULTI_PACKET_COMMAND_DONE INFO mission/devices/devicedefinitions/ScexDefinitions.h
222 13901 0x364d SET_CONFIGFILEVALUE_FAILED MEDIUM mission/utility/GlobalConfigHandler.h
223 13902 0x364e GET_CONFIGFILEVALUE_FAILED MEDIUM mission/utility/GlobalConfigHandler.h
224 13903 0x364f INSERT_CONFIGFILEVALUE_FAILED MEDIUM mission/utility/GlobalConfigHandler.h
225 13904 0x3650 WRITE_CONFIGFILE_FAILED MEDIUM mission/utility/GlobalConfigHandler.h
226 13905 0x3651 READ_CONFIGFILE_FAILED MEDIUM mission/utility/GlobalConfigHandler.h

View File

@ -25,7 +25,7 @@ class EiveHookObject(TmTcCfgHookBase):
cfg = create_com_interface_cfg_default( cfg = create_com_interface_cfg_default(
com_if_key=com_if_key, com_if_key=com_if_key,
json_cfg_path=self.json_cfg_path, json_cfg_path=self.cfg_path,
space_packet_ids=SPACE_PACKET_IDS, space_packet_ids=SPACE_PACKET_IDS,
) )
return create_com_interface_default(cfg) return create_com_interface_default(cfg)

View File

@ -1,6 +1,7 @@
0x00005060;P60DOCK_TEST_TASK 0x00005060;P60DOCK_TEST_TASK
0x43000002;ACS_CONTROLLER 0x43000002;ACS_CONTROLLER
0x43000003;CORE_CONTROLLER 0x43000003;CORE_CONTROLLER
0x43000006;GLOBAL_JSON_CFG
0x43400001;THERMAL_CONTROLLER 0x43400001;THERMAL_CONTROLLER
0x44120006;MGM_0_LIS3_HANDLER 0x44120006;MGM_0_LIS3_HANDLER
0x44120010;GYRO_0_ADIS_HANDLER 0x44120010;GYRO_0_ADIS_HANDLER
@ -46,6 +47,7 @@
0x44330015;PLOC_MPSOC_HANDLER 0x44330015;PLOC_MPSOC_HANDLER
0x44330016;PLOC_SUPERVISOR_HANDLER 0x44330016;PLOC_SUPERVISOR_HANDLER
0x44330017;PLOC_SUPERVISOR_HELPER 0x44330017;PLOC_SUPERVISOR_HELPER
0x44330032;SCEX
0x444100A2;SOLAR_ARRAY_DEPL_HANDLER 0x444100A2;SOLAR_ARRAY_DEPL_HANDLER
0x444100A4;HEATER_HANDLER 0x444100A4;HEATER_HANDLER
0x44420004;TMP1075_HANDLER_1 0x44420004;TMP1075_HANDLER_1
@ -69,6 +71,7 @@
0x445300A3;SYRLINKS_HK_HANDLER 0x445300A3;SYRLINKS_HK_HANDLER
0x49000000;ARDUINO_COM_IF 0x49000000;ARDUINO_COM_IF
0x49010005;GPIO_IF 0x49010005;GPIO_IF
0x49010006;SCEX_UART_READER
0x49020004;SPI_MAIN_COM_IF 0x49020004;SPI_MAIN_COM_IF
0x49020005;SPI_RW_COM_IF 0x49020005;SPI_RW_COM_IF
0x49020006;SPI_RTD_COM_IF 0x49020006;SPI_RTD_COM_IF
@ -128,6 +131,8 @@
0x73000002;SUS_BOARD_ASS 0x73000002;SUS_BOARD_ASS
0x73000003;TCS_BOARD_ASS 0x73000003;TCS_BOARD_ASS
0x73000004;RW_ASS 0x73000004;RW_ASS
0x73000005;CFDP_HANDLER
0x73000006;CFDP_DISTRIBUTOR
0x73000100;TM_FUNNEL 0x73000100;TM_FUNNEL
0x73500000;CCSDS_IP_CORE_BRIDGE 0x73500000;CCSDS_IP_CORE_BRIDGE
0xFFFFFFFF;NO_OBJECT 0xFFFFFFFF;NO_OBJECT

1 0x00005060 P60DOCK_TEST_TASK
2 0x43000002 ACS_CONTROLLER
3 0x43000003 CORE_CONTROLLER
4 0x43000006 GLOBAL_JSON_CFG
5 0x43400001 THERMAL_CONTROLLER
6 0x44120006 MGM_0_LIS3_HANDLER
7 0x44120010 GYRO_0_ADIS_HANDLER
47 0x44330015 PLOC_MPSOC_HANDLER
48 0x44330016 PLOC_SUPERVISOR_HANDLER
49 0x44330017 PLOC_SUPERVISOR_HELPER
50 0x44330032 SCEX
51 0x444100A2 SOLAR_ARRAY_DEPL_HANDLER
52 0x444100A4 HEATER_HANDLER
53 0x44420004 TMP1075_HANDLER_1
71 0x445300A3 SYRLINKS_HK_HANDLER
72 0x49000000 ARDUINO_COM_IF
73 0x49010005 GPIO_IF
74 0x49010006 SCEX_UART_READER
75 0x49020004 SPI_MAIN_COM_IF
76 0x49020005 SPI_RW_COM_IF
77 0x49020006 SPI_RTD_COM_IF
131 0x73000002 SUS_BOARD_ASS
132 0x73000003 TCS_BOARD_ASS
133 0x73000004 RW_ASS
134 0x73000005 CFDP_HANDLER
135 0x73000006 CFDP_DISTRIBUTOR
136 0x73000100 TM_FUNNEL
137 0x73500000 CCSDS_IP_CORE_BRIDGE
138 0xFFFFFFFF NO_OBJECT

View File

@ -1,6 +1,6 @@
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/HasReturnvaluesIF.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/HasReturnvaluesIF.h 0x0001;Failed;Unspecified system-wide code for failed.;1;HasReturnvaluesIF;fsfw/returnvalues/returnvalue.h
0x63a0;NVMB_KeyNotExists;Specified key does not exist in json file;160;NVM_PARAM_BASE;mission/memory/NVMParameterBase.h 0x63a0;NVMB_KeyNotExists;Specified key does not exist in json file;160;NVM_PARAM_BASE;mission/memory/NVMParameterBase.h
0x58a0;SUSS_ErrorUnlockMutex;;160;SUS_HANDLER;mission/devices/SusHandler.h 0x58a0;SUSS_ErrorUnlockMutex;;160;SUS_HANDLER;mission/devices/SusHandler.h
0x58a1;SUSS_ErrorLockMutex;;161;SUS_HANDLER;mission/devices/SusHandler.h 0x58a1;SUSS_ErrorLockMutex;;161;SUS_HANDLER;mission/devices/SusHandler.h
@ -89,17 +89,6 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
0x06e2;PP_InvalidContent;;226;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 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 0x06e4;PP_WriteProtected;;228;HAS_MEMORY_IF;fsfw/src/fsfw/memory/HasMemoryIF.h
0x4300;FILS_GenericFileError;;0;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
0x4301;FILS_IsBusy;;1;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
0x4302;FILS_InvalidParameters;;2;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
0x4305;FILS_FileDoesNotExist;;5;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
0x4306;FILS_FileAlreadyExists;;6;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
0x4307;FILS_FileLocked;;7;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
0x430a;FILS_DirectoryDoesNotExist;;10;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
0x430b;FILS_DirectoryAlreadyExists;;11;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
0x430c;FILS_DirectoryNotEmpty;;12;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
0x430f;FILS_SequencePacketMissingWrite;;15;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
0x4310;FILS_SequencePacketMissingRead;;16;FILE_SYSTEM;fsfw/src/fsfw/memory/HasFileSystemIF.h
0x13e0;MH_UnknownCmd;;224;MEMORY_HELPER;fsfw/src/fsfw/memory/MemoryHelper.h 0x13e0;MH_UnknownCmd;;224;MEMORY_HELPER;fsfw/src/fsfw/memory/MemoryHelper.h
0x13e1;MH_InvalidAddress;;225;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 0x13e2;MH_InvalidSize;;226;MEMORY_HELPER;fsfw/src/fsfw/memory/MemoryHelper.h
@ -215,19 +204,20 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
0x0804;DPS_DataSetUninitialised;;4;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 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 0x0806;DPS_PoolVarNull;;6;DATA_SET_CLASS;fsfw/src/fsfw/datapool/DataSetIF.h
0x1c01;TCD_PacketLost;;1;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributor.h 0x1c01;TCD_PacketLost;;1;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributorBase.h
0x1c02;TCD_DestinationNotFound;;2;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributor.h 0x1c02;TCD_DestinationNotFound;;2;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributorBase.h
0x1c03;TCD_ServiceIdAlreadyExists;;3;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributor.h 0x1c03;TCD_ServiceIdAlreadyExists;;3;PACKET_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/TcDistributorBase.h
0x1b00;TCC_InvalidCcsdsVersion;;0;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h 0x1b00;TCC_NoDestinationFound;;0;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b01;TCC_InvalidApid;;1;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h 0x1b01;TCC_InvalidCcsdsVersion;;1;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b02;TCC_InvalidPacketType;;2;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h 0x1b02;TCC_InvalidApid;;2;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b03;TCC_InvalidSecHeaderField;;3;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h 0x1b03;TCC_InvalidPacketType;;3;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b04;TCC_IncorrectPrimaryHeader;;4;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h 0x1b04;TCC_InvalidSecHeaderField;;4;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b05;TCC_IncompletePacket;;5;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h 0x1b05;TCC_IncorrectPrimaryHeader;;5;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b06;TCC_InvalidPusVersion;;6;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h 0x1b07;TCC_IncompletePacket;;7;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b07;TCC_IncorrectChecksum;;7;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h 0x1b08;TCC_InvalidPusVersion;;8;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b08;TCC_IllegalPacketSubtype;;8;PACKET_CHECK;fsfw/src/fsfw/tcdistribution/definitions.h 0x1b09;TCC_IncorrectChecksum;;9;TMTC_DISTRIBUTION;fsfw/src/fsfw/tcdistribution/definitions.h
0x1b09;TCC_IncorrectSecondaryHeader;;9;PACKET_CHECK;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 0x3001;POS_InPowerTransition;;1;POWER_SWITCHER;fsfw/src/fsfw/power/PowerSwitcher.h
0x3002;POS_SwitchStateMismatch;;2;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 0x0501;PS_SwitchOn;;1;POWER_SWITCH_IF;fsfw/src/fsfw/power/PowerSwitchIF.h
@ -324,13 +314,31 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
0x31e3;LIM_WrongLimitId;;227;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 0x31ee;LIM_MonitorNotFound;;238;LIMITS_IF;fsfw/src/fsfw/monitoring/MonitoringIF.h
0x3601;CFDP_InvalidTlvType;;1;CFDP;fsfw/src/fsfw/cfdp/definitions.h 0x3601;CFDP_InvalidTlvType;;1;CFDP;fsfw/src/fsfw/cfdp/definitions.h
0x3602;CFDP_InvalidDirectiveFields;;2;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 0x3603;CFDP_InvalidPduDatafieldLen;;3;CFDP;fsfw/src/fsfw/cfdp/definitions.h
0x3604;CFDP_InvalidAckDirectiveFields;;4;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 0x3605;CFDP_MetadataCantParseOptions;;5;CFDP;fsfw/src/fsfw/cfdp/definitions.h
0x3606;CFDP_FinishedCantParseFsResponses;;6;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 0x3608;CFDP_FilestoreRequiresSecondFile;;8;CFDP;fsfw/src/fsfw/cfdp/definitions.h
0x3609;CFDP_FilestoreResponseCantParseFsMessage;;9;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
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
@ -361,8 +369,9 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
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
0x4201;PUS11_InvalidTypeTimeWindow;;1;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h 0x4201;PUS11_InvalidTypeTimeWindow;;1;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
0x4202;PUS11_TimeshiftingNotPossible;;2;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h 0x4202;PUS11_InvalidTimeWindow;;2;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
0x4203;PUS11_InvalidRelativeTime;;3;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h 0x4203;PUS11_TimeshiftingNotPossible;;3;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
0x4204;PUS11_InvalidRelativeTime;;4;PUS_SERVICE_11;fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
0x3401;DC_NoReplyReceived;;1;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h 0x3401;DC_NoReplyReceived;;1;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
0x3402;DC_ProtocolError;;2;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h 0x3402;DC_ProtocolError;;2;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
0x3403;DC_Nullpointer;;3;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h 0x3403;DC_Nullpointer;;3;DEVICE_COMMUNICATION_IF;fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
@ -410,8 +419,8 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
0x2403;MT_NoMatch;;3;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h 0x2403;MT_NoMatch;;3;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
0x2404;MT_Full;;4;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h 0x2404;MT_Full;;4;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
0x2405;MT_NewNodeCreated;;5;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h 0x2405;MT_NewNodeCreated;;5;MATCH_TREE_CLASS;fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
0x3f01;DLEE_StreamTooShort;;1;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleEncoder.h 0x3f01;DLEE_NoPacketFound;;1;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleParser.h
0x3f02;DLEE_DecodingError;;2;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleEncoder.h 0x3f02;DLEE_PossiblePacketLoss;;2;DLE_ENCODER;fsfw/src/fsfw/globalfunctions/DleParser.h
0x2f01;ASC_TooLongForTargetType;;1;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/AsciiConverter.h 0x2f01;ASC_TooLongForTargetType;;1;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/AsciiConverter.h
0x2f02;ASC_InvalidCharacters;;2;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/AsciiConverter.h 0x2f02;ASC_InvalidCharacters;;2;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/AsciiConverter.h
0x2f03;ASC_BufferTooSmall;;3;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/AsciiConverter.h 0x2f03;ASC_BufferTooSmall;;3;ASCII_CONVERTER;fsfw/src/fsfw/globalfunctions/AsciiConverter.h
@ -457,15 +466,15 @@ Full ID (hex); Name; Description; Unique ID; Subsytem Name; File Path
0x1d04;ATC_SendTmFailed;;4;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 0x1d05;ATC_Timeout;;5;ACCEPTS_TELECOMMANDS_IF;fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h
0x6b00;SCBU_KeyNotFound;;0;SCRATCH_BUFFER;bsp_q7s/memory/scratchApi.h 0x6b00;SCBU_KeyNotFound;;0;SCRATCH_BUFFER;bsp_q7s/memory/scratchApi.h
0x64a0;FSHLP_SdNotMounted;SD card specified with path string not mounted;160;FILE_SYSTEM_HELPER;bsp_q7s/memory/FilesystemHelper.h 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/memory/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/memory/SdCardManager.h 0x6a00;SDMA_OpOngoing;;0;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
0x6a01;SDMA_AlreadyOn;;1;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h 0x6a01;SDMA_AlreadyOn;;1;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
0x6a02;SDMA_AlreadyMounted;;2;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h 0x6a02;SDMA_AlreadyMounted;;2;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
0x6a03;SDMA_AlreadyOff;;3;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h 0x6a03;SDMA_AlreadyOff;;3;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
0x6a0a;SDMA_StatusFileNexists;;10;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h 0x6a0a;SDMA_StatusFileNexists;;10;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
0x6a0b;SDMA_StatusFileFormatInvalid;;11;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h 0x6a0b;SDMA_StatusFileFormatInvalid;;11;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
0x6a0c;SDMA_MountError;;12;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h 0x6a0c;SDMA_MountError;;12;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
0x6a0d;SDMA_UnmountError;;13;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h 0x6a0d;SDMA_UnmountError;;13;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
0x6a0e;SDMA_SystemCallError;;14;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h 0x6a0e;SDMA_SystemCallError;;14;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.h
0x6a0f;SDMA_PopenCallError;;15;SD_CARD_MANAGER;bsp_q7s/memory/SdCardManager.h 0x6a0f;SDMA_PopenCallError;;15;SD_CARD_MANAGER;bsp_q7s/fs/SdCardManager.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/HasReturnvaluesIF.h fsfw/returnvalues/returnvalue.h
3 0x0001 Failed Unspecified system-wide code for failed. 1 HasReturnvaluesIF fsfw/returnvalues/HasReturnvaluesIF.h fsfw/returnvalues/returnvalue.h
4 0x63a0 NVMB_KeyNotExists Specified key does not exist in json file 160 NVM_PARAM_BASE mission/memory/NVMParameterBase.h
5 0x58a0 SUSS_ErrorUnlockMutex 160 SUS_HANDLER mission/devices/SusHandler.h
6 0x58a1 SUSS_ErrorLockMutex 161 SUS_HANDLER mission/devices/SusHandler.h
89 0x06e2 PP_InvalidContent 226 HAS_MEMORY_IF fsfw/src/fsfw/memory/HasMemoryIF.h
90 0x06e3 PP_UnalignedAccess 227 HAS_MEMORY_IF fsfw/src/fsfw/memory/HasMemoryIF.h
91 0x06e4 PP_WriteProtected 228 HAS_MEMORY_IF fsfw/src/fsfw/memory/HasMemoryIF.h
0x4300 FILS_GenericFileError 0 FILE_SYSTEM fsfw/src/fsfw/memory/HasFileSystemIF.h
0x4301 FILS_IsBusy 1 FILE_SYSTEM fsfw/src/fsfw/memory/HasFileSystemIF.h
0x4302 FILS_InvalidParameters 2 FILE_SYSTEM fsfw/src/fsfw/memory/HasFileSystemIF.h
0x4305 FILS_FileDoesNotExist 5 FILE_SYSTEM fsfw/src/fsfw/memory/HasFileSystemIF.h
0x4306 FILS_FileAlreadyExists 6 FILE_SYSTEM fsfw/src/fsfw/memory/HasFileSystemIF.h
0x4307 FILS_FileLocked 7 FILE_SYSTEM fsfw/src/fsfw/memory/HasFileSystemIF.h
0x430a FILS_DirectoryDoesNotExist 10 FILE_SYSTEM fsfw/src/fsfw/memory/HasFileSystemIF.h
0x430b FILS_DirectoryAlreadyExists 11 FILE_SYSTEM fsfw/src/fsfw/memory/HasFileSystemIF.h
0x430c FILS_DirectoryNotEmpty 12 FILE_SYSTEM fsfw/src/fsfw/memory/HasFileSystemIF.h
0x430f FILS_SequencePacketMissingWrite 15 FILE_SYSTEM fsfw/src/fsfw/memory/HasFileSystemIF.h
0x4310 FILS_SequencePacketMissingRead 16 FILE_SYSTEM fsfw/src/fsfw/memory/HasFileSystemIF.h
92 0x13e0 MH_UnknownCmd 224 MEMORY_HELPER fsfw/src/fsfw/memory/MemoryHelper.h
93 0x13e1 MH_InvalidAddress 225 MEMORY_HELPER fsfw/src/fsfw/memory/MemoryHelper.h
94 0x13e2 MH_InvalidSize 226 MEMORY_HELPER fsfw/src/fsfw/memory/MemoryHelper.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/TcDistributor.h fsfw/src/fsfw/tcdistribution/TcDistributorBase.h
208 0x1c02 TCD_DestinationNotFound 2 PACKET_DISTRIBUTION fsfw/src/fsfw/tcdistribution/TcDistributor.h fsfw/src/fsfw/tcdistribution/TcDistributorBase.h
209 0x1c03 TCD_ServiceIdAlreadyExists 3 PACKET_DISTRIBUTION fsfw/src/fsfw/tcdistribution/TcDistributor.h fsfw/src/fsfw/tcdistribution/TcDistributorBase.h
210 0x1b00 TCC_InvalidCcsdsVersion TCC_NoDestinationFound 0 PACKET_CHECK TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
211 0x1b01 TCC_InvalidApid TCC_InvalidCcsdsVersion 1 PACKET_CHECK TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
212 0x1b02 TCC_InvalidPacketType TCC_InvalidApid 2 PACKET_CHECK TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
213 0x1b03 TCC_InvalidSecHeaderField TCC_InvalidPacketType 3 PACKET_CHECK TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
214 0x1b04 TCC_IncorrectPrimaryHeader TCC_InvalidSecHeaderField 4 PACKET_CHECK TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
215 0x1b05 TCC_IncompletePacket TCC_IncorrectPrimaryHeader 5 PACKET_CHECK TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
216 0x1b06 0x1b07 TCC_InvalidPusVersion TCC_IncompletePacket 6 7 PACKET_CHECK TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
217 0x1b07 0x1b08 TCC_IncorrectChecksum TCC_InvalidPusVersion 7 8 PACKET_CHECK TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
218 0x1b08 0x1b09 TCC_IllegalPacketSubtype TCC_IncorrectChecksum 8 9 PACKET_CHECK TMTC_DISTRIBUTION fsfw/src/fsfw/tcdistribution/definitions.h
219 0x1b09 0x1b0a TCC_IncorrectSecondaryHeader TCC_IllegalPacketSubtype 9 10 PACKET_CHECK 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
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_InvalidDirectiveFields 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_FinishedCantParseFsResponses 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 0x4303 FILS_GenericRenameError 3 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
329 0x4304 FILS_IsBusy 4 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
330 0x4305 FILS_InvalidParameters 5 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
331 0x430a FILS_FileDoesNotExist 10 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
332 0x430b FILS_FileAlreadyExists 11 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
333 0x430c FILS_NotAFile 12 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
334 0x430d FILS_FileLocked 13 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
335 0x430e FILS_PermissionDenied 14 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
336 0x4315 FILS_DirectoryDoesNotExist 21 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
337 0x4316 FILS_DirectoryAlreadyExists 22 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
338 0x4317 FILS_NotADirectory 23 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
339 0x4318 FILS_DirectoryNotEmpty 24 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
340 0x431e FILS_SequencePacketMissingWrite 30 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
341 0x431f FILS_SequencePacketMissingRead 31 FILE_SYSTEM fsfw/src/fsfw/filesystem/HasFileSystemIF.h
342 0x2c01 CCS_BcIsSetVrCommand 1 CCSDS_HANDLER_IF fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
343 0x2c02 CCS_BcIsUnlockCommand 2 CCSDS_HANDLER_IF fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
344 0x2cb0 CCS_BcIllegalCommand 176 CCSDS_HANDLER_IF fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
369 0x2cd2 CCS_TooShortBlockedPacket 210 CCSDS_HANDLER_IF fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
370 0x2cd3 CCS_TooShortMapExtraction 211 CCSDS_HANDLER_IF fsfw/src/fsfw/datalinklayer/CCSDSReturnValuesIF.h
371 0x4201 PUS11_InvalidTypeTimeWindow 1 PUS_SERVICE_11 fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
372 0x4202 PUS11_TimeshiftingNotPossible PUS11_InvalidTimeWindow 2 PUS_SERVICE_11 fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
373 0x4203 PUS11_InvalidRelativeTime PUS11_TimeshiftingNotPossible 3 PUS_SERVICE_11 fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
374 0x4204 PUS11_InvalidRelativeTime 4 PUS_SERVICE_11 fsfw/src/fsfw/pus/Service11TelecommandScheduling.h
375 0x3401 DC_NoReplyReceived 1 DEVICE_COMMUNICATION_IF fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
376 0x3402 DC_ProtocolError 2 DEVICE_COMMUNICATION_IF fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
377 0x3403 DC_Nullpointer 3 DEVICE_COMMUNICATION_IF fsfw/src/fsfw/devicehandlers/DeviceCommunicationIF.h
419 0x2403 MT_NoMatch 3 MATCH_TREE_CLASS fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
420 0x2404 MT_Full 4 MATCH_TREE_CLASS fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
421 0x2405 MT_NewNodeCreated 5 MATCH_TREE_CLASS fsfw/src/fsfw/globalfunctions/matching/MatchTree.h
422 0x3f01 DLEE_StreamTooShort DLEE_NoPacketFound 1 DLE_ENCODER fsfw/src/fsfw/globalfunctions/DleEncoder.h fsfw/src/fsfw/globalfunctions/DleParser.h
423 0x3f02 DLEE_DecodingError DLEE_PossiblePacketLoss 2 DLE_ENCODER fsfw/src/fsfw/globalfunctions/DleEncoder.h fsfw/src/fsfw/globalfunctions/DleParser.h
424 0x2f01 ASC_TooLongForTargetType 1 ASCII_CONVERTER fsfw/src/fsfw/globalfunctions/AsciiConverter.h
425 0x2f02 ASC_InvalidCharacters 2 ASCII_CONVERTER fsfw/src/fsfw/globalfunctions/AsciiConverter.h
426 0x2f03 ASC_BufferTooSmall 3 ASCII_CONVERTER fsfw/src/fsfw/globalfunctions/AsciiConverter.h
466 0x1d04 ATC_SendTmFailed 4 ACCEPTS_TELECOMMANDS_IF fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h
467 0x1d05 ATC_Timeout 5 ACCEPTS_TELECOMMANDS_IF fsfw/src/fsfw/tmtcservices/AcceptsTelecommandsIF.h
468 0x6b00 SCBU_KeyNotFound 0 SCRATCH_BUFFER bsp_q7s/memory/scratchApi.h
469 0x64a0 FSHLP_SdNotMounted SD card specified with path string not mounted 160 FILE_SYSTEM_HELPER bsp_q7s/memory/FilesystemHelper.h bsp_q7s/fs/FilesystemHelper.h
470 0x64a1 FSHLP_FileNotExists Specified file does not exist on filesystem 161 FILE_SYSTEM_HELPER bsp_q7s/memory/FilesystemHelper.h bsp_q7s/fs/FilesystemHelper.h
471 0x6a00 SDMA_OpOngoing 0 SD_CARD_MANAGER bsp_q7s/memory/SdCardManager.h bsp_q7s/fs/SdCardManager.h
472 0x6a01 SDMA_AlreadyOn 1 SD_CARD_MANAGER bsp_q7s/memory/SdCardManager.h bsp_q7s/fs/SdCardManager.h
473 0x6a02 SDMA_AlreadyMounted 2 SD_CARD_MANAGER bsp_q7s/memory/SdCardManager.h bsp_q7s/fs/SdCardManager.h
474 0x6a03 SDMA_AlreadyOff 3 SD_CARD_MANAGER bsp_q7s/memory/SdCardManager.h bsp_q7s/fs/SdCardManager.h
475 0x6a0a SDMA_StatusFileNexists 10 SD_CARD_MANAGER bsp_q7s/memory/SdCardManager.h bsp_q7s/fs/SdCardManager.h
476 0x6a0b SDMA_StatusFileFormatInvalid 11 SD_CARD_MANAGER bsp_q7s/memory/SdCardManager.h bsp_q7s/fs/SdCardManager.h
477 0x6a0c SDMA_MountError 12 SD_CARD_MANAGER bsp_q7s/memory/SdCardManager.h bsp_q7s/fs/SdCardManager.h
478 0x6a0d SDMA_UnmountError 13 SD_CARD_MANAGER bsp_q7s/memory/SdCardManager.h bsp_q7s/fs/SdCardManager.h
479 0x6a0e SDMA_SystemCallError 14 SD_CARD_MANAGER bsp_q7s/memory/SdCardManager.h bsp_q7s/fs/SdCardManager.h
480 0x6a0f SDMA_PopenCallError 15 SD_CARD_MANAGER bsp_q7s/memory/SdCardManager.h bsp_q7s/fs/SdCardManager.h

2
deps/tmtccmd vendored

1
filetest/cfdp_test.txt Normal file
View File

@ -0,0 +1 @@
hello world

BIN
filetest/obsw_update.bin Normal file

Binary file not shown.

View File

@ -26,6 +26,7 @@ class GomspaceDeviceActionIds(enum.IntEnum):
REQUEST_CONFIG_TABLE = 17 REQUEST_CONFIG_TABLE = 17
SAVE_TABLE = 18 SAVE_TABLE = 18
SAVE_TABLE_DEFAULT = 19 SAVE_TABLE_DEFAULT = 19
LOAD_TABLE = 20
PRINT_SWITCH_V_I = 32 PRINT_SWITCH_V_I = 32
PRINT_LATCHUPS = 33 PRINT_LATCHUPS = 33
@ -41,6 +42,7 @@ class GomspaceOpCodes:
SAVE_TABLE = ["save_table"] SAVE_TABLE = ["save_table"]
RESET_GND_WATCHDOG = ["reset_gnd_wdt"] RESET_GND_WATCHDOG = ["reset_gnd_wdt"]
SAVE_TABLE_DEFAULT = ["save_table_default"] SAVE_TABLE_DEFAULT = ["save_table_default"]
LOAD_TABLE = ["load_table"]
REQUEST_CONFIG_TABLE = ["cfg_table"] REQUEST_CONFIG_TABLE = ["cfg_table"]
@ -55,6 +57,7 @@ class GsInfo:
RESET_GND_WATCHDOG = "Reset GND watchdog" RESET_GND_WATCHDOG = "Reset GND watchdog"
SAVE_TABLE = "Save table non-volatile (file)" SAVE_TABLE = "Save table non-volatile (file)"
SAVE_TABLE_DEFAULT = "Save table non-volatile (default)" SAVE_TABLE_DEFAULT = "Save table non-volatile (default)"
LOAD_TABLE = "Load Table"
class SetIds: class SetIds:

View File

@ -1,10 +1,12 @@
import enum import enum
import json import json
from spacepackets.ecss import PusTelecommand
from config.definitions import CustomServiceList from config.definitions import CustomServiceList
from tmtccmd import DefaultProcedureInfo, TcHandlerBase
from tmtccmd.config.tmtc import tmtc_definitions_provider from tmtccmd.config.tmtc import tmtc_definitions_provider
from tmtccmd.tc import DefaultPusQueueHelper, service_provider from tmtccmd.tc.pus_200_fsfw_modes import Modes, pack_mode_data, Subservices
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.tc.pus_8_funccmd import make_fsfw_action_cmd
from tmtccmd.config import OpCodeEntry, TmtcDefinitionWrapper from tmtccmd.config import OpCodeEntry, TmtcDefinitionWrapper
@ -24,6 +26,9 @@ class OpCodes:
ALL_CELLS_CMD = ["5", "allcells"] ALL_CELLS_CMD = ["5", "allcells"]
FRAM = ["6", "fram"] FRAM = ["6", "fram"]
SWITCH_ON = ["7", "on"]
SWITCH_OFF = ["8", "off"]
class ActionIds(enum.IntEnum): class ActionIds(enum.IntEnum):
PING = 7 PING = 7
@ -46,6 +51,9 @@ class Info:
ALL_CELLS_CMD = "All Cells" ALL_CELLS_CMD = "All Cells"
FRAM = "Read FRAM" FRAM = "Read FRAM"
SWITCH_ON = "Switch Scex on"
SWITCH_OFF = "Switch Scex off"
@tmtc_definitions_provider @tmtc_definitions_provider
def add_scex_cmds(defs: TmtcDefinitionWrapper): def add_scex_cmds(defs: TmtcDefinitionWrapper):
@ -58,6 +66,8 @@ def add_scex_cmds(defs: TmtcDefinitionWrapper):
oce.add(keys=OpCodes.ALL_CELLS_CMD, info=Info.ALL_CELLS_CMD) oce.add(keys=OpCodes.ALL_CELLS_CMD, info=Info.ALL_CELLS_CMD)
oce.add(keys=OpCodes.FRAM, info=Info.FRAM) oce.add(keys=OpCodes.FRAM, info=Info.FRAM)
oce.add(keys=OpCodes.SWITCH_ON, info=Info.SWITCH_ON)
oce.add(keys=OpCodes.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
@ -68,6 +78,24 @@ 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:
q.add_log_cmd(Info.SWITCH_ON)
q.add_pus_tc(
PusTelecommand(
service=200,
subservice=Subservices.TC_MODE_COMMAND,
app_data=pack_mode_data(SCEX_HANDLER_ID, Modes.ON, 0),
)
)
if op_code in OpCodes.SWITCH_OFF:
q.add_log_cmd(Info.SWITCH_OFF)
q.add_pus_tc(
PusTelecommand(
service=200,
subservice=Subservices.TC_MODE_COMMAND,
app_data=pack_mode_data(SCEX_HANDLER_ID, Modes.OFF, 0),
)
)
if op_code in OpCodes.PING: if op_code in OpCodes.PING:
q.add_log_cmd(Info.PING) q.add_log_cmd(Info.PING)
app_data = bytes([0]) app_data = bytes([0])
@ -93,7 +121,7 @@ def pack_scex_cmds(p: ServiceProviderParams):
# one cell # one cell
if op_code in OpCodes.ONE_CELLS_CMD: if op_code in OpCodes.ONE_CELLS_CMD:
q.add_log_cmd(Info.ONE_CELLS_CMD) q.add_log_cmd(Info.ONE_CELLS_CMD)
app_data = bytearray() app_data = bytearray([0])
# cell number # cell number
cn = 0 cn = 0
@ -125,6 +153,7 @@ def pack_scex_cmds(p: ServiceProviderParams):
# in app_data # in app_data
# app_data.extend(struct.pack("!H", first_dac)) # app_data.extend(struct.pack("!H", first_dac))
app_data.append(cell_select)
append_16_bit_val(packet=app_data, val=first_dac[cn]) append_16_bit_val(packet=app_data, val=first_dac[cn])
append_16_bit_val(packet=app_data, val=last_dac[cn]) append_16_bit_val(packet=app_data, val=last_dac[cn])
append_16_bit_val(packet=app_data, val=res_switch1[cn]) append_16_bit_val(packet=app_data, val=res_switch1[cn])
@ -140,7 +169,7 @@ def pack_scex_cmds(p: ServiceProviderParams):
if op_code in OpCodes.ALL_CELLS_CMD: if op_code in OpCodes.ALL_CELLS_CMD:
q.add_log_cmd(Info.ALL_CELLS_CMD) q.add_log_cmd(Info.ALL_CELLS_CMD)
app_data = bytearray() app_data = bytearray([0])
# cell number # cell number
cn = 0 cn = 0

View File

@ -211,7 +211,14 @@ def handle_default_procedure(
gui=tc_handler.gui, gui=tc_handler.gui,
) )
if service == CustomServiceList.SCEX.value: if service == CustomServiceList.SCEX.value:
return pack_scex_cmds(q=queue_helper, op_code=op_code) return pack_scex_cmds(
ServiceProviderParams(
handler_base=tc_base,
op_code=op_code,
info=info,
queue_helper=queue_helper,
)
)
if not route_to_registered_service_handlers( if not route_to_registered_service_handlers(
service, service,
ServiceProviderParams( ServiceProviderParams(

View File

@ -1,6 +1,7 @@
import enum import enum
from config.definitions import CustomServiceList from config.definitions import CustomServiceList
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
@ -17,12 +18,15 @@ LOGGER = get_console_logger()
class ActionIds(enum.IntEnum): class ActionIds(enum.IntEnum):
LIST_DIR_INTO_FILE = 0 LIST_DIR_INTO_FILE = 0
SWITCH_REBOOT_FILE_HANDLING = 5 SWITCH_REBOOT_FILE_HANDLING = 5
RESET_ALL_REBOOT_COUNTERS = 6 RESET_REBOOT_COUNTER = 6
RESET_REBOOT_COUNTER_00 = 7 SWITCH_IMG_LOCK = 7
RESET_REBOOT_COUNTER_01 = 8 SET_MAX_REBOOT_CNT = 8
RESET_REBOOT_COUNTER_10 = 9 UPDATE_OBSW_FROM_SD_0 = 10
RESET_REBOOT_COUNTER_11 = 10 UPDATE_OBSW_FROM_SD_1 = 11
SET_MAX_REBOOT_CNT = 11 UPDATE_OBSW_FROM_TMP = 12
SWITCH_TO_SD_0 = 16
SWITCH_TO_SD_1 = 17
SWITCH_TO_BOTH_SD_CARDS = 18
XSC_REBOOT = 32 XSC_REBOOT = 32
FULL_REBOOT = 34 FULL_REBOOT = 34
@ -40,6 +44,12 @@ class OpCodes:
XSC_REBOOT_1_1 = ["5", "reboot_11"] XSC_REBOOT_1_1 = ["5", "reboot_11"]
REBOOT_FULL = ["6", "reboot_regular"] REBOOT_FULL = ["6", "reboot_regular"]
GET_HK = ["7", "get_hk"] GET_HK = ["7", "get_hk"]
OBSW_UPDATE_FROM_SD_0 = ["obsw_update_sd0"]
OBSW_UPDATE_FROM_SD_1 = ["obsw_update_sd1"]
OBSW_UPDATE_FROM_TMP = ["obsw_update_tmp"]
SWITCH_TO_SD_0 = ["switch_to_sd_0"]
SWITCH_TO_SD_1 = ["switch_to_sd_1"]
SWITCH_TO_BOTH_SD_CARDS = ["switch_to_both_sd_cards"]
ENABLE_REBOOT_FILE_HANDLING = ["32", "rbh_off"] ENABLE_REBOOT_FILE_HANDLING = ["32", "rbh_off"]
DISABLE_REBOOT_FILE_HANDLING = ["33", "rbh_on"] DISABLE_REBOOT_FILE_HANDLING = ["33", "rbh_on"]
RESET_ALL_REBOOT_COUNTERS = ["34", "rbh_reset_a"] RESET_ALL_REBOOT_COUNTERS = ["34", "rbh_reset_a"]
@ -53,6 +63,12 @@ class OpCodes:
class Info: class Info:
REBOOT_XSC = "XSC reboot with prompt" REBOOT_XSC = "XSC reboot with prompt"
REBOOT_FULL = "Full regular reboot" REBOOT_FULL = "Full regular reboot"
OBSW_UPDATE_FROM_SD_0 = "Update OBSW from SD Card 0"
OBSW_UPDATE_FROM_SD_1 = "Update OBSW from SD Card 1"
OBSW_UPDATE_FROM_TMP = "Update OBSW from tmp folder"
SWITCH_TO_SD_0 = "Switch to SD card 0"
SWITCH_TO_SD_1 = "Switch to SD card 1"
SWITCH_TO_BOTH_SD_CARDS = "Switch to both SD cards with specified active card"
class Chip(enum.IntEnum): class Chip(enum.IntEnum):
@ -110,6 +126,12 @@ def add_core_controller_definitions(defs: TmtcDefinitionWrapper):
keys=OpCodes.RESET_REBOOT_COUNTER_11, keys=OpCodes.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=OpCodes.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=OpCodes.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=OpCodes.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)
@ -155,44 +177,76 @@ def pack_core_commands(q: DefaultPusQueueHelper, op_code: str):
) )
if op_code in OpCodes.DISABLE_REBOOT_FILE_HANDLING: if op_code in OpCodes.DISABLE_REBOOT_FILE_HANDLING:
q.add_log_cmd("Disabling reboot file handling") q.add_log_cmd("Disabling reboot file handling")
app_data = bytearray([0]) user_data = bytearray([0])
q.add_pus_tc(
make_fsfw_action_cmd( make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID, object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING, action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING,
user_data=app_data, user_data=user_data,
)
) )
if op_code in OpCodes.ENABLE_REBOOT_FILE_HANDLING: if op_code in OpCodes.ENABLE_REBOOT_FILE_HANDLING:
q.add_log_cmd("Enabling reboot file handling") q.add_log_cmd("Enabling reboot file handling")
app_data = bytearray([1]) user_data = bytearray([1])
q.add_pus_tc(
make_fsfw_action_cmd( make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID, object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING, action_id=ActionIds.SWITCH_REBOOT_FILE_HANDLING,
user_data=app_data, user_data=user_data,
)
) )
if op_code in OpCodes.RESET_ALL_REBOOT_COUNTERS: if op_code in OpCodes.RESET_ALL_REBOOT_COUNTERS:
q.add_log_cmd("Resetting all reboot counters") q.add_log_cmd("Resetting all reboot counters")
q.add_pus_tc(
make_fsfw_action_cmd( make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_ALL_REBOOT_COUNTERS object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.RESET_REBOOT_COUNTER,
)
) )
if op_code in OpCodes.RESET_REBOOT_COUNTER_00: if op_code in OpCodes.RESET_REBOOT_COUNTER_00:
q.add_log_cmd("Resetting reboot counter 0 0") reset_specific_boot_counter(q, 0, 0)
make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_00
)
if op_code in OpCodes.RESET_REBOOT_COUNTER_01: if op_code in OpCodes.RESET_REBOOT_COUNTER_01:
q.add_log_cmd("Resetting reboot counter 0 1") reset_specific_boot_counter(q, 0, 1)
make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_01
)
if op_code in OpCodes.RESET_REBOOT_COUNTER_10: if op_code in OpCodes.RESET_REBOOT_COUNTER_10:
q.add_log_cmd("Resetting reboot counter 1 0") reset_specific_boot_counter(q, 1, 0)
make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_10
)
if op_code in OpCodes.RESET_REBOOT_COUNTER_11: if op_code in OpCodes.RESET_REBOOT_COUNTER_11:
q.add_log_cmd("Resetting reboot counter 1 1") reset_specific_boot_counter(q, 1, 1)
if op_code in OpCodes.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))
if op_code in OpCodes.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))
if op_code in OpCodes.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))
if op_code in OpCodes.SWITCH_TO_SD_0:
q.add_log_cmd(Info.SWITCH_TO_SD_0)
q.add_pus_tc(
make_fsfw_action_cmd( make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.RESET_REBOOT_COUNTER_11 object_id=CORE_CONTROLLER_ID, action_id=ActionIds.SWITCH_TO_SD_0
)
)
if op_code in OpCodes.SWITCH_TO_SD_1:
q.add_log_cmd(Info.SWITCH_TO_SD_1)
q.add_pus_tc(
make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=ActionIds.SWITCH_TO_SD_1
)
)
if op_code in OpCodes.SWITCH_TO_BOTH_SD_CARDS:
while True:
active_sd_card = int(input("Please specify active SD cqrd [0/1]: "))
if active_sd_card not in [0, 1]:
LOGGER.warning("Invalid SD card specified. Try again")
break
q.add_log_cmd(Info.SWITCH_TO_BOTH_SD_CARDS)
q.add_pus_tc(
make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.SWITCH_TO_BOTH_SD_CARDS,
user_data=bytes([active_sd_card]),
)
) )
if op_code in OpCodes.GET_HK: if op_code in OpCodes.GET_HK:
q.add_log_cmd("Requesting housekeeping set") q.add_log_cmd("Requesting housekeeping set")
@ -200,6 +254,17 @@ def pack_core_commands(q: DefaultPusQueueHelper, op_code: str):
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):
q.add_log_cmd(f"Resetting boot counter {chip} {copy}")
q.add_pus_tc(
make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID,
action_id=ActionIds.RESET_REBOOT_COUNTER,
user_data=bytes([chip, copy]),
)
)
def determine_reboot_params() -> (bool, Chip, Copy): def determine_reboot_params() -> (bool, Chip, Copy):
chip_select = -1 chip_select = -1
copy_select = -1 copy_select = -1
@ -208,6 +273,10 @@ def determine_reboot_params() -> (bool, Chip, Copy):
LOGGER.info("Rebooting currently running image") LOGGER.info("Rebooting currently running image")
return True, chip_select, copy_select return True, chip_select, copy_select
LOGGER.info("Rebooting image specified by chip and copy") LOGGER.info("Rebooting image specified by chip and copy")
return False, determine_chip_and_copy()
def determine_chip_and_copy() -> (int, int):
while True: while True:
chip_select = input("Chip select [0/1]: ") chip_select = input("Chip select [0/1]: ")
if chip_select in ["0", "1"]: if chip_select in ["0", "1"]:
@ -228,7 +297,15 @@ def determine_reboot_params() -> (bool, Chip, Copy):
break break
else: else:
LOGGER.warning("Invalid copy select value. Try again") LOGGER.warning("Invalid copy select value. Try again")
return False, chip_select, copy_select return chip_select, copy_select
def pack_obsw_update_cmd(action_id: int) -> PusTelecommand:
chip, copy = determine_chip_and_copy()
user_data = bytes([chip, copy])
return make_fsfw_action_cmd(
object_id=CORE_CONTROLLER_ID, action_id=action_id, user_data=user_data
)
def perform_reboot_cmd( def perform_reboot_cmd(

View File

@ -16,9 +16,9 @@ from config.object_ids import TCS_BOARD_ASS_ID, TCS_CONTROLLER
class OpCodes: class OpCodes:
TCS_BOARD_ASS_NORMAL = ["0", "tcs-normal"] TCS_BOARD_ASS_NORMAL = ["0", "normal"]
TCS_BOARD_ASS_OFF = ["1", "tcs-off"] TCS_BOARD_ASS_OFF = ["1", "off"]
REQUEST_SENSOR_TEMP_SET = ["2", "temp-hk"] REQUEST_SENSOR_TEMP_SET = ["2", "temps"]
class Info: class Info:

View File

@ -58,6 +58,9 @@ def handle_event_packet(raw_tm: bytes, printer: FsfwTmTcPrinter):
) )
pw.dlog(additional_event_info) pw.dlog(additional_event_info)
pw.dlog(context) pw.dlog(context)
if info.name == "MODE_INFO":
pw.dlog(f"Mode: {tm.param_1}")
pw.dlog(f"Submode: {tm.param_2}")
else: else:
specific_handler = False specific_handler = False
if info.info != "": if info.info != "":

View File

@ -1,5 +1,5 @@
"""HK Handling for EIVE OBSW""" """HK Handling for EIVE OBSW"""
from pus_tm.tcp_server_objects import tcp_server_sensor_temperatures # from pus_tm.tcp_server_objects import TCP_SEVER_SENSOR_TEMPERATURES
from tmtc.acs_ctrl import handle_acs_ctrl_mgm_data from tmtc.acs_ctrl import handle_acs_ctrl_mgm_data
from pus_tm.devs.plpcdu import handle_plpcdu_hk from pus_tm.devs.plpcdu import handle_plpcdu_hk
from pus_tm.devs.rad_sensor import handle_rad_sensor_data from pus_tm.devs.rad_sensor import handle_rad_sensor_data
@ -51,9 +51,11 @@ def handle_hk_packet(
if tm_packet.subservice == 25 or tm_packet.subservice == 26: if tm_packet.subservice == 25 or tm_packet.subservice == 26:
hk_data = tm_packet.tm_data[8:] hk_data = tm_packet.tm_data[8:]
if FORWARD_SENSOR_TEMPS: if FORWARD_SENSOR_TEMPS:
tcp_server_sensor_temperatures.report_raw_hk_data( # TODO: Maybe use singleton?
object_id=named_obj_id, set_id=tm_packet.set_id, hk_data=hk_data # TCP_SEVER_SENSOR_TEMPERATURES.report_raw_hk_data(
) # object_id=named_obj_id, set_id=tm_packet.set_id, hk_data=hk_data
# )
pass
printer.generic_hk_tm_print( printer.generic_hk_tm_print(
content_type=HkContentType.HK, content_type=HkContentType.HK,
object_id=named_obj_id, object_id=named_obj_id,

View File

@ -1,12 +1,8 @@
import enum import enum
import pprint
import struct import struct
from pus_tm.defs import PrintWrapper from pus_tm.defs import PrintWrapper
from pus_tm.tcp_server_objects import (
tcp_server_sensor_temperatures,
tcp_server_device_temperatures,
)
from pus_tm.tm_tcp_server import TmTcpServer
from tmtccmd.util import ObjectIdU32 from tmtccmd.util import ObjectIdU32
from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter from tmtccmd.util.tmtc_printer import FsfwTmTcPrinter
@ -20,10 +16,13 @@ class SetIds(enum.IntEnum):
def handle_thermal_controller_hk_data( def handle_thermal_controller_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 tcp_server_sensor_temperatures is None: # need a better solutuon for this is this is used again..
tcp_server_sensor_temperatures = TmTcpServer("localhost", 7305) """
if tcp_server_device_temperatures is None: if TCP_TEMP_SENS_SERVER is None:
tcp_server_device_temperatures = TmTcpServer("localhost", 7306) 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: if set_id == SetIds.SENSOR_TEMPERATURE_SET:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
pw.dlog("Received sensor temperature data") pw.dlog("Received sensor temperature data")
@ -51,9 +50,11 @@ def handle_thermal_controller_hk_data(
"TMP1075 2": tm_data[17], "TMP1075 2": tm_data[17],
} }
printer.file_logger.info(str(parsed_data)) printer.file_logger.info(str(parsed_data))
tcp_server_sensor_temperatures.report_parsed_hk_data( pp = pprint.PrettyPrinter(depth=4)
object_id, set_id, parsed_data 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: elif set_id == SetIds.DEVICE_TEMPERATURE_SET:
pw = PrintWrapper(printer) pw = PrintWrapper(printer)
pw.dlog("Received device temperature data") pw.dlog("Received device temperature data")
@ -88,10 +89,13 @@ def handle_thermal_controller_hk_data(
"MGM_1_TEMPERATURE": tm_data[25], "MGM_1_TEMPERATURE": tm_data[25],
"ADC_PL_PCDU_TEMPERATURE": tm_data[26], "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) # print(parsed_data)
tcp_server_device_temperatures.report_parsed_hk_data( # tcp_server_device_temperatures.report_parsed_hk_data(
object_id, set_id, parsed_data # object_id, set_id, parsed_data
) # )
elif set_id == SetIds.SUS_TEMPERATURE_SET: elif set_id == SetIds.SUS_TEMPERATURE_SET:
pass pass
# pw = PrintWrapper(printer) # pw = PrintWrapper(printer)

View File

@ -2,5 +2,5 @@ from typing import Optional
from pus_tm.tm_tcp_server import TmTcpServer from pus_tm.tm_tcp_server import TmTcpServer
tcp_server_sensor_temperatures: Optional[TmTcpServer] = None TCP_SERVER_SENSOR_TEMPERATURES: Optional[TmTcpServer] = None
tcp_server_device_temperatures: Optional[TmTcpServer] = None TCP_SERVER_DEVICE_TEMPERATURES: Optional[TmTcpServer] = None

View File

@ -142,6 +142,34 @@ def pack_gomspace_cmds(
user_data=bytes([source_table]), user_data=bytes([source_table]),
) )
) )
if op_code in GomspaceOpCodes.LOAD_TABLE:
target_table = int(
input(
"Target table ID [0: Board Config, 1: Module Config, 2: Calibration Parameter, "
"4: HK TM]: "
)
)
if target_table not in [0, 1, 2, 4]:
raise ValueError("Invalid source table index")
if target_table != 4:
source_table = int(
input(
"Source table (file or default) [0: Board Config, 1: Module Config, "
"2: Calibration Parameter, value + 4 for default table]: "
)
)
if source_table not in [0, 1, 2, 4, 5, 6]:
raise ValueError("Invalid source table index")
else:
# Will be ignored
source_table = 4
q.add_pus_tc(
make_fsfw_action_cmd(
object_id=object_id.as_bytes,
action_id=GomspaceDeviceActionIds.LOAD_TABLE,
user_data=bytes([source_table, target_table]),
)
)
if op_code in GomspaceOpCodes.RESET_GND_WATCHDOG: if op_code in GomspaceOpCodes.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))
@ -216,4 +244,5 @@ def add_gomspace_cmd_defs(oce: OpCodeEntry):
oce.add(keys=GomspaceOpCodes.REQUEST_CONFIG_TABLE, info=GsInfo.REQUEST_CONFIG_TABLE) oce.add(keys=GomspaceOpCodes.REQUEST_CONFIG_TABLE, info=GsInfo.REQUEST_CONFIG_TABLE)
oce.add(keys=GomspaceOpCodes.SAVE_TABLE, info=GsInfo.SAVE_TABLE) oce.add(keys=GomspaceOpCodes.SAVE_TABLE, info=GsInfo.SAVE_TABLE)
oce.add(keys=GomspaceOpCodes.SAVE_TABLE_DEFAULT, info=GsInfo.SAVE_TABLE_DEFAULT) oce.add(keys=GomspaceOpCodes.SAVE_TABLE_DEFAULT, info=GsInfo.SAVE_TABLE_DEFAULT)
oce.add(keys=GomspaceOpCodes.LOAD_TABLE, info=GsInfo.LOAD_TABLE)
oce.add(keys=GomspaceOpCodes.RESET_GND_WATCHDOG, info=GsInfo.RESET_GND_WATCHDOG) oce.add(keys=GomspaceOpCodes.RESET_GND_WATCHDOG, info=GsInfo.RESET_GND_WATCHDOG)

View File

@ -540,6 +540,8 @@ def p60_dock_config_table_handler(pw: PrintWrapper, custom_data: bytes):
init_out_safe = unpack_array_in_data(custom_data, 0xB7, 1, 13, "B") init_out_safe = unpack_array_in_data(custom_data, 0xB7, 1, 13, "B")
init_on_dly = unpack_array_in_data(custom_data, 0xC4, 2, 13, "H") init_on_dly = unpack_array_in_data(custom_data, 0xC4, 2, 13, "H")
init_off_dly = unpack_array_in_data(custom_data, 0xDE, 2, 13, "H") init_off_dly = unpack_array_in_data(custom_data, 0xDE, 2, 13, "H")
acu_channel_addrs = unpack_array_in_data(custom_data, 0x180, 1, 2, "B")
pdu_channel_addrs = unpack_array_in_data(custom_data, 0x186, 1, 4, "B")
pw.dlog(f"Ch Names: {ch_names}") pw.dlog(f"Ch Names: {ch_names}")
pw.dlog(f"{'out_on_cnt'.ljust(15)}: {out_on_cnt}") pw.dlog(f"{'out_on_cnt'.ljust(15)}: {out_on_cnt}")
pw.dlog(f"{'out_off_cnt'.ljust(15)}: {out_off_cnt}") pw.dlog(f"{'out_off_cnt'.ljust(15)}: {out_off_cnt}")
@ -547,6 +549,8 @@ def p60_dock_config_table_handler(pw: PrintWrapper, custom_data: bytes):
pw.dlog(f"{'init_out_safe'.ljust(15)}: {init_out_safe}") pw.dlog(f"{'init_out_safe'.ljust(15)}: {init_out_safe}")
pw.dlog(f"{'init_on_dly'.ljust(15)}: {init_on_dly}") pw.dlog(f"{'init_on_dly'.ljust(15)}: {init_on_dly}")
pw.dlog(f"{'init_off_dly'.ljust(15)}: {init_off_dly}") pw.dlog(f"{'init_off_dly'.ljust(15)}: {init_off_dly}")
pw.dlog(f"{'p60acu_addr'.ljust(15)}: {acu_channel_addrs}")
pw.dlog(f"{'p60pdu_addr'.ljust(15)}: {pdu_channel_addrs}")
def parse_name_list(data: bytes, name_len: int): def parse_name_list(data: bytes, name_len: int):

236
tmtcc.py
View File

@ -3,7 +3,31 @@ import logging
import sys import sys
import time import time
import traceback import traceback
from pathlib import Path
from typing import cast
from spacepackets import SpacePacketHeader, SpacePacket
from spacepackets.cfdp import (
ConditionCode,
ChecksumType,
TransmissionMode,
PduHolder,
DirectiveType,
)
from tmtccmd.cfdp import CfdpUserBase, TransactionId
from tmtccmd.cfdp.defs import CfdpRequestType
from tmtccmd.cfdp.handler import CfdpInCcsdsHandler
from tmtccmd.cfdp.mib import (
DefaultFaultHandlerBase,
LocalEntityCfg,
IndicationCfg,
RemoteEntityCfg,
)
from tmtccmd.cfdp.user import (
TransactionFinishedParams,
MetadataRecvParams,
FileSegmentRecvdParams,
)
from tmtccmd.tc.handler import SendCbParams from tmtccmd.tc.handler import SendCbParams
try: try:
@ -41,16 +65,29 @@ from tmtccmd.tm import SpecificApidHandlerBase, GenericApidHandlerBase, CcsdsTmH
from tmtccmd.core import BackendRequest from tmtccmd.core import BackendRequest
from tmtccmd.logging import get_current_time_string from tmtccmd.logging import get_current_time_string
from tmtccmd.tc import ( from tmtccmd.tc import (
ProcedureHelper, ProcedureWrapper,
FeedWrapper, FeedWrapper,
TcProcedureType, TcProcedureType,
TcQueueEntryType, TcQueueEntryType,
DefaultPusQueueHelper, DefaultPusQueueHelper,
) )
from tmtccmd.config import default_json_path, SetupWrapper from tmtccmd.config import (
from tmtccmd.config.args import SetupParams, ArgParserWrapper default_json_path,
SetupWrapper,
params_to_procedure_conversion,
)
from tmtccmd.config.args import (
SetupParams,
PreArgsParsingWrapper,
ProcedureParamsWrapper,
)
from config import __version__ from config import __version__
from config.definitions import PUS_APID from config.definitions import (
PUS_APID,
CFDP_APID,
CFDP_LOCAL_ENTITY_ID,
CFDP_REMOTE_ENTITY_ID,
)
from config.hook import EiveHookObject from config.hook import EiveHookObject
from pus_tm.factory_hook import pus_factory_hook from pus_tm.factory_hook import pus_factory_hook
from pus_tc.procedure_packer import handle_default_procedure from pus_tc.procedure_packer import handle_default_procedure
@ -63,6 +100,61 @@ ROTATING_TIMED_LOGGER_INTERVAL_WHEN = TimedLogWhen.PER_MINUTE
ROTATING_TIMED_LOGGER_INTERVAL = 30 ROTATING_TIMED_LOGGER_INTERVAL = 30
class EiveCfdpFaultHandler(DefaultFaultHandlerBase):
def notice_of_suspension_cb(self, cond: ConditionCode):
pass
def notice_of_cancellation_cb(self, cond: ConditionCode):
pass
def abandoned_cb(self, cond: ConditionCode):
pass
def ignore_cb(self, cond: ConditionCode):
pass
class EiveCfdpUser(CfdpUserBase):
def transaction_indication(self, transaction_id: TransactionId):
LOGGER.info(f"CFDP User: Start of File {transaction_id}")
def eof_sent_indication(self, transaction_id: TransactionId):
LOGGER.info(f"CFDP User: EOF sent for {transaction_id}")
def transaction_finished_indication(self, params: TransactionFinishedParams):
LOGGER.info(f"CFDP User: {params.transaction_id} finished")
def metadata_recv_indication(self, params: MetadataRecvParams):
pass
def file_segment_recv_indication(self, params: FileSegmentRecvdParams):
pass
def report_indication(self, transaction_id: TransactionId, status_report: any):
pass
def suspended_indication(
self, transaction_id: TransactionId, cond_code: ConditionCode
):
pass
def resumed_indication(self, transaction_id: TransactionId, progress: int):
pass
def fault_indication(
self, transaction_id: TransactionId, cond_code: ConditionCode, progress: int
):
pass
def abandoned_indication(
self, transaction_id: TransactionId, cond_code: ConditionCode, progress: int
):
pass
def eof_recv_indication(self, transaction_id: TransactionId):
pass
class PusHandler(SpecificApidHandlerBase): class PusHandler(SpecificApidHandlerBase):
def __init__( def __init__(
self, self,
@ -84,32 +176,52 @@ class UnknownApidHandler(GenericApidHandlerBase):
LOGGER.warning(f"Packet with unknwon APID {apid} detected") LOGGER.warning(f"Packet with unknwon APID {apid} detected")
class CfdpInCcsdsWrapper(SpecificApidHandlerBase):
def __init__(self, cfdp_in_ccsds_handler: CfdpInCcsdsHandler):
super().__init__(CFDP_APID, None)
self.handler = cfdp_in_ccsds_handler
def handle_tm(self, packet: bytes, _user_args: any):
ccsds_header_raw = packet[0:6]
sp_header = SpacePacketHeader.unpack(ccsds_header_raw)
pdu = packet[6:]
sp = SpacePacket(sp_header, sec_header=None, user_data=pdu)
self.handler.pass_packet(sp)
class TcHandler(TcHandlerBase): class TcHandler(TcHandlerBase):
def __init__( def __init__(
self, self,
seq_count_provider: FileSeqCountProvider, seq_count_provider: FileSeqCountProvider,
cfdp_in_ccsds_wrapper: CfdpInCcsdsWrapper,
pus_verificator: PusVerificator, pus_verificator: PusVerificator,
file_logger: logging.Logger, file_logger: logging.Logger,
raw_logger: RawTmtcTimedLogWrapper, raw_logger: RawTmtcTimedLogWrapper,
gui: bool, gui: bool,
): ):
super().__init__() super().__init__()
self.cfdp_handler_started = False
self.cfdp_dest_id = CFDP_REMOTE_ENTITY_ID
self.seq_count_provider = seq_count_provider self.seq_count_provider = seq_count_provider
self.pus_verificator = pus_verificator self.pus_verificator = pus_verificator
self.file_logger = file_logger self.file_logger = file_logger
self.raw_logger = raw_logger self.raw_logger = raw_logger
self.gui = gui self.gui = gui
self.cfdp_done = False
self.queue_helper = DefaultPusQueueHelper( self.queue_helper = DefaultPusQueueHelper(
queue_wrapper=None, queue_wrapper=None,
pus_apid=PUS_APID, pus_apid=PUS_APID,
seq_cnt_provider=seq_count_provider, seq_cnt_provider=seq_count_provider,
pus_verificator=pus_verificator, pus_verificator=pus_verificator,
) )
self.cfdp_in_ccsds_wrapper = cfdp_in_ccsds_wrapper
def feed_cb(self, info: ProcedureHelper, wrapper: FeedWrapper): def feed_cb(self, info: ProcedureWrapper, wrapper: FeedWrapper):
self.queue_helper.queue_wrapper = wrapper.queue_wrapper self.queue_helper.queue_wrapper = wrapper.queue_wrapper
if info.proc_type == TcProcedureType.DEFAULT: if info.proc_type == TcProcedureType.DEFAULT:
handle_default_procedure(self, info.to_def_procedure(), self.queue_helper) handle_default_procedure(self, info.to_def_procedure(), self.queue_helper)
elif info.proc_type == TcProcedureType.CFDP:
self.handle_cfdp_procedure(info)
def send_cb(self, send_params: SendCbParams): def send_cb(self, send_params: SendCbParams):
entry_helper = send_params.entry entry_helper = send_params.entry
@ -130,17 +242,63 @@ class TcHandler(TcHandlerBase):
f"{get_current_time_string(True)}: {tc_info_string}" f"{get_current_time_string(True)}: {tc_info_string}"
) )
send_params.com_if.send(raw_tc) send_params.com_if.send(raw_tc)
elif entry_helper.entry_type == TcQueueEntryType.CCSDS_TC:
cfdp_packet_in_ccsds = entry_helper.to_space_packet_entry()
send_params.com_if.send(cfdp_packet_in_ccsds.space_packet.pack())
elif entry_helper.entry_type == TcQueueEntryType.LOG: elif entry_helper.entry_type == TcQueueEntryType.LOG:
log_entry = entry_helper.to_log_entry() log_entry = entry_helper.to_log_entry()
LOGGER.info(log_entry.log_str) LOGGER.info(log_entry.log_str)
self.file_logger.info(log_entry.log_str) self.file_logger.info(log_entry.log_str)
def queue_finished_cb(self, info: ProcedureHelper): def handle_cfdp_procedure(self, info: ProcedureWrapper):
if info is not None and info.proc_type == TcQueueEntryType.PUS_TC: cfdp_procedure = info.to_cfdp_procedure()
if cfdp_procedure.cfdp_request_type == CfdpRequestType.PUT:
if (
not self.cfdp_in_ccsds_wrapper.handler.put_request_pending()
and not self.cfdp_handler_started
):
put_req = cfdp_procedure.request_wrapper.to_put_request()
put_req.cfg.destination_id = self.cfdp_dest_id
LOGGER.info(
f"CFDP: Starting file put request with parameters:\n{put_req}"
)
self.cfdp_in_ccsds_wrapper.handler.cfdp_handler.put_request(put_req)
self.cfdp_handler_started = True
for source_pair, dest_pair in self.cfdp_in_ccsds_wrapper.handler:
pdu, sp = source_pair
pdu = cast(PduHolder, pdu)
if pdu.is_file_directive:
if pdu.pdu_directive_type == DirectiveType.METADATA_PDU:
metadata = pdu.to_metadata_pdu()
self.queue_helper.add_log_cmd(
f"CFDP Source: Sending Metadata PDU for file with size "
f"{metadata.file_size}"
)
elif pdu.pdu_directive_type == DirectiveType.EOF_PDU:
self.queue_helper.add_log_cmd(
f"CFDP Source: Sending EOF PDU"
)
else:
fd_pdu = pdu.to_file_data_pdu()
self.queue_helper.add_log_cmd(
f"CFDP Source: Sending File Data PDU for segment at offset "
f"{fd_pdu.offset} with length {len(fd_pdu.file_data)}"
)
self.queue_helper.add_ccsds_tc(sp)
self.cfdp_in_ccsds_wrapper.handler.confirm_source_packet_sent()
self.cfdp_in_ccsds_wrapper.handler.source_handler.state_machine()
def queue_finished_cb(self, info: ProcedureWrapper):
if info is not None:
if info.proc_type == TcQueueEntryType.PUS_TC:
def_proc = info.to_def_procedure() def_proc = info.to_def_procedure()
LOGGER.info( LOGGER.info(
f"Finished queue for service {def_proc.service} and op code {def_proc.op_code}" f"Finished queue for service {def_proc.service} and op code {def_proc.op_code}"
) )
elif info.proc_type == TcProcedureType.CFDP:
LOGGER.info(f"Finished CFDP queue")
self.cfdp_done = True
def setup_params() -> SetupWrapper: def setup_params() -> SetupWrapper:
@ -148,28 +306,71 @@ def setup_params() -> SetupWrapper:
print(f"-- spacepackets v{spacepackets.__version__} --") print(f"-- spacepackets v{spacepackets.__version__} --")
hook_obj = EiveHookObject(default_json_path()) hook_obj = EiveHookObject(default_json_path())
params = SetupParams() params = SetupParams()
parser_wrapper = ArgParserWrapper(hook_obj) parser_wrapper = PreArgsParsingWrapper()
parser_wrapper.create_default_parent_parser() parser_wrapper.create_default_parent_parser()
parser_wrapper.create_default_parser() parser_wrapper.create_default_parser()
parser_wrapper.add_def_proc_and_cfdp_as_subparsers() parser_wrapper.add_def_proc_and_cfdp_as_subparsers()
parser_wrapper.parse() post_arg_parsing_wrapper = parser_wrapper.parse(hook_obj)
tmtccmd.init_printout(parser_wrapper.use_gui) tmtccmd.init_printout(post_arg_parsing_wrapper.use_gui)
parser_wrapper.set_params(params) use_prompts = not post_arg_parsing_wrapper.use_gui
proc_param_wrapper = ProcedureParamsWrapper()
if use_prompts:
post_arg_parsing_wrapper.set_params_with_prompts(params, proc_param_wrapper)
else:
post_arg_parsing_wrapper.set_params_without_prompts(params, proc_param_wrapper)
params.apid = PUS_APID params.apid = PUS_APID
setup_wrapper = SetupWrapper(hook_obj=hook_obj, setup_params=params) setup_wrapper = SetupWrapper(
hook_obj=hook_obj, setup_params=params, proc_param_wrapper=proc_param_wrapper
)
return setup_wrapper return setup_wrapper
def setup_tmtc( def setup_cfdp_handler() -> CfdpInCcsdsWrapper:
fh_base = EiveCfdpFaultHandler()
cfdp_cfg = LocalEntityCfg(
local_entity_id=CFDP_LOCAL_ENTITY_ID,
indication_cfg=IndicationCfg(),
default_fault_handlers=fh_base,
)
remote_cfg = RemoteEntityCfg(
closure_requested=False,
entity_id=CFDP_REMOTE_ENTITY_ID,
max_file_segment_len=1024,
check_limit=None,
crc_on_transmission=False,
crc_type=ChecksumType.CRC_32,
default_transmission_mode=TransmissionMode.UNACKNOWLEDGED,
)
cfdp_seq_count_provider = FileSeqCountProvider(
max_bit_width=16, file_name=Path("seqcnt_cfdp_transaction.txt")
)
cfdp_ccsds_seq_count_provider = PusFileSeqCountProvider(
file_name=Path("seqcnt_cfdp_ccsds_.txt")
)
cfdp_user = EiveCfdpUser()
cfdp_in_ccsds_handler = CfdpInCcsdsHandler(
cfg=cfdp_cfg,
remote_cfgs=[remote_cfg],
ccsds_apid=CFDP_APID,
ccsds_seq_cnt_provider=cfdp_ccsds_seq_count_provider,
cfdp_seq_cnt_provider=cfdp_seq_count_provider,
user=cfdp_user,
)
return CfdpInCcsdsWrapper(cfdp_in_ccsds_handler)
def setup_tmtc_handlers(
verificator: PusVerificator, verificator: PusVerificator,
printer: FsfwTmTcPrinter, printer: FsfwTmTcPrinter,
raw_logger: RawTmtcTimedLogWrapper, raw_logger: RawTmtcTimedLogWrapper,
gui: bool, gui: bool,
) -> (CcsdsTmHandler, TcHandler): ) -> (CcsdsTmHandler, TcHandler):
cfdp_in_ccsds_wrapper = setup_cfdp_handler()
verification_wrapper = VerificationWrapper(verificator, LOGGER, printer.file_logger) verification_wrapper = VerificationWrapper(verificator, LOGGER, printer.file_logger)
pus_handler = PusHandler(verification_wrapper, printer, raw_logger) pus_handler = PusHandler(verification_wrapper, printer, raw_logger)
ccsds_handler = CcsdsTmHandler(generic_handler=UnknownApidHandler(None)) ccsds_handler = CcsdsTmHandler(generic_handler=UnknownApidHandler(None))
ccsds_handler.add_apid_handler(pus_handler) ccsds_handler.add_apid_handler(pus_handler)
ccsds_handler.add_apid_handler(cfdp_in_ccsds_wrapper)
seq_count_provider = PusFileSeqCountProvider() seq_count_provider = PusFileSeqCountProvider()
tc_handler = TcHandler( tc_handler = TcHandler(
seq_count_provider=seq_count_provider, seq_count_provider=seq_count_provider,
@ -177,6 +378,7 @@ def setup_tmtc(
file_logger=printer.file_logger, file_logger=printer.file_logger,
raw_logger=raw_logger, raw_logger=raw_logger,
gui=gui, gui=gui,
cfdp_in_ccsds_wrapper=cfdp_in_ccsds_wrapper,
) )
return ccsds_handler, tc_handler return ccsds_handler, tc_handler
@ -186,8 +388,12 @@ def setup_backend(
tc_handler: TcHandler, tc_handler: TcHandler,
ccsds_handler: CcsdsTmHandler, ccsds_handler: CcsdsTmHandler,
) -> BackendBase: ) -> BackendBase:
init_proc = params_to_procedure_conversion(setup_wrapper.proc_param_wrapper)
tmtc_backend = tmtccmd.create_default_tmtc_backend( tmtc_backend = tmtccmd.create_default_tmtc_backend(
setup_wrapper=setup_wrapper, tm_handler=ccsds_handler, tc_handler=tc_handler setup_wrapper=setup_wrapper,
tm_handler=ccsds_handler,
tc_handler=tc_handler,
init_procedure=init_proc,
) )
tmtccmd.start(tmtc_backend=tmtc_backend, hook_obj=setup_wrapper.hook_obj) tmtccmd.start(tmtc_backend=tmtc_backend, hook_obj=setup_wrapper.hook_obj)
return tmtc_backend return tmtc_backend
@ -206,7 +412,7 @@ def main():
interval=ROTATING_TIMED_LOGGER_INTERVAL, interval=ROTATING_TIMED_LOGGER_INTERVAL,
) )
pus_verificator = PusVerificator() pus_verificator = PusVerificator()
ccsds_handler, tc_handler = setup_tmtc( ccsds_handler, tc_handler = setup_tmtc_handlers(
pus_verificator, printer, raw_logger, setup_wrapper.params.use_gui pus_verificator, printer, raw_logger, setup_wrapper.params.use_gui
) )