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
|
@@ -16,15 +16,12 @@ end
|
|
|
16
16
|
|
|
17
17
|
module Cosmos
|
|
18
18
|
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
# This class implements the TlmGrapher Application. This application displays multiple line graphs
|
|
22
|
-
# that perform various analysis on housekeeping telemetry.
|
|
23
|
-
#
|
|
19
|
+
# Telemetry Grapher displays multiple line graphs that perform various
|
|
20
|
+
# analysis on housekeeping telemetry.
|
|
24
21
|
class TlmGrapher < TabbedPlotsTool
|
|
25
22
|
|
|
26
23
|
# Runs the application
|
|
27
|
-
def self.run
|
|
24
|
+
def self.run(opts = nil, options = nil)
|
|
28
25
|
Cosmos.catch_fatal_exception do
|
|
29
26
|
unless options
|
|
30
27
|
opts, options = create_default_options()
|
|
@@ -32,8 +29,6 @@ module Cosmos
|
|
|
32
29
|
options.width = 1000
|
|
33
30
|
options.height = 800
|
|
34
31
|
options.title = "Telemetry Grapher"
|
|
35
|
-
options.config_dir = 'tlm_grapher'
|
|
36
|
-
options.config_file = 'tlm_grapher.txt'
|
|
37
32
|
options.tool_short_name = 'tlmgrapher'
|
|
38
33
|
options.tabbed_plots_type = 'overview'
|
|
39
34
|
options.data_object_types = ['HOUSEKEEPING', 'XY','SINGLEXY']
|
|
@@ -43,12 +38,10 @@ module Cosmos
|
|
|
43
38
|
options.adder_orientation = Qt::Horizontal
|
|
44
39
|
options.items = []
|
|
45
40
|
options.start = false
|
|
41
|
+
options.replay = false
|
|
46
42
|
options.about_string = "TlmGrapher provides realtime and log file graphing abilities to the COSMOS system."
|
|
47
43
|
|
|
48
44
|
opts.separator "Telemetry Grapher Specific Options:"
|
|
49
|
-
opts.on("-c", "--config FILE", "Use the specified configuration file") do |arg|
|
|
50
|
-
options.config_file = arg
|
|
51
|
-
end
|
|
52
45
|
opts.on("-s", "--start", "Start graphing immediately") do |arg|
|
|
53
46
|
options.start = true
|
|
54
47
|
end
|
|
@@ -60,6 +53,9 @@ module Cosmos
|
|
|
60
53
|
end
|
|
61
54
|
options.items << split
|
|
62
55
|
end
|
|
56
|
+
opts.on("--replay", "Start Telemetry Grapher in Replay mode") do
|
|
57
|
+
options.replay = true
|
|
58
|
+
end
|
|
63
59
|
end
|
|
64
60
|
|
|
65
61
|
super(opts, options)
|
|
@@ -77,17 +73,24 @@ module Cosmos
|
|
|
77
73
|
target_name.upcase!
|
|
78
74
|
packet_name.upcase!
|
|
79
75
|
item_name.upcase!
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
#
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
#
|
|
87
|
-
#
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
76
|
+
|
|
77
|
+
item_array_index = nil
|
|
78
|
+
begin
|
|
79
|
+
# See if we can access the item
|
|
80
|
+
_, item = System.telemetry.packet_and_item(target_name, packet_name, item_name)
|
|
81
|
+
rescue => error
|
|
82
|
+
# Check to see if the item name is followed by an array index,
|
|
83
|
+
# notated by square brackets around an integer; i.e. ARRAY_ITEM[1]
|
|
84
|
+
if (item_name =~ /\[\d+\]$/)
|
|
85
|
+
# The $` special variable is the string before the regex match, i.e. ARRAY_ITEM
|
|
86
|
+
item_name = $`
|
|
87
|
+
# The $& special variable is the string matched by the regex, i.e. [1].
|
|
88
|
+
# Strip off the brackets and then convert the array index to an integer.
|
|
89
|
+
item_array_index = $&.gsub(/[\[\]]/, "").to_i
|
|
90
|
+
else
|
|
91
|
+
# If we couldn't access the item and it's not bracket notation then it's an error
|
|
92
|
+
raise error
|
|
93
|
+
end
|
|
91
94
|
end
|
|
92
95
|
# Default configuration has one plot so don't add plot for first item
|
|
93
96
|
data_object = HousekeepingDataObject.new
|
|
@@ -97,7 +100,5 @@ module Cosmos
|
|
|
97
100
|
plot_index += 1
|
|
98
101
|
end
|
|
99
102
|
end
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
end # module Cosmos
|
|
103
|
+
end
|
|
104
|
+
end
|
|
@@ -11,8 +11,10 @@
|
|
|
11
11
|
require 'cosmos'
|
|
12
12
|
require 'cosmos/gui/qt'
|
|
13
13
|
require 'cosmos/gui/qt_tool'
|
|
14
|
+
require 'cosmos/gui/utilities/classification_banner'
|
|
14
15
|
require 'cosmos/script'
|
|
15
16
|
require 'cosmos/tools/tlm_viewer/widgets'
|
|
17
|
+
require 'tempfile'
|
|
16
18
|
|
|
17
19
|
module Cosmos
|
|
18
20
|
|
|
@@ -21,7 +23,9 @@ module Cosmos
|
|
|
21
23
|
# close_all_screens is called
|
|
22
24
|
@@open_screens = []
|
|
23
25
|
|
|
24
|
-
attr_accessor :full_name, :width, :height, :window, :replay_flag
|
|
26
|
+
attr_accessor :full_name, :width, :height, :window, :replay_flag, :original_target_name
|
|
27
|
+
|
|
28
|
+
include ClassificationBanner
|
|
25
29
|
|
|
26
30
|
class Widgets
|
|
27
31
|
# Flag to indicate all screens should close
|
|
@@ -33,10 +37,12 @@ module Cosmos
|
|
|
33
37
|
@@closing_all = value
|
|
34
38
|
end
|
|
35
39
|
|
|
36
|
-
def initialize(screen, mode)
|
|
40
|
+
def initialize(screen, mode, local_binding = nil)
|
|
37
41
|
@screen = screen
|
|
38
42
|
# The telemetry viewer mode. Must be :REALTIME or basically anything else?
|
|
39
43
|
@mode = mode
|
|
44
|
+
# Local binding to evaluate LOCAL target
|
|
45
|
+
@local_binding = local_binding
|
|
40
46
|
# Hash of only the named widgets identifed by the NAMED_WIDGET keyword
|
|
41
47
|
@named = {}
|
|
42
48
|
# Array of all widgets which take a value
|
|
@@ -84,7 +90,7 @@ module Cosmos
|
|
|
84
90
|
|
|
85
91
|
def add_widget(klass, parameters, widget, widget_name, substitute, original_target_name, force_substitute)
|
|
86
92
|
# Add to item or non_item widgets
|
|
87
|
-
if klass.takes_value?
|
|
93
|
+
if klass.takes_value? and substitute != 'LOCAL' and parameters[0] != 'LOCAL'
|
|
88
94
|
if substitute and (original_target_name == parameters[0].upcase or force_substitute)
|
|
89
95
|
@items << [substitute, parameters[1], parameters[2]]
|
|
90
96
|
else
|
|
@@ -113,7 +119,7 @@ module Cosmos
|
|
|
113
119
|
@value_thread = Thread.new do
|
|
114
120
|
begin
|
|
115
121
|
while(true)
|
|
116
|
-
break if @@closing_all
|
|
122
|
+
break if @@closing_all or !@alive
|
|
117
123
|
time = Time.now.sys
|
|
118
124
|
|
|
119
125
|
if !@item.empty?
|
|
@@ -137,7 +143,7 @@ module Cosmos
|
|
|
137
143
|
@limits_set = limits_set
|
|
138
144
|
end
|
|
139
145
|
rescue DRb::DRbConnError
|
|
140
|
-
break if @@closing_all
|
|
146
|
+
break if @@closing_all or !@alive
|
|
141
147
|
break if @value_sleeper.sleep(1)
|
|
142
148
|
next
|
|
143
149
|
end
|
|
@@ -145,7 +151,7 @@ module Cosmos
|
|
|
145
151
|
|
|
146
152
|
Qt.execute_in_main_thread {update_gui()} if @alive and (@mode == :REALTIME)
|
|
147
153
|
delta = Time.now.sys - time
|
|
148
|
-
break if @@closing_all
|
|
154
|
+
break if @@closing_all or !@alive
|
|
149
155
|
if @polling_period - delta > 0
|
|
150
156
|
break if @value_sleeper.sleep(@polling_period - delta)
|
|
151
157
|
else
|
|
@@ -178,7 +184,27 @@ module Cosmos
|
|
|
178
184
|
|
|
179
185
|
# Update non_item widgets
|
|
180
186
|
@non_item.each do |widget|
|
|
181
|
-
widget.
|
|
187
|
+
if widget.class.takes_value?
|
|
188
|
+
# LOCAL value
|
|
189
|
+
eval_binding = @local_binding
|
|
190
|
+
begin
|
|
191
|
+
eval_binding = ScriptRunnerFrame.instance.script_binding
|
|
192
|
+
@local_binding = eval_binding
|
|
193
|
+
rescue Exception
|
|
194
|
+
# Fall back on @local_binding
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
begin
|
|
198
|
+
widget.limits_state = nil
|
|
199
|
+
widget.value = eval_binding.eval(widget.item_name)
|
|
200
|
+
rescue Exception
|
|
201
|
+
# Bad local variable or binding no longer valid
|
|
202
|
+
widget.limits_state = :STALE
|
|
203
|
+
widget.value = widget.value
|
|
204
|
+
end
|
|
205
|
+
else
|
|
206
|
+
widget.update_widget
|
|
207
|
+
end
|
|
182
208
|
end
|
|
183
209
|
end
|
|
184
210
|
rescue Exception => error
|
|
@@ -190,7 +216,7 @@ module Cosmos
|
|
|
190
216
|
|
|
191
217
|
def shutdown
|
|
192
218
|
@alive = false
|
|
193
|
-
Cosmos.kill_thread(self, @value_thread)
|
|
219
|
+
Cosmos.kill_thread(self, @value_thread, 2, 0.1, 2)
|
|
194
220
|
|
|
195
221
|
# Shutdown All Widgets
|
|
196
222
|
widgets().each do |widget|
|
|
@@ -203,7 +229,7 @@ module Cosmos
|
|
|
203
229
|
end
|
|
204
230
|
end
|
|
205
231
|
|
|
206
|
-
def initialize(full_name,
|
|
232
|
+
def initialize(full_name, filename_or_screen_def, notify_on_close = nil, mode = :REALTIME, x_pos = nil, y_pos = nil, original_target_name = nil, substitute = nil, force_substitute = false, single_screen = false, local_binding = nil)
|
|
207
233
|
super(nil)
|
|
208
234
|
# The full name of the widget which goes in the title
|
|
209
235
|
@full_name = full_name
|
|
@@ -224,15 +250,20 @@ module Cosmos
|
|
|
224
250
|
# displayed as a stand alone screen and not launched as a part of the
|
|
225
251
|
# regular TlmViewer application
|
|
226
252
|
@single_screen = single_screen
|
|
253
|
+
# Binding for use with LOCAL LOCAL
|
|
254
|
+
@local_binding = local_binding
|
|
227
255
|
|
|
228
256
|
# Read the application wide stylesheet if it exists
|
|
229
257
|
app_style = File.join(Cosmos::USERPATH, 'config', 'tools', 'application.css')
|
|
230
258
|
setStyleSheet(File.read(app_style)) if File.exist? app_style
|
|
231
259
|
|
|
232
260
|
@replay_flag = nil
|
|
233
|
-
@widgets = Widgets.new(self, mode)
|
|
234
|
-
@window = process(
|
|
261
|
+
@widgets = Widgets.new(self, mode, @local_binding)
|
|
262
|
+
@window = process(filename_or_screen_def)
|
|
235
263
|
@@open_screens << self if @window
|
|
264
|
+
|
|
265
|
+
# Add a banner based on system configuration
|
|
266
|
+
add_classification_banner
|
|
236
267
|
end
|
|
237
268
|
|
|
238
269
|
def widgets
|
|
@@ -247,7 +278,7 @@ module Cosmos
|
|
|
247
278
|
@widgets.mode
|
|
248
279
|
end
|
|
249
280
|
|
|
250
|
-
def process(
|
|
281
|
+
def process(filename_or_screen_def)
|
|
251
282
|
layout_stack = []
|
|
252
283
|
layout_stack[0] = nil
|
|
253
284
|
|
|
@@ -256,6 +287,16 @@ module Cosmos
|
|
|
256
287
|
global_settings = {}
|
|
257
288
|
global_subsettings = {}
|
|
258
289
|
|
|
290
|
+
if File.exist?(filename_or_screen_def) or !filename_or_screen_def.to_s.index("SCREEN")
|
|
291
|
+
tempfile = false
|
|
292
|
+
filename = filename_or_screen_def
|
|
293
|
+
else
|
|
294
|
+
tempfile = Tempfile.new('screen')
|
|
295
|
+
tempfile.write(filename_or_screen_def)
|
|
296
|
+
tempfile.close
|
|
297
|
+
filename = tempfile.path
|
|
298
|
+
end
|
|
299
|
+
|
|
259
300
|
begin
|
|
260
301
|
parser = ConfigParser.new("http://cosmosrb.com/docs/screens/")
|
|
261
302
|
parser.instance_variable_set(:@original_target_name, @original_target_name)
|
|
@@ -299,6 +340,7 @@ module Cosmos
|
|
|
299
340
|
# to the stack and that class doesn't have a complete method.
|
|
300
341
|
current_widget.complete() if current_widget.respond_to? :complete
|
|
301
342
|
when 'SETTING'
|
|
343
|
+
next unless current_widget
|
|
302
344
|
parser.verify_num_parameters(1, nil, "#{keyword} <Setting Name> <Setting Values... (optional)>")
|
|
303
345
|
if parameters.length > 1
|
|
304
346
|
current_widget.set_setting(parameters[0], parameters[1..-1])
|
|
@@ -306,6 +348,7 @@ module Cosmos
|
|
|
306
348
|
current_widget.set_setting(parameters[0], [])
|
|
307
349
|
end
|
|
308
350
|
when 'SUBSETTING'
|
|
351
|
+
next unless current_widget
|
|
309
352
|
parser.verify_num_parameters(2, nil, "#{keyword} <Widget Index (0..?)> <Setting Name> <Setting Values... (optional)>")
|
|
310
353
|
if parameters.length > 2
|
|
311
354
|
current_widget.set_subsetting(parameters[0], parameters[1], parameters[2..-1])
|
|
@@ -322,6 +365,8 @@ module Cosmos
|
|
|
322
365
|
klass = Cosmos.require_class(parameters[0].to_s.downcase + '_widget')
|
|
323
366
|
global_subsettings[klass] ||= []
|
|
324
367
|
global_subsettings[klass] << [parameters[1]].concat(parameters[2..-1])
|
|
368
|
+
when 'STAY_ON_TOP'
|
|
369
|
+
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint)
|
|
325
370
|
else
|
|
326
371
|
current_widget = process_widget(parser, keyword, parameters, layout_stack, global_settings, global_subsettings)
|
|
327
372
|
end # case keyword
|
|
@@ -336,6 +381,8 @@ module Cosmos
|
|
|
336
381
|
end
|
|
337
382
|
shutdown()
|
|
338
383
|
return nil
|
|
384
|
+
ensure
|
|
385
|
+
tempfile.unlink if tempfile
|
|
339
386
|
end
|
|
340
387
|
|
|
341
388
|
unless @widgets.invalid.empty?
|
|
@@ -387,10 +434,14 @@ module Cosmos
|
|
|
387
434
|
parser.verify_num_parameters(3, nil, "#{keyword} <Target Name> <Packet Name> <Item Name> <Widget Settings... (optional)>")
|
|
388
435
|
begin
|
|
389
436
|
if @substitute and (@original_target_name == parameters[0].upcase or @force_substitute)
|
|
390
|
-
|
|
437
|
+
if @substitute != 'LOCAL' or parameters[1] != 'LOCAL'
|
|
438
|
+
System.telemetry.packet_and_item(@substitute, parameters[1], parameters[2])
|
|
439
|
+
end
|
|
391
440
|
widget = klass.new(layout_stack[-1], @substitute, *parameters[1..(parameters.length - 1)])
|
|
392
441
|
else
|
|
393
|
-
|
|
442
|
+
if parameters[0] != 'LOCAL' or parameters[1] != 'LOCAL'
|
|
443
|
+
System.telemetry.packet_and_item(*parameters[0..2])
|
|
444
|
+
end
|
|
394
445
|
widget = klass.new(layout_stack[-1], *parameters)
|
|
395
446
|
end
|
|
396
447
|
rescue => err
|
|
@@ -470,6 +521,8 @@ module Cosmos
|
|
|
470
521
|
end
|
|
471
522
|
|
|
472
523
|
self.dispose
|
|
524
|
+
|
|
525
|
+
@window = nil
|
|
473
526
|
end
|
|
474
527
|
|
|
475
528
|
def get_named_widget(widget_name)
|
|
@@ -488,6 +541,15 @@ module Cosmos
|
|
|
488
541
|
@widgets.graceful_kill
|
|
489
542
|
end
|
|
490
543
|
|
|
544
|
+
def close
|
|
545
|
+
Qt.execute_in_main_thread(true) do
|
|
546
|
+
if @window
|
|
547
|
+
super()
|
|
548
|
+
@window = nil
|
|
549
|
+
end
|
|
550
|
+
end
|
|
551
|
+
end
|
|
552
|
+
|
|
491
553
|
def self.open_screens
|
|
492
554
|
@@open_screens
|
|
493
555
|
end
|
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
|
|
11
11
|
require 'cosmos'
|
|
12
12
|
Cosmos.catch_fatal_exception do
|
|
13
|
-
require 'cosmos/script'
|
|
14
|
-
require 'cosmos/tools/tlm_viewer/screen'
|
|
15
13
|
require 'cosmos/gui/qt_tool'
|
|
16
14
|
require 'cosmos/gui/dialogs/splash'
|
|
17
15
|
require 'cosmos/gui/dialogs/progress_dialog'
|
|
18
16
|
require 'cosmos/gui/dialogs/select_dialog'
|
|
19
17
|
require 'cosmos/gui/widgets/full_text_search_line_edit'
|
|
20
18
|
require 'cosmos/tools/tlm_viewer/tlm_viewer_config'
|
|
19
|
+
require 'cosmos/tools/tlm_viewer/screen'
|
|
20
|
+
require 'cosmos/script'
|
|
21
21
|
require 'find'
|
|
22
22
|
require 'fileutils'
|
|
23
23
|
end
|
|
@@ -53,13 +53,19 @@ module Cosmos
|
|
|
53
53
|
@@instance = nil
|
|
54
54
|
|
|
55
55
|
def self.instance
|
|
56
|
+
unless @@instance
|
|
57
|
+
_, options = create_default_options()
|
|
58
|
+
options.listen = false
|
|
59
|
+
options.show_main = false
|
|
60
|
+
TlmViewer.new(options)
|
|
61
|
+
end
|
|
56
62
|
@@instance
|
|
57
63
|
end
|
|
58
64
|
|
|
59
65
|
def self.load_config(filename)
|
|
60
66
|
raise "Configuration file #{filename} does not exist." unless filename && File.exist?(filename)
|
|
61
67
|
|
|
62
|
-
# Find all screen files so we can calculate
|
|
68
|
+
# Find all screen files so we can calculate hashing sum
|
|
63
69
|
tlmviewer_files = [filename, System.initial_filename]
|
|
64
70
|
additional_data = ''
|
|
65
71
|
System.targets.each do |target_name, target|
|
|
@@ -79,9 +85,13 @@ module Cosmos
|
|
|
79
85
|
end
|
|
80
86
|
end
|
|
81
87
|
end
|
|
82
|
-
# Calculate
|
|
83
|
-
|
|
84
|
-
|
|
88
|
+
# Calculate the hashing sum and attempt to load marshal file
|
|
89
|
+
hashing_result = Cosmos.hash_files(tlmviewer_files, additional_data, System.hashing_algorithm)
|
|
90
|
+
# Only use at most, 32 characters of the hex
|
|
91
|
+
hash_string = hashing_result.hexdigest
|
|
92
|
+
hash_string = hash_string[-32..-1] if hash_string.length >= 32
|
|
93
|
+
|
|
94
|
+
marshal_filename = File.join(System.paths['TMP'], "tlmviewer_#{hash_string}.bin")
|
|
85
95
|
config = Cosmos.marshal_load(marshal_filename)
|
|
86
96
|
unless config
|
|
87
97
|
# Marshal file load failed - Manually load configuration
|
|
@@ -114,12 +124,14 @@ module Cosmos
|
|
|
114
124
|
|
|
115
125
|
Splash.execute(self) do |splash|
|
|
116
126
|
ConfigParser.splash = splash
|
|
117
|
-
|
|
127
|
+
if options.show_main
|
|
128
|
+
splash.message = "Displaying requested screens"
|
|
118
129
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
130
|
+
# Startup desired screens once we're running
|
|
131
|
+
@tlm_viewer_config.screen_infos.each do |screen_full_name, screen_info|
|
|
132
|
+
if screen_info.show_on_startup
|
|
133
|
+
display(screen_full_name, screen_info.x_pos, screen_info.y_pos)
|
|
134
|
+
end
|
|
123
135
|
end
|
|
124
136
|
end
|
|
125
137
|
|
|
@@ -134,7 +146,7 @@ module Cosmos
|
|
|
134
146
|
'clear_all']
|
|
135
147
|
@json_drb.method_whitelist = whitelist
|
|
136
148
|
begin
|
|
137
|
-
@json_drb.start_service System.listen_hosts['TLMVIEWER_API'], port, self
|
|
149
|
+
@json_drb.start_service System.listen_hosts['TLMVIEWER_API'], port, self, 1000, System
|
|
138
150
|
rescue Exception
|
|
139
151
|
raise FatalError.new("Error starting JsonDRb on port #{port}.\nPerhaps a Telemetry Viewer is already running?")
|
|
140
152
|
end
|
|
@@ -145,6 +157,7 @@ module Cosmos
|
|
|
145
157
|
@all_telemetry = System.telemetry.all_item_strings(false, splash)
|
|
146
158
|
|
|
147
159
|
Qt.execute_in_main_thread(true) do
|
|
160
|
+
toggle_replay_mode() if options.replay
|
|
148
161
|
@search_box.completion_list = @tlm_viewer_config.completion_list
|
|
149
162
|
@search_box.callback = lambda do |tlm|
|
|
150
163
|
mapping = @tlm_viewer_config.tlm_to_screen_mapping[tlm]
|
|
@@ -158,38 +171,40 @@ module Cosmos
|
|
|
158
171
|
|
|
159
172
|
ConfigParser.splash = nil
|
|
160
173
|
end
|
|
174
|
+
|
|
175
|
+
hide() unless options.show_main
|
|
161
176
|
end
|
|
162
177
|
|
|
163
178
|
def initialize_actions
|
|
164
179
|
super()
|
|
165
180
|
|
|
166
181
|
# File actions
|
|
167
|
-
@file_save = Qt::Action.new(Cosmos.get_icon('save.png'),
|
|
168
|
-
@file_save_keyseq = Qt::KeySequence.new(
|
|
182
|
+
@file_save = Qt::Action.new(Cosmos.get_icon('save.png'), '&Save Configuration', self)
|
|
183
|
+
@file_save_keyseq = Qt::KeySequence.new('Ctrl+S')
|
|
169
184
|
@file_save.shortcut = @file_save_keyseq
|
|
170
|
-
@file_save.statusTip =
|
|
185
|
+
@file_save.statusTip = 'Save all screen positions'
|
|
171
186
|
@file_save.connect(SIGNAL('triggered()')) { file_save() }
|
|
172
187
|
|
|
173
|
-
@file_generate = Qt::Action.new(
|
|
174
|
-
@file_generate_keyseq = Qt::KeySequence.new(
|
|
188
|
+
@file_generate = Qt::Action.new('&Generate Screens', self)
|
|
189
|
+
@file_generate_keyseq = Qt::KeySequence.new('Ctrl+G')
|
|
175
190
|
@file_generate.shortcut = @file_generate_keyseq
|
|
176
|
-
@file_generate.statusTip =
|
|
191
|
+
@file_generate.statusTip = 'Generate screen definition files'
|
|
177
192
|
@file_generate.connect(SIGNAL('triggered()')) { file_generate() }
|
|
178
193
|
|
|
179
|
-
@file_audit = Qt::Action.new(
|
|
180
|
-
@file_audit_keyseq = Qt::KeySequence.new(
|
|
194
|
+
@file_audit = Qt::Action.new('Audi&t Screens vs Tlm', self)
|
|
195
|
+
@file_audit_keyseq = Qt::KeySequence.new('Ctrl+T')
|
|
181
196
|
@file_audit.shortcut = @file_audit_keyseq
|
|
182
|
-
@file_audit.statusTip =
|
|
197
|
+
@file_audit.statusTip = 'Create a report listing which telemetry points are not on screens'
|
|
183
198
|
@file_audit.connect(SIGNAL('triggered()')) { file_audit() }
|
|
184
199
|
|
|
185
|
-
@replay_action = Qt::Action.new(
|
|
186
|
-
@replay_action.statusTip =
|
|
200
|
+
@replay_action = Qt::Action.new('Toggle Replay Mode', self)
|
|
201
|
+
@replay_action.statusTip = 'Toggle Replay Mode'
|
|
187
202
|
@replay_action.connect(SIGNAL('triggered()')) { toggle_replay_mode() }
|
|
188
203
|
end
|
|
189
204
|
|
|
190
205
|
def initialize_menus(options)
|
|
191
206
|
# File Menu
|
|
192
|
-
@file_menu = menuBar.addMenu(
|
|
207
|
+
@file_menu = menuBar.addMenu('&File')
|
|
193
208
|
@file_menu.addAction(@file_save)
|
|
194
209
|
@file_menu.addAction(@file_generate)
|
|
195
210
|
@file_menu.addAction(@file_audit)
|
|
@@ -546,36 +561,36 @@ module Cosmos
|
|
|
546
561
|
options.title = 'Telemetry Viewer'
|
|
547
562
|
options.screen = nil
|
|
548
563
|
options.listen = true
|
|
549
|
-
options.
|
|
564
|
+
options.show_main = true
|
|
550
565
|
options.restore_size = false
|
|
551
566
|
options.production = false
|
|
567
|
+
options.replay = false
|
|
568
|
+
options.config_file = true # config_file is required
|
|
552
569
|
|
|
553
570
|
option_parser.separator "Telemetry Viewer Specific Options:"
|
|
554
|
-
option_parser.on("-
|
|
555
|
-
option_parser.on("-s", "--screen FILE", "Start up the specified screen") { |arg| options.screen = arg }
|
|
571
|
+
option_parser.on("-s", "--screen SCREEN_NAME", "Start up the specified screen") { |arg| options.screen = arg }
|
|
556
572
|
option_parser.on("-n", "--nolisten", "Don't listen for requests") do
|
|
557
573
|
options.listen = false
|
|
558
574
|
options.title << ' : Not Listening'
|
|
559
575
|
end
|
|
560
|
-
option_parser.on("-p", "--production", "Run
|
|
576
|
+
option_parser.on("-p", "--production", "Run Telemetry Viewer in production mode which disables the edit buttons.") do |arg|
|
|
561
577
|
options.production = true
|
|
562
578
|
end
|
|
579
|
+
option_parser.on("--replay", "Run Telemetry Viewer in Replay mode") do
|
|
580
|
+
options.replay = true
|
|
581
|
+
end
|
|
563
582
|
option_parser.parse!(ARGV)
|
|
564
583
|
end
|
|
565
584
|
|
|
566
585
|
if options.screen
|
|
586
|
+
normalize_config_options(options)
|
|
567
587
|
application = nil
|
|
568
588
|
begin
|
|
569
589
|
QtTool.redirect_io
|
|
570
590
|
System.telemetry
|
|
571
591
|
application = Qt::Application.new(ARGV)
|
|
572
592
|
application.addLibraryPath(Qt::PLUGIN_PATH) if Kernel.is_windows?
|
|
573
|
-
|
|
574
|
-
filename = File.join(::Cosmos::USERPATH, 'config', 'tools', 'tlm_viewer', options.config_file)
|
|
575
|
-
else
|
|
576
|
-
filename = File.join(::Cosmos::USERPATH, 'config', 'tools', 'tlm_viewer', 'tlm_viewer.txt')
|
|
577
|
-
end
|
|
578
|
-
tlm_viewer_config = load_config(filename)
|
|
593
|
+
tlm_viewer_config = load_config(options.config_file)
|
|
579
594
|
screen_info = tlm_viewer_config.screen_infos[options.screen.upcase]
|
|
580
595
|
raise "Unknown screen: #{options.screen.upcase}" unless screen_info
|
|
581
596
|
if not options.auto_position
|
|
@@ -583,6 +598,8 @@ module Cosmos
|
|
|
583
598
|
else
|
|
584
599
|
screen_info.screen = Screen.new(screen_info.full_name, screen_info.filename, nil, :REALTIME, screen_info.x_pos, screen_info.y_pos, screen_info.original_target_name, screen_info.substitute, screen_info.force_substitute, true)
|
|
585
600
|
end
|
|
601
|
+
set_replay_mode(true) if options.replay
|
|
602
|
+
Screen.update_replay_mode
|
|
586
603
|
application.exec
|
|
587
604
|
rescue Exception => error
|
|
588
605
|
unless error.class == SystemExit or error.class == Interrupt
|