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,81 @@
|
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2017 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/config/config_parser'
|
|
12
|
+
require 'cosmos/interfaces/protocols/burst_protocol'
|
|
13
|
+
|
|
14
|
+
module Cosmos
|
|
15
|
+
# Protocol which delineates packets using termination characters at
|
|
16
|
+
# the end of the data.
|
|
17
|
+
class TerminatedProtocol < BurstProtocol
|
|
18
|
+
# @param write_termination_characters [String] The characters to write
|
|
19
|
+
# after writing the Packet buffer. Must be given as a
|
|
20
|
+
# hexadecimal string such as '0xABCD'.
|
|
21
|
+
# @param read_termination_characters [String] The characters at the end of
|
|
22
|
+
# the data which delineate the end of a Packet. Must be given as a
|
|
23
|
+
# hexadecimal string such as '0xABCD'.
|
|
24
|
+
# @param strip_read_termination [Boolean] Whether to remove the
|
|
25
|
+
# read_termination_characters before turning the data into a
|
|
26
|
+
# Packet.
|
|
27
|
+
# @param discard_leading_bytes (see BurstProtocol#initialize)
|
|
28
|
+
# @param sync_pattern (see BurstProtocol#initialize)
|
|
29
|
+
# @param fill_fields (see BurstProtocol#initialize)
|
|
30
|
+
def initialize(
|
|
31
|
+
write_termination_characters,
|
|
32
|
+
read_termination_characters,
|
|
33
|
+
strip_read_termination = true,
|
|
34
|
+
discard_leading_bytes = 0,
|
|
35
|
+
sync_pattern = nil,
|
|
36
|
+
fill_fields = false
|
|
37
|
+
)
|
|
38
|
+
@write_termination_characters = write_termination_characters.hex_to_byte_string
|
|
39
|
+
@read_termination_characters = read_termination_characters.hex_to_byte_string
|
|
40
|
+
@strip_read_termination = ConfigParser.handle_true_false(strip_read_termination)
|
|
41
|
+
|
|
42
|
+
super(discard_leading_bytes, sync_pattern, fill_fields)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def write_data(data)
|
|
46
|
+
raise "Packet contains termination characters!" if data.index(@write_termination_characters)
|
|
47
|
+
data = super(data)
|
|
48
|
+
@write_termination_characters.each_byte do |byte|
|
|
49
|
+
data << byte
|
|
50
|
+
end
|
|
51
|
+
return data
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
protected
|
|
55
|
+
|
|
56
|
+
def reduce_to_single_packet
|
|
57
|
+
index = @data.index(@read_termination_characters)
|
|
58
|
+
|
|
59
|
+
# Reduce to packet data and setup current_data for next packet
|
|
60
|
+
if index
|
|
61
|
+
if index > 0
|
|
62
|
+
if @strip_read_termination
|
|
63
|
+
packet_data = @data[0..(index - 1)]
|
|
64
|
+
else
|
|
65
|
+
packet_data = @data[0..(index + @read_termination_characters.length - 1)]
|
|
66
|
+
end
|
|
67
|
+
else # @data begins with the termination characters
|
|
68
|
+
if @strip_read_termination
|
|
69
|
+
packet_data = ''
|
|
70
|
+
else # Keep everything
|
|
71
|
+
packet_data = @data[0..(@read_termination_characters.length - 1)]
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
@data.replace(@data[(index + @read_termination_characters.length)..-1])
|
|
75
|
+
return packet_data
|
|
76
|
+
else
|
|
77
|
+
return :STOP
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: ascii-8bit
|
|
2
2
|
|
|
3
|
-
# Copyright
|
|
3
|
+
# Copyright 2017 Ball Aerospace & Technologies Corp.
|
|
4
4
|
# All Rights Reserved.
|
|
5
5
|
#
|
|
6
6
|
# This program is free software; you can modify and/or redistribute it
|
|
@@ -12,10 +12,8 @@ require 'cosmos/interfaces/stream_interface'
|
|
|
12
12
|
require 'cosmos/streams/serial_stream'
|
|
13
13
|
|
|
14
14
|
module Cosmos
|
|
15
|
-
|
|
16
15
|
# Provides a base class for interfaces that use serial ports
|
|
17
16
|
class SerialInterface < StreamInterface
|
|
18
|
-
|
|
19
17
|
# Creates a serial interface which uses the specified stream protocol.
|
|
20
18
|
#
|
|
21
19
|
# @param write_port_name [String] The name of the serial port to write
|
|
@@ -28,10 +26,9 @@ module Cosmos
|
|
|
28
26
|
# before aborting
|
|
29
27
|
# @param read_timeout [Integer] The number of seconds to attempt to read
|
|
30
28
|
# data from the serial port before aborting
|
|
31
|
-
# @param
|
|
32
|
-
#
|
|
33
|
-
# @param
|
|
34
|
-
# protocol class constructor
|
|
29
|
+
# @param protocol_type [String] Combined with 'Protocol' to resolve
|
|
30
|
+
# to a COSMOS protocol class
|
|
31
|
+
# @param protocol_args [Array] Arguments to pass to the protocol constructor
|
|
35
32
|
def initialize(write_port_name,
|
|
36
33
|
read_port_name,
|
|
37
34
|
baud_rate,
|
|
@@ -39,38 +36,46 @@ module Cosmos
|
|
|
39
36
|
stop_bits,
|
|
40
37
|
write_timeout,
|
|
41
38
|
read_timeout,
|
|
42
|
-
|
|
43
|
-
*
|
|
44
|
-
super(
|
|
39
|
+
protocol_type = nil,
|
|
40
|
+
*protocol_args)
|
|
41
|
+
super(protocol_type, protocol_args)
|
|
45
42
|
|
|
46
43
|
@write_port_name = ConfigParser.handle_nil(write_port_name)
|
|
47
|
-
@read_port_name
|
|
44
|
+
@read_port_name = ConfigParser.handle_nil(read_port_name)
|
|
48
45
|
@baud_rate = baud_rate
|
|
49
46
|
@parity = parity.to_s.intern
|
|
50
47
|
@stop_bits = stop_bits
|
|
51
48
|
@write_timeout = write_timeout
|
|
52
49
|
@read_timeout = read_timeout
|
|
53
|
-
|
|
54
|
-
@write_allowed = false unless @write_port_name
|
|
50
|
+
@write_allowed = false unless @write_port_name
|
|
55
51
|
@write_raw_allowed = false unless @write_port_name
|
|
56
|
-
@read_allowed
|
|
52
|
+
@read_allowed = false unless @read_port_name
|
|
53
|
+
@flow_control = :NONE
|
|
57
54
|
end
|
|
58
55
|
|
|
59
|
-
#
|
|
60
|
-
# parameters passed in the constructor.
|
|
56
|
+
# Creates a new {SerialStream} using the parameters passed in the constructor
|
|
61
57
|
def connect
|
|
62
|
-
stream = SerialStream.new(
|
|
58
|
+
@stream = SerialStream.new(
|
|
63
59
|
@write_port_name,
|
|
64
60
|
@read_port_name,
|
|
65
61
|
@baud_rate,
|
|
66
62
|
@parity,
|
|
67
63
|
@stop_bits,
|
|
68
64
|
@write_timeout,
|
|
69
|
-
@read_timeout
|
|
70
|
-
|
|
71
|
-
|
|
65
|
+
@read_timeout,
|
|
66
|
+
@flow_control
|
|
67
|
+
)
|
|
68
|
+
super()
|
|
72
69
|
end
|
|
73
70
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
71
|
+
# Supported Options
|
|
72
|
+
# FLOW_CONTROL - Flow control method NONE or RTSCTS. Defaults to NONE
|
|
73
|
+
def set_option(option_name, option_values)
|
|
74
|
+
super(option_name, option_values)
|
|
75
|
+
case option_name.upcase
|
|
76
|
+
when 'FLOW_CONTROL'
|
|
77
|
+
@flow_control = option_values[0]
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: ascii-8bit
|
|
2
2
|
|
|
3
|
-
# Copyright
|
|
3
|
+
# Copyright 2017 Ball Aerospace & Technologies Corp.
|
|
4
4
|
# All Rights Reserved.
|
|
5
5
|
#
|
|
6
6
|
# This program is free software; you can modify and/or redistribute it
|
|
@@ -9,43 +9,39 @@
|
|
|
9
9
|
# attribution addendums as found in the LICENSE.txt
|
|
10
10
|
|
|
11
11
|
require 'cosmos/interfaces/interface'
|
|
12
|
+
require 'cosmos/interfaces/protocols/override_protocol'
|
|
12
13
|
|
|
13
14
|
module Cosmos
|
|
14
|
-
|
|
15
15
|
# An interface class that provides simulated telemetry and command responses
|
|
16
16
|
class SimulatedTargetInterface < Interface
|
|
17
17
|
|
|
18
18
|
# @param sim_target_file [String] Filename of the simulator target class
|
|
19
19
|
def initialize(sim_target_file)
|
|
20
20
|
super()
|
|
21
|
-
|
|
22
21
|
@connected = false
|
|
23
22
|
@initialized = false
|
|
24
23
|
@count_100hz = 0
|
|
25
24
|
@next_tick_time = nil
|
|
26
25
|
@pending_packets = []
|
|
27
|
-
|
|
28
26
|
@sim_target_class = Cosmos.require_class sim_target_file
|
|
29
27
|
@sim_target = nil
|
|
30
28
|
@write_raw_allowed = false
|
|
31
29
|
@raw_logger_pair = nil
|
|
30
|
+
add_protocol(OverrideProtocol, [], :READ)
|
|
32
31
|
end
|
|
33
32
|
|
|
34
33
|
# Initialize the simulated target object and "connect" to the target
|
|
35
34
|
def connect
|
|
36
35
|
unless @initialized
|
|
37
36
|
# Save the current time + 10 ms as the next expected tick time
|
|
38
|
-
@next_tick_time = Time.now + 0.01
|
|
39
|
-
|
|
37
|
+
@next_tick_time = Time.now.sys + 0.01
|
|
40
38
|
# Create Simulated Target Object
|
|
41
39
|
@sim_target = @sim_target_class.new(@target_names[0])
|
|
42
|
-
|
|
43
40
|
# Set telemetry rates
|
|
44
41
|
@sim_target.set_rates
|
|
45
42
|
|
|
46
43
|
@initialized = true
|
|
47
44
|
end
|
|
48
|
-
|
|
49
45
|
@connected = true
|
|
50
46
|
end
|
|
51
47
|
|
|
@@ -56,20 +52,26 @@ module Cosmos
|
|
|
56
52
|
|
|
57
53
|
# @return [Packet] Returns a simulated target packet from the simulator
|
|
58
54
|
def read
|
|
55
|
+
packet = nil
|
|
59
56
|
if @connected
|
|
60
57
|
packet = first_pending_packet()
|
|
61
|
-
|
|
58
|
+
if packet
|
|
59
|
+
# This is just to support the override functionality
|
|
60
|
+
# Generic protocol use is not supported
|
|
61
|
+
packet = @read_protocols[0].read_packet(packet)
|
|
62
|
+
return packet
|
|
63
|
+
end
|
|
62
64
|
|
|
63
65
|
while true
|
|
64
66
|
# Calculate time to sleep to make ticks 10ms apart
|
|
65
|
-
now = Time.now
|
|
67
|
+
now = Time.now.sys
|
|
66
68
|
delta = @next_tick_time - now
|
|
67
69
|
if delta > 0.0
|
|
68
70
|
sleep(delta) # Sleep up to 10 ms
|
|
69
71
|
return nil unless @connected
|
|
70
72
|
elsif delta < -1.0
|
|
71
73
|
# Fell way behind - jump next tick time
|
|
72
|
-
@next_tick_time = Time.now
|
|
74
|
+
@next_tick_time = Time.now.sys
|
|
73
75
|
end
|
|
74
76
|
|
|
75
77
|
@pending_packets = @sim_target.read(@count_100hz, @next_tick_time)
|
|
@@ -77,11 +79,17 @@ module Cosmos
|
|
|
77
79
|
@count_100hz += 1
|
|
78
80
|
|
|
79
81
|
packet = first_pending_packet()
|
|
80
|
-
|
|
82
|
+
if packet
|
|
83
|
+
# This is just to support the override functionality
|
|
84
|
+
# Generic protocol use is not supported
|
|
85
|
+
packet = @read_protocols[0].read_packet(packet)
|
|
86
|
+
return packet
|
|
87
|
+
end
|
|
81
88
|
end
|
|
82
89
|
else
|
|
83
90
|
raise "Interface not connected"
|
|
84
91
|
end
|
|
92
|
+
return packet
|
|
85
93
|
end
|
|
86
94
|
|
|
87
95
|
# @param packet [Packet] Command packet to send to the simulator
|
|
@@ -89,7 +97,9 @@ module Cosmos
|
|
|
89
97
|
if @connected
|
|
90
98
|
# Update count of commands sent through this interface
|
|
91
99
|
@write_count += 1
|
|
92
|
-
@bytes_written += packet.
|
|
100
|
+
@bytes_written += packet.length
|
|
101
|
+
@written_raw_data_time = Time.now
|
|
102
|
+
@written_raw_data = packet.buffer
|
|
93
103
|
|
|
94
104
|
# Have simulated target handle the packet
|
|
95
105
|
@sim_target.write(packet)
|
|
@@ -120,10 +130,11 @@ module Cosmos
|
|
|
120
130
|
unless @pending_packets.empty?
|
|
121
131
|
@read_count += 1
|
|
122
132
|
packet = @pending_packets.pop.clone
|
|
123
|
-
@bytes_read += packet.
|
|
133
|
+
@bytes_read += packet.length
|
|
134
|
+
@read_raw_data_time = Time.now
|
|
135
|
+
@read_raw_data = packet.buffer
|
|
124
136
|
end
|
|
125
137
|
packet
|
|
126
138
|
end
|
|
127
139
|
end
|
|
128
|
-
|
|
129
|
-
end # module Cosmos
|
|
140
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: ascii-8bit
|
|
2
2
|
|
|
3
|
-
# Copyright
|
|
3
|
+
# Copyright 2017 Ball Aerospace & Technologies Corp.
|
|
4
4
|
# All Rights Reserved.
|
|
5
5
|
#
|
|
6
6
|
# This program is free software; you can modify and/or redistribute it
|
|
@@ -9,128 +9,56 @@
|
|
|
9
9
|
# attribution addendums as found in the LICENSE.txt
|
|
10
10
|
|
|
11
11
|
require 'cosmos/interfaces/interface'
|
|
12
|
-
# Require all the stream protocols. Additional general purpose stream
|
|
13
|
-
# protocols should be added to the require list.
|
|
14
|
-
require 'cosmos/streams/burst_stream_protocol'
|
|
15
|
-
require 'cosmos/streams/fixed_stream_protocol'
|
|
16
|
-
require 'cosmos/streams/length_stream_protocol'
|
|
17
|
-
require 'cosmos/streams/preidentified_stream_protocol'
|
|
18
|
-
require 'cosmos/streams/template_stream_protocol'
|
|
19
|
-
require 'cosmos/streams/terminated_stream_protocol'
|
|
20
12
|
|
|
21
13
|
module Cosmos
|
|
22
|
-
|
|
23
|
-
# Stream interfaces use stream protocols to interface with the target. This
|
|
24
|
-
# class simply passes through each method to identically named methods in the
|
|
25
|
-
# stream protocol class. This class is an abstract class and should not be
|
|
26
|
-
# used directly. It should be subclassed and the connect method implemented.
|
|
14
|
+
# Base class for interfaces that act read and write from a stream
|
|
27
15
|
class StreamInterface < Interface
|
|
16
|
+
attr_accessor :stream
|
|
28
17
|
|
|
29
|
-
|
|
30
|
-
# this should resolve to a COSMOS stream protocol class
|
|
31
|
-
# @param stream_protocol_args [Array] Arguments to pass to the stream
|
|
32
|
-
# protocol class constructor
|
|
33
|
-
def initialize(stream_protocol_type, *stream_protocol_args)
|
|
18
|
+
def initialize(protocol_type = nil, protocol_args = [])
|
|
34
19
|
super()
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
# Connect is left undefined as it must be defined by a subclass.
|
|
43
|
-
|
|
44
|
-
# @return [Boolean] Whether the stream protocol is connected to the target
|
|
45
|
-
def connected?
|
|
46
|
-
@stream_protocol.connected?
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# Disconnect the stream protocol from the target
|
|
50
|
-
def disconnect
|
|
51
|
-
@stream_protocol.disconnect
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# Read a packet from the stream protocol
|
|
55
|
-
def read
|
|
56
|
-
packet = @stream_protocol.read
|
|
57
|
-
@read_count += 1 if packet
|
|
58
|
-
packet
|
|
20
|
+
@protocol_type = ConfigParser::handle_nil(protocol_type)
|
|
21
|
+
@protocol_args = protocol_args
|
|
22
|
+
if @protocol_type
|
|
23
|
+
protocol_class_name = protocol_type.to_s.capitalize << 'Protocol'
|
|
24
|
+
klass = Cosmos.require_class(protocol_class_name.class_name_to_filename)
|
|
25
|
+
add_protocol(klass, protocol_args, :READ_WRITE)
|
|
26
|
+
end
|
|
59
27
|
end
|
|
60
28
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
def write(packet)
|
|
65
|
-
if connected?()
|
|
66
|
-
begin
|
|
67
|
-
@stream_protocol.write(packet)
|
|
68
|
-
@write_count += 1
|
|
69
|
-
rescue Exception => err
|
|
70
|
-
Logger.instance.error("Error writing to interface : #{@name}")
|
|
71
|
-
disconnect()
|
|
72
|
-
raise err
|
|
73
|
-
end
|
|
74
|
-
else
|
|
75
|
-
raise "Interface not connected for write : #{@name}"
|
|
76
|
-
end
|
|
29
|
+
def connect
|
|
30
|
+
super()
|
|
31
|
+
@stream.connect if @stream
|
|
77
32
|
end
|
|
78
33
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
def write_raw(data)
|
|
83
|
-
if connected?()
|
|
84
|
-
begin
|
|
85
|
-
@stream_protocol.write_raw(data)
|
|
86
|
-
@write_count += 1
|
|
87
|
-
rescue Exception => err
|
|
88
|
-
Logger.instance.error("Error writing raw data to interface : #{@name}")
|
|
89
|
-
disconnect()
|
|
90
|
-
raise err
|
|
91
|
-
end
|
|
34
|
+
def connected?
|
|
35
|
+
if @stream
|
|
36
|
+
@stream.connected?
|
|
92
37
|
else
|
|
93
|
-
|
|
38
|
+
false
|
|
94
39
|
end
|
|
95
40
|
end
|
|
96
41
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
# @return [Integer] Sets the number of bytes read by the stream protocol
|
|
103
|
-
def bytes_read=(bytes_read)
|
|
104
|
-
@stream_protocol.bytes_read = bytes_read
|
|
42
|
+
def disconnect
|
|
43
|
+
@stream.disconnect if @stream
|
|
44
|
+
super()
|
|
105
45
|
end
|
|
106
46
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
47
|
+
def read_interface
|
|
48
|
+
begin
|
|
49
|
+
data = @stream.read
|
|
50
|
+
rescue Timeout::Error
|
|
51
|
+
Logger.instance.error "Timeout waiting for data to be read"
|
|
52
|
+
data = nil
|
|
53
|
+
end
|
|
54
|
+
return nil if data.nil? or data.length <= 0
|
|
55
|
+
read_interface_base(data)
|
|
56
|
+
data
|
|
110
57
|
end
|
|
111
58
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
@
|
|
59
|
+
def write_interface(data)
|
|
60
|
+
write_interface_base(data)
|
|
61
|
+
@stream.write(data)
|
|
115
62
|
end
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
# subclasses and will be called by the {StreamProtocol} when processing
|
|
119
|
-
# the data in the {Stream}.
|
|
120
|
-
#
|
|
121
|
-
# Subclasses of {StreamProtocol} can implement the same method. However,
|
|
122
|
-
# if the callback method is implemented in the interface then the
|
|
123
|
-
# subclass method is not called.
|
|
124
|
-
#
|
|
125
|
-
# Thus if you are implementing an Interface that uses a {StreamProtocol}
|
|
126
|
-
# and choose to implement this method, you must be aware of any
|
|
127
|
-
# processing that the {StreamProtocol} does in the same method
|
|
128
|
-
# and re-implement it (or call @stream_protocol.post_read_data(packet_data), etc) in yours.
|
|
129
|
-
#
|
|
130
|
-
# @!method post_read_data(packet_data)
|
|
131
|
-
# @!method post_read_packet(packet)
|
|
132
|
-
# @!method pre_write_packet(packet)
|
|
133
|
-
|
|
134
|
-
end # class StreamInterface
|
|
135
|
-
|
|
136
|
-
end # module Cosmos
|
|
63
|
+
end
|
|
64
|
+
end
|