fprime-gds 3.6.2a1__tar.gz → 4.0.0a1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/.github/actions/spelling/expect.txt +22 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/.github/workflows/fprime-gds-tests.yml +1 -1
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/.github/workflows/gds-cli-tests.yml +1 -1
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/PKG-INFO +17 -19
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/README.md +14 -17
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/pyproject.toml +2 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/decoders/ch_decoder.py +1 -1
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/decoders/event_decoder.py +2 -1
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/decoders/pkt_decoder.py +1 -1
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/distributor/distributor.py +2 -2
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/encoders/ch_encoder.py +2 -2
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/encoders/cmd_encoder.py +2 -2
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/encoders/event_encoder.py +2 -2
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/encoders/pkt_encoder.py +2 -2
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/encoders/seq_writer.py +2 -2
- fprime_gds-4.0.0a1/src/fprime_gds/common/fpy/serialize_bytecode.py +229 -0
- fprime_gds-4.0.0a1/src/fprime_gds/common/fpy/types.py +203 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/gds_cli/base_commands.py +1 -1
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/handlers.py +39 -0
- fprime_gds-4.0.0a1/src/fprime_gds/common/loaders/fw_type_json_loader.py +54 -0
- fprime_gds-4.0.0a1/src/fprime_gds/common/loaders/pkt_json_loader.py +121 -0
- fprime_gds-4.0.0a1/src/fprime_gds/common/loaders/prm_json_loader.py +85 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/pipeline/dictionaries.py +21 -4
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/pipeline/encoding.py +19 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/pipeline/histories.py +4 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/pipeline/standard.py +16 -2
- fprime_gds-4.0.0a1/src/fprime_gds/common/templates/prm_template.py +81 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/testing_fw/api.py +42 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/testing_fw/pytest_integration.py +25 -2
- fprime_gds-4.0.0a1/src/fprime_gds/common/tools/README.md +34 -0
- fprime_gds-4.0.0a1/src/fprime_gds/common/tools/params.py +246 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/utils/config_manager.py +6 -6
- fprime_gds-4.0.0a1/src/fprime_gds/executables/apps.py +323 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/executables/cli.py +280 -122
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/executables/comm.py +5 -2
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/executables/fprime_cli.py +3 -3
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/executables/run_deployment.py +10 -3
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/vue-support/channel.js +1 -1
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/vue-support/event.js +1 -1
- fprime_gds-4.0.0a1/src/fprime_gds/plugin/__init__.py +0 -0
- fprime_gds-4.0.0a1/src/fprime_gds/plugin/definitions.py +149 -0
- fprime_gds-4.0.0a1/src/fprime_gds/plugin/system.py +338 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds.egg-info/PKG-INFO +17 -19
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds.egg-info/SOURCES.txt +14 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds.egg-info/entry_points.txt +2 -0
- fprime_gds-4.0.0a1/test/fprime_gds/common/fpy/integrated_tests.py +273 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/loaders/resources/RefTopologyDictionary.json +1008 -338
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/loaders/test_json_loader.py +46 -0
- fprime_gds-4.0.0a1/test/fprime_gds/common/tools/expected/simple_paramdb.dat +0 -0
- fprime_gds-4.0.0a1/test/fprime_gds/common/tools/input/simple_bad_paramdb.json +5 -0
- fprime_gds-4.0.0a1/test/fprime_gds/common/tools/input/simple_paramdb.json +5 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/tools/resources/simple_dictionary.json +12 -0
- fprime_gds-4.0.0a1/test/fprime_gds/common/tools/test_paramdb_gen.py +39 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/test_plugins.py +167 -75
- fprime_gds-3.6.2a1/src/fprime_gds/executables/apps.py +0 -150
- fprime_gds-3.6.2a1/src/fprime_gds/plugin/definitions.py +0 -71
- fprime_gds-3.6.2a1/src/fprime_gds/plugin/system.py +0 -225
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/.github/actions/codeql/security-pack.yml +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/.github/actions/spelling/excludes.txt +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/.github/actions/spelling/patterns.txt +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/.github/pull_request_template.md +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/.github/resources/RefTopologyAppDictionary.xml +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/.github/workflows/codeql-security-scan.yml +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/.github/workflows/publish.yml +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/.github/workflows/spelling.yml +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/.gitignore +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/Doxyfile +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/LICENSE.txt +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/NOTICE.txt +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/configs/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/docs/README.md +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/docs/_static/css/rtd_width.css +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/docs/conf.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/docs/gendoc.bash +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/docs/index.rst +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/examples/simple_sequence.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/examples/simple_sequence.seq +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/setup.cfg +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/setup.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fastentrypoints.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/communication/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/communication/adapters/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/communication/adapters/base.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/communication/adapters/ip.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/communication/adapters/uart.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/communication/checksum.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/communication/framing.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/communication/ground.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/communication/updown.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/controllers/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/data_types/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/data_types/ch_data.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/data_types/cmd_data.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/data_types/event_data.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/data_types/exceptions.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/data_types/file_data.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/data_types/pkt_data.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/data_types/sys_data.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/decoders/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/decoders/decoder.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/decoders/file_decoder.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/distributor/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/encoders/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/encoders/encoder.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/encoders/file_encoder.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/files/File Decoder Documentation.txt +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/files/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/files/downlinker.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/files/helpers.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/files/uplinker.py +0 -0
- {fprime_gds-3.6.2a1/src/fprime_gds/common/gds_cli → fprime_gds-4.0.0a1/src/fprime_gds/common/fpy}/__init__.py +0 -0
- {fprime_gds-3.6.2a1/src/fprime_gds/common/history → fprime_gds-4.0.0a1/src/fprime_gds/common/gds_cli}/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/gds_cli/channels.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/gds_cli/command_send.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/gds_cli/events.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/gds_cli/filtering_utils.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/gds_cli/test_api_utils.py +0 -0
- {fprime_gds-3.6.2a1/src/fprime_gds/common/loaders → fprime_gds-4.0.0a1/src/fprime_gds/common/history}/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/history/chrono.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/history/history.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/history/ram.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/history/test.py +0 -0
- {fprime_gds-3.6.2a1/src/fprime_gds/common/models → fprime_gds-4.0.0a1/src/fprime_gds/common/loaders}/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/loaders/ch_json_loader.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/loaders/ch_xml_loader.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/loaders/cmd_json_loader.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/loaders/cmd_xml_loader.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/loaders/dict_loader.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/loaders/event_json_loader.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/loaders/event_xml_loader.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/loaders/json_loader.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/loaders/pkt_xml_loader.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/loaders/xml_loader.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/logger/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/logger/data_logger.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/logger/test_logger.py +0 -0
- {fprime_gds-3.6.2a1/src/fprime_gds/common/models/common → fprime_gds-4.0.0a1/src/fprime_gds/common/models}/__init__.py +0 -0
- {fprime_gds-3.6.2a1/src/fprime_gds/common/parsers → fprime_gds-4.0.0a1/src/fprime_gds/common/models/common}/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/models/common/channel_telemetry.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/models/common/command.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/models/common/event.py +0 -0
- {fprime_gds-3.6.2a1/src/fprime_gds/common/pipeline → fprime_gds-4.0.0a1/src/fprime_gds/common/parsers}/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/parsers/seq_file_parser.py +0 -0
- {fprime_gds-3.6.2a1/src/fprime_gds/common/templates → fprime_gds-4.0.0a1/src/fprime_gds/common/pipeline}/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/pipeline/files.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/pipeline/router.py +0 -0
- {fprime_gds-3.6.2a1/src/fprime_gds/common/testing_fw → fprime_gds-4.0.0a1/src/fprime_gds/common/templates}/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/templates/ch_template.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/templates/cmd_template.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/templates/data_template.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/templates/event_template.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/templates/pkt_template.py +0 -0
- {fprime_gds-3.6.2a1/src/fprime_gds/common/tools → fprime_gds-4.0.0a1/src/fprime_gds/common/testing_fw}/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/testing_fw/predicates.py +0 -0
- {fprime_gds-3.6.2a1/src/fprime_gds/common/utils → fprime_gds-4.0.0a1/src/fprime_gds/common/tools}/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/tools/seqgen.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/transport.py +0 -0
- {fprime_gds-3.6.2a1/src/fprime_gds/executables → fprime_gds-4.0.0a1/src/fprime_gds/common/utils}/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/utils/data_desc_type.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/utils/event_severity.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/utils/string_util.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/common/zmq_transport.py +0 -0
- {fprime_gds-3.6.2a1/src/fprime_gds/flask → fprime_gds-4.0.0a1/src/fprime_gds/executables}/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/executables/data_product_writer.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/executables/tcpserver.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/executables/utils.py +0 -0
- {fprime_gds-3.6.2a1/src/fprime_gds/plugin → fprime_gds-4.0.0a1/src/fprime_gds/flask}/__init__.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/app.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/channels.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/commands.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/components.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/default_settings.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/errors.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/events.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/json.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/logs.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/requirements.txt +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/resource.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/sequence.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/.idea/.gitignore +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/.idea/misc.xml +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/.idea/modules.xml +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/.idea/static.iml +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/.idea/vcs.xml +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/advanced-settings/addon-templates.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/advanced-settings/addon.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/channel-render/addon.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/channel-render/channel-render-template.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/channel-render/channel-render.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/chart-display/addon-templates.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/chart-display/addon.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/chart-display/config.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/chart-display/modified-vendor/chartjs-plugin-streaming.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/chart-display/modified-vendor/chartjs-plugin-zoom.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/chart-display/modified-vendor/flat.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/chart-display/sibling.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/chart-display/vendor/chart.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/chart-display/vendor/chartjs-adapter-luxon.min.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/chart-display/vendor/hammer.min.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/commanding/addon.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/commanding/argument-templates.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/commanding/arguments.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/commanding/command-history-template.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/commanding/command-history.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/commanding/command-input-template.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/commanding/command-input.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/commanding/command-string-template.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/commanding/command-string.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/dictionary/addon-templates.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/dictionary/addon.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/enabled.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/image-display/addon.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/image-display/dashboard.xml +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/sequencer/README.md +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/sequencer/addon-templates.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/sequencer/addon.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/sequencer/autocomplete.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/sequencer/lint.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/sequencer/third/code-mirror.es.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/sequencer/third/rollup/.gitignore +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/sequencer/third/rollup/index.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/sequencer/third/rollup/language.grammer +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/sequencer/third/rollup/package.json +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/addons/sequencer/third/rollup/rollup.config.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/css/fprime.css +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/css/fpstyle.css +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/favicon.ico +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/img/error.svg +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/img/logo.svg +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/img/success.svg +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/index.html +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/config.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/datastore.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/gds.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/json.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/loader.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/performance.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/settings.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/uploader.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/validate.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/vue-support/dashboard-box.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/vue-support/dashboard-row.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/vue-support/dashboard.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/vue-support/downlink.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/vue-support/fp-row.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/vue-support/fptable.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/vue-support/log.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/vue-support/tabetc.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/vue-support/uplink.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/js/vue-support/utils.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/css/all.min.css +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/css/bootstrap.min.css +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/css/vue-select.css +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/js/luxon.min.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/js/sorttable.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/js/v-runtime-template.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/js/vue-select.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/js/vue.min.js +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-brands-400.eot +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-brands-400.svg +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-brands-400.ttf +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-brands-400.woff +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-brands-400.woff2 +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-regular-400.eot +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-regular-400.svg +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-regular-400.ttf +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-regular-400.woff +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-regular-400.woff2 +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-solid-900.eot +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-solid-900.svg +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-solid-900.ttf +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-solid-900.woff +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/static/third-party/webfonts/fa-solid-900.woff2 +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/stats.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/flask/updown.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds/version.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds.egg-info/dependency_links.txt +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds.egg-info/requires.txt +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/src/fprime_gds.egg-info/top_level.txt +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/data_types/test_cmd_data.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/distributor/test_distributor.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/encoders/test_ch_encoder.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/encoders/test_event_encoder.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/encoders/test_pkt_encoder.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/gds_cli/filtering_utils_test.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/gds_cli/utils_test.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/history/chronohistory_unit_test.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/history/testhistory_unit_test.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/testing_fw/UnitTestDictionary.xml +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/testing_fw/api_unit_test.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/testing_fw/logs/.gitignore +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/testing_fw/predicate_unit_test.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/tools/expected/simple_expected.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/tools/input/simple_bad_sequence.seq +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/tools/input/simple_sequence.seq +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/tools/resources/simple_dictionary.xml +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/tools/seqgen_unit_test.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/common/utils/test_string_util.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/.gitignore +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/dictionary.json +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/makeBool.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/makeComplex.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/makeDataArray.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/makeEnum.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/makeF32.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/makeF64.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/makeFppArray.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/makeI16.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/makeI32.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/makeI64.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/makeI8.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/makeU32.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/makeU32Array.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/dp_writer_data/makeU8Array.bin +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/test_data_product_writer.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/test_run_deployment.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/executables/test_utils.py +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/fprime_gds/sample/dictionary.xml +0 -0
- {fprime_gds-3.6.2a1 → fprime_gds-4.0.0a1}/test/gui/GUI_Test_Procedure.md +0 -0
@@ -23,6 +23,7 @@ autosectionlabel
|
|
23
23
|
backface
|
24
24
|
batchmode
|
25
25
|
baudrate
|
26
|
+
BBBBBHI
|
26
27
|
bcolors
|
27
28
|
BGR
|
28
29
|
Biberstein
|
@@ -31,6 +32,7 @@ bitmaps
|
|
31
32
|
breadcrumb
|
32
33
|
Btns
|
33
34
|
BUGLIST
|
35
|
+
calcsize
|
34
36
|
calibri
|
35
37
|
callergraph
|
36
38
|
callgraph
|
@@ -49,6 +51,7 @@ classdocs
|
|
49
51
|
clearfix
|
50
52
|
cls
|
51
53
|
cmdhist
|
54
|
+
cmt
|
52
55
|
CODEFILE
|
53
56
|
COLORSTYLE
|
54
57
|
colorwheel
|
@@ -59,10 +62,12 @@ configs
|
|
59
62
|
Consolas
|
60
63
|
creatingdocsetswithdoxygen
|
61
64
|
csum
|
65
|
+
ctx
|
62
66
|
curateable
|
63
67
|
curated
|
64
68
|
curating
|
65
69
|
customise
|
70
|
+
cuz
|
66
71
|
daringfireball
|
67
72
|
dataobjects
|
68
73
|
dblclick
|
@@ -136,9 +141,13 @@ FONTSIZE
|
|
136
141
|
fpp
|
137
142
|
fprime
|
138
143
|
fptable
|
144
|
+
fpy
|
145
|
+
fpybc
|
146
|
+
fqn
|
139
147
|
fsw
|
140
148
|
gdiplus
|
141
149
|
getbootstrap
|
150
|
+
getoption
|
142
151
|
github
|
143
152
|
grayscales
|
144
153
|
gse
|
@@ -161,6 +170,7 @@ htags
|
|
161
170
|
hyperlinks
|
162
171
|
idct
|
163
172
|
idl
|
173
|
+
idx
|
164
174
|
ieeetr
|
165
175
|
ified
|
166
176
|
ifun
|
@@ -171,18 +181,22 @@ intlimits
|
|
171
181
|
ip
|
172
182
|
ipc
|
173
183
|
ipp
|
184
|
+
issuecomment
|
174
185
|
itcl
|
175
186
|
ixx
|
176
187
|
janamian
|
188
|
+
jawest
|
177
189
|
Jdk
|
178
190
|
jpl
|
179
191
|
JSO
|
180
192
|
jsonable
|
181
193
|
jsonified
|
182
194
|
jsonify
|
195
|
+
junitxml
|
183
196
|
keepalive
|
184
197
|
keyify
|
185
198
|
kinda
|
199
|
+
leisher
|
186
200
|
lestarch
|
187
201
|
levelname
|
188
202
|
Lezer
|
@@ -195,6 +209,7 @@ logdir
|
|
195
209
|
logpath
|
196
210
|
logselect
|
197
211
|
luxon
|
212
|
+
LVAR
|
198
213
|
makeindex
|
199
214
|
MAKEVAR
|
200
215
|
marijnh
|
@@ -235,9 +250,11 @@ oring
|
|
235
250
|
osexc
|
236
251
|
OSX
|
237
252
|
outputfile
|
253
|
+
Packetize
|
238
254
|
packetized
|
239
255
|
Paetz
|
240
256
|
PARAMDOC
|
257
|
+
paramdb
|
241
258
|
passthrough
|
242
259
|
pb
|
243
260
|
pdflatex
|
@@ -248,6 +265,7 @@ plantuml
|
|
248
265
|
PNGs
|
249
266
|
preds
|
250
267
|
prm
|
268
|
+
prmdb
|
251
269
|
procs
|
252
270
|
PROGRAMLISTING
|
253
271
|
projectbrief
|
@@ -305,6 +323,7 @@ sss
|
|
305
323
|
Ssymbols
|
306
324
|
stackoverflow
|
307
325
|
startuml
|
326
|
+
subcmd
|
308
327
|
subgrouping
|
309
328
|
subhist
|
310
329
|
subhistory
|
@@ -322,6 +341,7 @@ Theif
|
|
322
341
|
thtcp
|
323
342
|
thudp
|
324
343
|
timebase
|
344
|
+
timectx
|
325
345
|
timescales
|
326
346
|
timespan
|
327
347
|
timestep
|
@@ -375,6 +395,8 @@ xapian
|
|
375
395
|
xhttp
|
376
396
|
xl
|
377
397
|
xmit
|
398
|
+
xmlpath
|
378
399
|
xy
|
379
400
|
zeromq
|
380
401
|
zmq
|
402
|
+
zimri
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: fprime-gds
|
3
|
-
Version:
|
3
|
+
Version: 4.0.0a1
|
4
4
|
Summary: F Prime Flight Software Ground Data System layer
|
5
5
|
Author-email: Michael Starch <Michael.D.Starch@jpl.nasa.gov>, Thomas Boyer-Chammard <Thomas.Boyer.Chammard@jpl.nasa.gov>
|
6
6
|
License:
|
@@ -240,10 +240,11 @@ Requires-Dist: Jinja2>=2.11.3
|
|
240
240
|
Requires-Dist: openpyxl>=3.0.10
|
241
241
|
Requires-Dist: pyserial>=3.5
|
242
242
|
Requires-Dist: pydantic>=2.6
|
243
|
+
Dynamic: license-file
|
243
244
|
|
244
245
|
# F´ GDS
|
245
246
|
|
246
|
-
**Note:** This README describes GDS internals. Refer to the [
|
247
|
+
**Note:** This README describes GDS internals. Refer to the [F´ Documentation](https://fprime.jpl.nasa.gov/latest/docs/user-manual/overview/gds-introduction/) for instructions on how to use the GDS.
|
247
248
|
|
248
249
|
Issues should be reported here: [File an issue](https://github.com/nasa/fprime/issues/new/choose)
|
249
250
|
|
@@ -268,7 +269,8 @@ output data type included. Command data objects are created in the command panel
|
|
268
269
|
the command encoder registered to that panel. Encoders take a data object and turn it into binary
|
269
270
|
data that can be sent to the F´ deployment. The binary data is then passed to the TCP client
|
270
271
|
which is registered to the encoder. Finally, the TCP client send the data back to the TCP server and
|
271
|
-
the F´ deployment.
|
272
|
+
the F´ deployment.
|
273
|
+

|
272
274
|
|
273
275
|
All of these objects are created and registered to other objects when the GDS
|
274
276
|
is initialized. Thus, all of the structure of the GDS is created in one place,
|
@@ -285,15 +287,11 @@ commands and registering consumers to the GDS decoders. The Standard Pipeline ca
|
|
285
287
|
[here](src/fprime_gds/common/pipeline/standard.py).
|
286
288
|
|
287
289
|
### GDS Integration Test API
|
288
|
-
The Integration Test API is a tool that provides the ability to write integration-level tests for an
|
289
|
-
F´ deployment using the GDS. The tool provides history searches/asserts, command sending, a
|
290
|
-
detailed test log, sub-histories and convenient access to GDS data objects. The test API comes with
|
291
|
-
separate [documentation](https://github.com/nasa/fprime/blob/master/docs/UsersGuide/dev/testAPI/markdown/contents.md) and its own [user
|
292
|
-
guide](https://github.com/nasa/fprime/blob/master/docs/UsersGuide/dev/testAPI/user_guide.md) and is built on top of the Standard Pipeline.
|
290
|
+
The Integration Test API is a tool that provides the ability to write integration-level tests for an F´ deployment using the GDS. The tool provides history searches/asserts, command sending, a detailed test log, sub-histories and convenient access to GDS data objects. The test API comes with its own [user guide](https://fprime.jpl.nasa.gov/latest/docs/user-manual/gds/gds-test-api-guide/) and is built on top of the Standard Pipeline.
|
293
291
|
|
294
292
|
## GDS GUI Usage
|
295
293
|
|
296
|
-
A guide for how to use the GDS is available in the [
|
294
|
+
A guide for how to use the GDS is available in the [F Prime documentation](https://fprime.jpl.nasa.gov/latest/docs/user-manual/overview/gds-introduction)
|
297
295
|
|
298
296
|
## Classes
|
299
297
|
The GDS back end is composed of several different data processing units. For
|
@@ -316,8 +314,15 @@ that descriptor. Descriptor types include events, channels, packets, etc (a full
|
|
316
314
|
enumeration can be found in (src/utils/data_desc_type.py). The binary data that
|
317
315
|
the descriptor receives should be of the form:
|
318
316
|
|
319
|
-
|
320
|
-
|
317
|
+
```mermaid
|
318
|
+
---
|
319
|
+
title: "Binary format received by Distributors"
|
320
|
+
---
|
321
|
+
packet-beta
|
322
|
+
0-31: "Length [4 bytes]"
|
323
|
+
32-63: "Type Descriptor [4 bytes]"
|
324
|
+
64-95: "Message Data [variable length]"
|
325
|
+
```
|
321
326
|
|
322
327
|
The distributor should then pass only the message data along to the decoders.
|
323
328
|
|
@@ -433,10 +438,3 @@ pip install doxypypy
|
|
433
438
|
|
434
439
|
Next, make `docs/py_filter` available in your system path however you see fit.
|
435
440
|
Now you can run `doxygen Doxyfile` in the root directory to generate documentation in `docs/doxy/index.html`
|
436
|
-
|
437
|
-
## Notes
|
438
|
-
- Currently, the models/common directory has command.py, event.py, and
|
439
|
-
channel.py. These files must be present in order for the python dictionaries
|
440
|
-
to be properly imported. However, they are empty and not used in the GDS.
|
441
|
-
When we switch fully to XML dictionaries, these can go away.
|
442
|
-
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# F´ GDS
|
2
2
|
|
3
|
-
**Note:** This README describes GDS internals. Refer to the [
|
3
|
+
**Note:** This README describes GDS internals. Refer to the [F´ Documentation](https://fprime.jpl.nasa.gov/latest/docs/user-manual/overview/gds-introduction/) for instructions on how to use the GDS.
|
4
4
|
|
5
5
|
Issues should be reported here: [File an issue](https://github.com/nasa/fprime/issues/new/choose)
|
6
6
|
|
@@ -25,7 +25,8 @@ output data type included. Command data objects are created in the command panel
|
|
25
25
|
the command encoder registered to that panel. Encoders take a data object and turn it into binary
|
26
26
|
data that can be sent to the F´ deployment. The binary data is then passed to the TCP client
|
27
27
|
which is registered to the encoder. Finally, the TCP client send the data back to the TCP server and
|
28
|
-
the F´ deployment.
|
28
|
+
the F´ deployment.
|
29
|
+

|
29
30
|
|
30
31
|
All of these objects are created and registered to other objects when the GDS
|
31
32
|
is initialized. Thus, all of the structure of the GDS is created in one place,
|
@@ -42,15 +43,11 @@ commands and registering consumers to the GDS decoders. The Standard Pipeline ca
|
|
42
43
|
[here](src/fprime_gds/common/pipeline/standard.py).
|
43
44
|
|
44
45
|
### GDS Integration Test API
|
45
|
-
The Integration Test API is a tool that provides the ability to write integration-level tests for an
|
46
|
-
F´ deployment using the GDS. The tool provides history searches/asserts, command sending, a
|
47
|
-
detailed test log, sub-histories and convenient access to GDS data objects. The test API comes with
|
48
|
-
separate [documentation](https://github.com/nasa/fprime/blob/master/docs/UsersGuide/dev/testAPI/markdown/contents.md) and its own [user
|
49
|
-
guide](https://github.com/nasa/fprime/blob/master/docs/UsersGuide/dev/testAPI/user_guide.md) and is built on top of the Standard Pipeline.
|
46
|
+
The Integration Test API is a tool that provides the ability to write integration-level tests for an F´ deployment using the GDS. The tool provides history searches/asserts, command sending, a detailed test log, sub-histories and convenient access to GDS data objects. The test API comes with its own [user guide](https://fprime.jpl.nasa.gov/latest/docs/user-manual/gds/gds-test-api-guide/) and is built on top of the Standard Pipeline.
|
50
47
|
|
51
48
|
## GDS GUI Usage
|
52
49
|
|
53
|
-
A guide for how to use the GDS is available in the [
|
50
|
+
A guide for how to use the GDS is available in the [F Prime documentation](https://fprime.jpl.nasa.gov/latest/docs/user-manual/overview/gds-introduction)
|
54
51
|
|
55
52
|
## Classes
|
56
53
|
The GDS back end is composed of several different data processing units. For
|
@@ -73,8 +70,15 @@ that descriptor. Descriptor types include events, channels, packets, etc (a full
|
|
73
70
|
enumeration can be found in (src/utils/data_desc_type.py). The binary data that
|
74
71
|
the descriptor receives should be of the form:
|
75
72
|
|
76
|
-
|
77
|
-
|
73
|
+
```mermaid
|
74
|
+
---
|
75
|
+
title: "Binary format received by Distributors"
|
76
|
+
---
|
77
|
+
packet-beta
|
78
|
+
0-31: "Length [4 bytes]"
|
79
|
+
32-63: "Type Descriptor [4 bytes]"
|
80
|
+
64-95: "Message Data [variable length]"
|
81
|
+
```
|
78
82
|
|
79
83
|
The distributor should then pass only the message data along to the decoders.
|
80
84
|
|
@@ -190,10 +194,3 @@ pip install doxypypy
|
|
190
194
|
|
191
195
|
Next, make `docs/py_filter` available in your system path however you see fit.
|
192
196
|
Now you can run `doxygen Doxyfile` in the root directory to generate documentation in `docs/doxy/index.html`
|
193
|
-
|
194
|
-
## Notes
|
195
|
-
- Currently, the models/common directory has command.py, event.py, and
|
196
|
-
channel.py. These files must be present in order for the python dictionaries
|
197
|
-
to be properly imported. However, they are empty and not used in the GDS.
|
198
|
-
When we switch fully to XML dictionaries, these can go away.
|
199
|
-
|
@@ -61,6 +61,8 @@ fprime-cli = "fprime_gds.executables.fprime_cli:main"
|
|
61
61
|
fprime-seqgen = "fprime_gds.common.tools.seqgen:main"
|
62
62
|
fprime-dp-write = "fprime_gds.executables.data_product_writer:main"
|
63
63
|
fprime-gds = "fprime_gds.executables.run_deployment:main"
|
64
|
+
fprime-prm-write = "fprime_gds.common.tools.params:main"
|
65
|
+
fprime-fpy-bytecode = "fprime_gds.common.fpy.serialize_bytecode:main"
|
64
66
|
|
65
67
|
# For Pytest fixtures
|
66
68
|
[project.entry-points."pytest11"]
|
@@ -19,6 +19,7 @@ from fprime.common.models.serialize.type_exceptions import TypeException
|
|
19
19
|
|
20
20
|
from fprime_gds.common.data_types import event_data
|
21
21
|
from fprime_gds.common.decoders import decoder
|
22
|
+
from fprime_gds.common.decoders.decoder import DecodingException
|
22
23
|
from fprime_gds.common.utils import config_manager
|
23
24
|
|
24
25
|
|
@@ -43,7 +44,7 @@ class EventDecoder(decoder.Decoder):
|
|
43
44
|
config = config_manager.ConfigManager().get_instance()
|
44
45
|
|
45
46
|
self.__dict = event_dict
|
46
|
-
self.id_obj = config.get_type("
|
47
|
+
self.id_obj = config.get_type("FwEventIdType")
|
47
48
|
|
48
49
|
def decode_api(self, data):
|
49
50
|
"""
|
@@ -57,7 +57,7 @@ class Distributor(DataHandler):
|
|
57
57
|
self.key_frame = int(config.get("framing", "key_val"), 16)
|
58
58
|
self.key_obj = config.get_type("key_val")
|
59
59
|
self.len_obj = config.get_type("msg_len")
|
60
|
-
self.desc_obj = config.get_type("
|
60
|
+
self.desc_obj = config.get_type("FwPacketDescriptorType")
|
61
61
|
|
62
62
|
# NOTE we could use either the type of the object or an enum as the type argument.
|
63
63
|
# It should indicate what the decoder decodes.
|
@@ -204,4 +204,4 @@ class Distributor(DataHandler):
|
|
204
204
|
try:
|
205
205
|
d.data_callback(msg)
|
206
206
|
except DecodingException as dexc:
|
207
|
-
LOGGER.warning("Decoding error occurred: %s. Skipping.", dexc)
|
207
|
+
LOGGER.warning("Decoding error occurred: %s. Skipping.", dexc)
|
@@ -57,8 +57,8 @@ class ChEncoder(Encoder):
|
|
57
57
|
super().__init__(config)
|
58
58
|
|
59
59
|
self.len_obj = self.config.get_type("msg_len")
|
60
|
-
self.desc_obj = self.config.get_type("
|
61
|
-
self.id_obj = self.config.get_type("
|
60
|
+
self.desc_obj = self.config.get_type("FwPacketDescriptorType")
|
61
|
+
self.id_obj = self.config.get_type("FwChanIdType")
|
62
62
|
|
63
63
|
def encode_api(self, data):
|
64
64
|
"""
|
@@ -72,8 +72,8 @@ class CmdEncoder(encoder.Encoder):
|
|
72
72
|
super().__init__(config)
|
73
73
|
|
74
74
|
self.len_obj = self.config.get_type("msg_len")
|
75
|
-
self.desc_obj = self.config.get_type("
|
76
|
-
self.opcode_obj = self.config.get_type("
|
75
|
+
self.desc_obj = self.config.get_type("FwPacketDescriptorType")
|
76
|
+
self.opcode_obj = self.config.get_type("FwOpcodeType")
|
77
77
|
|
78
78
|
def encode_api(self, data):
|
79
79
|
"""
|
@@ -61,8 +61,8 @@ class EventEncoder(Encoder):
|
|
61
61
|
super().__init__(config)
|
62
62
|
|
63
63
|
self.len_obj = self.config.get_type("msg_len")
|
64
|
-
self.desc_obj = self.config.get_type("
|
65
|
-
self.id_obj = self.config.get_type("
|
64
|
+
self.desc_obj = self.config.get_type("FwPacketDescriptorType")
|
65
|
+
self.id_obj = self.config.get_type("FwEventIdType")
|
66
66
|
|
67
67
|
def encode_api(self, data):
|
68
68
|
"""
|
@@ -61,8 +61,8 @@ class PktEncoder(Encoder):
|
|
61
61
|
super().__init__(config)
|
62
62
|
|
63
63
|
self.len_obj = self.config.get_type("msg_len")
|
64
|
-
self.desc_obj = self.config.get_type("
|
65
|
-
self.id_obj = self.config.get_type("
|
64
|
+
self.desc_obj = self.config.get_type("FwPacketDescriptorType")
|
65
|
+
self.id_obj = self.config.get_type("FwTlmPacketizeIdType")
|
66
66
|
|
67
67
|
def encode_api(self, data):
|
68
68
|
"""
|
@@ -28,8 +28,8 @@ class SeqBinaryWriter:
|
|
28
28
|
|
29
29
|
self.__fd = None
|
30
30
|
self.__timebase = timebase
|
31
|
-
self.desc_obj = config.get_type("
|
32
|
-
self.opcode_obj = config.get_type("
|
31
|
+
self.desc_obj = config.get_type("FwPacketDescriptorType")
|
32
|
+
self.opcode_obj = config.get_type("FwOpcodeType")
|
33
33
|
self.len_obj = config.get_type("msg_len")
|
34
34
|
|
35
35
|
def open(self, filename):
|
@@ -0,0 +1,229 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
from dataclasses import astuple
|
3
|
+
import inspect
|
4
|
+
import json
|
5
|
+
from pathlib import Path
|
6
|
+
from argparse import ArgumentParser
|
7
|
+
import struct
|
8
|
+
import zlib
|
9
|
+
from fprime_gds.common.fpy.types import (
|
10
|
+
StatementTemplate,
|
11
|
+
StatementData,
|
12
|
+
Header,
|
13
|
+
Footer,
|
14
|
+
HEADER_FORMAT,
|
15
|
+
FOOTER_FORMAT,
|
16
|
+
StatementType,
|
17
|
+
FPY_DIRECTIVES,
|
18
|
+
BytecodeParseContext,
|
19
|
+
get_type_obj_for,
|
20
|
+
)
|
21
|
+
from fprime_gds.common.loaders.ch_json_loader import ChJsonLoader
|
22
|
+
from fprime_gds.common.loaders.cmd_json_loader import CmdJsonLoader
|
23
|
+
from fprime.common.models.serialize.numerical_types import (
|
24
|
+
U8Type,
|
25
|
+
)
|
26
|
+
|
27
|
+
from fprime_gds.common.loaders.prm_json_loader import PrmJsonLoader
|
28
|
+
|
29
|
+
|
30
|
+
def serialize_statement(stmt: StatementData) -> bytes:
|
31
|
+
"""converts a StatementData object into bytes that the FpySequencer can read"""
|
32
|
+
# see https://github.com/nasa/fprime/issues/3023#issuecomment-2693051677
|
33
|
+
# TODO replace this with actual documentation
|
34
|
+
|
35
|
+
# type: U8 (0 if directive, 1 if cmd)
|
36
|
+
# opcode: FwOpcodeType (default U32)
|
37
|
+
# argBufSize: FwSizeStoreType (default U16)
|
38
|
+
# argBuf: X bytes
|
39
|
+
|
40
|
+
output = bytes()
|
41
|
+
output += U8Type(stmt.template.statement_type.value).serialize()
|
42
|
+
output += get_type_obj_for("FwOpcodeType")(stmt.template.opcode).serialize()
|
43
|
+
|
44
|
+
arg_bytes = bytes()
|
45
|
+
for arg in stmt.arg_values:
|
46
|
+
arg_bytes += arg.serialize()
|
47
|
+
|
48
|
+
output += get_type_obj_for("FwSizeStoreType")(len(arg_bytes)).serialize()
|
49
|
+
output += arg_bytes
|
50
|
+
|
51
|
+
return output
|
52
|
+
|
53
|
+
|
54
|
+
def parse_str_as_statement(
|
55
|
+
stmt: str, templates: list[StatementTemplate], context: BytecodeParseContext
|
56
|
+
) -> StatementData:
|
57
|
+
"""Converts a human-readable line of bytecode into a StatementData instance, given a list of
|
58
|
+
possible statement templates"""
|
59
|
+
name = stmt.split()[0]
|
60
|
+
args = stmt[len(name) :]
|
61
|
+
|
62
|
+
args = json.loads("[" + args + "]")
|
63
|
+
|
64
|
+
matching_template = [t for t in templates if t.name == name]
|
65
|
+
if len(matching_template) != 1:
|
66
|
+
# no unique match
|
67
|
+
if len(matching_template) == 0:
|
68
|
+
raise RuntimeError("Could not find command or directive " + str(name))
|
69
|
+
raise RuntimeError(
|
70
|
+
"Found multiple commands or directives with name " + str(name)
|
71
|
+
)
|
72
|
+
matching_template = matching_template[0]
|
73
|
+
|
74
|
+
arg_values = []
|
75
|
+
if len(args) < len(matching_template.args):
|
76
|
+
raise RuntimeError(
|
77
|
+
"Missing arguments for statement "
|
78
|
+
+ str(matching_template.name)
|
79
|
+
+ ": "
|
80
|
+
+ str(matching_template.args[len(args) :])
|
81
|
+
)
|
82
|
+
if len(args) > len(matching_template.args):
|
83
|
+
raise RuntimeError(
|
84
|
+
"Extra arguments for"
|
85
|
+
+ str(matching_template.name)
|
86
|
+
+ ": "
|
87
|
+
+ str(args[len(matching_template.args) :])
|
88
|
+
)
|
89
|
+
for index, arg_json in enumerate(args):
|
90
|
+
arg_type = matching_template.args[index]
|
91
|
+
if inspect.isclass(arg_type):
|
92
|
+
# it's a type. instantiate it with the json
|
93
|
+
arg_value = arg_type(arg_json)
|
94
|
+
else:
|
95
|
+
# it's a function. give it the json and the ctx
|
96
|
+
arg_value = arg_type(arg_json, context)
|
97
|
+
arg_values.append(arg_value)
|
98
|
+
|
99
|
+
return StatementData(matching_template, arg_values)
|
100
|
+
|
101
|
+
|
102
|
+
def main():
|
103
|
+
arg_parser = ArgumentParser()
|
104
|
+
arg_parser.add_argument(
|
105
|
+
"input", type=Path, help="The path to the input .fpybc file"
|
106
|
+
)
|
107
|
+
|
108
|
+
arg_parser.add_argument(
|
109
|
+
"-d",
|
110
|
+
"--dictionary",
|
111
|
+
type=Path,
|
112
|
+
help="The JSON topology dictionary to compile against",
|
113
|
+
required=True,
|
114
|
+
)
|
115
|
+
|
116
|
+
arg_parser.add_argument(
|
117
|
+
"-o",
|
118
|
+
"--output",
|
119
|
+
type=Path,
|
120
|
+
help="The output .bin file path. Defaults to the input file path with a .bin extension",
|
121
|
+
default=None,
|
122
|
+
)
|
123
|
+
|
124
|
+
args = arg_parser.parse_args()
|
125
|
+
|
126
|
+
if not args.input.exists():
|
127
|
+
print("Input file", args.input, "does not exist")
|
128
|
+
exit(1)
|
129
|
+
|
130
|
+
if not args.dictionary.exists():
|
131
|
+
print("Dictionary file", args.dictionary, "does not exist")
|
132
|
+
exit(1)
|
133
|
+
|
134
|
+
serialize_bytecode(args.input, args.dictionary, args.output)
|
135
|
+
|
136
|
+
|
137
|
+
def serialize_bytecode(input: Path, dictionary: Path, output: Path = None):
|
138
|
+
"""Given an input .fpybc file, and a dictionary .json file, converts the
|
139
|
+
bytecode file into binary and writes it to the output file. If the output file
|
140
|
+
is None, writes it to the input file with a .bin extension"""
|
141
|
+
cmd_json_dict_loader = CmdJsonLoader(str(dictionary))
|
142
|
+
(_, cmd_name_dict, _) = cmd_json_dict_loader.construct_dicts(
|
143
|
+
str(dictionary)
|
144
|
+
)
|
145
|
+
|
146
|
+
stmt_templates = []
|
147
|
+
stmt_templates.extend(FPY_DIRECTIVES)
|
148
|
+
for cmd_template in cmd_name_dict.values():
|
149
|
+
stmt_template = StatementTemplate(
|
150
|
+
StatementType.CMD,
|
151
|
+
cmd_template.opcode,
|
152
|
+
cmd_template.get_full_name(),
|
153
|
+
[arg[2] for arg in cmd_template.arguments],
|
154
|
+
)
|
155
|
+
stmt_templates.append(stmt_template)
|
156
|
+
|
157
|
+
tlm_json_loader = ChJsonLoader(str(dictionary))
|
158
|
+
(_, tlm_name_dict, _) = tlm_json_loader.construct_dicts(
|
159
|
+
str(dictionary)
|
160
|
+
)
|
161
|
+
|
162
|
+
prm_json_loader = PrmJsonLoader(str(dictionary))
|
163
|
+
(_, prm_name_dict, _) = prm_json_loader.construct_dicts(
|
164
|
+
str(dictionary)
|
165
|
+
)
|
166
|
+
|
167
|
+
context = BytecodeParseContext()
|
168
|
+
context.types = cmd_json_dict_loader.parsed_types
|
169
|
+
context.channels = tlm_name_dict
|
170
|
+
context.params = prm_name_dict
|
171
|
+
|
172
|
+
input_lines = input.read_text().splitlines()
|
173
|
+
input_lines = [line.strip() for line in input_lines]
|
174
|
+
# remove comments and empty lines
|
175
|
+
input_lines = [
|
176
|
+
line for line in input_lines if not line.startswith(";") and len(line) > 0
|
177
|
+
]
|
178
|
+
|
179
|
+
goto_tags = {}
|
180
|
+
stmt_idx = 0
|
181
|
+
statement_strs: list[str] = []
|
182
|
+
for stmt in input_lines:
|
183
|
+
if stmt.endswith(":"):
|
184
|
+
# it's a goto tag
|
185
|
+
goto_tags[stmt[:-1]] = stmt_idx
|
186
|
+
else:
|
187
|
+
statement_strs.append(stmt)
|
188
|
+
stmt_idx += 1
|
189
|
+
|
190
|
+
context.goto_tags = goto_tags
|
191
|
+
|
192
|
+
statements: list[StatementData] = []
|
193
|
+
for stmt_idx, stmt in enumerate(statement_strs):
|
194
|
+
try:
|
195
|
+
stmt_data = parse_str_as_statement(stmt, stmt_templates, context)
|
196
|
+
statements.append(stmt_data)
|
197
|
+
except BaseException as e:
|
198
|
+
raise RuntimeError(
|
199
|
+
"Exception while parsing statement index " + str(stmt_idx) + ": " + stmt
|
200
|
+
) from e
|
201
|
+
|
202
|
+
# perform some checks for things we know will fail
|
203
|
+
for stmt in statements:
|
204
|
+
if stmt.template.name == "GOTO":
|
205
|
+
if stmt.arg_values[0].val > len(statements):
|
206
|
+
raise RuntimeError(
|
207
|
+
f"GOTO index is outside the valid range for this sequence (was {stmt.arg_values[0].val}, should be <{len(statements)})"
|
208
|
+
)
|
209
|
+
|
210
|
+
output_bytes = bytes()
|
211
|
+
|
212
|
+
for stmt in statements:
|
213
|
+
output_bytes += serialize_statement(stmt)
|
214
|
+
|
215
|
+
header = Header(0, 0, 0, 1, 0, len(statements), len(output_bytes))
|
216
|
+
output_bytes = struct.pack(HEADER_FORMAT, *astuple(header)) + output_bytes
|
217
|
+
|
218
|
+
crc = zlib.crc32(output_bytes) % (1 << 32)
|
219
|
+
footer = Footer(crc)
|
220
|
+
output_bytes += struct.pack(FOOTER_FORMAT, *astuple(footer))
|
221
|
+
|
222
|
+
if output is None:
|
223
|
+
output = input.with_suffix(".bin")
|
224
|
+
|
225
|
+
output.write_bytes(output_bytes)
|
226
|
+
|
227
|
+
|
228
|
+
if __name__ == "__main__":
|
229
|
+
main()
|