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