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
|
@@ -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
|
|
@@ -13,10 +13,8 @@ require 'cosmos/io/udp_sockets'
|
|
|
13
13
|
require 'cosmos/config/config_parser'
|
|
14
14
|
|
|
15
15
|
module Cosmos
|
|
16
|
-
|
|
17
16
|
# Base class for interfaces that send and receive messages over UDP
|
|
18
17
|
class UdpInterface < Interface
|
|
19
|
-
|
|
20
18
|
# @param hostname [String] Machine to connect to
|
|
21
19
|
# @param write_dest_port [Integer] Port to write commands to
|
|
22
20
|
# @param read_port [Integer] Port to read telemetry from
|
|
@@ -29,21 +27,22 @@ module Cosmos
|
|
|
29
27
|
# @param write_timeout [Integer] Seconds to wait before aborting writes
|
|
30
28
|
# @param read_timeout [Integer] Seconds to wait before aborting reads
|
|
31
29
|
# @param bind_address [String] Address to bind UDP ports to
|
|
32
|
-
def initialize(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
30
|
+
def initialize(
|
|
31
|
+
hostname,
|
|
32
|
+
write_dest_port,
|
|
33
|
+
read_port,
|
|
34
|
+
write_src_port = nil,
|
|
35
|
+
interface_address = nil,
|
|
36
|
+
ttl = 128, # default for Windows
|
|
37
|
+
write_timeout = 10.0,
|
|
38
|
+
read_timeout = nil,
|
|
39
|
+
bind_address = '0.0.0.0')
|
|
42
40
|
|
|
41
|
+
super()
|
|
43
42
|
@hostname = ConfigParser.handle_nil(hostname)
|
|
44
43
|
if @hostname
|
|
45
44
|
@hostname = @hostname.to_s
|
|
46
|
-
@hostname = '127.0.0.1' if @hostname.
|
|
45
|
+
@hostname = '127.0.0.1' if @hostname.casecmp('LOCALHOST')
|
|
47
46
|
end
|
|
48
47
|
@write_dest_port = ConfigParser.handle_nil(write_dest_port)
|
|
49
48
|
@write_dest_port = write_dest_port.to_i if @write_dest_port
|
|
@@ -52,7 +51,9 @@ module Cosmos
|
|
|
52
51
|
@write_src_port = ConfigParser.handle_nil(write_src_port)
|
|
53
52
|
@write_src_port = @write_src_port.to_i if @write_src_port
|
|
54
53
|
@interface_address = ConfigParser.handle_nil(interface_address)
|
|
55
|
-
|
|
54
|
+
if @interface_address && @interface_address.casecmp('LOCALHOST')
|
|
55
|
+
@interface_address = '127.0.0.1'
|
|
56
|
+
end
|
|
56
57
|
@ttl = ttl.to_i
|
|
57
58
|
@ttl = 1 if @ttl < 1
|
|
58
59
|
@write_timeout = ConfigParser.handle_nil(write_timeout)
|
|
@@ -60,7 +61,9 @@ module Cosmos
|
|
|
60
61
|
@read_timeout = ConfigParser.handle_nil(read_timeout)
|
|
61
62
|
@read_timeout = @read_timeout.to_f if @read_timeout
|
|
62
63
|
@bind_address = ConfigParser.handle_nil(bind_address)
|
|
63
|
-
|
|
64
|
+
if @bind_address && @bind_address.casecmp('LOCALHOST')
|
|
65
|
+
@bind_address = '127.0.0.1'
|
|
66
|
+
end
|
|
64
67
|
@write_socket = nil
|
|
65
68
|
@read_socket = nil
|
|
66
69
|
@read_allowed = false unless @read_port
|
|
@@ -72,13 +75,18 @@ module Cosmos
|
|
|
72
75
|
# the constructor and a new {UdpReadSocket} if the read_port was given in
|
|
73
76
|
# the constructor.
|
|
74
77
|
def connect
|
|
75
|
-
@write_socket = UdpWriteSocket.new(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
@write_socket = UdpWriteSocket.new(
|
|
79
|
+
@hostname,
|
|
80
|
+
@write_dest_port,
|
|
81
|
+
@write_src_port,
|
|
82
|
+
@interface_address,
|
|
83
|
+
@ttl,
|
|
84
|
+
@bind_address) if @write_dest_port
|
|
85
|
+
@read_socket = UdpReadSocket.new(
|
|
86
|
+
@read_port,
|
|
87
|
+
@hostname,
|
|
88
|
+
@interface_address,
|
|
89
|
+
@bind_address) if @read_port
|
|
82
90
|
@thread_sleeper = nil
|
|
83
91
|
end
|
|
84
92
|
|
|
@@ -105,69 +113,29 @@ module Cosmos
|
|
|
105
113
|
@thread_sleeper = nil
|
|
106
114
|
end
|
|
107
115
|
|
|
108
|
-
# If the read port was given, the read_socket is read and the data returned
|
|
109
|
-
# in a {Packet}. bytes_read and read_count are updated.
|
|
110
|
-
#
|
|
111
|
-
# @return [Packet]
|
|
112
116
|
def read
|
|
113
|
-
if @read_port
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
# Disconnected
|
|
119
|
-
return nil
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
@bytes_read += data.length
|
|
123
|
-
@read_count += 1
|
|
124
|
-
|
|
125
|
-
return Packet.new(nil, nil, :BIG_ENDIAN, nil, data)
|
|
126
|
-
else
|
|
127
|
-
# Write only interface so stop the thread which calls read
|
|
128
|
-
@thread_sleeper = Sleeper.new
|
|
129
|
-
while connected?()
|
|
130
|
-
@thread_sleeper.sleep(1000000)
|
|
131
|
-
end
|
|
132
|
-
return nil
|
|
133
|
-
end
|
|
117
|
+
return super() if @read_port
|
|
118
|
+
# Write only interface so stop the thread which calls read
|
|
119
|
+
@thread_sleeper = Sleeper.new
|
|
120
|
+
@thread_sleeper.sleep(1_000_000_000) while connected?
|
|
121
|
+
return nil
|
|
134
122
|
end
|
|
135
123
|
|
|
136
|
-
#
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
write_raw(packet.buffer)
|
|
144
|
-
else
|
|
145
|
-
raise "Interface not connected"
|
|
146
|
-
end
|
|
147
|
-
else
|
|
148
|
-
raise "Attempt to write to read only interface"
|
|
149
|
-
end
|
|
124
|
+
# Reads from the socket if the read_port is defined
|
|
125
|
+
def read_interface
|
|
126
|
+
data = @read_socket.read(@read_timeout)
|
|
127
|
+
read_interface_base(data)
|
|
128
|
+
return data
|
|
129
|
+
rescue IOError # Disconnected
|
|
130
|
+
return nil
|
|
150
131
|
end
|
|
151
132
|
|
|
152
|
-
#
|
|
153
|
-
# data
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
if connected?()
|
|
159
|
-
@write_socket.write(data, @write_timeout)
|
|
160
|
-
@bytes_written += data.length
|
|
161
|
-
@write_count += 1
|
|
162
|
-
@raw_logger_pair.write_logger.write(data) if @raw_logger_pair
|
|
163
|
-
else
|
|
164
|
-
raise "Interface not connected"
|
|
165
|
-
end
|
|
166
|
-
else
|
|
167
|
-
raise "Attempt to write to read only interface"
|
|
168
|
-
end
|
|
133
|
+
# Writes to the socket
|
|
134
|
+
# @param data [String] Raw packet data
|
|
135
|
+
def write_interface(data)
|
|
136
|
+
write_interface_base(data)
|
|
137
|
+
@write_socket.write(data, @write_timeout)
|
|
138
|
+
data
|
|
169
139
|
end
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
end # module Cosmos
|
|
140
|
+
end
|
|
141
|
+
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
|
|
@@ -8,4 +8,94 @@
|
|
|
8
8
|
# as published by the Free Software Foundation; version 3 with
|
|
9
9
|
# attribution addendums as found in the LICENSE.txt
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
if RUBY_ENGINE == 'ruby' and !ENV['COSMOS_NO_EXT']
|
|
12
|
+
require 'cosmos/ext/buffered_file'
|
|
13
|
+
else
|
|
14
|
+
module Cosmos
|
|
15
|
+
class BufferedFile < File
|
|
16
|
+
BUFFER_SIZE = 16 * 1024
|
|
17
|
+
|
|
18
|
+
# Initialize the BufferedFile. Takes the same args as File
|
|
19
|
+
def initialize(*args)
|
|
20
|
+
super(*args)
|
|
21
|
+
@buffer = ''
|
|
22
|
+
@buffer_index = 0
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Read using an internal buffer to avoid system calls
|
|
26
|
+
def read(read_length)
|
|
27
|
+
if read_length <= (@buffer.length - @buffer_index)
|
|
28
|
+
# Return part of the buffer without having to go to the OS
|
|
29
|
+
result = @buffer[@buffer_index, read_length]
|
|
30
|
+
@buffer_index += read_length
|
|
31
|
+
return result
|
|
32
|
+
elsif read_length > BUFFER_SIZE
|
|
33
|
+
# Reading more than our buffer
|
|
34
|
+
if @buffer.length > 0
|
|
35
|
+
if @buffer_index > 0
|
|
36
|
+
@buffer.slice!(0..(@buffer_index - 1))
|
|
37
|
+
@buffer_index = 0
|
|
38
|
+
end
|
|
39
|
+
@buffer << super(read_length - @buffer.length).to_s
|
|
40
|
+
return @buffer.slice!(0..-1)
|
|
41
|
+
else
|
|
42
|
+
return super(read_length)
|
|
43
|
+
end
|
|
44
|
+
else
|
|
45
|
+
# Read into the buffer
|
|
46
|
+
if @buffer_index > 0
|
|
47
|
+
@buffer.slice!(0..(@buffer_index - 1))
|
|
48
|
+
@buffer_index = 0
|
|
49
|
+
end
|
|
50
|
+
@buffer << super(BUFFER_SIZE - @buffer.length).to_s
|
|
51
|
+
if @buffer.length <= 0
|
|
52
|
+
return nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
if read_length <= @buffer.length
|
|
56
|
+
result = @buffer[@buffer_index, read_length]
|
|
57
|
+
@buffer_index += read_length
|
|
58
|
+
return result
|
|
59
|
+
else
|
|
60
|
+
return @buffer.slice!(0..-1)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Get the current file position
|
|
66
|
+
def pos
|
|
67
|
+
parent_pos = super()
|
|
68
|
+
return parent_pos - (@buffer.length - @buffer_index)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Seek to a given file position
|
|
72
|
+
def seek(*args)
|
|
73
|
+
case args.length
|
|
74
|
+
when 1
|
|
75
|
+
amount = args[0]
|
|
76
|
+
whence = IO::SEEK_SET
|
|
77
|
+
when 2
|
|
78
|
+
amount = args[0]
|
|
79
|
+
whence = args[1]
|
|
80
|
+
else
|
|
81
|
+
# Invalid number of arguments given - let super handle
|
|
82
|
+
return super(*args)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
if whence == IO::SEEK_CUR
|
|
86
|
+
buffer_index = @buffer_index + amount
|
|
87
|
+
if (buffer_index >= 0) && (buffer_index < @buffer.length)
|
|
88
|
+
@buffer_index = buffer_index
|
|
89
|
+
return 0
|
|
90
|
+
end
|
|
91
|
+
super(self.pos, IO::SEEK_SET)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
@buffer.clear
|
|
95
|
+
@buffer_index = 0
|
|
96
|
+
return super(*args)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
data/lib/cosmos/io/json_drb.rb
CHANGED
|
@@ -297,7 +297,7 @@ module Cosmos
|
|
|
297
297
|
while true
|
|
298
298
|
begin
|
|
299
299
|
request_data = JsonDRb.receive_message(my_socket, data, pipe_reader)
|
|
300
|
-
start_time = Time.now
|
|
300
|
+
start_time = Time.now.sys
|
|
301
301
|
@request_count += 1
|
|
302
302
|
rescue Errno::ECONNRESET, Errno::ECONNABORTED, Errno::ENOTSOCK, IOError
|
|
303
303
|
# Socket was closed
|
|
@@ -373,7 +373,7 @@ module Cosmos
|
|
|
373
373
|
response_data = response.to_json(:allow_nan => true)
|
|
374
374
|
STDOUT.puts response_data if JsonDRb.debug?
|
|
375
375
|
JsonDRb.send_data(socket, response_data)
|
|
376
|
-
end_time = Time.now
|
|
376
|
+
end_time = Time.now.sys
|
|
377
377
|
request_time = end_time - start_time
|
|
378
378
|
add_request_time(request_time)
|
|
379
379
|
rescue
|
|
@@ -23,7 +23,8 @@ module Cosmos
|
|
|
23
23
|
parity = :NONE,
|
|
24
24
|
stop_bits = 1,
|
|
25
25
|
write_timeout = 10.0,
|
|
26
|
-
read_timeout = nil
|
|
26
|
+
read_timeout = nil,
|
|
27
|
+
flow_control = :NONE)
|
|
27
28
|
|
|
28
29
|
# Convert Baud Rate into Termios constant
|
|
29
30
|
begin
|
|
@@ -57,6 +58,7 @@ module Cosmos
|
|
|
57
58
|
cflags |= Termios::CSTOPB if stop_bits == 2
|
|
58
59
|
cflags |= Termios::PARENB if parity
|
|
59
60
|
cflags |= Termios::PADODD if parity == :ODD
|
|
61
|
+
cflags |= Termios::CRTSCTS if flow_control == :RTSCTS
|
|
60
62
|
tio.iflag = iflags
|
|
61
63
|
tio.oflag = 0
|
|
62
64
|
tio.cflag = cflags
|
data/lib/cosmos/io/raw_logger.rb
CHANGED
|
@@ -66,7 +66,7 @@ module Cosmos
|
|
|
66
66
|
@mutex = Mutex.new
|
|
67
67
|
@file = nil
|
|
68
68
|
@filename = nil
|
|
69
|
-
@start_time = Time.now
|
|
69
|
+
@start_time = Time.now.sys
|
|
70
70
|
@logging_enabled = ConfigParser.handle_true_false(logging_enabled)
|
|
71
71
|
end
|
|
72
72
|
|
|
@@ -107,7 +107,7 @@ module Cosmos
|
|
|
107
107
|
# not created until data is written by {#write} so this does not
|
|
108
108
|
# immediately create a log file on the filesystem.
|
|
109
109
|
def start
|
|
110
|
-
close_file() unless ((Time.now - @start_time) < 1.0) # Prevent close/open too fast
|
|
110
|
+
close_file() unless ((Time.now.sys - @start_time) < 1.0) # Prevent close/open too fast
|
|
111
111
|
@mutex.synchronize { @logging_enabled = true }
|
|
112
112
|
end
|
|
113
113
|
|
|
@@ -136,7 +136,7 @@ module Cosmos
|
|
|
136
136
|
@filename = File.join(@log_directory, File.build_timestamped_filename([@log_name], '.bin'))
|
|
137
137
|
@file = File.new(@filename, 'wb')
|
|
138
138
|
end
|
|
139
|
-
@start_time = Time.now
|
|
139
|
+
@start_time = Time.now.sys
|
|
140
140
|
Logger.instance.info "Raw Log File Opened : #{@filename}"
|
|
141
141
|
end
|
|
142
142
|
rescue => err
|
|
@@ -8,9 +8,10 @@
|
|
|
8
8
|
# as published by the Free Software Foundation; version 3 with
|
|
9
9
|
# attribution addendums as found in the LICENSE.txt
|
|
10
10
|
|
|
11
|
+
require 'cosmos/core_ext/kernel'
|
|
11
12
|
if Kernel.is_windows?
|
|
12
13
|
require 'cosmos/io/win32_serial_driver'
|
|
13
|
-
|
|
14
|
+
elsif RUBY_ENGINE == 'ruby'
|
|
14
15
|
require 'cosmos/io/posix_serial_driver'
|
|
15
16
|
end
|
|
16
17
|
|
|
@@ -31,12 +32,14 @@ module Cosmos
|
|
|
31
32
|
# complete or nil to block
|
|
32
33
|
# @param read_timeout [Float|nil] Number of seconds to wait for the read to
|
|
33
34
|
# complete or nil to block
|
|
35
|
+
# @param flow_control [Symbol] Currently supported :NONE and :RTSCTS
|
|
34
36
|
def initialize(port_name,
|
|
35
37
|
baud_rate,
|
|
36
38
|
parity = :NONE,
|
|
37
39
|
stop_bits = 1,
|
|
38
40
|
write_timeout = 10.0,
|
|
39
|
-
read_timeout = nil
|
|
41
|
+
read_timeout = nil,
|
|
42
|
+
flow_control = :NONE)
|
|
40
43
|
raise(ArgumentError, "Invalid parity: #{parity}") unless VALID_PARITY.include? parity
|
|
41
44
|
if Kernel.is_windows?
|
|
42
45
|
@driver = Win32SerialDriver.new(port_name,
|
|
@@ -44,14 +47,20 @@ module Cosmos
|
|
|
44
47
|
parity,
|
|
45
48
|
stop_bits,
|
|
46
49
|
write_timeout,
|
|
47
|
-
read_timeout
|
|
48
|
-
|
|
50
|
+
read_timeout,
|
|
51
|
+
0.01,
|
|
52
|
+
1000,
|
|
53
|
+
flow_control)
|
|
54
|
+
elsif RUBY_ENGINE == 'ruby'
|
|
49
55
|
@driver = PosixSerialDriver.new(port_name,
|
|
50
56
|
baud_rate,
|
|
51
57
|
parity,
|
|
52
58
|
stop_bits,
|
|
53
59
|
write_timeout,
|
|
54
|
-
read_timeout
|
|
60
|
+
read_timeout,
|
|
61
|
+
flow_control)
|
|
62
|
+
else
|
|
63
|
+
@driver = nil # JRuby Serial on Linux not currently supported
|
|
55
64
|
end
|
|
56
65
|
end
|
|
57
66
|
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
# as published by the Free Software Foundation; version 3 with
|
|
9
9
|
# attribution addendums as found in the LICENSE.txt
|
|
10
10
|
|
|
11
|
+
require 'cosmos/io/serial_driver'
|
|
11
12
|
require 'cosmos/win32/win32'
|
|
12
13
|
require 'timeout' # For Timeout::Error
|
|
13
14
|
|
|
@@ -24,7 +25,8 @@ module Cosmos
|
|
|
24
25
|
write_timeout = 10.0,
|
|
25
26
|
read_timeout = nil,
|
|
26
27
|
read_polling_period = 0.01,
|
|
27
|
-
read_max_length = 1000
|
|
28
|
+
read_max_length = 1000,
|
|
29
|
+
flow_control = :NONE)
|
|
28
30
|
|
|
29
31
|
# Verify Parameters
|
|
30
32
|
port_name = '\\\\.\\' + port_name if port_name =~ /^COM[0-9]{2,3}$/
|
|
@@ -62,12 +64,22 @@ module Cosmos
|
|
|
62
64
|
Win32::FILE_ATTRIBUTE_NORMAL)
|
|
63
65
|
@mutex = Mutex.new
|
|
64
66
|
|
|
65
|
-
# Configure the Comm Port
|
|
67
|
+
# Configure the Comm Port - See: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363214(v=vs.85).aspx
|
|
66
68
|
dcb = Win32.get_comm_state(@handle)
|
|
67
69
|
dcb.write('BaudRate', baud_rate)
|
|
68
70
|
dcb.write('ByteSize', 8)
|
|
69
71
|
dcb.write('Parity', parity)
|
|
70
72
|
dcb.write('StopBits', stop_bits)
|
|
73
|
+
if flow_control == :RTSCTS
|
|
74
|
+
# Monitor CTS
|
|
75
|
+
dcb.write('fOutxCtsFlow', 1)
|
|
76
|
+
|
|
77
|
+
# 0x00 - RTS_CONTROL_DISABLE - Disables the RTS line when the device is opened and leaves it disabled.
|
|
78
|
+
# 0x01 - RTS_CONTROL_ENABLE - Enables the RTS line when the device is opened and leaves it on.
|
|
79
|
+
# 0x02 - RTS_CONTROL_HANDSHAKE - Enables RTS handshaking. The driver raises the RTS line when the "type-ahead" (input) buffer is less than one-half full and lowers the RTS line when the buffer is more than three-quarters full. If handshaking is enabled, it is an error for the application to adjust the line by using the EscapeCommFunction function.
|
|
80
|
+
# 0x03 - RTS_CONTROL_TOGGLE - Specifies that the RTS line will be high if bytes are available for transmission. After all buffered bytes have been sent, the RTS line will be low.
|
|
81
|
+
dcb.write('fRtsControl', 0x03)
|
|
82
|
+
end
|
|
71
83
|
Win32.set_comm_state(@handle, dcb)
|
|
72
84
|
|
|
73
85
|
# Configure Timeouts
|
|
@@ -97,14 +109,14 @@ module Cosmos
|
|
|
97
109
|
# (see SerialDriver#write)
|
|
98
110
|
def write(data)
|
|
99
111
|
# Write the data
|
|
100
|
-
time = Time.now
|
|
112
|
+
time = Time.now.sys
|
|
101
113
|
bytes_to_write = data.length
|
|
102
114
|
while (bytes_to_write > 0)
|
|
103
115
|
bytes_written = Win32.write_file(@handle, data, data.length)
|
|
104
116
|
raise "Error writing to comm port" if bytes_written <= 0
|
|
105
117
|
bytes_to_write -= bytes_written
|
|
106
118
|
data = data[bytes_written..-1]
|
|
107
|
-
raise Timeout::Error, "Write Timeout" if @write_timeout and (Time.now - time > @write_timeout) and bytes_to_write > 0
|
|
119
|
+
raise Timeout::Error, "Write Timeout" if @write_timeout and (Time.now.sys - time > @write_timeout) and bytes_to_write > 0
|
|
108
120
|
end
|
|
109
121
|
end
|
|
110
122
|
|