cosmos 4.2.4-java → 4.5.0-java
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.
- checksums.yaml +4 -4
- data/.dockerignore +2 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +30 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
- data/.github/ISSUE_TEMPLATE/help---usage---general-question.md +12 -0
- data/.gitignore +2 -0
- data/.travis.yml +6 -6
- data/Dockerfile +69 -0
- data/Gemfile +1 -1
- data/Manifest.txt +130 -46
- data/README.md +9 -0
- data/Rakefile +57 -0
- data/appveyor.yml +18 -7
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
- data/autohotkey/config/targets/INST/lib/sim_inst.rb +3 -1
- data/autohotkey/config/tools/cmd_sequence/cmd_sequence.txt +2 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +2 -4
- data/autohotkey/config/tools/table_manager/SubTables/OneDimensionalSubTable_def.txt +31 -0
- data/autohotkey/config/tools/table_manager/SubTables/TwoDimensionalSubTable_def.txt +28 -0
- data/autohotkey/config/tools/test_runner/test_runner.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner3.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
- data/autohotkey/lib/cmd_sequence_exporter.rb +52 -0
- data/autohotkey/procedures/collect.rb +2 -2
- data/autohotkey/procedures/collect_util.rb +1 -1
- data/autohotkey/procedures/script_test.rb +1 -1
- data/autohotkey/tools/CmdSenderAHK2 +18 -0
- data/autohotkey/tools/cmd_sender.ahk +34 -6
- data/autohotkey/tools/cmd_sender2.ahk +4 -0
- data/autohotkey/tools/cmd_sequence.ahk +36 -22
- data/autohotkey/tools/cmd_sequence2.ahk +1 -1
- data/autohotkey/tools/config_editor.ahk +5 -5
- data/autohotkey/tools/launcher.ahk +1 -0
- data/autohotkey/tools/limits_monitor.ahk +1 -1
- data/autohotkey/tools/packet_viewer.ahk +7 -6
- data/autohotkey/tools/script_runner.ahk +16 -4
- data/autohotkey/tools/test_runner.ahk +8 -8
- data/bin/cosmos +38 -1
- data/bin/cstol_converter +1 -1
- data/bin/dart_util +0 -0
- data/bin/rubysloc +73 -28
- data/bin/xtce_converter +1 -1
- data/cosmos.gemspec +7 -9
- data/data/config/_interfaces.yaml +4 -0
- data/data/config/cmd_sequence.yaml +14 -0
- data/data/config/command_modifiers.yaml +16 -1
- data/data/config/housekeeping_params.yaml +14 -0
- data/data/config/interface_modifiers.yaml +14 -2
- data/data/config/item_modifiers.yaml +11 -1
- data/data/config/launcher.yaml +12 -2
- data/data/config/param_item_modifiers.yaml +7 -2
- data/data/config/parameter_modifiers.yaml +20 -0
- data/data/config/screen.yaml +2 -0
- data/data/config/script_runner.yaml +9 -0
- data/data/config/system.yaml +152 -28
- data/data/config/table_manager.yaml +7 -0
- data/data/config/target.yaml +12 -0
- data/data/config/telemetry_modifiers.yaml +19 -2
- data/data/config/test_runner.yaml +10 -9
- data/data/config/widgets.yaml +174 -11
- data/data/crc.txt +428 -415
- data/demo/Gemfile +1 -1
- data/demo/Launcher.bat +1 -9
- data/demo/Launcher2.bat +1 -0
- data/demo/LauncherMini.bat +1 -0
- data/demo/Rakefile +2 -0
- data/demo/config/dart/Gemfile +2 -7
- data/demo/config/data/crc.txt +243 -219
- data/demo/config/system/system.txt +42 -3
- data/demo/config/system/system2.txt +34 -5
- data/demo/config/system/system_alt_ports.txt +80 -0
- data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +1 -0
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +5 -4
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +12 -7
- data/demo/config/targets/INST/cmd_tlm/inst_tlm_override.txt +12 -0
- data/demo/config/targets/INST/cmd_tlm_server.txt +2 -0
- data/demo/config/targets/INST/lib/sim_inst.rb +15 -3
- data/demo/config/targets/INST/screens/adcs.txt +2 -2
- data/demo/config/targets/INST/screens/block.txt +1 -1
- data/demo/config/targets/INST/screens/commanding.txt +1 -1
- data/demo/config/targets/INST/screens/ground.txt +27 -5
- data/demo/config/targets/INST/screens/ground_error.gif +0 -0
- data/demo/config/{data/groundoff.gif → targets/INST/screens/ground_off.gif} +0 -0
- data/demo/config/{data/groundon.gif → targets/INST/screens/ground_on.gif} +0 -0
- data/demo/config/targets/INST/screens/limits.txt +69 -31
- data/demo/config/targets/INST/screens/other.txt +13 -3
- data/demo/config/targets/INST/screens/params.txt +54 -0
- data/demo/config/targets/INST/screens/satellite.gif +0 -0
- data/demo/config/targets/INST/target.txt +1 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server_chain.txt +18 -0
- data/demo/config/tools/data_viewer/data_viewer.txt +3 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/demo/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/demo/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/demo/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/demo/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/demo/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/demo/config/tools/handbook_creator/default_toc.xsl +59 -59
- data/demo/config/tools/script_runner/script_runner.txt +1 -2
- data/demo/config/tools/test_runner/test_runner.txt +3 -1
- data/demo/lib/example_background_task.rb +1 -0
- data/demo/procedures/cosmos_api_test.rb +26 -22
- data/demo/procedures/interactive.rb +22 -0
- data/demo/procedures/local_screen_example.rb +51 -0
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +32 -4
- data/ext/cosmos/ext/packet/packet.c +6 -77
- data/ext/mkrf_conf.rb +2 -2
- data/extensions/vscode/.gitignore +4 -0
- data/extensions/vscode/.vscode/launch.json +32 -0
- data/extensions/vscode/.vscode/settings.json +13 -0
- data/extensions/vscode/.vscode/tasks.json +79 -0
- data/extensions/vscode/License.txt +879 -0
- data/extensions/vscode/README.md +9 -0
- data/extensions/vscode/client/License.txt +879 -0
- data/extensions/vscode/client/README.md +39 -0
- data/extensions/vscode/client/cosmos.configuration.json +23 -0
- data/extensions/vscode/client/images/icon.png +0 -0
- data/extensions/vscode/client/package-lock.json +414 -0
- data/extensions/vscode/client/package.json +105 -0
- data/extensions/vscode/client/src/extension.ts +132 -0
- data/extensions/vscode/client/src/screen_preview.rb +25 -0
- data/extensions/vscode/client/syntaxes/cosmos.tmLanguage.json +219 -0
- data/extensions/vscode/client/tsconfig.json +17 -0
- data/extensions/vscode/package-lock.json +26 -0
- data/extensions/vscode/package.json +35 -0
- data/extensions/vscode/server/License.txt +879 -0
- data/extensions/vscode/server/package-lock.json +236 -0
- data/extensions/vscode/server/package.json +29 -0
- data/extensions/vscode/server/src/server.ts +59 -0
- data/extensions/vscode/server/tsconfig.json +16 -0
- data/install/Gemfile +1 -1
- data/install/Launcher.bat +1 -9
- data/install/config/dart/Gemfile +3 -8
- data/install/config/data/crc.txt +148 -132
- data/install/config/system/system.txt +36 -3
- data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/install/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/install/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/install/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/install/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/install/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/install/config/tools/handbook_creator/default_toc.xsl +59 -59
- data/lib/cosmos/config/config_parser.rb +4 -5
- data/lib/cosmos/conversions.rb +2 -0
- data/lib/cosmos/conversions/packet_time_formatted_conversion.rb +38 -0
- data/lib/cosmos/conversions/packet_time_seconds_conversion.rb +38 -0
- data/lib/cosmos/core_ext/cosmos_io.rb +2 -1
- data/lib/cosmos/core_ext/time.rb +3 -1
- data/lib/cosmos/dart/config/boot.rb +1 -1
- data/lib/cosmos/dart/config/database.yml +2 -0
- data/lib/cosmos/dart/examples/dart_decom_client.rb +1 -1
- data/lib/cosmos/dart/examples/dart_stream_client.rb +6 -2
- data/lib/cosmos/dart/lib/dart_common.rb +13 -6
- data/lib/cosmos/dart/lib/dart_constants.rb +15 -0
- data/lib/cosmos/dart/lib/dart_database_cleaner.rb +2 -2
- data/lib/cosmos/dart/lib/dart_decom_query.rb +5 -6
- data/lib/cosmos/dart/lib/dart_decommutator.rb +64 -54
- data/lib/cosmos/dart/lib/dart_importer.rb +3 -3
- data/lib/cosmos/dart/lib/dart_master_query.rb +71 -0
- data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +2 -2
- data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +165 -134
- data/lib/cosmos/dart/processes/dart.rb +4 -2
- data/lib/cosmos/dart/processes/dart_decom_server.rb +3 -3
- data/lib/cosmos/dart/processes/dart_ingester.rb +40 -1
- data/lib/cosmos/dart/processes/dart_master.rb +44 -0
- data/lib/cosmos/dart/processes/dart_util.rb +119 -4
- data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +3 -3
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +9 -5
- data/lib/cosmos/gui/dialogs/details_dialog.rb +44 -29
- data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +3 -3
- data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +2 -2
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +11 -10
- data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +4 -2
- data/lib/cosmos/gui/opengl/earth_model.rb +1 -1
- data/lib/cosmos/gui/qt.rb +13 -2
- data/lib/cosmos/gui/qt_tool.rb +71 -43
- data/lib/cosmos/gui/text/ruby_editor.rb +91 -49
- data/lib/cosmos/gui/utilities/classification_banner.rb +60 -0
- data/lib/cosmos/gui/utilities/screenshot.rb +1 -1
- data/lib/cosmos/gui/utilities/script_module_gui.rb +117 -91
- data/lib/cosmos/gui/widgets/dart_meta_frame.rb +22 -3
- data/lib/cosmos/interfaces.rb +2 -0
- data/lib/cosmos/interfaces/dart_status_interface.rb +1 -1
- data/lib/cosmos/interfaces/interface.rb +9 -1
- data/lib/cosmos/interfaces/linc_interface.rb +3 -3
- data/lib/cosmos/interfaces/protocols/burst_protocol.rb +1 -1
- data/lib/cosmos/interfaces/protocols/crc_protocol.rb +1 -1
- data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +40 -18
- data/lib/cosmos/interfaces/protocols/ignore_packet_protocol.rb +46 -0
- data/lib/cosmos/interfaces/protocols/length_protocol.rb +5 -0
- data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +68 -23
- data/lib/cosmos/interfaces/protocols/template_protocol.rb +9 -4
- data/lib/cosmos/interfaces/serial_interface.rb +7 -1
- data/lib/cosmos/interfaces/simulated_target_interface.rb +14 -5
- data/lib/cosmos/interfaces/stream_interface.rb +1 -1
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +13 -13
- data/lib/cosmos/io/json_drb.rb +16 -12
- data/lib/cosmos/io/json_drb_object.rb +7 -2
- data/lib/cosmos/io/json_drb_rack.rb +25 -5
- data/lib/cosmos/io/json_rpc.rb +1 -1
- data/lib/cosmos/io/posix_serial_driver.rb +60 -22
- data/lib/cosmos/io/serial_driver.rb +11 -8
- data/lib/cosmos/io/win32_serial_driver.rb +31 -3
- data/lib/cosmos/packet_logs/packet_log_reader.rb +71 -28
- data/lib/cosmos/packet_logs/packet_log_writer.rb +13 -1
- data/lib/cosmos/packets/commands.rb +30 -9
- data/lib/cosmos/packets/packet.rb +105 -34
- data/lib/cosmos/packets/packet_config.rb +60 -10
- data/lib/cosmos/packets/parsers/format_string_parser.rb +0 -1
- data/lib/cosmos/packets/parsers/state_parser.rb +0 -1
- data/lib/cosmos/packets/parsers/xtce_converter.rb +2 -0
- data/lib/cosmos/packets/parsers/xtce_parser.rb +5 -4
- data/lib/cosmos/packets/structure.rb +32 -4
- data/lib/cosmos/packets/structure_item.rb +5 -1
- data/lib/cosmos/packets/telemetry.rb +30 -4
- data/lib/cosmos/script/api_shared.rb +22 -10
- data/lib/cosmos/script/extract.rb +1 -1
- data/lib/cosmos/script/limits.rb +4 -0
- data/lib/cosmos/script/script.rb +29 -20
- data/lib/cosmos/script/scripting.rb +16 -14
- data/lib/cosmos/script/telemetry.rb +3 -1
- data/lib/cosmos/script/tools.rb +18 -8
- data/lib/cosmos/streams/serial_stream.rb +11 -6
- data/lib/cosmos/system/system.rb +214 -76
- data/lib/cosmos/system/target.rb +39 -9
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +116 -55
- data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +15 -0
- data/lib/cosmos/tools/cmd_sender/cmd_params.rb +382 -0
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +54 -340
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +74 -52
- data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +40 -333
- data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +16 -11
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +13 -0
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +2 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +44 -15
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +8 -1
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +18 -20
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +13 -2
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +2 -2
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +13 -13
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +9 -6
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +8 -8
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +5 -5
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +35 -20
- data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +15 -11
- data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +5 -0
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +2 -0
- data/lib/cosmos/tools/config_editor/config_editor.rb +181 -94
- data/lib/cosmos/tools/config_editor/config_editor_frame.rb +10 -9
- data/lib/cosmos/tools/config_editor/system_config_dialog.rb +158 -0
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +57 -47
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +1 -0
- data/lib/cosmos/tools/data_viewer/dump_component.rb +3 -9
- data/lib/cosmos/tools/data_viewer/text_component.rb +77 -0
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +68 -42
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +1 -1
- data/lib/cosmos/tools/launcher/launcher.rb +2 -1
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +59 -41
- data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +42 -42
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +64 -59
- data/lib/cosmos/tools/script_runner/script_runner.rb +198 -123
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +14 -0
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +87 -35
- data/lib/cosmos/tools/table_manager/table_config.rb +5 -3
- data/lib/cosmos/tools/table_manager/table_manager.rb +48 -45
- data/lib/cosmos/tools/test_runner/test.rb +5 -2
- data/lib/cosmos/tools/test_runner/test_runner.rb +61 -38
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +24 -12
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +48 -48
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +5 -8
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +20 -16
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +3 -3
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +7 -7
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +10 -10
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +10 -3
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +6 -6
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +14 -14
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +21 -17
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +5 -8
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +94 -91
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +27 -26
- data/lib/cosmos/tools/tlm_viewer/screen.rb +76 -14
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +51 -34
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +3 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +4 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +4 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +16 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +17 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +1 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasellipse_widget.rb +40 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +12 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +79 -29
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +2 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +2 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +4 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +33 -25
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +1 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +4 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +5 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +6 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +2 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +10 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelled_widget.rb +58 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +2 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +2 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/led_widget.rb +108 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +60 -10
- data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +22 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +19 -13
- data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +22 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +4 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +1 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +10 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +7 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +4 -6
- data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +4 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +4 -6
- data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +13 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +3 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +6 -12
- data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +5 -10
- data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +4 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +8 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +9 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +60 -47
- data/lib/cosmos/top_level.rb +37 -13
- data/lib/cosmos/utilities/ruby_lex_utils.rb +34 -30
- data/lib/cosmos/version.rb +5 -5
- data/lib/cosmos/win32/excel.rb +81 -24
- data/make_gems.sh +10 -0
- data/run_gui_tests.bat +1 -0
- data/spec/conversions/packet_time_formatted_conversion_spec.rb +58 -0
- data/spec/conversions/packet_time_seconds_conversion_spec.rb +60 -0
- data/spec/core_ext/socket_spec.rb +1 -1
- data/spec/core_ext/time_spec.rb +4 -0
- data/spec/gui/utilities/script_module_gui_spec.rb +44 -63
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
- data/spec/install/yaml_docs_spec.rb +132 -0
- data/spec/interfaces/linc_interface_spec.rb +1 -1
- data/spec/interfaces/protocols/fixed_protocol_spec.rb +20 -9
- data/spec/interfaces/protocols/ignore_packet_protocol_spec.rb +243 -0
- data/spec/interfaces/protocols/length_protocol_spec.rb +39 -0
- data/spec/interfaces/protocols/preidentified_protocol_spec.rb +227 -4
- data/spec/interfaces/protocols/template_protocol_spec.rb +78 -25
- data/spec/io/json_drb_rack_spec.rb +166 -0
- data/spec/io/json_drb_spec.rb +14 -0
- data/spec/io/json_rpc_spec.rb +4 -5
- data/spec/io/posix_serial_driver_spec.rb +81 -0
- data/spec/io/serial_driver_spec.rb +15 -13
- data/spec/io/win32_serial_driver_spec.rb +33 -3
- data/spec/packet_logs/packet_log_reader_spec.rb +106 -52
- data/spec/packets/commands_spec.rb +22 -0
- data/spec/packets/packet_config_spec.rb +29 -16
- data/spec/packets/packet_item_spec.rb +2 -2
- data/spec/packets/packet_spec.rb +39 -6
- data/spec/packets/parsers/format_string_parser_spec.rb +0 -11
- data/spec/packets/parsers/macro_parser_spec.rb +36 -36
- data/spec/packets/parsers/state_parser_spec.rb +69 -11
- data/spec/packets/structure_spec.rb +93 -2
- data/spec/packets/telemetry_spec.rb +63 -10
- data/spec/script/extract_spec.rb +4 -1
- data/spec/script/script_spec.rb +2 -3
- data/spec/script/scripting_spec.rb +2 -1
- data/spec/script/tools_spec.rb +0 -1
- data/spec/streams/tcpip_socket_stream_spec.rb +32 -27
- data/spec/system/system_spec.rb +187 -4
- data/spec/system/target_spec.rb +62 -1
- data/spec/tools/cmd_tlm_server/api_spec.rb +29 -21
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -7
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +33 -0
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +25 -1
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +15 -0
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +2 -3
- data/spec/top_level/top_level_spec.rb +29 -5
- data/spec/utilities/message_log_spec.rb +6 -3
- data/tasks/gemfile_stats.rake +38 -14
- data/test/performance/config/system/system.txt +0 -0
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +5 -5
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/test/performance/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/test/performance/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/test/performance/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/test/performance/config/tools/test_runner/test_runner.txt +1 -1
- data/test/performance/procedures/cosmos_api_test.rb +1 -1
- data/test/performance/tools/identify_performance.rb +82 -0
- metadata +146 -62
- data/lib/cosmos/dart/Gemfile +0 -69
|
@@ -156,7 +156,7 @@ module Cosmos
|
|
|
156
156
|
end
|
|
157
157
|
|
|
158
158
|
def log_discard(length, found)
|
|
159
|
-
Logger.error("Sync #{'not ' unless found}found. Discarding #{length} bytes of data.")
|
|
159
|
+
Logger.error("#{@interface ? @interface.name : ""}: Sync #{'not ' unless found}found. Discarding #{length} bytes of data.")
|
|
160
160
|
if @data.length >= 0
|
|
161
161
|
Logger.error(sprintf("Starting: 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X\n",
|
|
162
162
|
@data.length >= 1 ? @data.getbyte(0) : 0,
|
|
@@ -140,7 +140,7 @@ module Cosmos
|
|
|
140
140
|
crc = BinaryAccessor.read(@bit_offset, @bit_size, :UINT, data, @endianness)
|
|
141
141
|
calculated_crc = @crc.calc(data[0...(@bit_offset / 8)])
|
|
142
142
|
if calculated_crc != crc
|
|
143
|
-
Logger.error "Invalid CRC detected! Calculated 0x#{calculated_crc.to_s(16).upcase} vs found 0x#{crc.to_s(16).upcase}."
|
|
143
|
+
Logger.error "#{@interface ? @interface.name : ""}: Invalid CRC detected! Calculated 0x#{calculated_crc.to_s(16).upcase} vs found 0x#{crc.to_s(16).upcase}."
|
|
144
144
|
if @bad_strategy == DISCONNECT
|
|
145
145
|
return :DISCONNECT
|
|
146
146
|
end
|
|
@@ -68,37 +68,59 @@ module Cosmos
|
|
|
68
68
|
|
|
69
69
|
@interface.target_names.each do |target_name|
|
|
70
70
|
target_packets = nil
|
|
71
|
+
unique_id_mode = false
|
|
71
72
|
begin
|
|
72
73
|
if @telemetry
|
|
73
74
|
target_packets = System.telemetry.packets(target_name)
|
|
75
|
+
target = System.targets[target_name]
|
|
76
|
+
unique_id_mode = target.tlm_unique_id_mode if target
|
|
74
77
|
else
|
|
75
78
|
target_packets = System.commands.packets(target_name)
|
|
79
|
+
target = System.targets[target_name]
|
|
80
|
+
unique_id_mode = target.cmd_unique_id_mode if target
|
|
76
81
|
end
|
|
77
82
|
rescue RuntimeError
|
|
78
|
-
# No telemetry for this target
|
|
83
|
+
# No commands/telemetry for this target
|
|
79
84
|
next
|
|
80
85
|
end
|
|
81
86
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return :STOP if @data.length < identified_packet.defined_length
|
|
87
|
+
if unique_id_mode
|
|
88
|
+
target_packets.each do |packet_name, packet|
|
|
89
|
+
if packet.identify?(@data[@discard_leading_bytes .. -1])
|
|
90
|
+
identified_packet = packet
|
|
91
|
+
break
|
|
88
92
|
end
|
|
89
|
-
# Set some variables so we can update the packet in
|
|
90
|
-
# read_packet
|
|
91
|
-
@received_time = Time.now.sys
|
|
92
|
-
@target_name = identified_packet.target_name
|
|
93
|
-
@packet_name = identified_packet.packet_name
|
|
94
|
-
|
|
95
|
-
# Get the data from this packet
|
|
96
|
-
packet_data = @data[0..(identified_packet.defined_length - 1)]
|
|
97
|
-
@data.replace(@data[identified_packet.defined_length..-1])
|
|
98
|
-
break
|
|
99
93
|
end
|
|
94
|
+
else
|
|
95
|
+
# Do a hash lookup to quickly identify the packet
|
|
96
|
+
if target_packets.length > 0
|
|
97
|
+
packet = target_packets.first[1]
|
|
98
|
+
key = packet.read_id_values(@data[@discard_leading_bytes .. -1])
|
|
99
|
+
if @telemetry
|
|
100
|
+
hash = System.telemetry.config.tlm_id_value_hash[target_name]
|
|
101
|
+
else
|
|
102
|
+
hash = System.commands.config.cmd_id_value_hash[target_name]
|
|
103
|
+
end
|
|
104
|
+
identified_packet = hash[key]
|
|
105
|
+
identified_packet = hash['CATCHALL'.freeze] unless identified_packet
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
if identified_packet
|
|
110
|
+
if identified_packet.defined_length + @discard_leading_bytes > @data.length
|
|
111
|
+
# Check if need more data to finish packet
|
|
112
|
+
return :STOP
|
|
113
|
+
end
|
|
114
|
+
# Set some variables so we can update the packet in
|
|
115
|
+
# read_packet
|
|
116
|
+
@received_time = Time.now.sys
|
|
117
|
+
@target_name = identified_packet.target_name
|
|
118
|
+
@packet_name = identified_packet.packet_name
|
|
119
|
+
|
|
120
|
+
# Get the data from this packet
|
|
121
|
+
packet_data = @data.slice!(0, identified_packet.defined_length + @discard_leading_bytes)
|
|
122
|
+
break
|
|
100
123
|
end
|
|
101
|
-
break if identified_packet
|
|
102
124
|
end
|
|
103
125
|
|
|
104
126
|
unless identified_packet
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2018 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'cosmos/config/config_parser'
|
|
12
|
+
require 'cosmos/interfaces/protocols/protocol'
|
|
13
|
+
require 'cosmos/utilities/crc'
|
|
14
|
+
require 'thread'
|
|
15
|
+
|
|
16
|
+
module Cosmos
|
|
17
|
+
# Ignore a specific packet by not letting it through the protocol
|
|
18
|
+
class IgnorePacketProtocol < Protocol
|
|
19
|
+
# @param target_name [String] Target name
|
|
20
|
+
# @param packet_name [String] Packet name
|
|
21
|
+
def initialize(target_name, packet_name, allow_empty_data = nil)
|
|
22
|
+
super(allow_empty_data)
|
|
23
|
+
System.telemetry.packet(target_name, packet_name)
|
|
24
|
+
@target_name = target_name
|
|
25
|
+
@packet_name = packet_name
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def read_packet(packet)
|
|
29
|
+
# Need to make sure packet is identified and defined
|
|
30
|
+
target_names = nil
|
|
31
|
+
target_names = @interface.target_names if @interface
|
|
32
|
+
identified_packet = System.telemetry.identify_and_define_packet(packet, target_names)
|
|
33
|
+
if identified_packet
|
|
34
|
+
if identified_packet.target_name == @target_name && identified_packet.packet_name == @packet_name
|
|
35
|
+
return :STOP
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
return super(packet)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def write_packet(packet)
|
|
42
|
+
return :STOP if packet.target_name == @target_name && packet.packet_name == @packet_name
|
|
43
|
+
return super(packet)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -135,6 +135,11 @@ module Cosmos
|
|
|
135
135
|
@length_endianness)
|
|
136
136
|
raise "Length value received larger than max_length: #{length} > #{@max_length}" if @max_length and length > @max_length
|
|
137
137
|
packet_length = (length * @length_bytes_per_count) + @length_value_offset
|
|
138
|
+
# Ensure the calculated packet length is long enough to support the location of the length field
|
|
139
|
+
# without overlap into the next packet
|
|
140
|
+
if (packet_length * 8) < (@length_bit_offset + @length_bit_size)
|
|
141
|
+
raise "Calculated packet length of #{packet_length * 8} bits < (offset:#{@length_bit_offset} + size:#{@length_bit_size})"
|
|
142
|
+
end
|
|
138
143
|
|
|
139
144
|
# Make sure we have enough data for the packet
|
|
140
145
|
return :STOP if @data.length < packet_length
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
# attribution addendums as found in the LICENSE.txt
|
|
10
10
|
|
|
11
11
|
require 'cosmos/interfaces/protocols/burst_protocol'
|
|
12
|
+
require 'cosmos/packet_logs/packet_log_reader'
|
|
12
13
|
|
|
13
14
|
module Cosmos
|
|
14
15
|
# Delineates packets using the COSMOS preidentification system
|
|
@@ -17,10 +18,11 @@ module Cosmos
|
|
|
17
18
|
# @param sync_pattern (see BurstProtocol#initialize)
|
|
18
19
|
# @param max_length [Integer] The maximum allowed value of the length field
|
|
19
20
|
# @param allow_empty_data [true/false/nil] See Protocol#initialize
|
|
20
|
-
def initialize(sync_pattern = nil, max_length = nil, allow_empty_data = nil)
|
|
21
|
+
def initialize(sync_pattern = nil, max_length = nil, mode = 4, allow_empty_data = nil)
|
|
21
22
|
super(0, sync_pattern, false, allow_empty_data)
|
|
22
23
|
@max_length = ConfigParser.handle_nil(max_length)
|
|
23
24
|
@max_length = Integer(@max_length) if @max_length
|
|
25
|
+
@mode = Integer(mode)
|
|
24
26
|
end
|
|
25
27
|
|
|
26
28
|
def reset
|
|
@@ -29,21 +31,34 @@ module Cosmos
|
|
|
29
31
|
end
|
|
30
32
|
|
|
31
33
|
def read_packet(packet)
|
|
32
|
-
packet.received_time = @
|
|
33
|
-
packet.target_name = @
|
|
34
|
-
packet.packet_name = @
|
|
34
|
+
packet.received_time = @read_received_time
|
|
35
|
+
packet.target_name = @read_target_name
|
|
36
|
+
packet.packet_name = @read_packet_name
|
|
37
|
+
if @mode == 4 # COSMOS4.3+ Protocol
|
|
38
|
+
packet.stored = @read_stored
|
|
39
|
+
packet.extra = @read_extra
|
|
40
|
+
end
|
|
35
41
|
return packet
|
|
36
42
|
end
|
|
37
43
|
|
|
38
44
|
def write_packet(packet)
|
|
39
45
|
received_time = packet.received_time
|
|
40
46
|
received_time = Time.now unless received_time
|
|
41
|
-
@
|
|
42
|
-
@
|
|
43
|
-
@
|
|
44
|
-
@
|
|
45
|
-
@
|
|
46
|
-
@
|
|
47
|
+
@write_time_seconds = [received_time.tv_sec].pack('N') # UINT32
|
|
48
|
+
@write_time_microseconds = [received_time.tv_usec].pack('N') # UINT32
|
|
49
|
+
@write_target_name = packet.target_name
|
|
50
|
+
@write_target_name = 'UNKNOWN' unless @write_target_name
|
|
51
|
+
@write_packet_name = packet.packet_name
|
|
52
|
+
@write_packet_name = 'UNKNOWN' unless @write_packet_name
|
|
53
|
+
if @mode == 4 # COSMOS4.3+ Protocol
|
|
54
|
+
@write_flags = 0
|
|
55
|
+
@write_flags |= PacketLogReader::COSMOS4_STORED_FLAG_MASK if packet.stored
|
|
56
|
+
@write_extra = nil
|
|
57
|
+
if packet.extra
|
|
58
|
+
@write_flags |= PacketLogReader::COSMOS4_EXTRA_FLAG_MASK
|
|
59
|
+
@write_extra = packet.extra.to_json
|
|
60
|
+
end
|
|
61
|
+
end
|
|
47
62
|
return packet
|
|
48
63
|
end
|
|
49
64
|
|
|
@@ -51,12 +66,19 @@ module Cosmos
|
|
|
51
66
|
data_length = [data.length].pack('N') # UINT32
|
|
52
67
|
data_to_send = ''
|
|
53
68
|
data_to_send << @sync_pattern if @sync_pattern
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
69
|
+
if @mode == 4 # COSMOS4.3+ Protocol
|
|
70
|
+
data_to_send << @write_flags
|
|
71
|
+
if @write_extra
|
|
72
|
+
data_to_send << [@write_extra.length].pack('N')
|
|
73
|
+
data_to_send << @write_extra
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
data_to_send << @write_time_seconds
|
|
77
|
+
data_to_send << @write_time_microseconds
|
|
78
|
+
data_to_send << @write_target_name.length
|
|
79
|
+
data_to_send << @write_target_name
|
|
80
|
+
data_to_send << @write_packet_name.length
|
|
81
|
+
data_to_send << @write_packet_name
|
|
60
82
|
data_to_send << data_length
|
|
61
83
|
data_to_send << data
|
|
62
84
|
return data_to_send
|
|
@@ -104,27 +126,50 @@ module Cosmos
|
|
|
104
126
|
@reduction_state = :SYNC_REMOVED
|
|
105
127
|
end
|
|
106
128
|
|
|
107
|
-
|
|
108
|
-
|
|
129
|
+
if @reduction_state == :SYNC_REMOVED and @mode == 4
|
|
130
|
+
# Read and remove flags
|
|
131
|
+
return :STOP if @data.length < 1
|
|
132
|
+
flags = @data[0].unpack('C')[0] # byte
|
|
133
|
+
@data.replace(@data[1..-1])
|
|
134
|
+
@read_stored = false
|
|
135
|
+
@read_stored = true if (flags & PacketLogReader::COSMOS4_STORED_FLAG_MASK) != 0
|
|
136
|
+
@read_extra = nil
|
|
137
|
+
if (flags & PacketLogReader::COSMOS4_EXTRA_FLAG_MASK) != 0
|
|
138
|
+
@reduction_state = :NEED_EXTRA
|
|
139
|
+
else
|
|
140
|
+
@reduction_state = :FLAGS_REMOVED
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
if @reduction_state == :NEED_EXTRA
|
|
145
|
+
# Read and remove extra
|
|
146
|
+
@read_extra = read_length_field_followed_by_string(4)
|
|
147
|
+
return :STOP if @read_extra == :STOP
|
|
148
|
+
@read_extra = JSON.parse(@read_extra)
|
|
149
|
+
@reduction_state = :FLAGS_REMOVED
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
if @reduction_state == :FLAGS_REMOVED or (@reduction_state == :SYNC_REMOVED and @mode != 4)
|
|
153
|
+
# Read and remove packet received time
|
|
109
154
|
return :STOP if @data.length < 8
|
|
110
155
|
time_seconds = @data[0..3].unpack('N')[0] # UINT32
|
|
111
156
|
time_microseconds = @data[4..7].unpack('N')[0] # UINT32
|
|
112
|
-
@
|
|
157
|
+
@read_received_time = Time.at(time_seconds, time_microseconds).sys
|
|
113
158
|
@data.replace(@data[8..-1])
|
|
114
159
|
@reduction_state = :TIME_REMOVED
|
|
115
160
|
end
|
|
116
161
|
|
|
117
162
|
if @reduction_state == :TIME_REMOVED
|
|
118
163
|
# Read and remove the target name
|
|
119
|
-
@
|
|
120
|
-
return :STOP if @
|
|
164
|
+
@read_target_name = read_length_field_followed_by_string(1)
|
|
165
|
+
return :STOP if @read_target_name == :STOP
|
|
121
166
|
@reduction_state = :TARGET_NAME_REMOVED
|
|
122
167
|
end
|
|
123
168
|
|
|
124
169
|
if @reduction_state == :TARGET_NAME_REMOVED
|
|
125
170
|
# Read and remove the packet name
|
|
126
|
-
@
|
|
127
|
-
return :STOP if @
|
|
171
|
+
@read_packet_name = read_length_field_followed_by_string(1)
|
|
172
|
+
return :STOP if @read_packet_name == :STOP
|
|
128
173
|
@reduction_state = :PACKET_NAME_REMOVED
|
|
129
174
|
end
|
|
130
175
|
|
|
@@ -62,6 +62,7 @@ module Cosmos
|
|
|
62
62
|
allow_empty_data)
|
|
63
63
|
@response_template = nil
|
|
64
64
|
@response_packet = nil
|
|
65
|
+
@response_target_name = nil
|
|
65
66
|
@response_packets = []
|
|
66
67
|
@write_block_queue = Queue.new
|
|
67
68
|
@ignore_lines = ignore_lines.to_i
|
|
@@ -124,7 +125,7 @@ module Cosmos
|
|
|
124
125
|
end
|
|
125
126
|
|
|
126
127
|
# Grab the response packet specified in the command
|
|
127
|
-
result_packet = System.telemetry.packet(@
|
|
128
|
+
result_packet = System.telemetry.packet(@response_target_name, @response_packet).clone
|
|
128
129
|
result_packet.received_time = nil
|
|
129
130
|
result_packet.id_items.each do |item|
|
|
130
131
|
result_packet.write_item(item, item.id_value, :RAW)
|
|
@@ -145,13 +146,13 @@ module Cosmos
|
|
|
145
146
|
# Write the packet value with each of the values received
|
|
146
147
|
response_values = response_string.scan(response_regexp)[0]
|
|
147
148
|
if !response_values || (response_values.length != response_item_names.length)
|
|
148
|
-
handle_error("#{@interface.name}: Unexpected response: #{response_string}")
|
|
149
|
+
handle_error("#{@interface ? @interface.name : ""}: Unexpected response: #{response_string}")
|
|
149
150
|
else
|
|
150
151
|
response_values.each_with_index do |value, i|
|
|
151
152
|
begin
|
|
152
153
|
result_packet.write(response_item_names[i], value)
|
|
153
154
|
rescue => error
|
|
154
|
-
handle_error("#{@interface.name}: Could not write value #{value} due to #{error.message}")
|
|
155
|
+
handle_error("#{@interface ? @interface.name : ""}: Could not write value #{value} due to #{error.message}")
|
|
155
156
|
break
|
|
156
157
|
end
|
|
157
158
|
end
|
|
@@ -181,17 +182,20 @@ module Cosmos
|
|
|
181
182
|
begin
|
|
182
183
|
@response_template = packet.read("RSP_TEMPLATE").strip
|
|
183
184
|
@response_packet = packet.read("RSP_PACKET").strip
|
|
185
|
+
@response_target_name = packet.target_name
|
|
184
186
|
# If the template or packet are empty set them to nil. This allows for
|
|
185
187
|
# the user to remove the RSP_TEMPLATE and RSP_PACKET values and avoid
|
|
186
188
|
# any response timeouts
|
|
187
189
|
if @response_template.empty? || @response_packet.empty?
|
|
188
190
|
@response_template = nil
|
|
189
191
|
@response_packet = nil
|
|
192
|
+
@response_target_name = nil
|
|
190
193
|
end
|
|
191
194
|
rescue
|
|
192
195
|
# If there is no response template we set to nil
|
|
193
196
|
@response_template = nil
|
|
194
197
|
@response_packet = nil
|
|
198
|
+
@response_target_name = nil
|
|
195
199
|
end
|
|
196
200
|
|
|
197
201
|
# Grab the command template because that is all we eventually send
|
|
@@ -230,11 +234,12 @@ module Cosmos
|
|
|
230
234
|
sleep(@response_polling_period)
|
|
231
235
|
retry if !response_timeout_time
|
|
232
236
|
retry if response_timeout_time and Time.now < response_timeout_time
|
|
233
|
-
handle_error("#{@interface.name}: Timeout waiting for response")
|
|
237
|
+
handle_error("#{@interface ? @interface.name : ""}: Timeout waiting for response")
|
|
234
238
|
end
|
|
235
239
|
|
|
236
240
|
@response_template = nil
|
|
237
241
|
@response_packet = nil
|
|
242
|
+
@response_target_name = nil
|
|
238
243
|
@response_packets.clear
|
|
239
244
|
end
|
|
240
245
|
return super(packet, data)
|
|
@@ -52,6 +52,7 @@ module Cosmos
|
|
|
52
52
|
@read_allowed = false unless @read_port_name
|
|
53
53
|
@flow_control = :NONE
|
|
54
54
|
@data_bits = 8
|
|
55
|
+
@struct = []
|
|
55
56
|
end
|
|
56
57
|
|
|
57
58
|
# Creates a new {SerialStream} using the parameters passed in the constructor
|
|
@@ -65,13 +66,16 @@ module Cosmos
|
|
|
65
66
|
@write_timeout,
|
|
66
67
|
@read_timeout,
|
|
67
68
|
@flow_control,
|
|
68
|
-
@data_bits
|
|
69
|
+
@data_bits,
|
|
70
|
+
@struct
|
|
69
71
|
)
|
|
70
72
|
super()
|
|
71
73
|
end
|
|
72
74
|
|
|
73
75
|
# Supported Options
|
|
74
76
|
# FLOW_CONTROL - Flow control method NONE or RTSCTS. Defaults to NONE
|
|
77
|
+
# DATA_BITS - How many data bits to use
|
|
78
|
+
# STRUCT - Directly set fields in the Win32 DCB or POSIX termios structure
|
|
75
79
|
def set_option(option_name, option_values)
|
|
76
80
|
super(option_name, option_values)
|
|
77
81
|
case option_name.upcase
|
|
@@ -79,6 +83,8 @@ module Cosmos
|
|
|
79
83
|
@flow_control = option_values[0]
|
|
80
84
|
when 'DATA_BITS'
|
|
81
85
|
@data_bits = option_values[0].to_i
|
|
86
|
+
when 'STRUCT'
|
|
87
|
+
@struct << option_values
|
|
82
88
|
end
|
|
83
89
|
end
|
|
84
90
|
end
|
|
@@ -56,10 +56,14 @@ module Cosmos
|
|
|
56
56
|
if @connected
|
|
57
57
|
packet = first_pending_packet()
|
|
58
58
|
if packet
|
|
59
|
-
#
|
|
59
|
+
# Support read_packet (but not read data) in protocols
|
|
60
60
|
# Generic protocol use is not supported
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
@read_protocols.each do |protocol|
|
|
62
|
+
packet = protocol.read_packet(packet)
|
|
63
|
+
return nil if packet == :DISCONNECT # Disconnect handled by thread
|
|
64
|
+
break if packet == :STOP
|
|
65
|
+
end
|
|
66
|
+
return packet unless packet == :STOP
|
|
63
67
|
end
|
|
64
68
|
|
|
65
69
|
while true
|
|
@@ -80,9 +84,14 @@ module Cosmos
|
|
|
80
84
|
|
|
81
85
|
packet = first_pending_packet()
|
|
82
86
|
if packet
|
|
83
|
-
#
|
|
87
|
+
# Support read_packet (but not read data) in protocols
|
|
84
88
|
# Generic protocol use is not supported
|
|
85
|
-
|
|
89
|
+
@read_protocols.each do |protocol|
|
|
90
|
+
packet = protocol.read_packet(packet)
|
|
91
|
+
return nil if packet == :DISCONNECT # Disconnect handled by thread
|
|
92
|
+
break if packet == :STOP
|
|
93
|
+
end
|
|
94
|
+
next if packet == :STOP
|
|
86
95
|
return packet
|
|
87
96
|
end
|
|
88
97
|
end
|
|
@@ -49,7 +49,7 @@ module Cosmos
|
|
|
49
49
|
begin
|
|
50
50
|
data = @stream.read
|
|
51
51
|
rescue Timeout::Error
|
|
52
|
-
Logger.instance.error "Timeout waiting for data to be read"
|
|
52
|
+
Logger.instance.error "#{@name}: Timeout waiting for data to be read"
|
|
53
53
|
data = nil
|
|
54
54
|
end
|
|
55
55
|
return nil if data.nil? or data.length <= 0
|