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
|
@@ -135,7 +135,7 @@ module Cosmos
|
|
|
135
135
|
command = packet(target_upcase, packet_upcase).clone
|
|
136
136
|
|
|
137
137
|
# Set time, parameters, and restore defaults
|
|
138
|
-
command.received_time = Time.now
|
|
138
|
+
command.received_time = Time.now.sys
|
|
139
139
|
command.given_values = params
|
|
140
140
|
command.restore_defaults(command.buffer(false), params.keys)
|
|
141
141
|
command.raw = raw
|
|
@@ -148,41 +148,65 @@ module Cosmos
|
|
|
148
148
|
|
|
149
149
|
# Formatted version of a command
|
|
150
150
|
def format(packet, ignored_parameters = [])
|
|
151
|
-
first = true
|
|
152
151
|
if packet.raw
|
|
153
152
|
items = packet.read_all(:RAW)
|
|
154
|
-
|
|
153
|
+
raw = true
|
|
155
154
|
else
|
|
156
155
|
items = packet.read_all(:FORMATTED)
|
|
157
|
-
|
|
156
|
+
raw = false
|
|
158
157
|
end
|
|
159
|
-
items.
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
158
|
+
items.delete_if {|item_name, item_value| ignored_parameters.include?(item_name)}
|
|
159
|
+
return build_cmd_output_string(packet.target_name, packet.packet_name, items, raw)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def build_cmd_output_string(target_name, cmd_name, cmd_params, raw = false)
|
|
163
|
+
if raw
|
|
164
|
+
output_string = 'cmd_raw("'
|
|
165
|
+
else
|
|
166
|
+
output_string = 'cmd("'
|
|
167
|
+
end
|
|
168
|
+
output_string << target_name + ' ' + cmd_name
|
|
169
|
+
if cmd_params.nil? or cmd_params.empty?
|
|
170
|
+
output_string << '")'
|
|
171
|
+
else
|
|
172
|
+
begin
|
|
173
|
+
command_items = packet(target_name, cmd_name).items
|
|
174
|
+
rescue
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
params = []
|
|
178
|
+
cmd_params.each do |key, value|
|
|
179
|
+
|
|
180
|
+
begin
|
|
181
|
+
item_type = command_items[key].data_type
|
|
182
|
+
rescue
|
|
183
|
+
item_type = nil
|
|
166
184
|
end
|
|
167
185
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
if (Array === item_value) && (!packet.raw)
|
|
177
|
-
string << "#{item_name} [#{item_value.join(", ")}]"
|
|
186
|
+
if value.is_a?(String)
|
|
187
|
+
value = value.dup
|
|
188
|
+
if item_type == :BLOCK or item_type == :STRING
|
|
189
|
+
if !value.is_printable?
|
|
190
|
+
value = "0x" + value.simple_formatted
|
|
191
|
+
else
|
|
192
|
+
value = value.inspect
|
|
193
|
+
end
|
|
178
194
|
else
|
|
179
|
-
|
|
195
|
+
value = value.convert_to_value.to_s
|
|
196
|
+
end
|
|
197
|
+
if value.length > 256
|
|
198
|
+
value = value[0..255] + "...'"
|
|
180
199
|
end
|
|
200
|
+
value.tr!('"',"'")
|
|
201
|
+
elsif value.is_a?(Array)
|
|
202
|
+
value = "[#{value.join(", ")}]"
|
|
181
203
|
end
|
|
204
|
+
params << "#{key} #{value}"
|
|
182
205
|
end
|
|
206
|
+
params = params.join(", ")
|
|
207
|
+
output_string << ' with ' + params + '")'
|
|
183
208
|
end
|
|
184
|
-
|
|
185
|
-
string
|
|
209
|
+
return output_string
|
|
186
210
|
end
|
|
187
211
|
|
|
188
212
|
# Returns whether the given command is hazardous. Commands are hazardous
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
require 'cosmos/packets/structure'
|
|
12
12
|
require 'cosmos/packets/packet_item'
|
|
13
|
-
require 'cosmos/ext/packet'
|
|
13
|
+
require 'cosmos/ext/packet' if RUBY_ENGINE == 'ruby' and !ENV['COSMOS_NO_EXT']
|
|
14
14
|
|
|
15
15
|
module Cosmos
|
|
16
16
|
|
|
@@ -43,7 +43,7 @@ module Cosmos
|
|
|
43
43
|
# @return [String] Description of why the packet is hazardous
|
|
44
44
|
attr_reader :hazardous_description
|
|
45
45
|
|
|
46
|
-
#
|
|
46
|
+
# Contains the values given by the user for a command (distinguished from defaults)
|
|
47
47
|
# These values should be used within command conversions if present because the order
|
|
48
48
|
# that values are written into the actual packet can vary
|
|
49
49
|
# @return [Hash<Item Name, Value>] Given values when constructing the packet
|
|
@@ -70,16 +70,144 @@ module Cosmos
|
|
|
70
70
|
# Valid format types
|
|
71
71
|
VALUE_TYPES = [:RAW, :CONVERTED, :FORMATTED, :WITH_UNITS]
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
73
|
+
if RUBY_ENGINE != 'ruby' or ENV['COSMOS_NO_EXT']
|
|
74
|
+
# Creates a new packet by initalizing the attributes.
|
|
75
|
+
#
|
|
76
|
+
# @param target_name [String] Name of the target this packet is associated with
|
|
77
|
+
# @param packet_name [String] Name of the packet
|
|
78
|
+
# @param default_endianness [Symbol] One of {BinaryAccessor::ENDIANNESS}
|
|
79
|
+
# @param description [String] Description of the packet
|
|
80
|
+
# @param buffer [String] String buffer to hold the packet data
|
|
81
|
+
# @param item_class [Class] Class used to instantiate items (Must be a
|
|
82
|
+
# subclass of PacketItem)
|
|
83
|
+
def initialize(target_name, packet_name, default_endianness = :BIG_ENDIAN, description = nil, buffer = '', item_class = PacketItem)
|
|
84
|
+
super(default_endianness, buffer, item_class)
|
|
85
|
+
self.target_name = target_name
|
|
86
|
+
self.packet_name = packet_name
|
|
87
|
+
self.description = description
|
|
88
|
+
@received_time = nil
|
|
89
|
+
@received_count = 0
|
|
90
|
+
@id_items = nil
|
|
91
|
+
@hazardous = false
|
|
92
|
+
@hazardous_description = nil
|
|
93
|
+
@given_values = nil
|
|
94
|
+
@limits_items = nil
|
|
95
|
+
@processors = nil
|
|
96
|
+
@stale = true
|
|
97
|
+
@limits_change_callback = nil
|
|
98
|
+
@read_conversion_cache = nil
|
|
99
|
+
@raw = nil
|
|
100
|
+
@messages_disabled = false
|
|
101
|
+
@meta = nil
|
|
102
|
+
@hidden = false
|
|
103
|
+
@disabled = false
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Sets the target name this packet is associated with. Unidentified packets
|
|
107
|
+
# will have target name set to nil.
|
|
108
|
+
#
|
|
109
|
+
# @param target_name [String] Name of the target this packet is associated with
|
|
110
|
+
def target_name=(target_name)
|
|
111
|
+
if target_name
|
|
112
|
+
if !(String === target_name)
|
|
113
|
+
raise(ArgumentError, "target_name must be a String but is a #{target_name.class}")
|
|
114
|
+
end
|
|
115
|
+
@target_name = target_name.upcase.freeze
|
|
116
|
+
else
|
|
117
|
+
@target_name = nil
|
|
118
|
+
end
|
|
119
|
+
@target_name
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# Sets the packet name. Unidentified packets will have packet name set to
|
|
123
|
+
# nil.
|
|
124
|
+
#
|
|
125
|
+
# @param packet_name [String] Name of the packet
|
|
126
|
+
def packet_name=(packet_name)
|
|
127
|
+
if packet_name
|
|
128
|
+
if !(String === packet_name)
|
|
129
|
+
raise(ArgumentError, "packet_name must be a String but is a #{packet_name.class}")
|
|
130
|
+
end
|
|
131
|
+
@packet_name = packet_name.upcase.freeze
|
|
132
|
+
else
|
|
133
|
+
@packet_name = nil
|
|
134
|
+
end
|
|
135
|
+
@packet_name
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# Sets the description of the packet
|
|
139
|
+
#
|
|
140
|
+
# @param description [String] Description of the packet
|
|
141
|
+
def description=(description)
|
|
142
|
+
if description
|
|
143
|
+
if !(String === description)
|
|
144
|
+
raise(ArgumentError, "description must be a String but is a #{description.class}")
|
|
145
|
+
end
|
|
146
|
+
@description = description.clone.freeze
|
|
147
|
+
else
|
|
148
|
+
@description = nil
|
|
149
|
+
end
|
|
150
|
+
@description
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# Sets the received time of the packet
|
|
154
|
+
#
|
|
155
|
+
# @param received_time [Time] Time this packet was received
|
|
156
|
+
def received_time=(received_time)
|
|
157
|
+
if received_time
|
|
158
|
+
if !(Time === received_time)
|
|
159
|
+
raise(ArgumentError, "received_time must be a Time but is a #{received_time.class}")
|
|
160
|
+
end
|
|
161
|
+
@received_time = received_time.clone.freeze
|
|
162
|
+
else
|
|
163
|
+
@received_time = nil
|
|
164
|
+
end
|
|
165
|
+
@read_conversion_cache.clear if @read_conversion_cache
|
|
166
|
+
@received_time
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Sets the received count of the packet
|
|
170
|
+
#
|
|
171
|
+
# @param received_count [Integer] Number of times this packet has been
|
|
172
|
+
# received
|
|
173
|
+
def received_count=(received_count)
|
|
174
|
+
if !(Integer === received_count)
|
|
175
|
+
raise(ArgumentError, "received_count must be an Integer but is a #{received_count.class}")
|
|
176
|
+
end
|
|
177
|
+
@received_count = received_count
|
|
178
|
+
@read_conversion_cache.clear if @read_conversion_cache
|
|
179
|
+
@received_count
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Tries to identify if a buffer represents the currently defined packet. It
|
|
183
|
+
# does this by iterating over all the packet items that were created with
|
|
184
|
+
# an ID value and checking whether that ID value is present at the correct
|
|
185
|
+
# location in the buffer.
|
|
186
|
+
#
|
|
187
|
+
# Incorrectly sized buffers will still positively identify if there is
|
|
188
|
+
# enough data to match the ID values. This is to allow incorrectly sized
|
|
189
|
+
# packets to still be processed as well as possible given the incorrectly
|
|
190
|
+
# sized data.
|
|
191
|
+
#
|
|
192
|
+
# @param buffer [String] Raw buffer of binary data
|
|
193
|
+
# @return [Boolean] Whether or not the buffer of data is this packet
|
|
194
|
+
def identify?(buffer)
|
|
195
|
+
return false unless buffer
|
|
196
|
+
return true unless @id_items
|
|
197
|
+
|
|
198
|
+
@id_items.each do |item|
|
|
199
|
+
begin
|
|
200
|
+
value = read_item(item, :RAW, buffer)
|
|
201
|
+
rescue Exception
|
|
202
|
+
value = nil
|
|
203
|
+
end
|
|
204
|
+
return false if item.id_value != value
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
true
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
end
|
|
83
211
|
|
|
84
212
|
# (see Structure#buffer=)
|
|
85
213
|
def buffer=(buffer)
|
|
@@ -94,28 +222,6 @@ module Cosmos
|
|
|
94
222
|
end
|
|
95
223
|
end
|
|
96
224
|
|
|
97
|
-
# Sets the target name this packet is associated with. Unidentified packets
|
|
98
|
-
# will have target name set to nil.
|
|
99
|
-
#
|
|
100
|
-
# @param target_name [String] Name of the target this packet is associated with
|
|
101
|
-
# def target_name=(target_name)
|
|
102
|
-
|
|
103
|
-
# Sets the packet name. Unidentified packets will have packet name set to
|
|
104
|
-
# nil.
|
|
105
|
-
#
|
|
106
|
-
# @param packet_name [String] Name of the packet
|
|
107
|
-
# def packet_name=(packet_name)
|
|
108
|
-
|
|
109
|
-
# Sets the description of the packet
|
|
110
|
-
#
|
|
111
|
-
# @param description [String] Description of the packet
|
|
112
|
-
# def description=(description)
|
|
113
|
-
|
|
114
|
-
# Sets the received time of the packet
|
|
115
|
-
#
|
|
116
|
-
# @param received_time [Time] Time this packet was received
|
|
117
|
-
# def received_time=(received_time)
|
|
118
|
-
|
|
119
225
|
# Sets the received time of the packet (without cloning)
|
|
120
226
|
#
|
|
121
227
|
# @param received_time [Time] Time this packet was received
|
|
@@ -129,12 +235,6 @@ module Cosmos
|
|
|
129
235
|
end
|
|
130
236
|
end
|
|
131
237
|
|
|
132
|
-
# Sets the received count of the packet
|
|
133
|
-
#
|
|
134
|
-
# @param received_count [Integer] Number of times this packet has been
|
|
135
|
-
# received
|
|
136
|
-
# def received_count=(received_count)
|
|
137
|
-
|
|
138
238
|
# Sets the hazardous description of the packet
|
|
139
239
|
#
|
|
140
240
|
# @param hazardous_description [String] Hazardous description of the packet
|
|
@@ -539,20 +639,6 @@ module Cosmos
|
|
|
539
639
|
return super(value_type, indent, buffer)
|
|
540
640
|
end
|
|
541
641
|
|
|
542
|
-
# Tries to identify if a buffer represents the currently defined packet. It
|
|
543
|
-
# does this by iterating over all the packet items that were created with
|
|
544
|
-
# an ID value and checking whether that ID value is present at the correct
|
|
545
|
-
# location in the buffer.
|
|
546
|
-
#
|
|
547
|
-
# Incorrectly sized buffers will still positively identify if there is
|
|
548
|
-
# enough data to match the ID values. This is to allow incorrectly sized
|
|
549
|
-
# packets to still be processed as well as possible given the incorrectly
|
|
550
|
-
# sized data.
|
|
551
|
-
#
|
|
552
|
-
# @param buffer [String] Raw buffer of binary data
|
|
553
|
-
# @return [Boolean] Whether or not the buffer of data is this packet
|
|
554
|
-
# def identify?(buffer)
|
|
555
|
-
|
|
556
642
|
# Restore all items in the packet to their default value
|
|
557
643
|
#
|
|
558
644
|
# @param buffer [String] Raw buffer of binary data
|
|
@@ -73,10 +73,8 @@ module Cosmos
|
|
|
73
73
|
@warnings = []
|
|
74
74
|
|
|
75
75
|
# Create unknown packets
|
|
76
|
-
@commands['UNKNOWN']
|
|
77
76
|
@commands['UNKNOWN'] = {}
|
|
78
77
|
@commands['UNKNOWN']['UNKNOWN'] = Packet.new('UNKNOWN', 'UNKNOWN', :BIG_ENDIAN)
|
|
79
|
-
@telemetry['UNKNOWN']
|
|
80
78
|
@telemetry['UNKNOWN'] = {}
|
|
81
79
|
@telemetry['UNKNOWN']['UNKNOWN'] = Packet.new('UNKNOWN', 'UNKNOWN', :BIG_ENDIAN)
|
|
82
80
|
|
|
@@ -131,8 +131,16 @@ module Cosmos
|
|
|
131
131
|
|
|
132
132
|
index = append? ? 3 : 4
|
|
133
133
|
data_type = get_data_type()
|
|
134
|
-
if data_type == :STRING or data_type == :BLOCK
|
|
135
|
-
|
|
134
|
+
if data_type == :STRING or data_type == :BLOCK
|
|
135
|
+
# If the default value is 0x<data> (no quotes), it is treated as
|
|
136
|
+
# binary data. Otherwise, the default value is considered to be a string.
|
|
137
|
+
if (@parser.parameters[index].upcase.start_with?("0X") and
|
|
138
|
+
!@parser.line.include?("\"#{@parser.parameters[index]}\"") and
|
|
139
|
+
!@parser.line.include?("\'#{@parser.parameters[index]}\'"))
|
|
140
|
+
return @parser.parameters[index].hex_to_byte_string
|
|
141
|
+
else
|
|
142
|
+
return @parser.parameters[index]
|
|
143
|
+
end
|
|
136
144
|
else
|
|
137
145
|
return ConfigParser.handle_defined_constants(
|
|
138
146
|
@parser.parameters[index+2].convert_to_value, get_data_type(), get_bit_size())
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
require 'cosmos/packets/binary_accessor'
|
|
12
12
|
require 'cosmos/packets/structure_item'
|
|
13
|
-
require 'cosmos/ext/packet'
|
|
13
|
+
require 'cosmos/ext/packet' if RUBY_ENGINE == 'ruby' and !ENV['COSMOS_NO_EXT']
|
|
14
14
|
|
|
15
15
|
module Cosmos
|
|
16
16
|
|
|
@@ -44,21 +44,87 @@ module Cosmos
|
|
|
44
44
|
# required data size is allowed.
|
|
45
45
|
attr_accessor :short_buffer_allowed
|
|
46
46
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
if RUBY_ENGINE != 'ruby' or ENV['COSMOS_NO_EXT']
|
|
48
|
+
# Used to force encoding
|
|
49
|
+
ASCII_8BIT_STRING = "ASCII-8BIT".freeze
|
|
50
|
+
|
|
51
|
+
# String providing a single 0 byte
|
|
52
|
+
ZERO_STRING = "\000".freeze
|
|
53
|
+
|
|
54
|
+
# Structure constructor
|
|
55
|
+
#
|
|
56
|
+
# @param default_endianness [Symbol] Must be one of
|
|
57
|
+
# {BinaryAccessor::ENDIANNESS}. By default it uses
|
|
58
|
+
# BinaryAccessor::HOST_ENDIANNESS to determine the endianness of the host platform.
|
|
59
|
+
# @param buffer [String] Buffer used to store the structure
|
|
60
|
+
# @param item_class [Class] Class used to instantiate new structure items.
|
|
61
|
+
# Must be StructureItem or one of its subclasses.
|
|
62
|
+
def initialize(default_endianness = BinaryAccessor::HOST_ENDIANNESS, buffer = '', item_class = StructureItem)
|
|
63
|
+
if (default_endianness == :BIG_ENDIAN) || (default_endianness == :LITTLE_ENDIAN)
|
|
64
|
+
@default_endianness = default_endianness
|
|
65
|
+
if buffer
|
|
66
|
+
raise TypeError, "wrong argument type #{buffer.class} (expected String)" unless String === buffer
|
|
67
|
+
@buffer = buffer.force_encoding(ASCII_8BIT_STRING)
|
|
68
|
+
else
|
|
69
|
+
@buffer = nil
|
|
70
|
+
end
|
|
71
|
+
@item_class = item_class
|
|
72
|
+
@items = {}
|
|
73
|
+
@sorted_items = []
|
|
74
|
+
@defined_length = 0
|
|
75
|
+
@defined_length_bits = 0
|
|
76
|
+
@pos_bit_size = 0
|
|
77
|
+
@neg_bit_size = 0
|
|
78
|
+
@fixed_size = true
|
|
79
|
+
@short_buffer_allowed = false
|
|
80
|
+
@mutex = nil
|
|
81
|
+
else
|
|
82
|
+
raise(ArgumentError, "Unrecognized endianness: #{default_endianness} - Must be :BIG_ENDIAN or :LITTLE_ENDIAN")
|
|
83
|
+
end
|
|
84
|
+
end
|
|
50
85
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
86
|
+
# Read an item in the structure
|
|
87
|
+
#
|
|
88
|
+
# @param item [StructureItem] Instance of StructureItem or one of its subclasses
|
|
89
|
+
# @param value_type [Symbol] Not used. Subclasses should overload this
|
|
90
|
+
# parameter to check whether to perform conversions on the item.
|
|
91
|
+
# @param buffer [String] The binary buffer to read the item from
|
|
92
|
+
# @return Value based on the item definition. This could be a string, integer,
|
|
93
|
+
# float, or array of values.
|
|
94
|
+
def read_item(item, value_type = :RAW, buffer = @buffer)
|
|
95
|
+
return nil if item.data_type == :DERIVED
|
|
96
|
+
|
|
97
|
+
if buffer
|
|
98
|
+
if item.array_size
|
|
99
|
+
return BinaryAccessor.read_array(item.bit_offset, item.bit_size, item.data_type, item.array_size, buffer, item.endianness)
|
|
100
|
+
else
|
|
101
|
+
return BinaryAccessor.read(item.bit_offset, item.bit_size, item.data_type, buffer, item.endianness)
|
|
102
|
+
end
|
|
103
|
+
else
|
|
104
|
+
raise "No buffer given to read_item"
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Get the length of the buffer used by the structure
|
|
109
|
+
#
|
|
110
|
+
# @return [Integer] Size of the buffer in bytes
|
|
111
|
+
def length
|
|
112
|
+
return @buffer.length if @buffer
|
|
113
|
+
return 0
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Resize the buffer at least the defined length of the structure
|
|
117
|
+
def resize_buffer
|
|
118
|
+
if @buffer
|
|
119
|
+
# Extend data size
|
|
120
|
+
if @buffer.length < @defined_length
|
|
121
|
+
@buffer << (ZERO_STRING * (@defined_length - @buffer.length))
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
return self
|
|
126
|
+
end
|
|
127
|
+
end
|
|
62
128
|
|
|
63
129
|
# Indicates if any items have been defined for this structure
|
|
64
130
|
# @return [TrueClass or FalseClass]
|
|
@@ -229,16 +295,6 @@ module Cosmos
|
|
|
229
295
|
end
|
|
230
296
|
end
|
|
231
297
|
|
|
232
|
-
# Read an item in the structure
|
|
233
|
-
#
|
|
234
|
-
# @param item [StructureItem] Instance of StructureItem or one of its subclasses
|
|
235
|
-
# @param value_type [Symbol] Not used. Subclasses should overload this
|
|
236
|
-
# parameter to check whether to perform conversions on the item.
|
|
237
|
-
# @param buffer [String] The binary buffer to read the item from
|
|
238
|
-
# @return Value based on the item definition. This could be a string, integer,
|
|
239
|
-
# float, or array of values.
|
|
240
|
-
# def read_item(item, value_type = :RAW, buffer = @buffer)
|
|
241
|
-
|
|
242
298
|
# Write a value to the buffer based on the item definition
|
|
243
299
|
#
|
|
244
300
|
# @param item [StructureItem] Instance of StructureItem or one of its subclasses
|
|
@@ -330,11 +386,6 @@ module Cosmos
|
|
|
330
386
|
return string
|
|
331
387
|
end
|
|
332
388
|
|
|
333
|
-
# Get the length of the buffer used by the structure
|
|
334
|
-
#
|
|
335
|
-
# @return [Integer] Size of the buffer in bytes
|
|
336
|
-
# def length
|
|
337
|
-
|
|
338
389
|
# Get the buffer used by the structure. The current buffer is copied and
|
|
339
390
|
# thus modifications to the returned buffer will have no effect on the
|
|
340
391
|
# structure items.
|
|
@@ -438,9 +489,6 @@ module Cosmos
|
|
|
438
489
|
end
|
|
439
490
|
end
|
|
440
491
|
|
|
441
|
-
# Resize the buffer at least the defined length of the structure
|
|
442
|
-
# def resize_buffer
|
|
443
|
-
|
|
444
492
|
def internal_buffer_equals(buffer)
|
|
445
493
|
raise ArgumentError, "Buffer class is #{buffer.class} but must be String" unless String === buffer
|
|
446
494
|
@buffer = buffer.dup
|