cosmos 3.9.2 → 4.0.0
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/.rubocop.yml +23 -0
- data/.travis.yml +1 -0
- data/.yardopts +3 -0
- data/Gemfile +1 -1
- data/Manifest.txt +137 -52
- data/Rakefile +50 -44
- data/autohotkey/config/system/system.txt +0 -5
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +6 -1
- data/autohotkey/config/targets/INST/screens/extra.txt +19 -0
- data/autohotkey/config/targets/INST/sequences/run_sequence.txt +1 -0
- data/autohotkey/config/targets/META/screens/data.txt +12 -0
- data/autohotkey/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
- data/autohotkey/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
- data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
- data/autohotkey/config/targets/SYSTEM/screens/limits_change.txt +14 -0
- data/autohotkey/config/targets/SYSTEM/screens/meta.txt +14 -0
- data/autohotkey/config/targets/SYSTEM/target.txt +12 -0
- data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
- data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
- data/autohotkey/tools/CmdSequence +14 -0
- data/autohotkey/tools/CmdSequenceAHK +23 -0
- data/autohotkey/tools/CmdSequenceAHK2 +16 -0
- data/autohotkey/tools/cmd_extractor.ahk +2 -2
- data/autohotkey/tools/cmd_sender.ahk +4 -6
- data/autohotkey/tools/cmd_sequence.ahk +215 -0
- data/autohotkey/tools/cmd_sequence2.ahk +23 -0
- data/autohotkey/tools/data_viewer.ahk +2 -3
- data/autohotkey/tools/limits_monitor.ahk +9 -11
- data/autohotkey/tools/open_gl_builder.ahk +1 -2
- data/autohotkey/tools/packet_viewer.ahk +51 -35
- data/autohotkey/tools/replay.ahk +1 -2
- data/autohotkey/tools/script_runner.ahk +1 -2
- data/autohotkey/tools/script_runner2.ahk +1 -2
- data/autohotkey/tools/test_runner2.ahk +1 -5
- data/autohotkey/tools/test_runner3.ahk +1 -3
- data/autohotkey/tools/tlm_grapher.ahk +1 -3
- data/autohotkey/tools/tlm_grapher3.ahk +1 -2
- data/autohotkey/tools/tlm_viewer.ahk +8 -3
- data/autohotkey/tools/tlm_viewer2.ahk +2 -3
- data/autohotkey/tools/tlm_viewer5.ahk +1 -2
- data/cosmos.gemspec +26 -20
- data/data/cmd_sequence.png +0 -0
- data/data/config/_array_params.yaml +23 -0
- data/data/config/_id_items.yaml +24 -0
- data/data/config/_id_params.yaml +58 -0
- data/data/config/_interfaces.yaml +206 -0
- data/data/config/_items.yaml +20 -0
- data/data/config/_params.yaml +58 -0
- data/data/config/cmd_tlm_server.yaml +110 -0
- data/data/config/command.yaml +38 -0
- data/data/config/command_modifiers.yaml +127 -0
- data/data/config/command_telemetry.yaml +3 -0
- data/data/config/data_viewer.yaml +43 -0
- data/data/config/handbook_creator.yaml +23 -0
- data/data/config/housekeeping_params.yaml +71 -0
- data/data/config/interface_modifiers.yaml +44 -0
- data/data/config/item_modifiers.yaml +172 -0
- data/data/config/launcher.yaml +117 -0
- data/data/config/limits_monitor.yaml +53 -0
- data/data/config/linegraph_params.yaml +30 -0
- data/data/config/linegraph_plot.yaml +106 -0
- data/data/config/page_modifiers.yaml +128 -0
- data/data/config/param_item_modifiers.yaml +41 -0
- data/data/config/parameter_modifiers.yaml +144 -0
- data/data/config/protocols.yaml +257 -0
- data/data/config/screen.yaml +151 -0
- data/data/config/script_runner.yaml +15 -0
- data/data/config/system.yaml +153 -0
- data/data/config/table_manager.yaml +76 -0
- data/data/config/table_parameter_modifiers.yaml +9 -0
- data/data/config/target.yaml +71 -0
- data/data/config/telemetry.yaml +73 -0
- data/data/config/telemetry_modifiers.yaml +129 -0
- data/data/config/test_runner.yaml +118 -0
- data/data/config/tlm_extractor.yaml +109 -0
- data/data/config/tlm_grapher.yaml +78 -0
- data/data/config/tlm_viewer.yaml +107 -0
- data/data/config/unknown.yaml +3 -0
- data/data/config/widgets.yaml +1339 -0
- data/data/config/xy_params.yaml +50 -0
- data/data/config/xy_plot.yaml +12 -0
- data/data/config_editor.png +0 -0
- data/data/crc.txt +172 -161
- data/data/delete.png +0 -0
- data/demo/config/data/crc.txt +56 -36
- data/demo/config/data/meta_init.txt +1 -4
- data/demo/config/system/system.txt +15 -3
- data/demo/config/system/system2.txt +13 -3
- data/demo/config/targets/EXAMPLE/lib/example_interface.rb +2 -6
- data/demo/config/targets/EXAMPLE/target.txt +3 -1
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -0
- data/demo/config/targets/INST/lib/inst_dump_component.rb +34 -0
- data/demo/config/targets/INST/screens/adcs.txt +39 -15
- data/demo/config/targets/INST/screens/commanding.txt +26 -19
- data/demo/config/targets/INST/screens/spacing_box.txt +44 -0
- data/demo/config/targets/INST/screens/spacing_grid.txt +78 -0
- data/demo/config/targets/INST/screens/tabs.txt +0 -2
- data/demo/config/targets/INST/sequences/sequence.tsv +3 -0
- data/demo/config/targets/INST/tables/EventAction.csv +9 -0
- data/demo/config/targets/INST/tables/EventAction.dat +0 -0
- data/demo/config/targets/INST/tables/McConfigTable.csv +20 -0
- data/demo/config/targets/INST/tables/McConfigTable.dat +0 -0
- data/demo/config/targets/INST/target.txt +4 -0
- data/demo/config/targets/INST/tools/data_viewer/data_viewer.txt +2 -0
- data/demo/config/targets/INST/tools/data_viewer/data_viewer2.txt +2 -0
- data/demo/config/targets/INST/tools/table_manager/EventAction_def.txt +6 -0
- data/demo/config/targets/INST/tools/table_manager/McConfigTable_def.txt +38 -0
- data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -3
- data/demo/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
- data/demo/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
- data/demo/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
- data/demo/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
- data/demo/config/targets/SYSTEM/lib/limits_groups.rb +39 -0
- data/demo/config/targets/SYSTEM/screens/status.txt +1 -1
- data/demo/config/targets/SYSTEM/target.txt +12 -0
- data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +1 -1
- data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +8 -5
- data/demo/config/targets/TEMPLATED/target.txt +2 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +15 -6
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +13 -5
- data/demo/config/tools/data_viewer/data_viewer.txt +9 -0
- data/demo/config/tools/launcher/launcher.txt +9 -6
- data/demo/config/tools/launcher/launcher2.txt +16 -13
- data/demo/config/tools/launcher/launcher_mini.txt +45 -0
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +12 -11
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +12 -11
- data/demo/config/tools/test_runner/test_runner.txt +1 -1
- data/demo/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
- data/demo/lib/example_background_task.rb +9 -5
- data/demo/lib/example_target.rb +5 -15
- data/demo/lib/scpi_target.rb +4 -10
- data/demo/procedures/cosmos_api_test.rb +17 -0
- data/demo/tools/CmdSequence +16 -0
- data/demo/tools/CmdSequence.bat +9 -0
- data/demo/tools/ConfigEditor +16 -0
- data/demo/tools/ConfigEditor.bat +9 -0
- data/demo/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
- data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
- data/demo/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
- data/demo/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
- data/ext/cosmos/ext/packet/packet.c +5 -5
- data/install/config/data/crc.txt +12 -8
- data/install/config/system/system.txt +13 -3
- data/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +14 -0
- data/install/config/targets/SYSTEM/target.txt +12 -0
- data/install/tools/CmdSequence +16 -0
- data/install/tools/CmdSequence.bat +9 -0
- data/install/tools/ConfigEditor +16 -0
- data/install/tools/ConfigEditor.bat +9 -0
- data/install/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
- data/install/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
- data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
- data/install/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
- data/install/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
- data/lib/cosmos.rb +1 -1
- data/lib/cosmos/config/config_parser.rb +147 -59
- data/lib/cosmos/config/meta_config_parser.rb +57 -0
- data/lib/cosmos/conversions/polynomial_conversion.rb +20 -4
- data/lib/cosmos/conversions/unix_time_conversion.rb +4 -4
- data/lib/cosmos/core_ext/array.rb +45 -5
- data/lib/cosmos/core_ext/cosmos_io.rb +31 -15
- data/lib/cosmos/core_ext/file.rb +2 -2
- data/lib/cosmos/core_ext/kernel.rb +1 -6
- data/lib/cosmos/core_ext/objectspace.rb +0 -2
- data/lib/cosmos/core_ext/string.rb +27 -4
- data/lib/cosmos/core_ext/time.rb +39 -10
- data/lib/cosmos/gui/choosers/combobox_chooser.rb +37 -26
- data/lib/cosmos/gui/choosers/file_chooser.rb +23 -6
- data/lib/cosmos/gui/choosers/float_chooser.rb +13 -11
- data/lib/cosmos/gui/choosers/integer_chooser.rb +13 -11
- data/lib/cosmos/gui/choosers/string_chooser.rb +18 -36
- data/lib/cosmos/gui/choosers/telemetry_chooser.rb +64 -64
- data/lib/cosmos/gui/choosers/value_chooser.rb +15 -15
- data/lib/cosmos/gui/dialogs/about_dialog.rb +18 -13
- data/lib/cosmos/gui/dialogs/calendar_dialog.rb +11 -3
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/details_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/exception_dialog.rb +7 -7
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +20 -15
- data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +143 -0
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +6 -5
- data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +5 -2
- data/lib/cosmos/gui/dialogs/progress_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/pry_dialog.rb +4 -4
- data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +3 -0
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +7 -6
- data/lib/cosmos/gui/dialogs/splash.rb +1 -1
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +114 -0
- data/lib/cosmos/gui/line_graph/line_graph.rb +9 -10
- data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +7 -5
- data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +3 -7
- data/lib/cosmos/gui/line_graph/line_graph_popups.rb +3 -8
- data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +2 -7
- data/lib/cosmos/gui/line_graph/overview_graph.rb +6 -1
- data/lib/cosmos/gui/opengl/earth_model.rb +6 -3
- data/lib/cosmos/gui/opengl/gl_bounds.rb +11 -23
- data/lib/cosmos/gui/opengl/gl_light.rb +3 -4
- data/lib/cosmos/gui/opengl/gl_material.rb +3 -4
- data/lib/cosmos/gui/opengl/gl_scene.rb +10 -4
- data/lib/cosmos/gui/opengl/gl_shape.rb +6 -2
- data/lib/cosmos/gui/opengl/gl_viewer.rb +5 -5
- data/lib/cosmos/gui/opengl/gl_viewport.rb +11 -12
- data/lib/cosmos/gui/opengl/moon_model.rb +6 -3
- data/lib/cosmos/gui/opengl/stl_reader.rb +8 -9
- data/lib/cosmos/gui/opengl/stl_shape.rb +4 -5
- data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +7 -7
- data/lib/cosmos/gui/qt.rb +1 -1
- data/lib/cosmos/gui/qt_tool.rb +21 -10
- data/lib/cosmos/gui/text/completion.rb +23 -2
- data/lib/cosmos/gui/text/completion_text_edit.rb +38 -23
- data/lib/cosmos/gui/utilities/analyze_log.rb +1 -1
- data/lib/cosmos/gui/utilities/screenshot.rb +2 -2
- data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +11 -1
- data/lib/cosmos/gui/widgets/packet_log_frame.rb +19 -6
- data/lib/cosmos/interfaces.rb +10 -0
- data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +28 -47
- data/lib/cosmos/interfaces/interface.rb +240 -22
- data/lib/cosmos/interfaces/linc_interface.rb +3 -5
- data/lib/cosmos/interfaces/protocols/burst_protocol.rb +173 -0
- data/lib/cosmos/interfaces/protocols/crc_protocol.rb +141 -0
- data/lib/cosmos/{streams/fixed_stream_protocol.rb → interfaces/protocols/fixed_protocol.rb} +40 -37
- data/lib/cosmos/{streams/length_stream_protocol.rb → interfaces/protocols/length_protocol.rb} +55 -48
- data/lib/cosmos/interfaces/protocols/override_protocol.rb +52 -0
- data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +141 -0
- data/lib/cosmos/interfaces/protocols/protocol.rb +60 -0
- data/lib/cosmos/interfaces/protocols/template_protocol.rb +209 -0
- data/lib/cosmos/interfaces/protocols/terminated_protocol.rb +81 -0
- data/lib/cosmos/interfaces/serial_interface.rb +28 -23
- data/lib/cosmos/interfaces/simulated_target_interface.rb +27 -16
- data/lib/cosmos/interfaces/stream_interface.rb +36 -108
- data/lib/cosmos/interfaces/tcpip_client_interface.rb +21 -21
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +555 -94
- data/lib/cosmos/interfaces/udp_interface.rb +51 -83
- data/lib/cosmos/io/buffered_file.rb +92 -2
- data/lib/cosmos/io/json_drb.rb +2 -2
- data/lib/cosmos/io/posix_serial_driver.rb +3 -1
- data/lib/cosmos/io/raw_logger.rb +3 -3
- data/lib/cosmos/io/serial_driver.rb +14 -5
- data/lib/cosmos/io/win32_serial_driver.rb +16 -4
- data/lib/cosmos/packet_logs.rb +0 -1
- data/lib/cosmos/packet_logs/packet_log_reader.rb +11 -1
- data/lib/cosmos/packet_logs/packet_log_writer.rb +31 -13
- data/lib/cosmos/packets/binary_accessor.rb +599 -32
- data/lib/cosmos/packets/commands.rb +48 -24
- data/lib/cosmos/packets/packet.rb +140 -54
- data/lib/cosmos/packets/packet_config.rb +0 -2
- data/lib/cosmos/packets/parsers/packet_item_parser.rb +10 -2
- data/lib/cosmos/packets/structure.rb +81 -33
- data/lib/cosmos/packets/structure_item.rb +45 -5
- data/lib/cosmos/packets/telemetry.rb +149 -55
- data/lib/cosmos/script/api_shared.rb +1000 -0
- data/lib/cosmos/script/commands.rb +2 -2
- data/lib/cosmos/script/extract.rb +19 -4
- data/lib/cosmos/script/limits.rb +2 -0
- data/lib/cosmos/script/script.rb +1 -1
- data/lib/cosmos/script/scripting.rb +4 -784
- data/lib/cosmos/script/telemetry.rb +44 -23
- data/lib/cosmos/script/tools.rb +15 -69
- data/lib/cosmos/streams/serial_stream.rb +12 -19
- data/lib/cosmos/streams/stream.rb +2 -11
- data/lib/cosmos/streams/tcpip_socket_stream.rb +3 -13
- data/lib/cosmos/system/system.rb +187 -31
- data/lib/cosmos/system/target.rb +11 -2
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +12 -11
- data/lib/cosmos/tools/cmd_sender/{cmd_sender_item_delegate.rb → cmd_param_table_item_delegate.rb} +11 -10
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +209 -164
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +652 -0
- data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +510 -0
- data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +194 -0
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +179 -5
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +31 -14
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +23 -16
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +92 -20
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +1 -1
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +17 -4
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +0 -5
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +1 -2
- data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +4 -4
- data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +121 -0
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +8 -4
- data/lib/cosmos/tools/config_editor/config_editor.rb +720 -0
- data/lib/cosmos/tools/config_editor/config_editor_frame.rb +675 -0
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +44 -27
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +8 -22
- data/lib/cosmos/tools/launcher/launcher.rb +29 -12
- data/lib/cosmos/tools/launcher/launcher_config.rb +1 -1
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +153 -42
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +44 -6
- data/lib/cosmos/tools/replay/replay.rb +36 -20
- data/lib/cosmos/tools/replay/replay_server.rb +1 -1
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +1 -1
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +31 -21
- data/lib/cosmos/tools/table_manager/table_config.rb +9 -3
- data/lib/cosmos/tools/table_manager/table_manager.rb +27 -7
- data/lib/cosmos/tools/test_runner/results_writer.rb +6 -6
- data/lib/cosmos/tools/test_runner/test_runner.rb +4 -6
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +4 -5
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +1 -1
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +1 -1
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +23 -6
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +44 -3
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +20 -7
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1 -1
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +11 -4
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +2 -2
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +1 -1
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +16 -0
- data/lib/cosmos/tools/tlm_viewer/screen.rb +36 -32
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +59 -50
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +2 -2
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +22 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +9 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +55 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +3 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +3 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +12 -12
- data/lib/cosmos/top_level.rb +34 -24
- data/lib/cosmos/utilities/crc.rb +108 -6
- data/lib/cosmos/utilities/csv.rb +68 -14
- data/lib/cosmos/utilities/logger.rb +2 -2
- data/lib/cosmos/utilities/low_fragmentation_array.rb +9 -1
- data/lib/cosmos/version.rb +6 -6
- data/lib/cosmos/win32/win32_main.rb +50 -46
- data/run_gui_tests.bat +3 -1
- data/spec/conversions/unix_time_formatted_conversion_spec.rb +2 -2
- data/spec/conversions/unix_time_seconds_conversion_spec.rb +2 -2
- data/spec/core_ext/file_spec.rb +1 -1
- data/spec/core_ext/objectspace_spec.rb +12 -9
- data/spec/core_ext/string_spec.rb +6 -0
- data/spec/core_ext/time_spec.rb +10 -0
- data/spec/gui/line_graph/line_clip_spec.rb +226 -224
- data/spec/gui/qt_spec.rb +81 -79
- data/spec/install/config/system/system.txt +0 -6
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +5 -5
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +8 -8
- data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
- data/{install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt → spec/install/config/targets/SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
- data/spec/install/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
- data/spec/install/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
- data/spec/install/config/targets/SYSTEM/screens/status.txt +12 -0
- data/spec/install/config/targets/SYSTEM/target.txt +12 -0
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +9 -13
- data/spec/interfaces/interface_spec.rb +402 -18
- data/spec/interfaces/linc_interface_spec.rb +37 -39
- data/spec/interfaces/protocols/burst_protocol_spec.rb +300 -0
- data/spec/interfaces/protocols/crc_protocol_spec.rb +709 -0
- data/spec/interfaces/protocols/fixed_protocol_spec.rb +119 -0
- data/spec/interfaces/protocols/length_protocol_spec.rb +499 -0
- data/spec/interfaces/protocols/override_protocol_spec.rb +158 -0
- data/spec/interfaces/protocols/preidentified_protocol_spec.rb +149 -0
- data/spec/interfaces/protocols/template_protocol_spec.rb +218 -0
- data/spec/interfaces/protocols/terminated_protocol_spec.rb +174 -0
- data/spec/interfaces/serial_interface_spec.rb +35 -34
- data/spec/interfaces/simulated_target_interface_spec.rb +13 -13
- data/spec/interfaces/tcpip_client_interface_spec.rb +21 -16
- data/spec/interfaces/tcpip_server_interface_spec.rb +66 -69
- data/spec/interfaces/udp_interface_spec.rb +120 -55
- data/spec/io/serial_driver_spec.rb +41 -39
- data/spec/io/udp_sockets_spec.rb +13 -8
- data/spec/io/win32_serial_driver_spec.rb +62 -59
- data/spec/packet_logs/packet_log_reader_spec.rb +68 -47
- data/spec/packet_logs/packet_log_writer_spec.rb +7 -5
- data/spec/packets/commands_spec.rb +5 -5
- data/spec/packets/packet_spec.rb +2 -14
- data/spec/script/extract_spec.rb +21 -7
- data/spec/script/scripting_spec.rb +261 -6
- data/spec/script/telemetry_spec.rb +17 -9
- data/spec/spec_helper.rb +26 -10
- data/spec/streams/serial_stream_spec.rb +87 -82
- data/spec/streams/tcpip_client_stream_spec.rb +12 -4
- data/spec/streams/tcpip_socket_stream_spec.rb +5 -0
- data/spec/system/system_spec.rb +66 -50
- data/spec/system/target_spec.rb +33 -11
- data/spec/tools/cmd_tlm_server/api_spec.rb +5 -5
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +75 -15
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +125 -5
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +244 -232
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +18 -18
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +124 -29
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +2 -2
- data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +145 -0
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +50 -10
- data/spec/tools/table_manager/tablemanager_core_spec.rb +0 -1
- data/spec/top_level/top_level_spec.rb +39 -11
- data/spec/utilities/csv_spec.rb +62 -20
- data/tasks/gemfile_stats.rake +6 -3
- data/test/performance/config/system/system_packets.txt +0 -1
- data/test/performance/config/system/system_threads.txt +0 -1
- metadata +177 -92
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
- data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
- data/autohotkey/config/targets/COSMOS/target.txt +0 -5
- data/autohotkey/userpath.txt +0 -1
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
- data/demo/config/targets/COSMOS/screens/limits_change.txt +0 -20
- data/demo/config/targets/COSMOS/screens/version.txt +0 -19
- data/demo/config/targets/COSMOS/target.txt +0 -11
- data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +0 -10
- data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +0 -13
- data/demo/userpath.txt +0 -1
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
- data/install/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
- data/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
- data/install/config/targets/COSMOS/screens/version.txt +0 -19
- data/install/config/targets/COSMOS/target.txt +0 -9
- data/install/config/targets/SYSTEM/README.txt +0 -1
- data/install/userpath.txt +0 -1
- data/lib/cosmos/io/tcpip_server.rb +0 -571
- data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +0 -107
- data/lib/cosmos/streams/burst_stream_protocol.rb +0 -25
- data/lib/cosmos/streams/preidentified_stream_protocol.rb +0 -118
- data/lib/cosmos/streams/stream_protocol.rb +0 -373
- data/lib/cosmos/streams/template_stream_protocol.rb +0 -140
- data/lib/cosmos/streams/terminated_stream_protocol.rb +0 -85
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +0 -41
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
- data/spec/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
- data/spec/install/config/targets/COSMOS/screens/version.txt +0 -19
- data/spec/install/config/targets/COSMOS/target.txt +0 -5
- data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +0 -4
- data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +0 -4
- data/spec/install/userpath.txt +0 -1
- data/spec/interfaces/stream_interface_spec.rb +0 -157
- data/spec/io/tcpip_server_spec.rb +0 -338
- data/spec/packet_logs/meta_packet_log_writer_spec.rb +0 -170
- data/spec/streams/burst_stream_protocol_spec.rb +0 -32
- data/spec/streams/fixed_stream_protocol_spec.rb +0 -113
- data/spec/streams/length_stream_protocol_spec.rb +0 -300
- data/spec/streams/preidentified_stream_protocol_spec.rb +0 -121
- data/spec/streams/stream_protocol_spec.rb +0 -346
- data/spec/streams/template_stream_protocol_spec.rb +0 -156
- data/spec/streams/terminated_stream_protocol_spec.rb +0 -127
- data/test/performance/userpath.txt +0 -1
|
@@ -0,0 +1,194 @@
|
|
|
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/cmd_sequence/sequence_item'
|
|
13
|
+
|
|
14
|
+
module Cosmos
|
|
15
|
+
# Widget which displays a list of SequenceItems
|
|
16
|
+
class SequenceList < Qt::Widget
|
|
17
|
+
include Enumerable
|
|
18
|
+
# Emit modified whenever any of the underlying SequenceItems change
|
|
19
|
+
signals 'modified()'
|
|
20
|
+
|
|
21
|
+
# Create the SequenceList
|
|
22
|
+
def initialize
|
|
23
|
+
super()
|
|
24
|
+
@modified = false
|
|
25
|
+
layout = Qt::VBoxLayout.new()
|
|
26
|
+
layout.setContentsMargins(0, 0, 0, 0)
|
|
27
|
+
layout.setSpacing(0)
|
|
28
|
+
setLayout(layout)
|
|
29
|
+
setSizePolicy(1, 0)
|
|
30
|
+
layout.addWidget(create_header())
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Opens a sequence definition file and populates the sequence.
|
|
34
|
+
# Exceptions are re-raised with filename and line number information
|
|
35
|
+
# and must be handled by the higher level application.
|
|
36
|
+
#
|
|
37
|
+
# @param filename [String] File containing a sequence definition
|
|
38
|
+
def open(filename)
|
|
39
|
+
clear()
|
|
40
|
+
|
|
41
|
+
parser = ConfigParser.new("http://cosmosrb.com/docs/tools/#command-sequence-configuration")
|
|
42
|
+
parser.parse_file(filename) do |keyword, params|
|
|
43
|
+
case keyword
|
|
44
|
+
when 'COMMAND'
|
|
45
|
+
usage = "#{keyword} <Delay Time> <Command>"
|
|
46
|
+
parser.verify_num_parameters(2, 2, usage)
|
|
47
|
+
begin
|
|
48
|
+
item = SequenceItem.parse(params[0], params[1])
|
|
49
|
+
# Connect the SequenceItems modified signal to propagate it
|
|
50
|
+
# forward by emitting our own modified signal
|
|
51
|
+
item.connect(SIGNAL("modified()")) do
|
|
52
|
+
@modified = true
|
|
53
|
+
emit modified()
|
|
54
|
+
end
|
|
55
|
+
layout.addWidget(item)
|
|
56
|
+
rescue => error
|
|
57
|
+
Kernel.raise parser.error("#{usage} passed '#{params[0]} #{params[1]}'\n#{error.message}")
|
|
58
|
+
end
|
|
59
|
+
else
|
|
60
|
+
Kernel.raise parser.error("Unknown keyword '#{keyword}'.") if keyword
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
@modified = false # Initially we're not modified
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Add a new SequenceItem to the list.
|
|
67
|
+
# @param command [Packet] Command packet to base the SequenceItem on
|
|
68
|
+
# @return [SequenceItem] The item added
|
|
69
|
+
def add(command)
|
|
70
|
+
@modified = true
|
|
71
|
+
item = SequenceItem.new(command)
|
|
72
|
+
# Connect the SequenceItems modified signal to propagate it
|
|
73
|
+
# forward by emitting our own modified signal
|
|
74
|
+
item.connect(SIGNAL("modified()")) do
|
|
75
|
+
@modified = true
|
|
76
|
+
emit modified()
|
|
77
|
+
end
|
|
78
|
+
layout.addWidget(item)
|
|
79
|
+
emit modified()
|
|
80
|
+
item
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Clear the list by removing all SequenceItems and disposing them
|
|
84
|
+
def clear
|
|
85
|
+
@modified = false
|
|
86
|
+
(1...layout.count).each do |index|
|
|
87
|
+
item = layout.takeAt(1)
|
|
88
|
+
item.widget.dispose
|
|
89
|
+
end
|
|
90
|
+
emit modified()
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# @return [Boolean] Whether the list is modified
|
|
94
|
+
def modified?
|
|
95
|
+
@modified
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# Yield each SequenceItem to enable the included Enumerable module
|
|
99
|
+
def each
|
|
100
|
+
total_items = 1
|
|
101
|
+
Qt.execute_in_main_thread { total_items = layout.count }
|
|
102
|
+
(1...total_items).each do |index|
|
|
103
|
+
item = nil
|
|
104
|
+
Qt.execute_in_main_thread { item = layout.itemAt(index).widget }
|
|
105
|
+
yield item
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Calls save on all individual SequenceItems and writes out the result
|
|
110
|
+
# to the given filename. Exceptions must be handled by the higher level
|
|
111
|
+
# application.
|
|
112
|
+
# @param filename [String] Filename to open and write the sequence
|
|
113
|
+
def save(filename)
|
|
114
|
+
@modified = false
|
|
115
|
+
File.open(filename, "w") do |file|
|
|
116
|
+
# Each SequenceItem's save method returns the save string
|
|
117
|
+
file.write(collect {|item| item.save }.join("\n"))
|
|
118
|
+
file.write("\n") # final newline
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
protected
|
|
123
|
+
|
|
124
|
+
# Create a header item in the SequenceList to describe the SequenceItems
|
|
125
|
+
def create_header
|
|
126
|
+
header = Qt::Widget.new
|
|
127
|
+
header_layout = Qt::HBoxLayout.new
|
|
128
|
+
header_layout.setContentsMargins(5, 5, 5, 5)
|
|
129
|
+
header.setLayout(header_layout)
|
|
130
|
+
time = Qt::Label.new("Time (Delay or Absolute)")
|
|
131
|
+
time.setFixedWidth(130)
|
|
132
|
+
header_layout.addWidget(time)
|
|
133
|
+
command = Qt::Label.new("Command")
|
|
134
|
+
header_layout.addWidget(command)
|
|
135
|
+
header_layout.addStretch()
|
|
136
|
+
header
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# TODO: The following are various methods that could be used in future
|
|
140
|
+
# drag and drop support.
|
|
141
|
+
#
|
|
142
|
+
# def swap(index1, index2)
|
|
143
|
+
# STDOUT.puts "swap:#{index1}, #{index2} count:#{layout.count}"
|
|
144
|
+
# widget1 = layout.takeAt(index1).widget
|
|
145
|
+
# index1 = widget1.index
|
|
146
|
+
# widget2 = layout.takeAt(index2).widget
|
|
147
|
+
# index2 = widget2.index
|
|
148
|
+
# widget2.index = index1
|
|
149
|
+
# widget1.index = index2
|
|
150
|
+
# layout.insertWidget(index1, widget2)
|
|
151
|
+
# layout.insertWidget(index2, widget1)
|
|
152
|
+
# end
|
|
153
|
+
#
|
|
154
|
+
# def mousePressEvent(event)
|
|
155
|
+
# super(event)
|
|
156
|
+
# if event.button == Qt::LeftButton
|
|
157
|
+
# @dragStartPosition = event.pos
|
|
158
|
+
# end
|
|
159
|
+
# @expanded = !@expanded
|
|
160
|
+
# if @expanded
|
|
161
|
+
# @parameters.show
|
|
162
|
+
# else
|
|
163
|
+
# @parameters.hide
|
|
164
|
+
# end
|
|
165
|
+
# end
|
|
166
|
+
#
|
|
167
|
+
# def mouseMoveEvent(event)
|
|
168
|
+
# super(event)
|
|
169
|
+
# return unless (event.buttons & Qt::LeftButton)
|
|
170
|
+
# return if (event.pos - @dragStartPosition).manhattanLength() < Qt::Application::startDragDistance()
|
|
171
|
+
#
|
|
172
|
+
# mime = Qt::MimeData.new()
|
|
173
|
+
# mime.setText(@index.to_s)
|
|
174
|
+
# drag = Qt::Drag.new(self)
|
|
175
|
+
# drag.setMimeData(mime)
|
|
176
|
+
# drop = drag.exec(Qt::MoveAction)
|
|
177
|
+
# end
|
|
178
|
+
#
|
|
179
|
+
# def dragEnterEvent(event)
|
|
180
|
+
# if event.mimeData.text != @text.to_s
|
|
181
|
+
# event.acceptProposedAction
|
|
182
|
+
# setStyleSheet("background-color:grey")
|
|
183
|
+
# end
|
|
184
|
+
# end
|
|
185
|
+
#
|
|
186
|
+
# def dragLeaveEvent(event)
|
|
187
|
+
# setStyleSheet("background-color:")
|
|
188
|
+
# end
|
|
189
|
+
#
|
|
190
|
+
# def dropEvent(event)
|
|
191
|
+
# setStyleSheet("background-color:white")
|
|
192
|
+
# end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
@@ -9,11 +9,13 @@
|
|
|
9
9
|
# attribution addendums as found in the LICENSE.txt
|
|
10
10
|
|
|
11
11
|
require 'cosmos/script/extract'
|
|
12
|
+
require 'cosmos/script/api_shared'
|
|
12
13
|
|
|
13
14
|
module Cosmos
|
|
14
15
|
|
|
15
16
|
module Api
|
|
16
17
|
include Extract
|
|
18
|
+
include ApiShared
|
|
17
19
|
|
|
18
20
|
# Sets api_requests to 0 and initializes the whitelist of allowable API
|
|
19
21
|
# method calls
|
|
@@ -41,6 +43,10 @@ module Cosmos
|
|
|
41
43
|
'tlm_variable',
|
|
42
44
|
'set_tlm',
|
|
43
45
|
'set_tlm_raw',
|
|
46
|
+
'inject_tlm',
|
|
47
|
+
'override_tlm',
|
|
48
|
+
'override_tlm_raw',
|
|
49
|
+
'normalize_tlm',
|
|
44
50
|
'get_tlm_buffer',
|
|
45
51
|
'get_tlm_packet',
|
|
46
52
|
'get_tlm_values',
|
|
@@ -470,7 +476,15 @@ module Cosmos
|
|
|
470
476
|
# description).
|
|
471
477
|
def set_tlm(*args)
|
|
472
478
|
target_name, packet_name, item_name, value = set_tlm_process_args(args, 'set_tlm')
|
|
479
|
+
if target_name == 'SYSTEM'.freeze and packet_name == 'META'.freeze
|
|
480
|
+
raise "set_tlm not allowed on #{target_name} #{packet_name} #{item_name}" if ['PKTID', 'CONFIG'].include?(item_name)
|
|
481
|
+
end
|
|
473
482
|
System.telemetry.set_value(target_name, packet_name, item_name, value, :CONVERTED)
|
|
483
|
+
if target_name == 'SYSTEM'.freeze and packet_name == 'META'.freeze
|
|
484
|
+
tlm_packet = System.telemetry.packet('SYSTEM', 'META')
|
|
485
|
+
cmd_packet = System.commands.packet('SYSTEM', 'META')
|
|
486
|
+
cmd_packet.buffer = tlm_packet.buffer
|
|
487
|
+
end
|
|
474
488
|
System.telemetry.packet(target_name, packet_name).check_limits(System.limits_set, true)
|
|
475
489
|
nil
|
|
476
490
|
end
|
|
@@ -499,6 +513,164 @@ module Cosmos
|
|
|
499
513
|
nil
|
|
500
514
|
end
|
|
501
515
|
|
|
516
|
+
# Injects a packet into the system as if it was received from an interface
|
|
517
|
+
#
|
|
518
|
+
# @param target_name[String] Target name of the packet
|
|
519
|
+
# @param packet_name[String] Packet name of the packet
|
|
520
|
+
# @param item_hash[Hash] Hash of item_name and value for each item you want to change from the current value table
|
|
521
|
+
# @param value_type[Symbol/String] Type of the values in the item_hash (RAW or CONVERTED)
|
|
522
|
+
# @param send_routers[Boolean] Whether or not to send to routers for the target's interface
|
|
523
|
+
# @param send_packet_log_writers[Boolean] Whether or not to send to the packet log writers for the target's interface
|
|
524
|
+
# @param create_new_logs[Boolean] Whether or not to create new log files before writing this packet to logs
|
|
525
|
+
def inject_tlm(target_name, packet_name, item_hash = nil, value_type = :CONVERTED, send_routers = true, send_packet_log_writers = true, create_new_logs = false)
|
|
526
|
+
received_time = Time.now
|
|
527
|
+
target = System.targets[target_name.upcase]
|
|
528
|
+
raise "Unknown target: #{target_name}" unless target
|
|
529
|
+
|
|
530
|
+
# Find and clone the telemetry packet
|
|
531
|
+
cvt_packet = System.telemetry.packet(target_name, packet_name)
|
|
532
|
+
packet = cvt_packet.clone
|
|
533
|
+
packet.received_time = received_time
|
|
534
|
+
|
|
535
|
+
# Update the packet with item_hash
|
|
536
|
+
value_type = value_type.to_s.intern
|
|
537
|
+
item_hash.each do |item_name, item_value|
|
|
538
|
+
packet.write(item_name, item_value, value_type)
|
|
539
|
+
end
|
|
540
|
+
|
|
541
|
+
# Update current value table
|
|
542
|
+
cvt_packet.buffer = packet.buffer(false)
|
|
543
|
+
cvt_packet.received_time = received_time
|
|
544
|
+
|
|
545
|
+
# The interface does the following line, but I don't think inject_tlm should because it could confuse the interface
|
|
546
|
+
target.tlm_cnt += 1
|
|
547
|
+
packet.received_count += 1
|
|
548
|
+
cvt_packet.received_count += 1
|
|
549
|
+
CmdTlmServer.instance.identified_packet_callback(packet)
|
|
550
|
+
|
|
551
|
+
# Find the interface for this target
|
|
552
|
+
interface = target.interface
|
|
553
|
+
|
|
554
|
+
if interface
|
|
555
|
+
# Write to routers
|
|
556
|
+
if send_routers
|
|
557
|
+
interface.routers.each do |router|
|
|
558
|
+
begin
|
|
559
|
+
router.write(packet) if router.write_allowed? and router.connected?
|
|
560
|
+
rescue => err
|
|
561
|
+
Logger.error "Problem writing to router #{router.name} - #{err.class}:#{err.message}"
|
|
562
|
+
end
|
|
563
|
+
end
|
|
564
|
+
end
|
|
565
|
+
|
|
566
|
+
# Write to packet log writers
|
|
567
|
+
if create_new_logs or send_packet_log_writers
|
|
568
|
+
interface.packet_log_writer_pairs.each do |packet_log_writer_pair|
|
|
569
|
+
# Optionally create new log files
|
|
570
|
+
packet_log_writer_pair.tlm_log_writer.start if create_new_logs
|
|
571
|
+
|
|
572
|
+
# Optionally write to packet logs - Write errors are handled by the log writer
|
|
573
|
+
packet_log_writer_pair.tlm_log_writer.write(packet) if send_packet_log_writers
|
|
574
|
+
end
|
|
575
|
+
end
|
|
576
|
+
else
|
|
577
|
+
# Some packets don't have an interface - Can still write to standard routers and packet logs
|
|
578
|
+
|
|
579
|
+
# Write to routers
|
|
580
|
+
if send_routers
|
|
581
|
+
router = CmdTlmServer.instance.routers.all['PREIDENTIFIED_ROUTER']
|
|
582
|
+
begin
|
|
583
|
+
router.write(packet) if router.write_allowed? and router.connected?
|
|
584
|
+
rescue => err
|
|
585
|
+
Logger.error "Problem writing to router #{router.name} - #{err.class}:#{err.message}"
|
|
586
|
+
end
|
|
587
|
+
end
|
|
588
|
+
|
|
589
|
+
if create_new_logs or send_packet_log_writers
|
|
590
|
+
# Handle packet logging
|
|
591
|
+
packet_log_writer_pair = CmdTlmServer.instance.packet_logging.all['DEFAULT']
|
|
592
|
+
|
|
593
|
+
# Optionally create new logs
|
|
594
|
+
packet_log_writer_pair.tlm_log_writer.start if create_new_logs
|
|
595
|
+
|
|
596
|
+
# Optionally write to packet logs - Write errors are handled by the log writer
|
|
597
|
+
packet_log_writer_pair.tlm_log_writer.write(packet) if send_packet_log_writers
|
|
598
|
+
end
|
|
599
|
+
end
|
|
600
|
+
|
|
601
|
+
nil
|
|
602
|
+
end
|
|
603
|
+
|
|
604
|
+
# Override a telemetry item in a packet to a particular value such that it
|
|
605
|
+
# is always returned even when new telemetry packets are received from the
|
|
606
|
+
# target.
|
|
607
|
+
#
|
|
608
|
+
# Accepts two different calling styles:
|
|
609
|
+
# override_tlm("TGT PKT ITEM = 1.0")
|
|
610
|
+
# override_tlm('TGT','PKT','ITEM', 10.0)
|
|
611
|
+
#
|
|
612
|
+
# Favor the first syntax where possible as it is more succinct.
|
|
613
|
+
#
|
|
614
|
+
# @param args The args must either be a string followed by a value or
|
|
615
|
+
# three strings followed by a value (see the calling style in the
|
|
616
|
+
# description).
|
|
617
|
+
def override_tlm(*args)
|
|
618
|
+
_override(__method__, set_tlm_process_args(args, __method__))
|
|
619
|
+
end
|
|
620
|
+
|
|
621
|
+
# Override a telemetry item in a packet to a particular value such that it
|
|
622
|
+
# is always returned even when new telemetry packets are received from the
|
|
623
|
+
# target. This only accepts RAW data items and any conversions are applied
|
|
624
|
+
# to the raw data when the packet is read.
|
|
625
|
+
#
|
|
626
|
+
# Accepts two different calling styles:
|
|
627
|
+
# override_tlm_raw("TGT PKT ITEM = 1.0")
|
|
628
|
+
# override_tlm_raw('TGT','PKT','ITEM', 10.0)
|
|
629
|
+
#
|
|
630
|
+
# Favor the first syntax where possible as it is more succinct.
|
|
631
|
+
#
|
|
632
|
+
# @param args The args must either be a string followed by a value or
|
|
633
|
+
# three strings followed by a value (see the calling style in the
|
|
634
|
+
# description).
|
|
635
|
+
def override_tlm_raw(*args)
|
|
636
|
+
_override(__method__, set_tlm_process_args(args, __method__))
|
|
637
|
+
end
|
|
638
|
+
|
|
639
|
+
# Normalize a telemetry item in a packet to its default behavior. Called
|
|
640
|
+
# after override_tlm and override_tlm_raw to restore standard processing.
|
|
641
|
+
#
|
|
642
|
+
# Accepts two different calling styles:
|
|
643
|
+
# normalize_tlm("TGT PKT ITEM")
|
|
644
|
+
# normalize_tlm('TGT','PKT','ITEM')
|
|
645
|
+
#
|
|
646
|
+
# Favor the first syntax where possible as it is more succinct.
|
|
647
|
+
#
|
|
648
|
+
# @param args The args must either be a string or three strings
|
|
649
|
+
# (see the calling style in the description).
|
|
650
|
+
def normalize_tlm(*args)
|
|
651
|
+
_override(__method__, tlm_process_args(args, __method__))
|
|
652
|
+
end
|
|
653
|
+
|
|
654
|
+
private
|
|
655
|
+
|
|
656
|
+
def _override(method, tgt_pkt_item)
|
|
657
|
+
interface = System.targets[tgt_pkt_item[0]].interface
|
|
658
|
+
found = false
|
|
659
|
+
interface.read_protocols.each do |protocol|
|
|
660
|
+
found = true if protocol.kind_of? OverrideProtocol
|
|
661
|
+
end
|
|
662
|
+
if found
|
|
663
|
+
# Test to see if this telemetry item exists
|
|
664
|
+
System.telemetry.value(tgt_pkt_item[0], tgt_pkt_item[1], tgt_pkt_item[2], :RAW)
|
|
665
|
+
interface.public_send("_#{method}", *tgt_pkt_item)
|
|
666
|
+
else
|
|
667
|
+
raise "Interface #{interface.name} does not have override ability. Is 'PROTOCOL OverrideProtocol' under the interface definition?"
|
|
668
|
+
end
|
|
669
|
+
nil
|
|
670
|
+
end
|
|
671
|
+
|
|
672
|
+
public
|
|
673
|
+
|
|
502
674
|
# Returns the raw buffer for a telemetry packet.
|
|
503
675
|
#
|
|
504
676
|
# @param target_name [String] Name of the target
|
|
@@ -696,12 +868,14 @@ module Cosmos
|
|
|
696
868
|
|
|
697
869
|
# (see Cosmos::Limits#enable_group)
|
|
698
870
|
def enable_limits_group(group_name)
|
|
871
|
+
Logger.info("Enabling Limits Group: #{group_name.upcase}")
|
|
699
872
|
System.limits.enable_group(group_name)
|
|
700
873
|
nil
|
|
701
874
|
end
|
|
702
875
|
|
|
703
876
|
# (see Cosmos::Limits#disable_group)
|
|
704
877
|
def disable_limits_group(group_name)
|
|
878
|
+
Logger.info("Disabling Limits Group: #{group_name.upcase}")
|
|
705
879
|
System.limits.disable_group(group_name)
|
|
706
880
|
nil
|
|
707
881
|
end
|
|
@@ -866,8 +1040,8 @@ module Cosmos
|
|
|
866
1040
|
# Get information about an interface
|
|
867
1041
|
#
|
|
868
1042
|
# @param interface_name [String] Interface name
|
|
869
|
-
# @return [Array<String, Numeric, Numeric, Numeric, Numeric, Numeric,
|
|
870
|
-
# Numeric, Numeric>] Array containing \[state, num clients,
|
|
1043
|
+
# @return [Array<String, Numeric, Numeric, Numeric, Numeric, Numeric,
|
|
1044
|
+
# Numeric, Numeric>] Array containing \[state, num clients,
|
|
871
1045
|
# TX queue size, RX queue size, TX bytes, RX bytes, Command count,
|
|
872
1046
|
# Telemetry count] for the interface
|
|
873
1047
|
def get_interface_info(interface_name)
|
|
@@ -877,8 +1051,8 @@ module Cosmos
|
|
|
877
1051
|
# Get information about a router
|
|
878
1052
|
#
|
|
879
1053
|
# @param router_name [String] Router name
|
|
880
|
-
# @return [Array<String, Numeric, Numeric, Numeric, Numeric, Numeric,
|
|
881
|
-
# Numeric, Numeric>] Array containing \[state, num clients,
|
|
1054
|
+
# @return [Array<String, Numeric, Numeric, Numeric, Numeric, Numeric,
|
|
1055
|
+
# Numeric, Numeric>] Array containing \[state, num clients,
|
|
882
1056
|
# TX queue size, RX queue size, TX bytes, RX bytes, Pkts received,
|
|
883
1057
|
# Pkts sent] for the router
|
|
884
1058
|
def get_router_info(router_name)
|
|
@@ -910,7 +1084,7 @@ module Cosmos
|
|
|
910
1084
|
# @param packet_logger_name [String] Name of the packet logger
|
|
911
1085
|
# @return [Array<<Array<String>, Boolean, Numeric, String, Numeric,
|
|
912
1086
|
# Boolean, Numeric, String, Numeric>] Array containing \[interfaces,
|
|
913
|
-
# cmd logging enabled, cmd queue size, cmd filename, cmd file size,
|
|
1087
|
+
# cmd logging enabled, cmd queue size, cmd filename, cmd file size,
|
|
914
1088
|
# tlm logging enabled, tlm queue size, tlm filename, tlm file size]
|
|
915
1089
|
# for the packet logger
|
|
916
1090
|
def get_packet_logger_info(packet_logger_name = 'DEFAULT')
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
|
|
1
2
|
# encoding: ascii-8bit
|
|
2
3
|
|
|
3
4
|
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
@@ -70,8 +71,6 @@ module Cosmos
|
|
|
70
71
|
# packet_data_queues hash to access the queue.
|
|
71
72
|
attr_accessor :next_packet_data_queue_id
|
|
72
73
|
|
|
73
|
-
# The default host
|
|
74
|
-
DEFAULT_HOST = 'localhost'
|
|
75
74
|
# The default configuration file name
|
|
76
75
|
DEFAULT_CONFIG_FILE = File.join(Cosmos::USERPATH, 'config', 'tools', 'cmd_tlm_server', 'cmd_tlm_server.txt')
|
|
77
76
|
# The maximum number of limits events that are queued. Used when
|
|
@@ -156,7 +155,7 @@ module Cosmos
|
|
|
156
155
|
System.telemetry # Make sure definitions are loaded by starting anything
|
|
157
156
|
return unless @json_drb.nil?
|
|
158
157
|
|
|
159
|
-
@@meta_callback.call(
|
|
158
|
+
@@meta_callback.call() if @@meta_callback if @config.metadata
|
|
160
159
|
|
|
161
160
|
# Start DRb with access control
|
|
162
161
|
@json_drb = JsonDRb.new
|
|
@@ -178,7 +177,7 @@ module Cosmos
|
|
|
178
177
|
end
|
|
179
178
|
@json_drb.method_whitelist = @api_whitelist
|
|
180
179
|
begin
|
|
181
|
-
@json_drb.start_service(
|
|
180
|
+
@json_drb.start_service(System.listen_hosts['CTS_API'], System.ports['CTS_API'], self)
|
|
182
181
|
rescue Exception
|
|
183
182
|
# Call packet_logging shutdown here to explicitly kill the logging
|
|
184
183
|
# threads since this CTS is not going to launch
|
|
@@ -197,11 +196,31 @@ module Cosmos
|
|
|
197
196
|
@sleeper = Sleeper.new
|
|
198
197
|
@staleness_monitor_thread = Thread.new do
|
|
199
198
|
begin
|
|
199
|
+
stale = []
|
|
200
|
+
prev_stale = []
|
|
200
201
|
while true
|
|
201
|
-
|
|
202
|
-
stale
|
|
203
|
-
|
|
202
|
+
# The check_stale method drives System.telemetry to iterate through
|
|
203
|
+
# the packets and mark them stale as necessary.
|
|
204
|
+
System.telemetry.check_stale
|
|
205
|
+
|
|
206
|
+
# Get all stale packets that include limits items.
|
|
207
|
+
stale_pkts = System.telemetry.stale(true)
|
|
208
|
+
|
|
209
|
+
# Send :STALE_PACKET events for all newly stale packets.
|
|
210
|
+
stale = []
|
|
211
|
+
stale_pkts.each do |packet|
|
|
212
|
+
pkt_name = [packet.target_name, packet.packet_name]
|
|
213
|
+
stale << pkt_name
|
|
214
|
+
post_limits_event(:STALE_PACKET, pkt_name) unless prev_stale.include?(pkt_name)
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# Send :STALE_PACKET_RCVD events for all packets that were stale
|
|
218
|
+
# but are no longer stale.
|
|
219
|
+
prev_stale.each do |pkt_name|
|
|
220
|
+
post_limits_event(:STALE_PACKET_RCVD, pkt_name) unless stale.include?(pkt_name)
|
|
204
221
|
end
|
|
222
|
+
prev_stale = stale.dup
|
|
223
|
+
|
|
205
224
|
broken = @sleeper.sleep(10)
|
|
206
225
|
break if broken
|
|
207
226
|
end
|
|
@@ -288,6 +307,8 @@ module Cosmos
|
|
|
288
307
|
# :LIMITS_CHANGE which means an individual item has changed limits state,
|
|
289
308
|
# :LIMITS_SETTINGS which means an individual item has new settings, or
|
|
290
309
|
# :STALE_PACKET which means a packet with limits has gone stale
|
|
310
|
+
# :STALE_PACKET_RCVD which means a packet with limits that had previously
|
|
311
|
+
# been stale is no longer stale.
|
|
291
312
|
# @param event_data [Symbol|Array<String,String,String,Symbol,Symbol>]
|
|
292
313
|
# Returns the current limits set name for event_type == :LIMITS_SET.
|
|
293
314
|
# Returns an array containing the target name, packet name, item name,
|
|
@@ -396,7 +417,7 @@ module Cosmos
|
|
|
396
417
|
packets.each do |target_name, packet_name|
|
|
397
418
|
if packet.target_name == target_name and packet.packet_name == packet_name
|
|
398
419
|
received_time = packet.received_time
|
|
399
|
-
received_time ||= Time.now
|
|
420
|
+
received_time ||= Time.now.sys
|
|
400
421
|
queue << [packet.buffer, target_name, packet_name,
|
|
401
422
|
received_time.tv_sec, received_time.tv_usec, packet.received_count]
|
|
402
423
|
if queue.length > queue_size
|
|
@@ -503,8 +524,6 @@ module Cosmos
|
|
|
503
524
|
self.instance.json_drb.request_count = 0
|
|
504
525
|
end
|
|
505
526
|
|
|
506
|
-
protected
|
|
507
|
-
|
|
508
527
|
# Method called by all interfaces when a packet has been identified. It
|
|
509
528
|
# checks the limits of the packet and then posts the packet to any
|
|
510
529
|
# registered subscribers.
|
|
@@ -514,7 +533,5 @@ module Cosmos
|
|
|
514
533
|
packet.check_limits(System.limits_set)
|
|
515
534
|
post_packet(packet)
|
|
516
535
|
end
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
end # module Cosmos
|
|
536
|
+
end
|
|
537
|
+
end
|