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
|
@@ -19,8 +19,9 @@ module Cosmos
|
|
|
19
19
|
signals 'modified()'
|
|
20
20
|
|
|
21
21
|
# Create the SequenceList
|
|
22
|
-
def initialize
|
|
22
|
+
def initialize(parent)
|
|
23
23
|
super()
|
|
24
|
+
@parent = parent
|
|
24
25
|
@modified = false
|
|
25
26
|
layout = Qt::VBoxLayout.new()
|
|
26
27
|
layout.setContentsMargins(0, 0, 0, 0)
|
|
@@ -45,7 +46,8 @@ module Cosmos
|
|
|
45
46
|
usage = "#{keyword} <Delay Time> <Command>"
|
|
46
47
|
parser.verify_num_parameters(2, 2, usage)
|
|
47
48
|
begin
|
|
48
|
-
|
|
49
|
+
tgt_name, pkt_name, cmd_params = extract_fields_from_cmd_text(params[1])
|
|
50
|
+
item = SequenceItem.new(@parent, tgt_name, pkt_name, cmd_params, params[0])
|
|
49
51
|
# Connect the SequenceItems modified signal to propagate it
|
|
50
52
|
# forward by emitting our own modified signal
|
|
51
53
|
item.connect(SIGNAL("modified()")) do
|
|
@@ -63,12 +65,13 @@ module Cosmos
|
|
|
63
65
|
@modified = false # Initially we're not modified
|
|
64
66
|
end
|
|
65
67
|
|
|
66
|
-
# Add a new SequenceItem to the list
|
|
67
|
-
# @param
|
|
68
|
+
# Add a new SequenceItem to the list based on the given target and packet
|
|
69
|
+
# @param target_name [String] target name containing the command
|
|
70
|
+
# @param packet_name [String] packet name containing the command
|
|
68
71
|
# @return [SequenceItem] The item added
|
|
69
|
-
def add(
|
|
72
|
+
def add(target_name, packet_name)
|
|
70
73
|
@modified = true
|
|
71
|
-
item = SequenceItem.new(
|
|
74
|
+
item = SequenceItem.new(@parent, target_name, packet_name)
|
|
72
75
|
# Connect the SequenceItems modified signal to propagate it
|
|
73
76
|
# forward by emitting our own modified signal
|
|
74
77
|
item.connect(SIGNAL("modified()")) do
|
|
@@ -118,11 +121,13 @@ module Cosmos
|
|
|
118
121
|
# application.
|
|
119
122
|
# @param filename [String] Filename to open and write the sequence
|
|
120
123
|
def save(filename)
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
begin
|
|
125
|
+
sequence = collect {|item| item.save }.join("\n") + "\n"
|
|
126
|
+
@modified = false
|
|
127
|
+
File.open(filename, "w") {|file| file.write(sequence) }
|
|
128
|
+
rescue Exception => err
|
|
129
|
+
message = "Error saving due to #{err}"
|
|
130
|
+
Qt::MessageBox.critical(self, 'Error', message)
|
|
126
131
|
end
|
|
127
132
|
end
|
|
128
133
|
|
|
@@ -349,7 +349,20 @@ module Cosmos
|
|
|
349
349
|
def get_cmd_value(target_name, command_name, parameter_name, value_type = :CONVERTED)
|
|
350
350
|
packet = System.commands.packet(target_name, command_name)
|
|
351
351
|
# Virtually support RECEIVED_TIMEFORMATTED, RECEIVED_TIMESECONDS, RECEIVED_COUNT
|
|
352
|
+
# Also PACKET_TIMEFORMATTED and PACKET_TIMESECONDS
|
|
352
353
|
case parameter_name.to_s.upcase
|
|
354
|
+
when 'PACKET_TIMEFORMATTED'
|
|
355
|
+
if packet.packet_time
|
|
356
|
+
return packet.packet_time.formatted
|
|
357
|
+
else
|
|
358
|
+
return 'No Packet Time'
|
|
359
|
+
end
|
|
360
|
+
when 'PACKET_TIMESECONDS'
|
|
361
|
+
if packet.packet_time
|
|
362
|
+
return packet.packet_time.to_f
|
|
363
|
+
else
|
|
364
|
+
return 0.0
|
|
365
|
+
end
|
|
353
366
|
when 'RECEIVED_TIMEFORMATTED'
|
|
354
367
|
if packet.received_time
|
|
355
368
|
return packet.received_time.formatted
|
|
@@ -20,7 +20,6 @@ require 'cosmos/tools/cmd_tlm_server/routers'
|
|
|
20
20
|
require 'cosmos/tools/cmd_tlm_server/replay_backend'
|
|
21
21
|
|
|
22
22
|
module Cosmos
|
|
23
|
-
|
|
24
23
|
# Provides the interface for all applications to get the latest telemetry and
|
|
25
24
|
# to send commands.
|
|
26
25
|
class CmdTlmServer
|
|
@@ -126,6 +125,9 @@ module Cosmos
|
|
|
126
125
|
# receive data. This is useful for testing scripts when actual hardware
|
|
127
126
|
# is not available.
|
|
128
127
|
# @param mode [Symbol] :CMD_TLM_SERVER or :REPLAY - Defines overall mode
|
|
128
|
+
# @param replay_routers [Boolean] Whether to keep existing routers when starting
|
|
129
|
+
# the server in REPLAY mode. Default is false which means to clear all
|
|
130
|
+
# existing routers and simply create the preidentified routers.
|
|
129
131
|
def initialize(
|
|
130
132
|
config_file = DEFAULT_CONFIG_FILE,
|
|
131
133
|
production = false,
|
|
@@ -199,9 +201,9 @@ module Cosmos
|
|
|
199
201
|
@json_drb.method_whitelist = @api_whitelist
|
|
200
202
|
begin
|
|
201
203
|
if @mode == :CMD_TLM_SERVER
|
|
202
|
-
@json_drb.start_service(System.listen_hosts['CTS_API'], System.ports['CTS_API'], self)
|
|
204
|
+
@json_drb.start_service(System.listen_hosts['CTS_API'], System.ports['CTS_API'], self, 1000, System)
|
|
203
205
|
else
|
|
204
|
-
@json_drb.start_service(System.listen_hosts['REPLAY_API'], System.ports['REPLAY_API'], self)
|
|
206
|
+
@json_drb.start_service(System.listen_hosts['REPLAY_API'], System.ports['REPLAY_API'], self, 1000, System)
|
|
205
207
|
end
|
|
206
208
|
rescue Exception
|
|
207
209
|
# Call packet_logging shutdown here to explicitly kill the logging
|
|
@@ -218,16 +220,40 @@ module Cosmos
|
|
|
218
220
|
@routers.add_preidentified('PREIDENTIFIED_ROUTER', System.ports['CTS_PREIDENTIFIED'])
|
|
219
221
|
@routers.add_cmd_preidentified('PREIDENTIFIED_CMD_ROUTER', System.ports['CTS_CMD_ROUTER'])
|
|
220
222
|
else
|
|
223
|
+
# Create dummy interface for Replay so we can attach the preidentified routers to it.
|
|
224
|
+
# This is needed because interfaces are not mapped to targets when loading a saved_config.
|
|
225
|
+
# Since interfaces are used to access the routers, nothing is send out the preidentified
|
|
226
|
+
# interface port and TlmGrapher (most notably) does not work.
|
|
227
|
+
@replay_interface = Interface.new
|
|
228
|
+
@replay_interface.name = "REPLAY"
|
|
221
229
|
@routers.all.clear unless replay_routers
|
|
222
|
-
@routers.add_preidentified('PREIDENTIFIED_ROUTER', System.ports['REPLAY_PREIDENTIFIED'])
|
|
223
|
-
@routers.add_cmd_preidentified('PREIDENTIFIED_CMD_ROUTER', System.ports['REPLAY_CMD_ROUTER'])
|
|
230
|
+
@replay_interface.routers << @routers.add_preidentified('PREIDENTIFIED_ROUTER', System.ports['REPLAY_PREIDENTIFIED'])
|
|
231
|
+
@replay_interface.cmd_routers << @routers.add_cmd_preidentified('PREIDENTIFIED_CMD_ROUTER', System.ports['REPLAY_CMD_ROUTER'])
|
|
224
232
|
end
|
|
225
233
|
System.telemetry.limits_change_callback = method(:limits_change_callback)
|
|
226
234
|
@routers.start
|
|
227
235
|
|
|
228
236
|
start(production)
|
|
229
237
|
end
|
|
230
|
-
end
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
# Map any targets without interfaces to the dummy replay interface.
|
|
241
|
+
# Targets will only have an interface already mapped if the replay_routers
|
|
242
|
+
# flag was passed to the server.
|
|
243
|
+
def replay_map_targets_to_interfaces
|
|
244
|
+
# Try to map existing interfaces to targets
|
|
245
|
+
if @interfaces
|
|
246
|
+
@interfaces.all.each do |name, interface|
|
|
247
|
+
interface.target_names.each do |target|
|
|
248
|
+
System.targets[target].interface = interface
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
# If any remaing targets don't have an interface map to the @replay_interface
|
|
253
|
+
System.targets.each do |name, target|
|
|
254
|
+
target.interface = @replay_interface unless target.interface
|
|
255
|
+
end
|
|
256
|
+
end
|
|
231
257
|
|
|
232
258
|
# Properly shuts down the command and telemetry server by stoping the
|
|
233
259
|
# JSON-RPC server, background tasks, routers, and interfaces. Also kills
|
|
@@ -305,21 +331,24 @@ module Cosmos
|
|
|
305
331
|
if log_change
|
|
306
332
|
# Write to Server Messages that limits state has changed
|
|
307
333
|
tgt_pkt_item_str = "#{packet.target_name} #{packet.packet_name} #{item.name} = #{value} is"
|
|
334
|
+
packet_time = packet.packet_time
|
|
335
|
+
pkt_time_str = ""
|
|
336
|
+
pkt_time_str << " (#{packet.packet_time.sys.formatted})" if packet_time
|
|
308
337
|
case item.limits.state
|
|
309
338
|
when :BLUE
|
|
310
|
-
Logger.info "<B>#{tgt_pkt_item_str} #{item.limits.state}"
|
|
339
|
+
Logger.info "<B>#{tgt_pkt_item_str} #{item.limits.state}#{pkt_time_str}"
|
|
311
340
|
when :GREEN, :GREEN_LOW, :GREEN_HIGH
|
|
312
|
-
Logger.info "<G>#{tgt_pkt_item_str} #{item.limits.state}"
|
|
341
|
+
Logger.info "<G>#{tgt_pkt_item_str} #{item.limits.state}#{pkt_time_str}"
|
|
313
342
|
when :YELLOW, :YELLOW_LOW, :YELLOW_HIGH
|
|
314
|
-
Logger.warn "<Y>#{tgt_pkt_item_str} #{item.limits.state}"
|
|
343
|
+
Logger.warn "<Y>#{tgt_pkt_item_str} #{item.limits.state}#{pkt_time_str}"
|
|
315
344
|
when :RED, :RED_LOW, :RED_HIGH
|
|
316
|
-
Logger.error "<R>#{tgt_pkt_item_str} #{item.limits.state}"
|
|
345
|
+
Logger.error "<R>#{tgt_pkt_item_str} #{item.limits.state}#{pkt_time_str}"
|
|
317
346
|
else
|
|
318
|
-
Logger.error "#{tgt_pkt_item_str} UNKNOWN"
|
|
347
|
+
Logger.error "#{tgt_pkt_item_str} UNKNOWN#{pkt_time_str}"
|
|
319
348
|
end
|
|
320
349
|
end
|
|
321
350
|
|
|
322
|
-
post_limits_event(:LIMITS_CHANGE, [packet.target_name, packet.packet_name, item.name, old_limits_state, item.limits.state])
|
|
351
|
+
post_limits_event(:LIMITS_CHANGE, [packet.target_name, packet.packet_name, item.name, old_limits_state, item.limits.state, packet_time ? packet_time.tv_sec : nil, packet_time ? packet_time.tv_usec : nil])
|
|
323
352
|
|
|
324
353
|
if @mode == :CMD_TLM_SERVER
|
|
325
354
|
if item.limits.response
|
|
@@ -457,7 +486,7 @@ module Cosmos
|
|
|
457
486
|
received_time = packet.received_time
|
|
458
487
|
received_time ||= Time.now.sys
|
|
459
488
|
queue << [packet.buffer, target_name, packet_name,
|
|
460
|
-
received_time.tv_sec, received_time.tv_usec, packet.received_count]
|
|
489
|
+
received_time.tv_sec, received_time.tv_usec, packet.received_count, packet.stored, packet.extra]
|
|
461
490
|
if queue.length > queue_size
|
|
462
491
|
# Drop queue
|
|
463
492
|
queues_to_drop << id
|
|
@@ -529,7 +558,7 @@ module Cosmos
|
|
|
529
558
|
received_time = packet.received_time
|
|
530
559
|
received_time ||= Time.now.sys
|
|
531
560
|
@@instance.packet_data_queues[id][0] << [packet.buffer, 'SYSTEM', 'META',
|
|
532
|
-
received_time.tv_sec, received_time.tv_usec, packet.received_count]
|
|
561
|
+
received_time.tv_sec, received_time.tv_usec, packet.received_count, packet.stored, packet.extra]
|
|
533
562
|
end
|
|
534
563
|
end
|
|
535
564
|
return id
|
|
@@ -572,7 +601,7 @@ module Cosmos
|
|
|
572
601
|
rescue ThreadError
|
|
573
602
|
received_time ||= Time.now.sys
|
|
574
603
|
return [@last_subscribed_packet.buffer, @last_subscribed_packet.target_name,
|
|
575
|
-
@last_subscribed_packet.packet_name, received_time.tv_sec, received_time.tv_usec, @last_subscribed_packet.received_count]
|
|
604
|
+
@last_subscribed_packet.packet_name, received_time.tv_sec, received_time.tv_usec, @last_subscribed_packet.received_count, @last_subscribed_packet.stored, @last_subscribed_packet.extra]
|
|
576
605
|
end
|
|
577
606
|
else
|
|
578
607
|
return queue.pop(non_block)
|
|
@@ -153,7 +153,7 @@ module Cosmos
|
|
|
153
153
|
current_interface_or_router.name = interface_name
|
|
154
154
|
@interfaces[interface_name] = current_interface_or_router
|
|
155
155
|
|
|
156
|
-
when 'LOG', 'DONT_LOG', 'TARGET'
|
|
156
|
+
when 'LOG', 'LOG_STORED', 'DONT_LOG', 'TARGET'
|
|
157
157
|
raise parser.error("No current interface for #{keyword}") unless current_interface_or_router and current_type == :INTERFACE
|
|
158
158
|
|
|
159
159
|
case keyword
|
|
@@ -166,6 +166,12 @@ module Cosmos
|
|
|
166
166
|
current_interface_log_added = true
|
|
167
167
|
current_interface_or_router.packet_log_writer_pairs << packet_log_writer_pair unless current_interface_or_router.packet_log_writer_pairs.include?(packet_log_writer_pair)
|
|
168
168
|
|
|
169
|
+
when 'LOG_STORED'
|
|
170
|
+
parser.verify_num_parameters(1, 1, "#{keyword} <Packet Log Writer Name>")
|
|
171
|
+
packet_log_writer_pair = @packet_log_writer_pairs[params[0].upcase]
|
|
172
|
+
raise parser.error("Unknown packet log writer: #{params[0].upcase}") unless packet_log_writer_pair
|
|
173
|
+
current_interface_or_router.stored_packet_log_writer_pairs << packet_log_writer_pair unless current_interface_or_router.stored_packet_log_writer_pairs.include?(packet_log_writer_pair)
|
|
174
|
+
|
|
169
175
|
when 'DONT_LOG'
|
|
170
176
|
parser.verify_num_parameters(0, 0, "#{keyword}")
|
|
171
177
|
current_interface_or_router.packet_log_writer_pairs = []
|
|
@@ -210,6 +216,7 @@ module Cosmos
|
|
|
210
216
|
when 'LOG_RAW', 'ROUTER_LOG_RAW'
|
|
211
217
|
parser.verify_num_parameters(0, nil, "#{keyword} <Raw Logger Class File (optional)> <Raw Logger Parameters (optional)>")
|
|
212
218
|
current_interface_or_router.raw_logger_pair = RawLoggerPair.new(current_interface_or_router.name, params)
|
|
219
|
+
current_interface_or_router.start_raw_logging
|
|
213
220
|
|
|
214
221
|
when 'OPTION'
|
|
215
222
|
parser.verify_num_parameters(2, nil, "#{keyword} <Option Name> <Option Value 1> <Option Value 2 (optional)> <etc>")
|
|
@@ -56,9 +56,6 @@ else
|
|
|
56
56
|
option_parser.on("--system FILE", "Use an alternative system.txt file") do |arg|
|
|
57
57
|
System.instance(File.join(USERPATH, 'config', 'system', arg))
|
|
58
58
|
end
|
|
59
|
-
option_parser.on("-c", "--config FILE", "Use the specified configuration file") do |arg|
|
|
60
|
-
options.config_file = arg
|
|
61
|
-
end
|
|
62
59
|
end
|
|
63
60
|
|
|
64
61
|
return parser, options
|
|
@@ -75,7 +72,6 @@ else
|
|
|
75
72
|
end
|
|
76
73
|
|
|
77
74
|
module Cosmos
|
|
78
|
-
|
|
79
75
|
# Implements the GUI functions of the Command and Telemetry Server. All the
|
|
80
76
|
# QT calls are implemented here. The non-GUI functionality is contained in
|
|
81
77
|
# the CmdTlmServer class.
|
|
@@ -129,7 +125,7 @@ module Cosmos
|
|
|
129
125
|
@first_output = 0
|
|
130
126
|
@options = options
|
|
131
127
|
|
|
132
|
-
statusBar.showMessage(
|
|
128
|
+
statusBar.showMessage("") # Show blank message to initialize status bar
|
|
133
129
|
|
|
134
130
|
initialize_actions()
|
|
135
131
|
initialize_menus()
|
|
@@ -194,26 +190,27 @@ module Cosmos
|
|
|
194
190
|
super()
|
|
195
191
|
|
|
196
192
|
# File actions
|
|
197
|
-
@file_reload = Qt::Action.new(
|
|
198
|
-
@file_reload.
|
|
193
|
+
@file_reload = Qt::Action.new('&Reload Configuration', self)
|
|
194
|
+
@file_reload.shortcut = Qt::KeySequence.new('Ctrl+Shift+R')
|
|
195
|
+
@file_reload.statusTip = 'Reload configuraton and reset'
|
|
199
196
|
@file_reload.connect(SIGNAL('triggered()')) do
|
|
200
197
|
CmdTlmServer.instance.reload()
|
|
201
198
|
end
|
|
202
199
|
|
|
203
200
|
# Edit actions
|
|
204
|
-
@edit_clear_counters = Qt::Action.new(
|
|
205
|
-
@edit_clear_counters.statusTip =
|
|
201
|
+
@edit_clear_counters = Qt::Action.new('&Clear Counters', self)
|
|
202
|
+
@edit_clear_counters.statusTip = 'Clear counters for all interfaces and targets'
|
|
206
203
|
@edit_clear_counters.connect(SIGNAL('triggered()')) { CmdTlmServer.clear_counters }
|
|
207
204
|
end
|
|
208
205
|
|
|
209
206
|
def initialize_menus
|
|
210
|
-
@file_menu = menuBar.addMenu(
|
|
207
|
+
@file_menu = menuBar.addMenu('&File')
|
|
211
208
|
@file_menu.addAction(@file_reload)
|
|
212
209
|
@file_menu.addAction(@exit_action)
|
|
213
210
|
|
|
214
211
|
# Do not allow clear counters in production mode
|
|
215
212
|
unless @production
|
|
216
|
-
@edit_menu = menuBar.addMenu(
|
|
213
|
+
@edit_menu = menuBar.addMenu('&Edit')
|
|
217
214
|
@edit_menu.addAction(@edit_clear_counters)
|
|
218
215
|
end
|
|
219
216
|
|
|
@@ -262,7 +259,7 @@ module Cosmos
|
|
|
262
259
|
end
|
|
263
260
|
@targets_tab = TargetsTab.new(@tab_widget)
|
|
264
261
|
@commands_tab = PacketsTab.new(self, PacketsTab::COMMANDS, @tab_widget)
|
|
265
|
-
@telemetry_tab = PacketsTab.new(self, PacketsTab::TELEMETRY, @tab_widget)
|
|
262
|
+
@telemetry_tab = PacketsTab.new(self, PacketsTab::TELEMETRY, @tab_widget, (@mode == :REPLAY))
|
|
266
263
|
@routers_tab = InterfacesTab.new(self, InterfacesTab::ROUTERS, @tab_widget)
|
|
267
264
|
if @mode == :CMD_TLM_SERVER
|
|
268
265
|
@logging_tab = LoggingTab.new(@production, @tab_widget)
|
|
@@ -271,6 +268,7 @@ module Cosmos
|
|
|
271
268
|
end
|
|
272
269
|
|
|
273
270
|
def config_change_callback
|
|
271
|
+
CmdTlmServer.instance.replay_map_targets_to_interfaces
|
|
274
272
|
start(nil)
|
|
275
273
|
end
|
|
276
274
|
|
|
@@ -546,6 +544,8 @@ module Cosmos
|
|
|
546
544
|
def self.post_options_parsed_hook(options)
|
|
547
545
|
@options = options
|
|
548
546
|
if options.no_gui
|
|
547
|
+
normalize_config_options(options)
|
|
548
|
+
|
|
549
549
|
["TERM", "INT"].each {|sig| Signal.trap(sig) {exit}}
|
|
550
550
|
|
|
551
551
|
begin
|
|
@@ -613,16 +613,15 @@ module Cosmos
|
|
|
613
613
|
# Set the default title which can be overridden in the config file
|
|
614
614
|
options.title = TOOL_NAME
|
|
615
615
|
options.auto_size = false
|
|
616
|
-
options.config_file = CmdTlmServer::DEFAULT_CONFIG_FILE
|
|
617
616
|
options.production = false
|
|
618
617
|
options.no_prompt = false
|
|
619
618
|
options.no_gui = false
|
|
620
619
|
options.replay_routers = false
|
|
620
|
+
options.config_file = true # config_file is required
|
|
621
|
+
# Set config_dir because by default it would be config/tools/cmd_tlm_server_gui
|
|
622
|
+
options.config_dir = File.join(Cosmos::USERPATH, 'config', 'tools', 'cmd_tlm_server')
|
|
621
623
|
|
|
622
624
|
option_parser.separator "CTS Specific Options:"
|
|
623
|
-
option_parser.on("-c", "--config FILE", "Use the specified configuration file") do |arg|
|
|
624
|
-
options.config_file = arg
|
|
625
|
-
end
|
|
626
625
|
option_parser.on("-p", "--production", "Run the server in production mode which disables the ability to stop logging.") do |arg|
|
|
627
626
|
options.production = true
|
|
628
627
|
end
|
|
@@ -641,12 +640,11 @@ module Cosmos
|
|
|
641
640
|
end
|
|
642
641
|
else
|
|
643
642
|
options.replay = false
|
|
644
|
-
end
|
|
643
|
+
end
|
|
645
644
|
end
|
|
646
645
|
|
|
647
646
|
super(option_parser, options)
|
|
648
647
|
end
|
|
649
648
|
end
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
end # module Cosmos
|
|
649
|
+
end
|
|
650
|
+
end
|
|
@@ -52,6 +52,8 @@ module Cosmos
|
|
|
52
52
|
if identified_command
|
|
53
53
|
identified_command.received_time = packet.received_time
|
|
54
54
|
identified_command.raw = packet.raw
|
|
55
|
+
identified_command.stored = packet.stored
|
|
56
|
+
identified_command.extra = packet.extra
|
|
55
57
|
packet = identified_command
|
|
56
58
|
end
|
|
57
59
|
end
|
|
@@ -69,6 +71,8 @@ module Cosmos
|
|
|
69
71
|
end
|
|
70
72
|
command.received_time = packet.received_time
|
|
71
73
|
command.raw = packet.raw
|
|
74
|
+
command.stored = packet.stored
|
|
75
|
+
command.extra = packet.extra
|
|
72
76
|
command.buffer = packet.buffer
|
|
73
77
|
command.received_count += 1
|
|
74
78
|
Logger.info System.commands.format(command, target.ignored_parameters) if !command.messages_disabled and command.target_name != 'UNKNOWN'
|
|
@@ -99,8 +103,15 @@ module Cosmos
|
|
|
99
103
|
end
|
|
100
104
|
|
|
101
105
|
# Write to command packet logs
|
|
102
|
-
interface.
|
|
103
|
-
|
|
106
|
+
if command.stored and !interface.stored_packet_log_writer_pairs.empty?
|
|
107
|
+
interface.stored_packet_log_writer_pairs.each do |packet_log_writer_pair|
|
|
108
|
+
packet_log_writer_pair.cmd_log_writer.write(command)
|
|
109
|
+
end
|
|
110
|
+
else
|
|
111
|
+
interface.packet_log_writer_pairs.each do |packet_log_writer_pair|
|
|
112
|
+
# Write errors are handled by the log writer
|
|
113
|
+
packet_log_writer_pair.cmd_log_writer.write(command)
|
|
114
|
+
end
|
|
104
115
|
end
|
|
105
116
|
end
|
|
106
117
|
|
|
@@ -127,7 +127,7 @@ module Cosmos
|
|
|
127
127
|
def populate_interface_table(interfaces, interfaces_table)
|
|
128
128
|
row = 0
|
|
129
129
|
interfaces.all.each do |interface_name, interface|
|
|
130
|
-
item = Qt::TableWidgetItem.new(
|
|
130
|
+
item = Qt::TableWidgetItem.new(interface_name)
|
|
131
131
|
item.setTextAlignment(ALIGN_CENTER)
|
|
132
132
|
interfaces_table.setItem(row, 0, item)
|
|
133
133
|
interfaces_table.setCellWidget(row, 1, create_button(interface, interface_name))
|
|
@@ -138,7 +138,7 @@ module Cosmos
|
|
|
138
138
|
interface.bytes_written, interface.bytes_read,
|
|
139
139
|
interface.write_count, interface.read_count].each do |val|
|
|
140
140
|
|
|
141
|
-
item = Qt::TableWidgetItem.new(val.to_s)
|
|
141
|
+
item = Qt::TableWidgetItem.new(val.to_s)
|
|
142
142
|
item.setTextAlignment(ALIGN_CENTER)
|
|
143
143
|
interfaces_table.setItem(row, index, item)
|
|
144
144
|
index += 1
|
|
@@ -77,7 +77,7 @@ module Cosmos
|
|
|
77
77
|
|
|
78
78
|
def populate_logging_actions(layout)
|
|
79
79
|
# Add all the action buttons
|
|
80
|
-
actions = Qt::GroupBox.new(
|
|
80
|
+
actions = Qt::GroupBox.new("Actions")
|
|
81
81
|
actions_layout = Qt::VBoxLayout.new(actions)
|
|
82
82
|
button_layout = Qt::GridLayout.new
|
|
83
83
|
|
|
@@ -92,13 +92,13 @@ module Cosmos
|
|
|
92
92
|
|
|
93
93
|
log_buttons.each do |text, location, method|
|
|
94
94
|
next if text =~ /Stop/ and @production
|
|
95
|
-
button = Qt::PushButton.new(
|
|
95
|
+
button = Qt::PushButton.new(text)
|
|
96
96
|
button_layout.addWidget(button, location[0], location[1])
|
|
97
97
|
button.connect(SIGNAL('clicked()')) do
|
|
98
98
|
begin
|
|
99
99
|
CmdTlmServer.instance.send(method, 'ALL')
|
|
100
100
|
rescue Exception => error
|
|
101
|
-
statusBar.showMessage(
|
|
101
|
+
statusBar.showMessage(error.message)
|
|
102
102
|
end
|
|
103
103
|
end
|
|
104
104
|
end
|
|
@@ -109,13 +109,13 @@ module Cosmos
|
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
def create_log_layout(form_layout, log_writer, label_prefix)
|
|
112
|
-
label = Qt::Label.new(
|
|
112
|
+
label = Qt::Label.new(log_writer.logging_enabled.to_s)
|
|
113
113
|
label.setTextInteractionFlags(Qt::TextSelectableByMouse)
|
|
114
114
|
form_layout.addRow("#{label_prefix} Logging:", label)
|
|
115
|
-
label = Qt::Label.new(
|
|
115
|
+
label = Qt::Label.new(log_writer.queue.size.to_s)
|
|
116
116
|
label.setTextInteractionFlags(Qt::TextSelectableByMouse)
|
|
117
117
|
form_layout.addRow("#{label_prefix} Queue Size:", label)
|
|
118
|
-
label = Qt::Label.new(
|
|
118
|
+
label = Qt::Label.new(log_writer.filename)
|
|
119
119
|
label.setTextInteractionFlags(Qt::TextSelectableByMouse)
|
|
120
120
|
form_layout.addRow("#{label_prefix} Filename:", label)
|
|
121
121
|
file_size = 0
|
|
@@ -124,7 +124,7 @@ module Cosmos
|
|
|
124
124
|
rescue Exception
|
|
125
125
|
# Do nothing on error
|
|
126
126
|
end
|
|
127
|
-
label = Qt::Label.new(
|
|
127
|
+
label = Qt::Label.new(file_size.to_s)
|
|
128
128
|
label.setTextInteractionFlags(Qt::TextSelectableByMouse)
|
|
129
129
|
form_layout.addRow("#{label_prefix} File Size:", label)
|
|
130
130
|
end
|
|
@@ -142,30 +142,30 @@ module Cosmos
|
|
|
142
142
|
|
|
143
143
|
form_layout = Qt::FormLayout.new
|
|
144
144
|
@logging_layouts[packet_log_writer_pair_name] = form_layout
|
|
145
|
-
label = Qt::Label.new(
|
|
145
|
+
label = Qt::Label.new(interfaces.join(", "))
|
|
146
146
|
label.setTextInteractionFlags(Qt::TextSelectableByMouse)
|
|
147
147
|
form_layout.addRow("Interfaces:", label)
|
|
148
148
|
create_log_layout(form_layout, packet_log_writer_pair.cmd_log_writer, 'Cmd')
|
|
149
149
|
create_log_layout(form_layout, packet_log_writer_pair.tlm_log_writer, 'Tlm')
|
|
150
150
|
|
|
151
151
|
button_layout = Qt::HBoxLayout.new
|
|
152
|
-
start_button = Qt::PushButton.new(
|
|
152
|
+
start_button = Qt::PushButton.new('Start Cmd Logging')
|
|
153
153
|
button_layout.addWidget(start_button)
|
|
154
154
|
start_button.connect(SIGNAL('clicked()')) do
|
|
155
155
|
CmdTlmServer.instance.start_cmd_log(packet_log_writer_pair_name)
|
|
156
156
|
end
|
|
157
|
-
start_button = Qt::PushButton.new(
|
|
157
|
+
start_button = Qt::PushButton.new('Start Tlm Logging')
|
|
158
158
|
button_layout.addWidget(start_button)
|
|
159
159
|
start_button.connect(SIGNAL('clicked()')) do
|
|
160
160
|
CmdTlmServer.instance.start_tlm_log(packet_log_writer_pair_name)
|
|
161
161
|
end
|
|
162
162
|
if @production == false
|
|
163
|
-
stop_button = Qt::PushButton.new(
|
|
163
|
+
stop_button = Qt::PushButton.new('Stop Cmd Logging')
|
|
164
164
|
button_layout.addWidget(stop_button)
|
|
165
165
|
stop_button.connect(SIGNAL('clicked()')) do
|
|
166
166
|
CmdTlmServer.instance.stop_cmd_log(packet_log_writer_pair_name)
|
|
167
167
|
end
|
|
168
|
-
stop_button = Qt::PushButton.new(
|
|
168
|
+
stop_button = Qt::PushButton.new('Stop Tlm Logging')
|
|
169
169
|
button_layout.addWidget(stop_button)
|
|
170
170
|
stop_button.connect(SIGNAL('clicked()')) do
|
|
171
171
|
CmdTlmServer.instance.stop_tlm_log(packet_log_writer_pair_name)
|
|
@@ -175,7 +175,7 @@ module Cosmos
|
|
|
175
175
|
log_layout.addLayout(form_layout)
|
|
176
176
|
layout.addWidget(log)
|
|
177
177
|
end
|
|
178
|
-
layout.addWidget(Qt::Label.new(
|
|
178
|
+
layout.addWidget(Qt::Label.new("Note: Buffered IO operations cause file size to not reflect total logged data size until the log file is closed."))
|
|
179
179
|
end
|
|
180
180
|
end
|
|
181
181
|
end
|