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
|
@@ -102,6 +102,7 @@ module Cosmos
|
|
|
102
102
|
processed_text = ''
|
|
103
103
|
processed_text << '*' * 80 << "\n"
|
|
104
104
|
processed_text << "* #{packet.target_name} #{packet.packet_name}\n"
|
|
105
|
+
processed_text << "* Packet Time: #{packet.packet_time.formatted}\n" if packet.packet_time
|
|
105
106
|
processed_text << "* Received Time: #{packet.received_time.formatted}\n" if packet.received_time
|
|
106
107
|
processed_text << "* Received Count: #{packet.received_count}\n"
|
|
107
108
|
processed_text << '*' * 80 << "\n"
|
|
@@ -12,19 +12,15 @@ require 'cosmos'
|
|
|
12
12
|
require 'cosmos/tools/data_viewer/data_viewer_component'
|
|
13
13
|
|
|
14
14
|
module Cosmos
|
|
15
|
-
|
|
16
|
-
# DumpComponent class
|
|
17
|
-
#
|
|
18
|
-
# This class displays packets as raw hex values
|
|
19
|
-
#
|
|
15
|
+
# Displays packets as raw hex values
|
|
20
16
|
class DumpComponent < DataViewerComponent
|
|
21
|
-
|
|
22
17
|
# Processes the given packet. No gui interaction should be done in this
|
|
23
18
|
# method. Override this method for other components.
|
|
24
19
|
def process_packet (packet)
|
|
25
20
|
processed_text = ''
|
|
26
21
|
processed_text << '*' * 80 << "\n"
|
|
27
22
|
processed_text << "* #{packet.target_name} #{packet.packet_name}\n"
|
|
23
|
+
processed_text << "* Packet Time: #{packet.packet_time.formatted}\n" if packet.packet_time
|
|
28
24
|
processed_text << "* Received Time: #{packet.received_time.formatted}\n" if packet.received_time
|
|
29
25
|
processed_text << "* Received Count: #{packet.received_count}\n"
|
|
30
26
|
processed_text << '*' * 80 << "\n"
|
|
@@ -34,7 +30,5 @@ module Cosmos
|
|
|
34
30
|
@processed_queue << processed_text
|
|
35
31
|
end
|
|
36
32
|
end
|
|
37
|
-
|
|
38
33
|
end
|
|
39
|
-
|
|
40
|
-
end # module Cosmos
|
|
34
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'cosmos'
|
|
12
|
+
require 'cosmos/tools/data_viewer/data_viewer_component'
|
|
13
|
+
|
|
14
|
+
module Cosmos
|
|
15
|
+
# Displays strings from a telemetry item. To use this in a script
|
|
16
|
+
# you can call with inject_tlm("TGT", "PKT", "ITEM": "<R>Error text")
|
|
17
|
+
# or pass a color with inject_tlm("TGT", "PKT", "ITEM": "<grey>Error text")
|
|
18
|
+
# The color is in brackets and can be B, G, Y, R for COSMOS blue, green
|
|
19
|
+
# yellow and red or simply a color name recognized by Qt.
|
|
20
|
+
class TextComponent < DataViewerComponent
|
|
21
|
+
# @param parent [Qt::Widget] Parent widget
|
|
22
|
+
# @param tab_name [String] Name of the tab which displays this widget
|
|
23
|
+
# @param item_name [String] Name of the item to read from the packet
|
|
24
|
+
def initialize(parent, tab_name, item_name)
|
|
25
|
+
super(parent, tab_name)
|
|
26
|
+
@item_name = item_name
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Override the update_gui to display the text
|
|
30
|
+
def update_gui
|
|
31
|
+
begin
|
|
32
|
+
loop do
|
|
33
|
+
latest = @processed_queue.pop(true)
|
|
34
|
+
# Check for optional formatted date followed by COSMOS color <G>,<Y>,<R>,<B>
|
|
35
|
+
# Regex notes:
|
|
36
|
+
# ?: makes the optional date a non-matching group
|
|
37
|
+
# The \d+ after the dot matches subseconds which is followed by a space.
|
|
38
|
+
# The whole date match is optional if there is no packet.received_time.
|
|
39
|
+
# The matching group surrounds the GYRB single character set.
|
|
40
|
+
if match = latest.match(/^(?:\d{4}\/\d\d\/\d\d \d\d:\d\d:\d\d\.\d+ )?<([GYRB])>/)
|
|
41
|
+
case match.captures[0]
|
|
42
|
+
when 'G'
|
|
43
|
+
color = Cosmos::GREEN
|
|
44
|
+
when 'Y'
|
|
45
|
+
color = Cosmos::YELLOW
|
|
46
|
+
when 'R'
|
|
47
|
+
color = Cosmos::RED
|
|
48
|
+
when 'B'
|
|
49
|
+
color = Cosmos::BLUE
|
|
50
|
+
end
|
|
51
|
+
@text.appendText(latest.sub(/<.*?>/,''), color)
|
|
52
|
+
# Check for optional formatted date followed by color name
|
|
53
|
+
# See Regex notes above for more information. Note that the .*? makes the match
|
|
54
|
+
# inside the parens non greedy so it matches the first close bracket '>'
|
|
55
|
+
elsif match = latest.match(/^(?:\d{4}\/\d\d\/\d\d \d\d:\d\d:\d\d\.\d+ )?<(.*?)>/)
|
|
56
|
+
@text.appendText(latest.sub(/<.*?>/,''), Cosmos.getColor(match.captures[0]))
|
|
57
|
+
else # add black text
|
|
58
|
+
@text.appendText(latest)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
rescue ThreadError
|
|
62
|
+
# Nothing to do
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Add the time and the item to the queue
|
|
67
|
+
def process_packet(packet)
|
|
68
|
+
processed_text = ''
|
|
69
|
+
processed_text << "#{packet.received_time.formatted} " if packet.received_time
|
|
70
|
+
processed_text << packet.read(@item_name)
|
|
71
|
+
# Ensure that queue does not grow infinitely while paused
|
|
72
|
+
if @processed_queue.length < 1000
|
|
73
|
+
@processed_queue << processed_text
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -17,12 +17,10 @@ Cosmos.catch_fatal_exception do
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
module Cosmos
|
|
20
|
-
|
|
21
20
|
# Creates command and telemetry handbooks from the COSMOS definitions in
|
|
22
21
|
# both HTML and PDF format.
|
|
23
22
|
class HandbookCreator < QtTool
|
|
24
|
-
|
|
25
|
-
def initialize (options)
|
|
23
|
+
def initialize(options)
|
|
26
24
|
super(options) # MUST BE FIRST - All code before super is executed twice in RubyQt Based classes
|
|
27
25
|
Cosmos.load_cosmos_icon("handbook_creator.png")
|
|
28
26
|
|
|
@@ -40,52 +38,35 @@ module Cosmos
|
|
|
40
38
|
end
|
|
41
39
|
end
|
|
42
40
|
|
|
41
|
+
# Create the application menu actions
|
|
43
42
|
def initialize_actions
|
|
44
43
|
super()
|
|
45
|
-
@hide_ignored_action = Qt::Action.new(
|
|
46
|
-
@hide_ignored_keyseq = Qt::KeySequence.new(
|
|
44
|
+
@hide_ignored_action = Qt::Action.new('&Hide Ignored Items', self)
|
|
45
|
+
@hide_ignored_keyseq = Qt::KeySequence.new('Ctrl+H')
|
|
47
46
|
@hide_ignored_action.shortcut = @hide_ignored_keyseq
|
|
48
|
-
@hide_ignored_action.statusTip =
|
|
47
|
+
@hide_ignored_action.statusTip = 'Do not include ignored items in command and telemetry handbooks'
|
|
49
48
|
@hide_ignored_action.setCheckable(true)
|
|
50
49
|
@hide_ignored_action.setChecked(false)
|
|
50
|
+
|
|
51
|
+
@copy_assets_action = Qt::Action.new('&Copy Assets to Output', self)
|
|
52
|
+
@copy_assets_action.statusTip = 'Copy the default assets to the output directory'
|
|
53
|
+
@copy_assets_action.connect(SIGNAL('triggered()')) { copy_assets(true) }
|
|
51
54
|
end
|
|
52
55
|
|
|
56
|
+
# Create the application menus and add the actions to the menu
|
|
53
57
|
def initialize_menus
|
|
54
|
-
|
|
55
|
-
@file_menu = menuBar.addMenu(tr('&File'))
|
|
58
|
+
@file_menu = menuBar.addMenu('&File')
|
|
56
59
|
@file_menu.addAction(@hide_ignored_action)
|
|
60
|
+
@file_menu.addAction(@copy_assets_action)
|
|
57
61
|
@file_menu.addAction(@exit_action)
|
|
58
62
|
|
|
59
|
-
# Help Menu
|
|
60
63
|
@about_string = "Handbook Creator creates Command and Telemetry Handbooks"
|
|
61
64
|
initialize_help_menu()
|
|
62
65
|
end
|
|
63
66
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
ProgressDialog.execute(self, 'PDF Creation Progress', 700, 600, true, false, true, true, false) do |progress_dialog|
|
|
67
|
-
begin
|
|
68
|
-
success = @config.create_pdf(hide_ignored, progress_dialog)
|
|
69
|
-
if success
|
|
70
|
-
msg = "\n\n"
|
|
71
|
-
msg << "HTML and " if both
|
|
72
|
-
msg << "PDF Handbooks created successfully"
|
|
73
|
-
progress_dialog.append_text(msg)
|
|
74
|
-
else
|
|
75
|
-
progress_dialog.append_text("\nPDF Handbooks could not be created.\n\nIs wkhtmltopdf in your PATH and are all existing pdfs closed?\n\nUsing version 0.11.0_rc1 of wkhtmltox is recommended which can be found at: http://download.gna.org/wkhtmltopdf/obsolete/\n\nVersion 0.12.x has shown issues with Handbook Creator's default templates.")
|
|
76
|
-
end
|
|
77
|
-
rescue => error
|
|
78
|
-
progress_dialog.append_text("\n\nError processing:\n#{error.formatted}")
|
|
79
|
-
ensure
|
|
80
|
-
progress_dialog.complete
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
rescue Exception => err
|
|
84
|
-
Cosmos.handle_critical_exception(err)
|
|
85
|
-
end
|
|
86
|
-
|
|
67
|
+
# Create the application with several buttons to create handbooks (HTML & PDF)
|
|
68
|
+
# and open the generated HTML output in a browser.
|
|
87
69
|
def initialize_central_widget
|
|
88
|
-
# Create the central widget
|
|
89
70
|
@central_widget = Qt::Widget.new
|
|
90
71
|
setCentralWidget(@central_widget)
|
|
91
72
|
|
|
@@ -95,6 +76,7 @@ module Cosmos
|
|
|
95
76
|
@html_button.setStyleSheet("text-align:left")
|
|
96
77
|
@html_button.connect(SIGNAL('clicked()')) do
|
|
97
78
|
begin
|
|
79
|
+
copy_assets()
|
|
98
80
|
@config.create_html(@hide_ignored_action.isChecked)
|
|
99
81
|
Qt::MessageBox.information(self, 'Done', 'HTML Handbooks created successfully')
|
|
100
82
|
rescue Exception => err
|
|
@@ -106,6 +88,7 @@ module Cosmos
|
|
|
106
88
|
@pdf_button = Qt::PushButton.new(Cosmos.get_icon('pdf-32.png'), 'Create PDF Handbooks')
|
|
107
89
|
@pdf_button.setStyleSheet("text-align:left")
|
|
108
90
|
@pdf_button.connect(SIGNAL('clicked()')) do
|
|
91
|
+
copy_assets()
|
|
109
92
|
create_pdfs(false, @hide_ignored_action.isChecked)
|
|
110
93
|
end
|
|
111
94
|
@top_layout.addWidget(@pdf_button)
|
|
@@ -114,6 +97,7 @@ module Cosmos
|
|
|
114
97
|
@html_pdf_button.setStyleSheet("text-align:left")
|
|
115
98
|
@html_pdf_button.connect(SIGNAL('clicked()')) do
|
|
116
99
|
begin
|
|
100
|
+
copy_assets()
|
|
117
101
|
@config.create_html(@hide_ignored_action.isChecked)
|
|
118
102
|
create_pdfs(true, @hide_ignored_action.isChecked)
|
|
119
103
|
rescue Exception => err
|
|
@@ -136,21 +120,63 @@ module Cosmos
|
|
|
136
120
|
@central_widget.setLayout(@top_layout)
|
|
137
121
|
end
|
|
138
122
|
|
|
139
|
-
#
|
|
123
|
+
# Copy the assets (css, fonts, images, javascript) from the project config directory
|
|
124
|
+
# into the outputs/handbooks directory. When called as a part of generating the output
|
|
125
|
+
# files this copy will not occur if the assets directory already exists in case it has
|
|
126
|
+
# been modified by the user. This is also called from a menu option which can copy over
|
|
127
|
+
# existing output assets if permitted by the user.
|
|
128
|
+
def copy_assets(menu_request = false)
|
|
129
|
+
source_path = File.join(::Cosmos::USERPATH,'config','tools','handbook_creator','assets')
|
|
130
|
+
output_path = File.join(System.paths['HANDBOOKS'], 'assets')
|
|
131
|
+
if menu_request
|
|
132
|
+
if File.exist?(output_path)
|
|
133
|
+
if Qt::MessageBox.warning(self, "Warning!", "#{output_path} already exists. Overwrite?",
|
|
134
|
+
Qt::MessageBox::Yes | Qt::MessageBox::No) == Qt::MessageBox::No
|
|
135
|
+
return
|
|
136
|
+
else
|
|
137
|
+
FileUtils.cp_r(source_path, System.paths['HANDBOOKS'])
|
|
138
|
+
end
|
|
139
|
+
else
|
|
140
|
+
FileUtils.cp_r(source_path, System.paths['HANDBOOKS'])
|
|
141
|
+
end
|
|
142
|
+
else
|
|
143
|
+
FileUtils.cp_r(source_path, System.paths['HANDBOOKS']) unless File.exist?(output_path)
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
# Create the PDFs inside a progress dialog as this action takes a significant amount of time
|
|
148
|
+
def create_pdfs(both, hide_ignored)
|
|
149
|
+
success = false
|
|
150
|
+
ProgressDialog.execute(self, 'PDF Creation Progress', 700, 600, true, false, true, true, false) do |progress_dialog|
|
|
151
|
+
begin
|
|
152
|
+
success = @config.create_pdf(hide_ignored, progress_dialog)
|
|
153
|
+
if success
|
|
154
|
+
msg = "\n\n"
|
|
155
|
+
msg << "HTML and " if both
|
|
156
|
+
msg << "PDF Handbooks created successfully"
|
|
157
|
+
progress_dialog.append_text(msg)
|
|
158
|
+
else
|
|
159
|
+
progress_dialog.append_text("\nPDF Handbooks could not be created.\n\nIs wkhtmltopdf in your PATH and are all existing pdfs closed?\n\nwkhtmltopdf can be found at: https://wkhtmltopdf.org/downloads.html.")
|
|
160
|
+
end
|
|
161
|
+
rescue => error
|
|
162
|
+
progress_dialog.append_text("\n\nError processing:\n#{error.formatted}")
|
|
163
|
+
ensure
|
|
164
|
+
progress_dialog.complete
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
rescue Exception => err
|
|
168
|
+
Cosmos.handle_critical_exception(err)
|
|
169
|
+
end
|
|
170
|
+
|
|
140
171
|
def self.run(option_parser = nil, options = nil)
|
|
141
172
|
Cosmos.catch_fatal_exception do
|
|
142
173
|
unless option_parser and options
|
|
143
174
|
option_parser, options = create_default_options()
|
|
144
175
|
options.title = "Handbook Creator"
|
|
145
|
-
options.config_file =
|
|
146
|
-
option_parser.on("-c", "--config FILE", "Use the specified configuration file") do |arg|
|
|
147
|
-
options.config_file = File.join(Cosmos::USERPATH, 'config', 'tools', 'handbook_creator', arg)
|
|
148
|
-
end
|
|
176
|
+
options.config_file = true # config_file is required
|
|
149
177
|
end
|
|
150
178
|
super(option_parser, options)
|
|
151
179
|
end
|
|
152
180
|
end
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
end # module Cosmos
|
|
181
|
+
end
|
|
182
|
+
end
|
|
@@ -115,7 +115,7 @@ module Cosmos
|
|
|
115
115
|
cover, cover_file = make_pdf_detail('cover', @pdf_cover_filename, @pdf_cover_title, target_name)
|
|
116
116
|
header, header_file = make_pdf_detail('--header-spacing 3 --header-html', @pdf_header_filename, @pdf_header_title, target_name)
|
|
117
117
|
footer, footer_file = make_pdf_detail('--footer-spacing 3 --footer-html', @pdf_footer_filename, @pdf_footer_title, target_name)
|
|
118
|
-
system_call = "wkhtmltopdf -L #{@pdf_side_margin} -R #{@pdf_side_margin} -T #{@pdf_top_margin} -B #{@pdf_bottom_margin} -s Letter #{header} #{footer} #{cover} #{@pdf_toc} \"#{tmp_html_file.path}\" \"#{File.dirname(filename)}/#{File.basename(filename, '.*')}.pdf\""
|
|
118
|
+
system_call = "wkhtmltopdf --enable-local-file-access -L #{@pdf_side_margin} -R #{@pdf_side_margin} -T #{@pdf_top_margin} -B #{@pdf_bottom_margin} -s Letter #{header} #{footer} #{cover} #{@pdf_toc} \"#{tmp_html_file.path}\" \"#{File.dirname(filename)}/#{File.basename(filename, '.*')}.pdf\""
|
|
119
119
|
status = nil
|
|
120
120
|
begin
|
|
121
121
|
Cosmos.set_working_dir(System.paths['HANDBOOKS']) do
|
|
@@ -40,7 +40,7 @@ module Cosmos
|
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def initialize_menus
|
|
43
|
-
@file_menu = menuBar().addMenu(
|
|
43
|
+
@file_menu = menuBar().addMenu('&File')
|
|
44
44
|
@file_menu.addAction(@exit_action)
|
|
45
45
|
initialize_help_menu()
|
|
46
46
|
end
|
|
@@ -181,6 +181,7 @@ module Cosmos
|
|
|
181
181
|
unless option_parser and options
|
|
182
182
|
option_parser, options = create_default_options()
|
|
183
183
|
options.title = 'Launcher'
|
|
184
|
+
options.config_file = true # config_file is required
|
|
184
185
|
end
|
|
185
186
|
option_parser.separator "Launcher Specific Options:"
|
|
186
187
|
option_parser.on("-m", "--mini", "Create mini launcher") do |arg|
|
|
@@ -84,11 +84,13 @@ module Cosmos
|
|
|
84
84
|
# @param update_item_callback [Proc] Method to update an item in the GUI
|
|
85
85
|
# @param clear_items_callback [Proc] Method to clear all items in the GUI
|
|
86
86
|
# @param remove_item_callback [Proc] Method to remove an item from the GUI
|
|
87
|
-
|
|
87
|
+
# @param clear_log_callback [Proc] Method to clear the log tab in the GUI
|
|
88
|
+
def initialize(new_item_callback, update_item_callback, clear_items_callback, remove_item_callback, clear_log_callback)
|
|
88
89
|
@new_item_callback = new_item_callback
|
|
89
90
|
@update_item_callback = update_item_callback
|
|
90
91
|
@clear_items_callback = clear_items_callback
|
|
91
92
|
@remove_item_callback = remove_item_callback
|
|
93
|
+
@clear_log_callback = clear_log_callback
|
|
92
94
|
@ignored = []
|
|
93
95
|
@ignored_stale = []
|
|
94
96
|
@items = {}
|
|
@@ -98,15 +100,21 @@ module Cosmos
|
|
|
98
100
|
@limits_set = :DEFAULT
|
|
99
101
|
@colorblind = false
|
|
100
102
|
@monitor_operational = true
|
|
103
|
+
@toggle_mode = false
|
|
101
104
|
request_reset()
|
|
102
105
|
end
|
|
103
106
|
|
|
104
107
|
# Request that the limits items be refreshed from the server
|
|
105
|
-
def request_reset
|
|
106
|
-
@toggle_mode = toggle_mode
|
|
108
|
+
def request_reset
|
|
107
109
|
@initialized = false
|
|
108
110
|
end
|
|
109
111
|
|
|
112
|
+
# Switch between realtime and replay modes
|
|
113
|
+
def toggle_mode
|
|
114
|
+
@toggle_mode = true
|
|
115
|
+
request_reset()
|
|
116
|
+
end
|
|
117
|
+
|
|
110
118
|
# Remove an item and optionally ignore it which means don't display it
|
|
111
119
|
# again if it goes out of limits and don't have it count towards the
|
|
112
120
|
# overall limit state. Still display its limits transitions in the log.
|
|
@@ -219,8 +227,8 @@ module Cosmos
|
|
|
219
227
|
|
|
220
228
|
case type
|
|
221
229
|
when :LIMITS_CHANGE
|
|
222
|
-
# The most common event: target, packet, item, state
|
|
223
|
-
result = limits_change(data[0], data[1], data[2], data[4])
|
|
230
|
+
# The most common event: target, packet, item, state, packet_time
|
|
231
|
+
result = limits_change(data[0], data[1], data[2], data[4], data[5])
|
|
224
232
|
|
|
225
233
|
when :LIMITS_SET
|
|
226
234
|
# Check if the overall limits set changed. If so we need to reset
|
|
@@ -350,12 +358,16 @@ module Cosmos
|
|
|
350
358
|
@items = {}
|
|
351
359
|
@out_of_limits = []
|
|
352
360
|
@stale = []
|
|
353
|
-
@limits_set = get_limits_set()
|
|
354
361
|
unsubscribe_limits_events(@queue_id) if @queue_id
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
362
|
+
if @toggle_mode
|
|
363
|
+
set_replay_mode(!get_replay_mode())
|
|
364
|
+
@clear_log_callback.call
|
|
365
|
+
@toggle_mode = false
|
|
366
|
+
end
|
|
358
367
|
@clear_items_callback.call
|
|
368
|
+
|
|
369
|
+
@limits_set = get_limits_set()
|
|
370
|
+
@queue_id = subscribe_limits_events(100000)
|
|
359
371
|
get_out_of_limits().each do |target, packet, item, state|
|
|
360
372
|
limits_change(target, packet, item, state)
|
|
361
373
|
end
|
|
@@ -368,7 +380,7 @@ module Cosmos
|
|
|
368
380
|
|
|
369
381
|
# Process a limits_change event by recoloring out of limits events
|
|
370
382
|
# and creating a log message.
|
|
371
|
-
def limits_change(target_name, packet_name, item_name, state)
|
|
383
|
+
def limits_change(target_name, packet_name, item_name, state, packet_time = nil)
|
|
372
384
|
message = ''
|
|
373
385
|
color = :BLACK
|
|
374
386
|
item = [target_name, packet_name, item_name]
|
|
@@ -392,9 +404,13 @@ module Cosmos
|
|
|
392
404
|
when :BLUE
|
|
393
405
|
message << "INFO: "
|
|
394
406
|
color = :BLUE
|
|
407
|
+
when nil
|
|
408
|
+
return nil
|
|
395
409
|
end
|
|
396
410
|
value = tlm(target_name, packet_name, item_name)
|
|
397
|
-
|
|
411
|
+
packet_time_str = ""
|
|
412
|
+
packet_time_str = " (#{packet_time.sys.formatted})" if packet_time
|
|
413
|
+
message << "#{target_name} #{packet_name} #{item_name} = #{value} is #{state}#{packet_time_str}\n"
|
|
398
414
|
[message, color]
|
|
399
415
|
end
|
|
400
416
|
|
|
@@ -530,12 +546,12 @@ module Cosmos
|
|
|
530
546
|
initialize_central_widget()
|
|
531
547
|
complete_initialize()
|
|
532
548
|
|
|
533
|
-
@limits_items = LimitsItems.new(
|
|
534
|
-
method(:
|
|
549
|
+
@limits_items = LimitsItems.new(method(:new_gui_item), method(:update_gui_item), \
|
|
550
|
+
method(:clear_gui_items), method(:remove_gui_item), method(:clear_log))
|
|
535
551
|
if options.config_file
|
|
536
552
|
begin
|
|
537
553
|
result = @limits_items.open_config(options.config_file)
|
|
538
|
-
statusBar.showMessage(
|
|
554
|
+
statusBar.showMessage(result)
|
|
539
555
|
rescue => error
|
|
540
556
|
ExceptionDialog.new(self, error, "Error parsing #{@options.config_file}")
|
|
541
557
|
end
|
|
@@ -543,50 +559,51 @@ module Cosmos
|
|
|
543
559
|
|
|
544
560
|
limits_thread()
|
|
545
561
|
value_thread()
|
|
562
|
+
toggle_replay_mode() if options.replay
|
|
546
563
|
end
|
|
547
564
|
|
|
548
565
|
# Initialize all the actions in the application Menu
|
|
549
566
|
def initialize_actions
|
|
550
567
|
super
|
|
551
568
|
|
|
552
|
-
@options_action = Qt::Action.new(
|
|
553
|
-
@options_action.statusTip =
|
|
569
|
+
@options_action = Qt::Action.new('O&ptions', self)
|
|
570
|
+
@options_action.statusTip = 'Open the options dialog'
|
|
554
571
|
@options_action.connect(SIGNAL('triggered()')) { show_options_dialog() }
|
|
555
572
|
|
|
556
|
-
@reset_action = Qt::Action.new(
|
|
557
|
-
@reset_action_keyseq = Qt::KeySequence.new(
|
|
573
|
+
@reset_action = Qt::Action.new('&Reset', self)
|
|
574
|
+
@reset_action_keyseq = Qt::KeySequence.new('Ctrl+R')
|
|
558
575
|
@reset_action.shortcut = @reset_action_keyseq
|
|
559
|
-
@reset_action.statusTip =
|
|
576
|
+
@reset_action.statusTip = 'Reset connection and clear all items. This does not modify the ignored items.'
|
|
560
577
|
@reset_action.connect(SIGNAL('triggered()')) { @limits_items.request_reset() }
|
|
561
578
|
|
|
562
|
-
@replay_action = Qt::Action.new(
|
|
563
|
-
@replay_action.statusTip =
|
|
579
|
+
@replay_action = Qt::Action.new('Toggle Replay Mode', self)
|
|
580
|
+
@replay_action.statusTip = 'Toggle Replay Mode'
|
|
564
581
|
@replay_action.connect(SIGNAL('triggered()')) { toggle_replay_mode() }
|
|
565
582
|
|
|
566
583
|
@open_ignored_action = Qt::Action.new(Cosmos.get_icon('open.png'),
|
|
567
|
-
|
|
568
|
-
@open_ignored_action_keyseq = Qt::KeySequence.new(
|
|
584
|
+
'&Open Config', self)
|
|
585
|
+
@open_ignored_action_keyseq = Qt::KeySequence.new('Ctrl+O')
|
|
569
586
|
@open_ignored_action.shortcut = @open_ignored_action_keyseq
|
|
570
|
-
@open_ignored_action.statusTip =
|
|
587
|
+
@open_ignored_action.statusTip = 'Open ignored telemetry items configuration file'
|
|
571
588
|
@open_ignored_action.connect(SIGNAL('triggered()')) { open_config_file() }
|
|
572
589
|
|
|
573
590
|
@save_ignored_action = Qt::Action.new(Cosmos.get_icon('save.png'),
|
|
574
|
-
|
|
575
|
-
@save_ignored_action_keyseq = Qt::KeySequence.new(
|
|
591
|
+
'&Save Config', self)
|
|
592
|
+
@save_ignored_action_keyseq = Qt::KeySequence.new('Ctrl+S')
|
|
576
593
|
@save_ignored_action.shortcut = @save_ignored_action_keyseq
|
|
577
|
-
@save_ignored_action.statusTip =
|
|
594
|
+
@save_ignored_action.statusTip = 'Save all ignored telemetry items in a configuration file'
|
|
578
595
|
@save_ignored_action.connect(SIGNAL('triggered()')) { save_config_file() }
|
|
579
596
|
|
|
580
|
-
@edit_ignored_action = Qt::Action.new(
|
|
581
|
-
@edit_ignored_action_keyseq = Qt::KeySequence.new(
|
|
597
|
+
@edit_ignored_action = Qt::Action.new('&Edit Ignored', self)
|
|
598
|
+
@edit_ignored_action_keyseq = Qt::KeySequence.new('Ctrl+E')
|
|
582
599
|
@edit_ignored_action.shortcut = @edit_ignored_action_keyseq
|
|
583
|
-
@edit_ignored_action.statusTip =
|
|
600
|
+
@edit_ignored_action.statusTip = 'Edit the ignored telemetry items list'
|
|
584
601
|
@edit_ignored_action.connect(SIGNAL('triggered()')) { edit_ignored_items() }
|
|
585
602
|
end
|
|
586
603
|
|
|
587
604
|
# Initialize the application menu bar options
|
|
588
605
|
def initialize_menus
|
|
589
|
-
@file_menu = menuBar.addMenu(
|
|
606
|
+
@file_menu = menuBar.addMenu('&File')
|
|
590
607
|
@file_menu.addAction(@open_ignored_action)
|
|
591
608
|
@file_menu.addAction(@save_ignored_action)
|
|
592
609
|
@file_menu.addAction(@edit_ignored_action)
|
|
@@ -606,7 +623,6 @@ module Cosmos
|
|
|
606
623
|
# Layout the main GUI tab widget with a view of all the out of limits items
|
|
607
624
|
# in one tab and a log tab showing all limits events.
|
|
608
625
|
def initialize_central_widget
|
|
609
|
-
|
|
610
626
|
widget = Qt::Widget.new
|
|
611
627
|
layout = Qt::VBoxLayout.new(widget)
|
|
612
628
|
setCentralWidget(widget)
|
|
@@ -703,7 +719,7 @@ module Cosmos
|
|
|
703
719
|
end
|
|
704
720
|
|
|
705
721
|
def toggle_replay_mode
|
|
706
|
-
@limits_items.
|
|
722
|
+
@limits_items.toggle_mode()
|
|
707
723
|
end
|
|
708
724
|
|
|
709
725
|
# @return [String] Fully qualified path to the configuration file
|
|
@@ -720,7 +736,7 @@ module Cosmos
|
|
|
720
736
|
"Open Configuration File", default_config_path())
|
|
721
737
|
unless filename.nil? || filename.empty?
|
|
722
738
|
result = @limits_items.open_config(filename)
|
|
723
|
-
statusBar.showMessage(
|
|
739
|
+
statusBar.showMessage(result)
|
|
724
740
|
end
|
|
725
741
|
end
|
|
726
742
|
|
|
@@ -730,7 +746,7 @@ module Cosmos
|
|
|
730
746
|
'Save As...', default_config_path(), 'Configuration Files (*.txt)')
|
|
731
747
|
unless filename.nil? || filename.empty?
|
|
732
748
|
result = @limits_items.save_config(filename)
|
|
733
|
-
statusBar.showMessage(
|
|
749
|
+
statusBar.showMessage(result)
|
|
734
750
|
@filename = filename
|
|
735
751
|
end
|
|
736
752
|
end
|
|
@@ -811,9 +827,7 @@ module Cosmos
|
|
|
811
827
|
@limits_thread = Thread.new do
|
|
812
828
|
while true
|
|
813
829
|
break if @cancel_thread
|
|
814
|
-
|
|
815
|
-
result, color = @limits_items.process_events()
|
|
816
|
-
end
|
|
830
|
+
result, color = @limits_items.process_events()
|
|
817
831
|
if result
|
|
818
832
|
update_log(result, color)
|
|
819
833
|
else
|
|
@@ -873,6 +887,10 @@ module Cosmos
|
|
|
873
887
|
end
|
|
874
888
|
end
|
|
875
889
|
|
|
890
|
+
def clear_log
|
|
891
|
+
Qt.execute_in_main_thread(true) { @log_output.clear() }
|
|
892
|
+
end
|
|
893
|
+
|
|
876
894
|
# Remove a limits item from the list and optionally ignore
|
|
877
895
|
#
|
|
878
896
|
# @param widget [Qt::Widget] Widget to remove
|
|
@@ -995,12 +1013,12 @@ module Cosmos
|
|
|
995
1013
|
options.remember_geometry = false
|
|
996
1014
|
options.title = "Limits Monitor"
|
|
997
1015
|
options.auto_size = false
|
|
998
|
-
options.config_file = nil
|
|
999
1016
|
options.production = false
|
|
1000
1017
|
options.no_prompt = false
|
|
1001
1018
|
option_parser.separator "Limits Monitor Specific Options:"
|
|
1002
|
-
|
|
1003
|
-
|
|
1019
|
+
options.replay = false
|
|
1020
|
+
option_parser.on("--replay", "Start Limits Monitor in Replay mode") do
|
|
1021
|
+
options.replay = true
|
|
1004
1022
|
end
|
|
1005
1023
|
end
|
|
1006
1024
|
|