cosmos 4.2.4-java → 4.5.0-java
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/.dockerignore +2 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +30 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
- data/.github/ISSUE_TEMPLATE/help---usage---general-question.md +12 -0
- data/.gitignore +2 -0
- data/.travis.yml +6 -6
- data/Dockerfile +69 -0
- data/Gemfile +1 -1
- data/Manifest.txt +130 -46
- data/README.md +9 -0
- data/Rakefile +57 -0
- data/appveyor.yml +18 -7
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
- data/autohotkey/config/targets/INST/lib/sim_inst.rb +3 -1
- data/autohotkey/config/tools/cmd_sequence/cmd_sequence.txt +2 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +2 -4
- data/autohotkey/config/tools/table_manager/SubTables/OneDimensionalSubTable_def.txt +31 -0
- data/autohotkey/config/tools/table_manager/SubTables/TwoDimensionalSubTable_def.txt +28 -0
- data/autohotkey/config/tools/test_runner/test_runner.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner3.txt +1 -1
- data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
- data/autohotkey/lib/cmd_sequence_exporter.rb +52 -0
- data/autohotkey/procedures/collect.rb +2 -2
- data/autohotkey/procedures/collect_util.rb +1 -1
- data/autohotkey/procedures/script_test.rb +1 -1
- data/autohotkey/tools/CmdSenderAHK2 +18 -0
- data/autohotkey/tools/cmd_sender.ahk +34 -6
- data/autohotkey/tools/cmd_sender2.ahk +4 -0
- data/autohotkey/tools/cmd_sequence.ahk +36 -22
- data/autohotkey/tools/cmd_sequence2.ahk +1 -1
- data/autohotkey/tools/config_editor.ahk +5 -5
- data/autohotkey/tools/launcher.ahk +1 -0
- data/autohotkey/tools/limits_monitor.ahk +1 -1
- data/autohotkey/tools/packet_viewer.ahk +7 -6
- data/autohotkey/tools/script_runner.ahk +16 -4
- data/autohotkey/tools/test_runner.ahk +8 -8
- data/bin/cosmos +38 -1
- data/bin/cstol_converter +1 -1
- data/bin/dart_util +0 -0
- data/bin/rubysloc +73 -28
- data/bin/xtce_converter +1 -1
- data/cosmos.gemspec +7 -9
- data/data/config/_interfaces.yaml +4 -0
- data/data/config/cmd_sequence.yaml +14 -0
- data/data/config/command_modifiers.yaml +16 -1
- data/data/config/housekeeping_params.yaml +14 -0
- data/data/config/interface_modifiers.yaml +14 -2
- data/data/config/item_modifiers.yaml +11 -1
- data/data/config/launcher.yaml +12 -2
- data/data/config/param_item_modifiers.yaml +7 -2
- data/data/config/parameter_modifiers.yaml +20 -0
- data/data/config/screen.yaml +2 -0
- data/data/config/script_runner.yaml +9 -0
- data/data/config/system.yaml +152 -28
- data/data/config/table_manager.yaml +7 -0
- data/data/config/target.yaml +12 -0
- data/data/config/telemetry_modifiers.yaml +19 -2
- data/data/config/test_runner.yaml +10 -9
- data/data/config/widgets.yaml +174 -11
- data/data/crc.txt +428 -415
- data/demo/Gemfile +1 -1
- data/demo/Launcher.bat +1 -9
- data/demo/Launcher2.bat +1 -0
- data/demo/LauncherMini.bat +1 -0
- data/demo/Rakefile +2 -0
- data/demo/config/dart/Gemfile +2 -7
- data/demo/config/data/crc.txt +243 -219
- data/demo/config/system/system.txt +42 -3
- data/demo/config/system/system2.txt +34 -5
- data/demo/config/system/system_alt_ports.txt +80 -0
- data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +1 -0
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +5 -4
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +12 -7
- data/demo/config/targets/INST/cmd_tlm/inst_tlm_override.txt +12 -0
- data/demo/config/targets/INST/cmd_tlm_server.txt +2 -0
- data/demo/config/targets/INST/lib/sim_inst.rb +15 -3
- data/demo/config/targets/INST/screens/adcs.txt +2 -2
- data/demo/config/targets/INST/screens/block.txt +1 -1
- data/demo/config/targets/INST/screens/commanding.txt +1 -1
- data/demo/config/targets/INST/screens/ground.txt +27 -5
- data/demo/config/targets/INST/screens/ground_error.gif +0 -0
- data/demo/config/{data/groundoff.gif → targets/INST/screens/ground_off.gif} +0 -0
- data/demo/config/{data/groundon.gif → targets/INST/screens/ground_on.gif} +0 -0
- data/demo/config/targets/INST/screens/limits.txt +69 -31
- data/demo/config/targets/INST/screens/other.txt +13 -3
- data/demo/config/targets/INST/screens/params.txt +54 -0
- data/demo/config/targets/INST/screens/satellite.gif +0 -0
- data/demo/config/targets/INST/target.txt +1 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server_chain.txt +18 -0
- data/demo/config/tools/data_viewer/data_viewer.txt +3 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/demo/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/demo/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/demo/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/demo/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/demo/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/demo/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/demo/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/demo/config/tools/handbook_creator/default_toc.xsl +59 -59
- data/demo/config/tools/script_runner/script_runner.txt +1 -2
- data/demo/config/tools/test_runner/test_runner.txt +3 -1
- data/demo/lib/example_background_task.rb +1 -0
- data/demo/procedures/cosmos_api_test.rb +26 -22
- data/demo/procedures/interactive.rb +22 -0
- data/demo/procedures/local_screen_example.rb +51 -0
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +32 -4
- data/ext/cosmos/ext/packet/packet.c +6 -77
- data/ext/mkrf_conf.rb +2 -2
- data/extensions/vscode/.gitignore +4 -0
- data/extensions/vscode/.vscode/launch.json +32 -0
- data/extensions/vscode/.vscode/settings.json +13 -0
- data/extensions/vscode/.vscode/tasks.json +79 -0
- data/extensions/vscode/License.txt +879 -0
- data/extensions/vscode/README.md +9 -0
- data/extensions/vscode/client/License.txt +879 -0
- data/extensions/vscode/client/README.md +39 -0
- data/extensions/vscode/client/cosmos.configuration.json +23 -0
- data/extensions/vscode/client/images/icon.png +0 -0
- data/extensions/vscode/client/package-lock.json +414 -0
- data/extensions/vscode/client/package.json +105 -0
- data/extensions/vscode/client/src/extension.ts +132 -0
- data/extensions/vscode/client/src/screen_preview.rb +25 -0
- data/extensions/vscode/client/syntaxes/cosmos.tmLanguage.json +219 -0
- data/extensions/vscode/client/tsconfig.json +17 -0
- data/extensions/vscode/package-lock.json +26 -0
- data/extensions/vscode/package.json +35 -0
- data/extensions/vscode/server/License.txt +879 -0
- data/extensions/vscode/server/package-lock.json +236 -0
- data/extensions/vscode/server/package.json +29 -0
- data/extensions/vscode/server/src/server.ts +59 -0
- data/extensions/vscode/server/tsconfig.json +16 -0
- data/install/Gemfile +1 -1
- data/install/Launcher.bat +1 -9
- data/install/config/dart/Gemfile +3 -8
- data/install/config/data/crc.txt +148 -132
- data/install/config/system/system.txt +36 -3
- data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/install/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/install/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/install/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/install/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/install/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/install/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/install/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/install/config/tools/handbook_creator/default_toc.xsl +59 -59
- data/lib/cosmos/config/config_parser.rb +4 -5
- data/lib/cosmos/conversions.rb +2 -0
- data/lib/cosmos/conversions/packet_time_formatted_conversion.rb +38 -0
- data/lib/cosmos/conversions/packet_time_seconds_conversion.rb +38 -0
- data/lib/cosmos/core_ext/cosmos_io.rb +2 -1
- data/lib/cosmos/core_ext/time.rb +3 -1
- data/lib/cosmos/dart/config/boot.rb +1 -1
- data/lib/cosmos/dart/config/database.yml +2 -0
- data/lib/cosmos/dart/examples/dart_decom_client.rb +1 -1
- data/lib/cosmos/dart/examples/dart_stream_client.rb +6 -2
- data/lib/cosmos/dart/lib/dart_common.rb +13 -6
- data/lib/cosmos/dart/lib/dart_constants.rb +15 -0
- data/lib/cosmos/dart/lib/dart_database_cleaner.rb +2 -2
- data/lib/cosmos/dart/lib/dart_decom_query.rb +5 -6
- data/lib/cosmos/dart/lib/dart_decommutator.rb +64 -54
- data/lib/cosmos/dart/lib/dart_importer.rb +3 -3
- data/lib/cosmos/dart/lib/dart_master_query.rb +71 -0
- data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +2 -2
- data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +165 -134
- data/lib/cosmos/dart/processes/dart.rb +4 -2
- data/lib/cosmos/dart/processes/dart_decom_server.rb +3 -3
- data/lib/cosmos/dart/processes/dart_ingester.rb +40 -1
- data/lib/cosmos/dart/processes/dart_master.rb +44 -0
- data/lib/cosmos/dart/processes/dart_util.rb +119 -4
- data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +3 -3
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +9 -5
- data/lib/cosmos/gui/dialogs/details_dialog.rb +44 -29
- data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +3 -3
- data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +2 -2
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +1 -1
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +11 -10
- data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +4 -2
- data/lib/cosmos/gui/opengl/earth_model.rb +1 -1
- data/lib/cosmos/gui/qt.rb +13 -2
- data/lib/cosmos/gui/qt_tool.rb +71 -43
- data/lib/cosmos/gui/text/ruby_editor.rb +91 -49
- data/lib/cosmos/gui/utilities/classification_banner.rb +60 -0
- data/lib/cosmos/gui/utilities/screenshot.rb +1 -1
- data/lib/cosmos/gui/utilities/script_module_gui.rb +117 -91
- data/lib/cosmos/gui/widgets/dart_meta_frame.rb +22 -3
- data/lib/cosmos/interfaces.rb +2 -0
- data/lib/cosmos/interfaces/dart_status_interface.rb +1 -1
- data/lib/cosmos/interfaces/interface.rb +9 -1
- data/lib/cosmos/interfaces/linc_interface.rb +3 -3
- data/lib/cosmos/interfaces/protocols/burst_protocol.rb +1 -1
- data/lib/cosmos/interfaces/protocols/crc_protocol.rb +1 -1
- data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +40 -18
- data/lib/cosmos/interfaces/protocols/ignore_packet_protocol.rb +46 -0
- data/lib/cosmos/interfaces/protocols/length_protocol.rb +5 -0
- data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +68 -23
- data/lib/cosmos/interfaces/protocols/template_protocol.rb +9 -4
- data/lib/cosmos/interfaces/serial_interface.rb +7 -1
- data/lib/cosmos/interfaces/simulated_target_interface.rb +14 -5
- data/lib/cosmos/interfaces/stream_interface.rb +1 -1
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +13 -13
- data/lib/cosmos/io/json_drb.rb +16 -12
- data/lib/cosmos/io/json_drb_object.rb +7 -2
- data/lib/cosmos/io/json_drb_rack.rb +25 -5
- data/lib/cosmos/io/json_rpc.rb +1 -1
- data/lib/cosmos/io/posix_serial_driver.rb +60 -22
- data/lib/cosmos/io/serial_driver.rb +11 -8
- data/lib/cosmos/io/win32_serial_driver.rb +31 -3
- data/lib/cosmos/packet_logs/packet_log_reader.rb +71 -28
- data/lib/cosmos/packet_logs/packet_log_writer.rb +13 -1
- data/lib/cosmos/packets/commands.rb +30 -9
- data/lib/cosmos/packets/packet.rb +105 -34
- data/lib/cosmos/packets/packet_config.rb +60 -10
- data/lib/cosmos/packets/parsers/format_string_parser.rb +0 -1
- data/lib/cosmos/packets/parsers/state_parser.rb +0 -1
- data/lib/cosmos/packets/parsers/xtce_converter.rb +2 -0
- data/lib/cosmos/packets/parsers/xtce_parser.rb +5 -4
- data/lib/cosmos/packets/structure.rb +32 -4
- data/lib/cosmos/packets/structure_item.rb +5 -1
- data/lib/cosmos/packets/telemetry.rb +30 -4
- data/lib/cosmos/script/api_shared.rb +22 -10
- data/lib/cosmos/script/extract.rb +1 -1
- data/lib/cosmos/script/limits.rb +4 -0
- data/lib/cosmos/script/script.rb +29 -20
- data/lib/cosmos/script/scripting.rb +16 -14
- data/lib/cosmos/script/telemetry.rb +3 -1
- data/lib/cosmos/script/tools.rb +18 -8
- data/lib/cosmos/streams/serial_stream.rb +11 -6
- data/lib/cosmos/system/system.rb +214 -76
- data/lib/cosmos/system/target.rb +39 -9
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +116 -55
- data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +15 -0
- data/lib/cosmos/tools/cmd_sender/cmd_params.rb +382 -0
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +54 -340
- data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +74 -52
- data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +40 -333
- data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +16 -11
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +13 -0
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +2 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +44 -15
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +8 -1
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +18 -20
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +13 -2
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +2 -2
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +13 -13
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +9 -6
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +8 -8
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +5 -5
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +35 -20
- data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +15 -11
- data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +5 -0
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +2 -0
- data/lib/cosmos/tools/config_editor/config_editor.rb +181 -94
- data/lib/cosmos/tools/config_editor/config_editor_frame.rb +10 -9
- data/lib/cosmos/tools/config_editor/system_config_dialog.rb +158 -0
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +57 -47
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +1 -0
- data/lib/cosmos/tools/data_viewer/dump_component.rb +3 -9
- data/lib/cosmos/tools/data_viewer/text_component.rb +77 -0
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +68 -42
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +1 -1
- data/lib/cosmos/tools/launcher/launcher.rb +2 -1
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +59 -41
- data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +42 -42
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +64 -59
- data/lib/cosmos/tools/script_runner/script_runner.rb +198 -123
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +14 -0
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +87 -35
- data/lib/cosmos/tools/table_manager/table_config.rb +5 -3
- data/lib/cosmos/tools/table_manager/table_manager.rb +48 -45
- data/lib/cosmos/tools/test_runner/test.rb +5 -2
- data/lib/cosmos/tools/test_runner/test_runner.rb +61 -38
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +24 -12
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +48 -48
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +5 -8
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +20 -16
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +3 -3
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +7 -7
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +10 -10
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +10 -3
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +6 -6
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +14 -14
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +21 -17
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +5 -8
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +94 -91
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +27 -26
- data/lib/cosmos/tools/tlm_viewer/screen.rb +76 -14
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +51 -34
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +3 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +4 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +4 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +16 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +17 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +1 -2
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasellipse_widget.rb +40 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +12 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +79 -29
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +1 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +2 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +2 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +4 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +33 -25
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +1 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +4 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +5 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +6 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +2 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +10 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelled_widget.rb +58 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +2 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +2 -1
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/led_widget.rb +108 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +60 -10
- data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +22 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +19 -13
- data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +22 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +4 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +1 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +10 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +7 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +4 -6
- data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +3 -5
- data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +4 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +4 -6
- data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +13 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +3 -8
- data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +6 -12
- data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +5 -10
- data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +5 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +4 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +3 -4
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +2 -3
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +8 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +9 -7
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +60 -47
- data/lib/cosmos/top_level.rb +37 -13
- data/lib/cosmos/utilities/ruby_lex_utils.rb +34 -30
- data/lib/cosmos/version.rb +5 -5
- data/lib/cosmos/win32/excel.rb +81 -24
- data/make_gems.sh +10 -0
- data/run_gui_tests.bat +1 -0
- data/spec/conversions/packet_time_formatted_conversion_spec.rb +58 -0
- data/spec/conversions/packet_time_seconds_conversion_spec.rb +60 -0
- data/spec/core_ext/socket_spec.rb +1 -1
- data/spec/core_ext/time_spec.rb +4 -0
- data/spec/gui/utilities/script_module_gui_spec.rb +44 -63
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
- data/spec/install/yaml_docs_spec.rb +132 -0
- data/spec/interfaces/linc_interface_spec.rb +1 -1
- data/spec/interfaces/protocols/fixed_protocol_spec.rb +20 -9
- data/spec/interfaces/protocols/ignore_packet_protocol_spec.rb +243 -0
- data/spec/interfaces/protocols/length_protocol_spec.rb +39 -0
- data/spec/interfaces/protocols/preidentified_protocol_spec.rb +227 -4
- data/spec/interfaces/protocols/template_protocol_spec.rb +78 -25
- data/spec/io/json_drb_rack_spec.rb +166 -0
- data/spec/io/json_drb_spec.rb +14 -0
- data/spec/io/json_rpc_spec.rb +4 -5
- data/spec/io/posix_serial_driver_spec.rb +81 -0
- data/spec/io/serial_driver_spec.rb +15 -13
- data/spec/io/win32_serial_driver_spec.rb +33 -3
- data/spec/packet_logs/packet_log_reader_spec.rb +106 -52
- data/spec/packets/commands_spec.rb +22 -0
- data/spec/packets/packet_config_spec.rb +29 -16
- data/spec/packets/packet_item_spec.rb +2 -2
- data/spec/packets/packet_spec.rb +39 -6
- data/spec/packets/parsers/format_string_parser_spec.rb +0 -11
- data/spec/packets/parsers/macro_parser_spec.rb +36 -36
- data/spec/packets/parsers/state_parser_spec.rb +69 -11
- data/spec/packets/structure_spec.rb +93 -2
- data/spec/packets/telemetry_spec.rb +63 -10
- data/spec/script/extract_spec.rb +4 -1
- data/spec/script/script_spec.rb +2 -3
- data/spec/script/scripting_spec.rb +2 -1
- data/spec/script/tools_spec.rb +0 -1
- data/spec/streams/tcpip_socket_stream_spec.rb +32 -27
- data/spec/system/system_spec.rb +187 -4
- data/spec/system/target_spec.rb +62 -1
- data/spec/tools/cmd_tlm_server/api_spec.rb +29 -21
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -7
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +33 -0
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +25 -1
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +15 -0
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +2 -3
- data/spec/top_level/top_level_spec.rb +29 -5
- data/spec/utilities/message_log_spec.rb +6 -3
- data/tasks/gemfile_stats.rake +38 -14
- data/test/performance/config/system/system.txt +0 -0
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +5 -5
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
- data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
- data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
- data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
- data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
- data/test/performance/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
- data/test/performance/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
- data/test/performance/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
- data/test/performance/config/tools/test_runner/test_runner.txt +1 -1
- data/test/performance/procedures/cosmos_api_test.rb +1 -1
- data/test/performance/tools/identify_performance.rb +82 -0
- metadata +146 -62
- data/lib/cosmos/dart/Gemfile +0 -69
|
@@ -27,7 +27,7 @@ describe Socket do
|
|
|
27
27
|
it "returns the hostname for the ip address" do
|
|
28
28
|
if !ENV['APPVEYOR']
|
|
29
29
|
ipaddr = Resolv.getaddress "localhost"
|
|
30
|
-
expect(Socket.lookup_hostname_from_ip(ipaddr)).
|
|
30
|
+
expect(Socket.lookup_hostname_from_ip(ipaddr)).to_not be_nil
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
end
|
data/spec/core_ext/time_spec.rb
CHANGED
|
@@ -183,6 +183,10 @@ describe Time do
|
|
|
183
183
|
expect(parts[1]).to eql ccsds_ms
|
|
184
184
|
expect(parts[2]).to be_within(50).of(ccsds_us)
|
|
185
185
|
end
|
|
186
|
+
|
|
187
|
+
it "maintains precision" do
|
|
188
|
+
expect(Time.ccsds2sec(22766, 65115943, 552).round(6)).to eql(1967047515.943552)
|
|
189
|
+
end
|
|
186
190
|
end
|
|
187
191
|
|
|
188
192
|
describe "Time.yds2mdy" do
|
|
@@ -12,89 +12,70 @@ if RUBY_ENGINE == 'ruby'
|
|
|
12
12
|
require 'spec_helper'
|
|
13
13
|
require 'cosmos/gui/qt'
|
|
14
14
|
require 'cosmos/script'
|
|
15
|
-
require 'cosmos/
|
|
15
|
+
require 'cosmos/script/scripting'
|
|
16
16
|
|
|
17
17
|
module Cosmos
|
|
18
18
|
describe Script do
|
|
19
|
-
after(:all) do
|
|
20
|
-
# Load the original scripting file over the script_module_gui
|
|
21
|
-
load 'cosmos/script/scripting.rb'
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def stub_null_object(constant)
|
|
25
|
-
class_double(constant).tap do |double|
|
|
26
|
-
stub_const(constant, double)
|
|
27
|
-
allow(double).to receive(:new).and_return(double(constant).as_null_object)
|
|
28
|
-
yield double if block_given?
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
let!(:qt_module) do
|
|
33
|
-
class_double('Qt').as_stubbed_const(:transfer_nested_constants => true).tap do |double|
|
|
34
|
-
stub_const('Qt', double)
|
|
35
|
-
stub_const('Qt::WindowTitleHint', double)
|
|
36
|
-
stub_const('Qt::WindowSystemMenuHint', double)
|
|
37
|
-
allow(double).to receive(:execute_in_main_thread).and_yield
|
|
38
|
-
allow(double).to receive(:debug_level)
|
|
39
|
-
end
|
|
40
|
-
stub_null_object('Qt::Widget')
|
|
41
|
-
stub_null_object('Qt::Dialog') do |double|
|
|
42
|
-
instance = double("Qt::Dialog").as_null_object
|
|
43
|
-
allow(instance).to receive(:exec).and_return 1 # break the loop by returning 1
|
|
44
|
-
allow(double).to receive(:new).and_return(instance)
|
|
45
|
-
end
|
|
46
|
-
# Stub Accepted to be 1 to match the instance exec returning 1
|
|
47
|
-
stub_const('Qt::Dialog::Accepted', 1)
|
|
48
|
-
stub_null_object('Qt::VBoxLayout')
|
|
49
|
-
stub_null_object('Qt::HBoxLayout')
|
|
50
|
-
stub_null_object('Qt::Label')
|
|
51
|
-
stub_null_object('Qt::PushButton')
|
|
52
|
-
end
|
|
53
|
-
|
|
54
19
|
describe "combo_box" do
|
|
55
|
-
it "should not modify the inputs" do
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
allow(double).to receive(:new).and_return(chooser)
|
|
20
|
+
it "should not modify the button inputs" do
|
|
21
|
+
expect(self).to receive(:gets) { ' ' }
|
|
22
|
+
capture_io do |stdout|
|
|
23
|
+
buttons = %w(THIS IS A TEST)
|
|
24
|
+
combo_box("Combo box test", *buttons)
|
|
25
|
+
expect(buttons).to eq %w(THIS IS A TEST)
|
|
26
|
+
expect(stdout.string).to match(/Combo box test/)
|
|
63
27
|
end
|
|
28
|
+
end
|
|
64
29
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
30
|
+
it "should display details" do
|
|
31
|
+
expect(self).to receive(:gets) { ' ' }
|
|
32
|
+
capture_io do |stdout|
|
|
33
|
+
buttons = %w(THIS IS A TEST)
|
|
34
|
+
combo_box("HI", *buttons, details: 'These are the details')
|
|
35
|
+
expect(stdout.string).to match(/These are the details/)
|
|
36
|
+
end
|
|
68
37
|
end
|
|
69
38
|
end
|
|
70
39
|
|
|
71
40
|
describe "message_box" do
|
|
72
41
|
it "should not modify the inputs" do
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
42
|
+
expect(self).to receive(:gets) { ' ' }
|
|
43
|
+
capture_io do |stdout|
|
|
44
|
+
buttons = %w(THIS IS A TEST)
|
|
45
|
+
message_box("Message box test", *buttons)
|
|
46
|
+
expect(buttons).to eq %w(THIS IS A TEST)
|
|
47
|
+
expect(stdout.string).to match(/Message box test/)
|
|
79
48
|
end
|
|
49
|
+
end
|
|
80
50
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
51
|
+
it "should display details" do
|
|
52
|
+
expect(self).to receive(:gets) { ' ' }
|
|
53
|
+
capture_io do |stdout|
|
|
54
|
+
buttons = %w(THIS IS A TEST)
|
|
55
|
+
message_box("HI", *buttons, details: 'These are the details')
|
|
56
|
+
expect(stdout.string).to match(/These are the details/)
|
|
57
|
+
end
|
|
84
58
|
end
|
|
85
59
|
end
|
|
86
60
|
|
|
87
61
|
describe "vertical_message_box" do
|
|
88
62
|
it "should not modify the inputs" do
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
63
|
+
expect(self).to receive(:gets) { ' ' }
|
|
64
|
+
capture_io do |stdout|
|
|
65
|
+
buttons = %w(THIS IS A TEST)
|
|
66
|
+
vertical_message_box("Vertical message box test", *buttons)
|
|
67
|
+
expect(buttons).to eq %w(THIS IS A TEST)
|
|
68
|
+
expect(stdout.string).to match(/Vertical message box test/)
|
|
93
69
|
end
|
|
70
|
+
end
|
|
94
71
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
72
|
+
it "should display details" do
|
|
73
|
+
expect(self).to receive(:gets) { ' ' }
|
|
74
|
+
capture_io do |stdout|
|
|
75
|
+
buttons = %w(THIS IS A TEST)
|
|
76
|
+
vertical_message_box("HI", *buttons, details: 'These are the details')
|
|
77
|
+
expect(stdout.string).to match(/These are the details/)
|
|
78
|
+
end
|
|
98
79
|
end
|
|
99
80
|
end
|
|
100
81
|
end
|
|
@@ -15,7 +15,7 @@ COMMAND INST COLLECT BIG_ENDIAN "Starts a collect on the instrument"
|
|
|
15
15
|
PARAMETER OPCODE 112 8 UINT 0x0 0xFF 0xAB "Collect opcode"
|
|
16
16
|
FORMAT_STRING "0x%0X"
|
|
17
17
|
PARAMETER TEMP 120 32 FLOAT 0.0 25.0 0.0 "Collect temperature"
|
|
18
|
-
UNITS
|
|
18
|
+
UNITS Celsius C
|
|
19
19
|
|
|
20
20
|
COMMAND INST ABORT BIG_ENDIAN "Aborts a collect on the instrument"
|
|
21
21
|
PARAMETER CCSDSVER 0 3 UINT 0 0 0 "CCSDS primary header version number"
|
|
@@ -21,28 +21,28 @@ TELEMETRY INST HEALTH_STATUS BIG_ENDIAN "Health and status from the instrument"
|
|
|
21
21
|
ITEM TEMP1 144 16 UINT "Temperature #1"
|
|
22
22
|
POLY_READ_CONVERSION -100.0 0.00305
|
|
23
23
|
POLY_WRITE_CONVERSION 32768.885246 327.86885
|
|
24
|
-
UNITS
|
|
24
|
+
UNITS CELSIUS C
|
|
25
25
|
FORMAT_STRING "%0.3f"
|
|
26
26
|
LIMITS DEFAULT 1 ENABLED -80.0 -70.0 60.0 80.0 -20.0 20.0
|
|
27
27
|
LIMITS TVAC 1 ENABLED -80.0 -30.0 30.0 80.0
|
|
28
28
|
ITEM TEMP2 160 16 UINT "Temperature #2"
|
|
29
29
|
POLY_READ_CONVERSION -100.0 0.00305
|
|
30
30
|
POLY_WRITE_CONVERSION 32768.885246 327.86885
|
|
31
|
-
UNITS
|
|
31
|
+
UNITS CELSIUS C
|
|
32
32
|
FORMAT_STRING "%0.3f"
|
|
33
33
|
LIMITS DEFAULT 1 ENABLED -60.0 -55.0 30.0 35.0
|
|
34
34
|
LIMITS TVAC 1 ENABLED -60.0 20.0 30.0 35.0
|
|
35
35
|
ITEM TEMP3 176 16 UINT "Temperature #3"
|
|
36
36
|
POLY_READ_CONVERSION -100.0 0.00305
|
|
37
37
|
POLY_WRITE_CONVERSION 32768.885246 327.86885
|
|
38
|
-
UNITS
|
|
38
|
+
UNITS CELSIUS C
|
|
39
39
|
FORMAT_STRING "%0.3f"
|
|
40
40
|
LIMITS DEFAULT 1 ENABLED -25.0 -10.0 50.0 55.0
|
|
41
41
|
LIMITS TVAC 1 ENABLED -15.0 -10.0 20.0 30.0
|
|
42
42
|
ITEM TEMP4 192 16 UINT "Temperature #4"
|
|
43
43
|
POLY_READ_CONVERSION -100.0 0.00305
|
|
44
44
|
POLY_WRITE_CONVERSION 32768.885246 327.86885
|
|
45
|
-
UNITS
|
|
45
|
+
UNITS CELSIUS C
|
|
46
46
|
FORMAT_STRING "%0.3f"
|
|
47
47
|
LIMITS DEFAULT 1 ENABLED -80.0 -70.0 60.0 80.0
|
|
48
48
|
ARRAY_ITEM ARY 208 8 UINT 80 "Array data"
|
|
@@ -52,7 +52,7 @@ TELEMETRY INST HEALTH_STATUS BIG_ENDIAN "Health and status from the instrument"
|
|
|
52
52
|
STATE NORMAL 0
|
|
53
53
|
STATE SPECIAL 1
|
|
54
54
|
APPEND_ARRAY_ITEM ARY2 64 FLOAT 640 "Double array"
|
|
55
|
-
UNITS
|
|
55
|
+
UNITS CELSIUS C
|
|
56
56
|
APPEND_ITEM ASCIICMD 2048 STRING "Most recent ASCIICMD string"
|
|
57
57
|
STATE "NOOP" "NOOP"
|
|
58
58
|
STATE "FIRE LASER" "FIRE LASER"
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
require 'find'
|
|
4
|
+
require 'cosmos/system'
|
|
5
|
+
require 'cosmos/config/meta_config_parser'
|
|
6
|
+
|
|
7
|
+
module Cosmos
|
|
8
|
+
describe Cosmos do
|
|
9
|
+
# These are not expected to be documented as they are deprecated
|
|
10
|
+
DEPRECATED = %w(MACRO_APPEND_START MACRO_APPEND_END ROUTER_LOG_RAW IGNORE REQUIRE_UTILITY)
|
|
11
|
+
# These source keywords are ignored in the YAML
|
|
12
|
+
EXCEPTIONS = %w(LAUNCH LAUNCH_TERMINAL LAUNCH_GEM CONVERTED RAW FORMATTED WITH_UNITS NONE)
|
|
13
|
+
EXCEPTIONS.concat(%w(MINUTE HOUR DAY AVG MIN MAX STDDEV AGING CRC OVERRIDE))
|
|
14
|
+
# These are not documented because OpenGL is not officially a tool
|
|
15
|
+
OPENGL = %w(STL_FILE TEXTURE_MAPPED_SPHERE TIP_TEXT POSITION ROTATION_X ROTATION_Y ROTATION_Z)
|
|
16
|
+
OPENGL.concat(%w(ZOOM ORIENTATION CENTER BOUNDS))
|
|
17
|
+
|
|
18
|
+
def process_line(line)
|
|
19
|
+
line.split(',').each do |item|
|
|
20
|
+
item.strip!
|
|
21
|
+
if (item[0] == "'" || item[0] == '"') && (item[-1] == "'" || item[-1] == '"')
|
|
22
|
+
@src_keywords << item[1..-2]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def process_continuation(line)
|
|
28
|
+
if line[-1] == "\\"
|
|
29
|
+
continuation = true
|
|
30
|
+
line = line[0..-2] # remove the continuation character
|
|
31
|
+
else
|
|
32
|
+
continuation = false
|
|
33
|
+
end
|
|
34
|
+
return continuation
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def get_src_keywords
|
|
38
|
+
@src_keywords = []
|
|
39
|
+
path = File.expand_path(File.join(File.dirname(__FILE__), "../../lib/**/*.rb"))
|
|
40
|
+
Dir[path].each do |filename|
|
|
41
|
+
data = File.read(filename)
|
|
42
|
+
part = nil
|
|
43
|
+
if data.include?('parser.parse_file')
|
|
44
|
+
part = data.split('parser.parse_file')[1..-1].join
|
|
45
|
+
elsif data.include?('handle_keyword(parser, keyword, parameters)')
|
|
46
|
+
part = data.split('handle_keyword(parser, keyword, parameters)')[1..-1].join
|
|
47
|
+
end
|
|
48
|
+
if part
|
|
49
|
+
continuation = false
|
|
50
|
+
part.split("\n").each do |line|
|
|
51
|
+
if continuation
|
|
52
|
+
continuation = process_continuation(line)
|
|
53
|
+
process_line(line)
|
|
54
|
+
end
|
|
55
|
+
if match = line.match(/when (.*)/)
|
|
56
|
+
line = match.captures[0]
|
|
57
|
+
continuation = process_continuation(line)
|
|
58
|
+
process_line(line)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# All the widgets are referenced in screen definitions
|
|
65
|
+
path = File.expand_path(File.join(File.dirname(__FILE__), "../../lib/cosmos/tools/tlm_viewer/widgets/*_widget.rb"))
|
|
66
|
+
Dir[path].each do |filename|
|
|
67
|
+
@src_keywords << filename.split('/')[-1].split('_widget.rb')[0].upcase
|
|
68
|
+
end
|
|
69
|
+
# Remove the base classes
|
|
70
|
+
@src_keywords -= %w(CANVASVALUE LAYOUT MULTI)
|
|
71
|
+
# Add specific keyword(s) that we want to document
|
|
72
|
+
@src_keywords.concat(%w(NAMED_WIDGET))
|
|
73
|
+
|
|
74
|
+
# All the protocols are referenced as keywords in INTERFACES
|
|
75
|
+
path = File.expand_path(File.join(File.dirname(__FILE__), "../../lib/cosmos/interfaces/protocols/*_protocol.rb"))
|
|
76
|
+
Dir[path].each do |filename|
|
|
77
|
+
@src_keywords << filename.split('/')[-1].split('_protocol.rb')[0].upcase
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Remove things we don't document
|
|
81
|
+
@src_keywords.uniq!
|
|
82
|
+
@src_keywords -= (DEPRECATED + EXCEPTIONS + OPENGL)
|
|
83
|
+
|
|
84
|
+
#puts "Total source keywords: #{@src_keywords.length}"
|
|
85
|
+
expect(@src_keywords.length > 100) # Sanity check
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def process_meta(yaml_keywords, meta)
|
|
89
|
+
meta.each do |keyword, data|
|
|
90
|
+
next unless keyword.is_a?(String) && keyword.upcase == keyword
|
|
91
|
+
next if keyword == 'UNKNOWN' # Ignore the UNKNOWN placeholder
|
|
92
|
+
|
|
93
|
+
if data['modifiers']
|
|
94
|
+
process_meta(yaml_keywords, data['modifiers'])
|
|
95
|
+
end
|
|
96
|
+
yaml_keywords << keyword
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def get_yaml_keywords
|
|
101
|
+
@yaml_keywords = []
|
|
102
|
+
path = File.expand_path(File.join(File.dirname(__FILE__), "../../data/config/*.yaml"))
|
|
103
|
+
Dir[path].each do |filename|
|
|
104
|
+
meta = Cosmos::MetaConfigParser.load(filename)
|
|
105
|
+
process_meta(@yaml_keywords, meta)
|
|
106
|
+
end
|
|
107
|
+
#puts "Total yaml keywords: #{@yaml_keywords.length}"
|
|
108
|
+
expect(@yaml_keywords.length > 100) # Sanity check
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
before(:all) do
|
|
112
|
+
get_src_keywords()
|
|
113
|
+
get_yaml_keywords()
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "should document all source keywords" do
|
|
117
|
+
undocumented = []
|
|
118
|
+
@src_keywords.each do |keyword|
|
|
119
|
+
undocumented << keyword unless @yaml_keywords.include?(keyword)
|
|
120
|
+
end
|
|
121
|
+
expect(undocumented).to be_empty, "Following source keywords not in YAML: #{undocumented}"
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "should not have extra keywords" do
|
|
125
|
+
extra = []
|
|
126
|
+
@yaml_keywords.each do |keyword|
|
|
127
|
+
extra << keyword unless @src_keywords.include?(keyword)
|
|
128
|
+
end
|
|
129
|
+
expect(extra).to be_empty, "Following YAML keywords not in source: #{extra}"
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
@@ -179,7 +179,7 @@ module Cosmos
|
|
|
179
179
|
it "warns if an error code is set" do
|
|
180
180
|
allow_any_instance_of(TcpipClientStream).to receive(:read).and_return @handshake.buffer(false)
|
|
181
181
|
expect(Logger).to receive(:warn) do |msg|
|
|
182
|
-
expect(msg).to eql "Warning sending command (12345): BAD"
|
|
182
|
+
expect(msg).to eql "LincInterface: Warning sending command (12345): BAD"
|
|
183
183
|
end
|
|
184
184
|
t = Thread.new do
|
|
185
185
|
sleep 0.1
|
|
@@ -90,6 +90,7 @@ module Cosmos
|
|
|
90
90
|
end
|
|
91
91
|
|
|
92
92
|
it "reads telemetry data from the stream" do
|
|
93
|
+
target = System.targets['SYSTEM']
|
|
93
94
|
@interface.add_protocol(FixedProtocol, [1], :READ_WRITE)
|
|
94
95
|
@interface.instance_variable_set(:@stream, FixedStream.new)
|
|
95
96
|
@interface.target_names = ['SYSTEM']
|
|
@@ -103,6 +104,7 @@ module Cosmos
|
|
|
103
104
|
expect(packet.received_time.to_f).to be_within(0.1).of(Time.now.to_f)
|
|
104
105
|
expect(packet.target_name).to eql 'SYSTEM'
|
|
105
106
|
expect(packet.packet_name).to eql 'LIMITS_CHANGE'
|
|
107
|
+
target.tlm_unique_id_mode = true
|
|
106
108
|
$index = 1
|
|
107
109
|
packet = @interface.read
|
|
108
110
|
expect(packet.received_time.to_f).to be_within(0.1).of(Time.now.to_f)
|
|
@@ -113,30 +115,39 @@ module Cosmos
|
|
|
113
115
|
expect(packet.received_time.to_f).to be_within(0.1).of(Time.now.to_f)
|
|
114
116
|
expect(packet.target_name).to eql 'SYSTEM'
|
|
115
117
|
expect(packet.packet_name).to eql 'LIMITS_CHANGE'
|
|
118
|
+
target.tlm_unique_id_mode = false
|
|
116
119
|
end
|
|
117
120
|
|
|
118
121
|
it "reads command data from the stream" do
|
|
119
|
-
|
|
122
|
+
target = System.targets['SYSTEM']
|
|
123
|
+
packet = System.commands.packet("SYSTEM", "STARTLOGGING")
|
|
124
|
+
packet.restore_defaults
|
|
125
|
+
$buffer = packet.buffer.clone
|
|
120
126
|
class FixedStream2 < Stream
|
|
121
127
|
def connect; end
|
|
122
128
|
def connected?; true; end
|
|
123
129
|
def read
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
$index += 1
|
|
127
|
-
"\x1A\xCF\xFC\x1D\x00\x00\x00\x02"
|
|
128
|
-
else
|
|
129
|
-
"\x00\x00\x00\x00\x00\x00\x00\x00"
|
|
130
|
-
end
|
|
130
|
+
# Prepend a matching sync pattern to test the discard
|
|
131
|
+
"\x1A\xCF\xFC\x1D\x55\x55" << $buffer
|
|
131
132
|
end
|
|
132
133
|
end
|
|
133
|
-
|
|
134
|
+
# Require 8 bytes, discard 6 leading bytes, use 0x1ACFFC1D sync, telemetry = false (command)
|
|
135
|
+
@interface.add_protocol(FixedProtocol, [8, 6, '0x1ACFFC1D', false], :READ_WRITE)
|
|
134
136
|
@interface.instance_variable_set(:@stream, FixedStream2.new)
|
|
135
137
|
@interface.target_names = ['SYSTEM']
|
|
138
|
+
target.cmd_unique_id_mode = false
|
|
136
139
|
packet = @interface.read
|
|
137
140
|
expect(packet.received_time.to_f).to be_within(0.01).of(Time.now.to_f)
|
|
138
141
|
expect(packet.target_name).to eql 'SYSTEM'
|
|
139
142
|
expect(packet.packet_name).to eql 'STARTLOGGING'
|
|
143
|
+
expect(packet.buffer).to eql $buffer
|
|
144
|
+
target.cmd_unique_id_mode = true
|
|
145
|
+
packet = @interface.read
|
|
146
|
+
expect(packet.received_time.to_f).to be_within(0.01).of(Time.now.to_f)
|
|
147
|
+
expect(packet.target_name).to eql 'SYSTEM'
|
|
148
|
+
expect(packet.packet_name).to eql 'STARTLOGGING'
|
|
149
|
+
expect(packet.buffer).to eql $buffer
|
|
150
|
+
target.cmd_unique_id_mode = false
|
|
140
151
|
end
|
|
141
152
|
end
|
|
142
153
|
end
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'spec_helper'
|
|
12
|
+
require 'cosmos/interfaces/protocols/ignore_packet_protocol'
|
|
13
|
+
require 'cosmos/interfaces/interface'
|
|
14
|
+
require 'cosmos/streams/stream'
|
|
15
|
+
|
|
16
|
+
module Cosmos
|
|
17
|
+
describe IgnorePacketProtocol do
|
|
18
|
+
before(:each) do
|
|
19
|
+
$buffer = nil
|
|
20
|
+
@interface = StreamInterface.new
|
|
21
|
+
@interface.target_names = ['SYSTEM', 'INST']
|
|
22
|
+
allow(@interface).to receive(:connected?) { true }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class PreStream < Stream
|
|
26
|
+
def connect; end
|
|
27
|
+
def connected?; true; end
|
|
28
|
+
def disconnect; end
|
|
29
|
+
def read; $buffer; end
|
|
30
|
+
def write(data); $buffer = data; end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe "initialize" do
|
|
34
|
+
it "complains if target is not given" do
|
|
35
|
+
expect { @interface.add_protocol(IgnorePacketProtocol, [], :READ_WRITE) }.to raise_error(ArgumentError)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "complains if packet is not given" do
|
|
39
|
+
expect { @interface.add_protocol(IgnorePacketProtocol, ['SYSTEM'], :READ_WRITE) }.to raise_error(ArgumentError)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "complains if the target is not found" do
|
|
43
|
+
expect { @interface.add_protocol(IgnorePacketProtocol, ['BLAH', 'META'], :READ_WRITE) }.to raise_error(/target 'BLAH' does not exist/)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "complains if the target is not found" do
|
|
47
|
+
expect { @interface.add_protocol(IgnorePacketProtocol, ['SYSTEM', 'BLAH'], :READ_WRITE) }.to raise_error(/packet 'SYSTEM BLAH' does not exist/)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe "read" do
|
|
52
|
+
it "ignores the packet specified" do
|
|
53
|
+
@interface.instance_variable_set(:@stream, PreStream.new)
|
|
54
|
+
pkt = System.telemetry.packet("SYSTEM","META")
|
|
55
|
+
# Ensure the ID items are set so this packet can be identified
|
|
56
|
+
pkt.id_items.each do |item|
|
|
57
|
+
pkt.write_item(item, item.id_value)
|
|
58
|
+
end
|
|
59
|
+
pkt.received_time = Time.now
|
|
60
|
+
$buffer = nil
|
|
61
|
+
@interface.write(pkt)
|
|
62
|
+
# Verify the write went out
|
|
63
|
+
expect(pkt.buffer).to eql $buffer
|
|
64
|
+
# Verify we read the packet back
|
|
65
|
+
packet = @interface.read
|
|
66
|
+
expect(packet.buffer).to eql $buffer
|
|
67
|
+
|
|
68
|
+
# Now add the protocol to ignore the packet
|
|
69
|
+
@interface.add_protocol(IgnorePacketProtocol, ['SYSTEM', 'META'], :READ)
|
|
70
|
+
$buffer = nil
|
|
71
|
+
@interface.write(pkt)
|
|
72
|
+
packet = nil
|
|
73
|
+
# Try to read the interface
|
|
74
|
+
# We put this in a thread because it calls it continuously
|
|
75
|
+
thread = Thread.new do
|
|
76
|
+
packet = @interface.read
|
|
77
|
+
end
|
|
78
|
+
sleep 0.1
|
|
79
|
+
thread.kill
|
|
80
|
+
sleep 0.2 # Allow thread to die
|
|
81
|
+
expect(packet).to be_nil
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "can be added multiple times to ignore different packets" do
|
|
85
|
+
@interface.instance_variable_set(:@stream, PreStream.new)
|
|
86
|
+
|
|
87
|
+
pkt = System.telemetry.packet("INST","HEALTH_STATUS")
|
|
88
|
+
# Ensure the ID items are set so this packet can be identified
|
|
89
|
+
pkt.id_items.each do |item|
|
|
90
|
+
pkt.write_item(item, item.id_value)
|
|
91
|
+
end
|
|
92
|
+
pkt.received_time = Time.now
|
|
93
|
+
$buffer = nil
|
|
94
|
+
@interface.write(pkt)
|
|
95
|
+
expect($buffer).to eql pkt.buffer
|
|
96
|
+
|
|
97
|
+
# Verify we read the packet back
|
|
98
|
+
packet = @interface.read
|
|
99
|
+
expect(packet.buffer).to eql $buffer
|
|
100
|
+
|
|
101
|
+
# Now add the protocol to ignore the packet
|
|
102
|
+
@interface.add_protocol(IgnorePacketProtocol, ['INST', 'HEALTH_STATUS'], :READ)
|
|
103
|
+
$buffer = nil
|
|
104
|
+
@interface.write(pkt)
|
|
105
|
+
expect($buffer).to eql pkt.buffer
|
|
106
|
+
packet = nil
|
|
107
|
+
# Try to read the interface
|
|
108
|
+
# We put this in a thread because it calls it continuously
|
|
109
|
+
thread = Thread.new do
|
|
110
|
+
packet = @interface.read
|
|
111
|
+
end
|
|
112
|
+
sleep 0.1
|
|
113
|
+
thread.kill
|
|
114
|
+
sleep 0.2 # Allow thread to die
|
|
115
|
+
expect(packet).to be_nil
|
|
116
|
+
|
|
117
|
+
# Add another protocol to ignore another packet
|
|
118
|
+
@interface.add_protocol(IgnorePacketProtocol, ['INST', 'ADCS'], :READ)
|
|
119
|
+
|
|
120
|
+
pkt = System.telemetry.packet("INST","ADCS")
|
|
121
|
+
# Ensure the ID items are set so this packet can be identified
|
|
122
|
+
pkt.id_items.each do |item|
|
|
123
|
+
pkt.write_item(item, item.id_value)
|
|
124
|
+
end
|
|
125
|
+
pkt.received_time = Time.now
|
|
126
|
+
$buffer = nil
|
|
127
|
+
@interface.write(pkt)
|
|
128
|
+
expect($buffer).to eql pkt.buffer
|
|
129
|
+
|
|
130
|
+
packet = nil
|
|
131
|
+
# Try to read the interface
|
|
132
|
+
# We put this in a thread because it calls it continuously
|
|
133
|
+
thread = Thread.new do
|
|
134
|
+
packet = @interface.read
|
|
135
|
+
end
|
|
136
|
+
sleep 0.1
|
|
137
|
+
thread.kill
|
|
138
|
+
sleep 0.2 # Allow thread to die
|
|
139
|
+
expect(packet).to be_nil
|
|
140
|
+
|
|
141
|
+
pkt = System.telemetry.packet("INST","PARAMS")
|
|
142
|
+
# Ensure the ID items are set so this packet can be identified
|
|
143
|
+
pkt.id_items.each do |item|
|
|
144
|
+
pkt.write_item(item, item.id_value)
|
|
145
|
+
end
|
|
146
|
+
pkt.received_time = Time.now
|
|
147
|
+
$buffer = nil
|
|
148
|
+
@interface.write(pkt)
|
|
149
|
+
# Verify the write went out
|
|
150
|
+
expect($buffer).to eql pkt.buffer
|
|
151
|
+
|
|
152
|
+
packet = @interface.read
|
|
153
|
+
expect(packet.buffer).to eql pkt.buffer
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
describe "write" do
|
|
158
|
+
it "ignores the packet specified" do
|
|
159
|
+
@interface.instance_variable_set(:@stream, PreStream.new)
|
|
160
|
+
@interface.add_protocol(IgnorePacketProtocol, ['SYSTEM', 'META'], :WRITE)
|
|
161
|
+
pkt = System.telemetry.packet("SYSTEM","META")
|
|
162
|
+
pkt.write("COSMOS_VERSION", "TEST")
|
|
163
|
+
pkt.received_time = Time.now
|
|
164
|
+
$buffer = nil
|
|
165
|
+
@interface.write(pkt)
|
|
166
|
+
# Verify the write was ignored
|
|
167
|
+
expect($buffer).to be_nil
|
|
168
|
+
|
|
169
|
+
# Verify reading the interface works
|
|
170
|
+
$buffer = pkt.buffer
|
|
171
|
+
packet = @interface.read
|
|
172
|
+
expect(packet.buffer).to eql $buffer
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
it "can be added multiple times to ignore different packets" do
|
|
176
|
+
@interface.instance_variable_set(:@stream, PreStream.new)
|
|
177
|
+
@interface.add_protocol(IgnorePacketProtocol, ['INST', 'HEALTH_STATUS'], :WRITE)
|
|
178
|
+
@interface.add_protocol(IgnorePacketProtocol, ['INST', 'ADCS'], :WRITE)
|
|
179
|
+
|
|
180
|
+
pkt = System.telemetry.packet("INST","HEALTH_STATUS")
|
|
181
|
+
pkt.received_time = Time.now
|
|
182
|
+
$buffer = nil
|
|
183
|
+
@interface.write(pkt)
|
|
184
|
+
# Verify the write was ignored
|
|
185
|
+
expect($buffer).to be_nil
|
|
186
|
+
|
|
187
|
+
pkt = System.telemetry.packet("INST","ADCS")
|
|
188
|
+
pkt.received_time = Time.now
|
|
189
|
+
$buffer = nil
|
|
190
|
+
@interface.write(pkt)
|
|
191
|
+
# Verify the write was ignored
|
|
192
|
+
expect($buffer).to be_nil
|
|
193
|
+
|
|
194
|
+
pkt = System.telemetry.packet("INST","PARAMS")
|
|
195
|
+
pkt.received_time = Time.now
|
|
196
|
+
$buffer = nil
|
|
197
|
+
@interface.write(pkt)
|
|
198
|
+
# Verify the write went out
|
|
199
|
+
expect($buffer).to eql pkt.buffer
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
describe "read/write" do
|
|
204
|
+
it "ignores the packet specified" do
|
|
205
|
+
@interface.instance_variable_set(:@stream, PreStream.new)
|
|
206
|
+
@interface.add_protocol(IgnorePacketProtocol, ['SYSTEM', 'META'], :READ_WRITE)
|
|
207
|
+
pkt = System.telemetry.packet("SYSTEM","META")
|
|
208
|
+
pkt.write("COSMOS_VERSION", "TEST")
|
|
209
|
+
pkt.received_time = Time.now
|
|
210
|
+
$buffer = nil
|
|
211
|
+
@interface.write(pkt)
|
|
212
|
+
# Verify the write was ignored
|
|
213
|
+
expect($buffer).to be_nil
|
|
214
|
+
|
|
215
|
+
packet = nil
|
|
216
|
+
# Try to read the interface
|
|
217
|
+
thread = Thread.new do
|
|
218
|
+
packet = @interface.read
|
|
219
|
+
end
|
|
220
|
+
sleep 0.1
|
|
221
|
+
thread.kill
|
|
222
|
+
sleep 0.2 # Allow thread to die
|
|
223
|
+
expect(packet).to be_nil
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
it "reads and writes unknown packets" do
|
|
227
|
+
@interface.instance_variable_set(:@stream, PreStream.new)
|
|
228
|
+
@interface.add_protocol(IgnorePacketProtocol, ['SYSTEM', 'META'], :READ_WRITE)
|
|
229
|
+
$buffer = nil
|
|
230
|
+
pkt = Packet.new("TGT","PTK")
|
|
231
|
+
pkt.append_item("ITEM", 8, :INT)
|
|
232
|
+
pkt.write("ITEM", 33, :RAW)
|
|
233
|
+
@interface.write(pkt)
|
|
234
|
+
# Verify the write went out
|
|
235
|
+
expect(pkt.buffer).to eql $buffer
|
|
236
|
+
|
|
237
|
+
# Verify the read works
|
|
238
|
+
packet = @interface.read
|
|
239
|
+
expect(packet.buffer).to eq $buffer
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
end
|