cosmos 3.5.1 → 3.5.2
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/.coveralls.yml +1 -1
- data/.gitattributes +3 -3
- data/.gitignore +48 -48
- data/.travis.yml +8 -8
- data/CONTRIBUTING.txt +50 -50
- data/Gemfile +10 -10
- data/Guardfile +27 -27
- data/LICENSE.txt +879 -879
- data/Manifest.txt +1414 -1414
- data/README.md +111 -111
- data/Rakefile +218 -214
- data/autohotkey/config/data/diamond.STL +57 -57
- data/autohotkey/config/system/system.txt +34 -34
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/autohotkey/config/targets/COSMOS/target.txt +5 -5
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -270
- data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
- data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -305
- data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
- data/autohotkey/config/targets/INST/screens/array.txt +7 -7
- data/autohotkey/config/targets/INST/screens/block.txt +8 -8
- data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
- data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
- data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
- data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
- data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
- data/autohotkey/config/targets/INST/screens/image.txt +21 -21
- data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
- data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
- data/autohotkey/config/targets/INST/screens/other.txt +25 -25
- data/autohotkey/config/targets/INST/screens/params.txt +25 -25
- data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
- data/autohotkey/config/targets/INST/target.txt +26 -26
- data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
- data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
- data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
- data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
- data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
- data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
- data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/autohotkey/config/tools/launcher/launcher.txt +38 -38
- data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
- data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
- data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
- data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
- data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
- data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
- data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
- data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
- data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
- data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
- data/autohotkey/lib/example_background_task.rb +42 -42
- data/autohotkey/lib/user_version.rb +3 -3
- data/autohotkey/procedures/clear_util.rb +7 -7
- data/autohotkey/procedures/collect_util.rb +14 -14
- data/autohotkey/procedures/example_test.rb +67 -67
- data/autohotkey/procedures/example_test2.rb +74 -74
- data/autohotkey/procedures/script_test.rb +17 -17
- data/autohotkey/procedures/syntax_error.rb +18 -18
- data/autohotkey/tools/CmdExtractorAHK +16 -16
- data/autohotkey/tools/CmdSender +14 -14
- data/autohotkey/tools/CmdSenderAHK +18 -18
- data/autohotkey/tools/CmdTlmServer +14 -14
- data/autohotkey/tools/CmdTlmServerAHK +28 -28
- data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
- data/autohotkey/tools/DataViewer +14 -14
- data/autohotkey/tools/DataViewerAHK +17 -17
- data/autohotkey/tools/HandbookCreatorAHK +20 -20
- data/autohotkey/tools/LauncherAHK +17 -17
- data/autohotkey/tools/LimitsMonitorAHK +20 -20
- data/autohotkey/tools/OpenGLBuilderAHK +24 -24
- data/autohotkey/tools/PacketViewer +14 -14
- data/autohotkey/tools/PacketViewerAHK +18 -18
- data/autohotkey/tools/PacketViewerAHK2 +17 -17
- data/autohotkey/tools/Replay +14 -14
- data/autohotkey/tools/ReplayAHK +17 -17
- data/autohotkey/tools/ScriptRunner +14 -14
- data/autohotkey/tools/ScriptRunnerAHK +20 -20
- data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
- data/autohotkey/tools/TableManager +14 -14
- data/autohotkey/tools/TableManagerAHK +30 -30
- data/autohotkey/tools/TestRunner +15 -15
- data/autohotkey/tools/TestRunnerAHK +17 -17
- data/autohotkey/tools/TestRunnerAHK2 +17 -17
- data/autohotkey/tools/TestRunnerAHK3 +17 -17
- data/autohotkey/tools/TestRunnerAHK4 +17 -17
- data/autohotkey/tools/TestRunnerAHK5 +17 -17
- data/autohotkey/tools/TestRunnerAHK6 +17 -17
- data/autohotkey/tools/TlmExtractor +15 -15
- data/autohotkey/tools/TlmExtractorAHK +19 -19
- data/autohotkey/tools/TlmExtractorAHK2 +16 -16
- data/autohotkey/tools/TlmExtractorAHK3 +16 -16
- data/autohotkey/tools/TlmGrapher +14 -14
- data/autohotkey/tools/TlmGrapherAHK +19 -19
- data/autohotkey/tools/TlmGrapherAHK2 +23 -23
- data/autohotkey/tools/TlmGrapherAHK3 +17 -17
- data/autohotkey/tools/TlmGrapherAHK4 +17 -17
- data/autohotkey/tools/TlmViewer +14 -14
- data/autohotkey/tools/TlmViewerAHK +28 -28
- data/autohotkey/tools/TlmViewerAHK2 +22 -22
- data/autohotkey/tools/TlmViewerAHK3 +23 -23
- data/autohotkey/tools/TlmViewerAHK4 +22 -22
- data/autohotkey/tools/TlmViewerAHK5 +18 -18
- data/autohotkey/tools/autohotkey.rb +37 -37
- data/autohotkey/tools/cmd_extractor.ahk +33 -33
- data/autohotkey/tools/cmd_sender.ahk +182 -182
- data/autohotkey/tools/cmd_tlm_server.ahk +90 -90
- data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
- data/autohotkey/tools/data_viewer.ahk +141 -141
- data/autohotkey/tools/handbook_creator.ahk +32 -32
- data/autohotkey/tools/launcher.ahk +41 -41
- data/autohotkey/tools/limits_monitor.ahk +123 -123
- data/autohotkey/tools/open_gl_builder.ahk +134 -134
- data/autohotkey/tools/packet_viewer.ahk +196 -196
- data/autohotkey/tools/packet_viewer2.ahk +9 -9
- data/autohotkey/tools/replay.ahk +104 -104
- data/autohotkey/tools/script_runner.ahk +589 -589
- data/autohotkey/tools/script_runner2.ahk +38 -38
- data/autohotkey/tools/table_manager.ahk +220 -220
- data/autohotkey/tools/test_runner.ahk +262 -262
- data/autohotkey/tools/test_runner2.ahk +53 -53
- data/autohotkey/tools/test_runner3.ahk +13 -13
- data/autohotkey/tools/test_runner5.ahk +8 -8
- data/autohotkey/tools/test_runner6.ahk +5 -5
- data/autohotkey/tools/tlm_extractor.ahk +296 -296
- data/autohotkey/tools/tlm_grapher.ahk +660 -660
- data/autohotkey/tools/tlm_grapher2.ahk +115 -115
- data/autohotkey/tools/tlm_grapher3.ahk +24 -24
- data/autohotkey/tools/tlm_viewer.ahk +133 -133
- data/autohotkey/tools/tlm_viewer2.ahk +50 -50
- data/autohotkey/tools/tlm_viewer4.ahk +4 -4
- data/autohotkey/tools/tlm_viewer5.ahk +20 -20
- data/bin/cosmos +96 -96
- data/bin/cstol_converter +1166 -1166
- data/bin/rubysloc +85 -85
- data/cosmos.gemspec +99 -99
- data/data/about.txt +4 -4
- data/data/crc.txt +326 -326
- data/data/diamond.STL +57 -57
- data/data/legal.txt +9 -9
- data/demo/Gemfile +10 -10
- data/demo/Launcher +16 -16
- data/demo/Launcher.bat +0 -0
- data/demo/Rakefile +77 -77
- data/demo/config/data/crc.txt +224 -226
- data/demo/config/data/diamond.STL +57 -57
- data/demo/config/data/meta_init.txt +4 -4
- data/demo/config/system/system.txt +35 -35
- data/demo/config/system/system2.txt +33 -33
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/demo/config/targets/COSMOS/screens/version.txt +19 -19
- data/demo/config/targets/COSMOS/target.txt +11 -11
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -5
- data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
- data/demo/config/targets/EXAMPLE/target.txt +6 -6
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
- data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
- data/demo/config/targets/INST/lib/sim_inst.rb +305 -305
- data/demo/config/targets/INST/screens/adcs.txt +46 -46
- data/demo/config/targets/INST/screens/array.txt +15 -15
- data/demo/config/targets/INST/screens/block.txt +8 -8
- data/demo/config/targets/INST/screens/commanding.txt +30 -30
- data/demo/config/targets/INST/screens/graphs.txt +14 -14
- data/demo/config/targets/INST/screens/ground.txt +25 -25
- data/demo/config/targets/INST/screens/hs.txt +44 -44
- data/demo/config/targets/INST/screens/latest.txt +23 -23
- data/demo/config/targets/INST/screens/other.txt +29 -29
- data/demo/config/targets/INST/screens/tabs.txt +70 -70
- data/demo/config/targets/INST/target.txt +33 -33
- data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
- data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
- data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
- data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -13
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
- data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +56 -56
- data/demo/config/targets/TEMPLATED/target.txt +6 -6
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +39 -39
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +34 -34
- data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
- data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
- data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -88
- data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -82
- data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/demo/config/tools/launcher/launcher.txt +45 -45
- data/demo/config/tools/launcher/launcher2.txt +45 -45
- data/demo/config/tools/script_runner/script_runner.txt +3 -3
- data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
- data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
- data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
- data/demo/config/tools/test_runner/test_runner.txt +17 -17
- data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
- data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
- data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
- data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
- data/demo/lib/example_background_task.rb +57 -57
- data/demo/lib/example_target.rb +113 -113
- data/demo/lib/scpi_target.rb +74 -74
- data/demo/lib/user_version.rb +3 -3
- data/demo/procedures/checks.rb +11 -11
- data/demo/procedures/clear_util.rb +7 -7
- data/demo/procedures/collect.rb +18 -18
- data/demo/procedures/collect_util.rb +14 -14
- data/demo/procedures/cosmos_api_test.rb +293 -293
- data/demo/procedures/disconnect.rb +29 -29
- data/demo/procedures/example_test.rb +183 -183
- data/demo/procedures/plot_test.rb +8 -8
- data/demo/procedures/run_example_test.rb +3 -3
- data/demo/procedures/test.rb +51 -51
- data/demo/tools/CmdExtractor +16 -16
- data/demo/tools/CmdExtractor.bat +0 -0
- data/demo/tools/CmdSender +16 -16
- data/demo/tools/CmdSender.bat +0 -0
- data/demo/tools/CmdTlmServer +16 -16
- data/demo/tools/CmdTlmServer.bat +0 -0
- data/demo/tools/DataViewer +16 -16
- data/demo/tools/DataViewer.bat +0 -0
- data/demo/tools/ExampleTarget +16 -16
- data/demo/tools/ExampleTarget.bat +0 -0
- data/demo/tools/HandbookCreator +16 -16
- data/demo/tools/HandbookCreator.bat +0 -0
- data/demo/tools/Launcher +16 -16
- data/demo/tools/Launcher.bat +0 -0
- data/demo/tools/LimitsMonitor +16 -16
- data/demo/tools/LimitsMonitor.bat +0 -0
- data/demo/tools/OpenGLBuilder +16 -16
- data/demo/tools/OpenGLBuilder.bat +0 -0
- data/demo/tools/PacketViewer +16 -16
- data/demo/tools/PacketViewer.bat +0 -0
- data/demo/tools/Replay +16 -16
- data/demo/tools/Replay.bat +0 -0
- data/demo/tools/ScpiTarget +16 -16
- data/demo/tools/ScpiTarget.bat +0 -0
- data/demo/tools/ScriptRunner +16 -16
- data/demo/tools/ScriptRunner.bat +0 -0
- data/demo/tools/TableManager +16 -16
- data/demo/tools/TableManager.bat +0 -0
- data/demo/tools/TestRunner +16 -16
- data/demo/tools/TestRunner.bat +0 -0
- data/demo/tools/TlmExtractor +16 -16
- data/demo/tools/TlmExtractor.bat +0 -0
- data/demo/tools/TlmGrapher +16 -16
- data/demo/tools/TlmGrapher.bat +0 -0
- data/demo/tools/TlmViewer +16 -16
- data/demo/tools/TlmViewer.bat +0 -0
- data/demo/tools/ToolLaunch.bat +14 -5
- data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
- data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
- data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
- data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/tool_launch.rb +38 -38
- data/ext/cosmos/ext/array/array.c +111 -111
- data/ext/cosmos/ext/array/extconf.rb +13 -13
- data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
- data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
- data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
- data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
- data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
- data/ext/cosmos/ext/crc/crc.c +341 -341
- data/ext/cosmos/ext/crc/extconf.rb +12 -12
- data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
- data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
- data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
- data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -265
- data/ext/cosmos/ext/packet/extconf.rb +13 -13
- data/ext/cosmos/ext/packet/packet.c +339 -339
- data/ext/cosmos/ext/platform/extconf.rb +13 -13
- data/ext/cosmos/ext/platform/platform.c +101 -101
- data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
- data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
- data/ext/cosmos/ext/string/extconf.rb +13 -13
- data/ext/cosmos/ext/string/string.c +49 -49
- data/ext/cosmos/ext/structure/structure.c +1428 -1428
- data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
- data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
- data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
- data/ext/cosmos/ext/telemetry/telemetry.c +307 -307
- data/ext/mkrf_conf.rb +40 -40
- data/install/Gemfile +10 -10
- data/install/Launcher +16 -16
- data/install/Launcher.bat +0 -0
- data/install/Rakefile +77 -77
- data/install/config/data/crc.txt +151 -151
- data/install/config/system/system.txt +29 -29
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/install/config/targets/COSMOS/screens/version.txt +19 -19
- data/install/config/targets/COSMOS/target.txt +8 -8
- data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
- data/install/config/tools/data_viewer/data_viewer.txt +3 -3
- data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
- data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/install/config/tools/launcher/launcher.txt +40 -40
- data/install/config/tools/script_runner/script_runner.txt +3 -3
- data/install/config/tools/test_runner/test_runner.txt +8 -8
- data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
- data/install/lib/user_version.rb +3 -3
- data/install/tools/CmdExtractor +16 -16
- data/install/tools/CmdExtractor.bat +0 -0
- data/install/tools/CmdSender +16 -16
- data/install/tools/CmdSender.bat +0 -0
- data/install/tools/CmdTlmServer +16 -16
- data/install/tools/CmdTlmServer.bat +0 -0
- data/install/tools/DataViewer +16 -16
- data/install/tools/DataViewer.bat +0 -0
- data/install/tools/HandbookCreator +16 -16
- data/install/tools/HandbookCreator.bat +0 -0
- data/install/tools/Launcher +16 -16
- data/install/tools/Launcher.bat +0 -0
- data/install/tools/LimitsMonitor +16 -16
- data/install/tools/LimitsMonitor.bat +0 -0
- data/install/tools/OpenGLBuilder +16 -16
- data/install/tools/OpenGLBuilder.bat +0 -0
- data/install/tools/PacketViewer +16 -16
- data/install/tools/PacketViewer.bat +0 -0
- data/install/tools/Replay +16 -16
- data/install/tools/Replay.bat +0 -0
- data/install/tools/ScriptRunner +16 -16
- data/install/tools/ScriptRunner.bat +0 -0
- data/install/tools/TableManager +16 -16
- data/install/tools/TableManager.bat +0 -0
- data/install/tools/TestRunner +16 -16
- data/install/tools/TestRunner.bat +0 -0
- data/install/tools/TlmExtractor +16 -16
- data/install/tools/TlmExtractor.bat +0 -0
- data/install/tools/TlmGrapher +16 -16
- data/install/tools/TlmGrapher.bat +0 -0
- data/install/tools/TlmViewer +16 -16
- data/install/tools/TlmViewer.bat +0 -0
- data/install/tools/ToolLaunch.bat +14 -5
- data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
- data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
- data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
- data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
- data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
- data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
- data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/tool_launch.rb +38 -38
- data/lib/cosmos.rb +63 -63
- data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
- data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
- data/lib/cosmos/config/config_parser.rb +324 -324
- data/lib/cosmos/conversions.rb +13 -13
- data/lib/cosmos/conversions/conversion.rb +47 -47
- data/lib/cosmos/conversions/generic_conversion.rb +55 -55
- data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
- data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
- data/lib/cosmos/conversions/processor_conversion.rb +46 -46
- data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
- data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
- data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
- data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
- data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
- data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
- data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
- data/lib/cosmos/core_ext.rb +18 -18
- data/lib/cosmos/core_ext/array.rb +354 -354
- data/lib/cosmos/core_ext/class.rb +51 -51
- data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
- data/lib/cosmos/core_ext/exception.rb +52 -52
- data/lib/cosmos/core_ext/file.rb +75 -75
- data/lib/cosmos/core_ext/hash.rb +28 -28
- data/lib/cosmos/core_ext/io.rb +75 -75
- data/lib/cosmos/core_ext/kernel.rb +38 -38
- data/lib/cosmos/core_ext/math.rb +119 -119
- data/lib/cosmos/core_ext/matrix.rb +146 -146
- data/lib/cosmos/core_ext/objectspace.rb +29 -29
- data/lib/cosmos/core_ext/range.rb +22 -22
- data/lib/cosmos/core_ext/socket.rb +32 -32
- data/lib/cosmos/core_ext/string.rb +311 -311
- data/lib/cosmos/core_ext/stringio.rb +24 -24
- data/lib/cosmos/core_ext/time.rb +448 -448
- data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
- data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
- data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
- data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
- data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
- data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -326
- data/lib/cosmos/gui/dialogs/about_dialog.rb +137 -137
- data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
- data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
- data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
- data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
- data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +260 -260
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -169
- data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
- data/lib/cosmos/gui/dialogs/progress_dialog.rb +276 -276
- data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -165
- data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
- data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
- data/lib/cosmos/gui/dialogs/splash.rb +135 -135
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
- data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
- data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
- data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
- data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +473 -473
- data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
- data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +451 -451
- data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
- data/lib/cosmos/gui/line_graph/lines.rb +290 -290
- data/lib/cosmos/gui/line_graph/overview_graph.rb +469 -469
- data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
- data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
- data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
- data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
- data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
- data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
- data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -724
- data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
- data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
- data/lib/cosmos/gui/opengl/opengl.rb +8 -8
- data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
- data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
- data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
- data/lib/cosmos/gui/qt.rb +860 -860
- data/lib/cosmos/gui/qt_tool.rb +380 -380
- data/lib/cosmos/gui/text/completion.rb +381 -381
- data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
- data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
- data/lib/cosmos/gui/text/ruby_editor.rb +415 -415
- data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
- data/lib/cosmos/gui/utilities/script_module_gui.rb +330 -330
- data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
- data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
- data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
- data/lib/cosmos/interfaces.rb +11 -11
- data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -153
- data/lib/cosmos/interfaces/interface.rb +225 -225
- data/lib/cosmos/interfaces/linc_interface.rb +360 -360
- data/lib/cosmos/interfaces/serial_interface.rb +76 -76
- data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -129
- data/lib/cosmos/interfaces/stream_interface.rb +136 -136
- data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +164 -164
- data/lib/cosmos/interfaces/udp_interface.rb +161 -161
- data/lib/cosmos/io/buffered_file.rb +11 -11
- data/lib/cosmos/io/cosmos_snmp.rb +50 -50
- data/lib/cosmos/io/io_multiplexer.rb +89 -89
- data/lib/cosmos/io/json_drb.rb +376 -376
- data/lib/cosmos/io/json_drb_object.rb +198 -198
- data/lib/cosmos/io/json_rpc.rb +365 -365
- data/lib/cosmos/io/posix_serial_driver.rb +145 -145
- data/lib/cosmos/io/raw_logger.rb +174 -174
- data/lib/cosmos/io/raw_logger_pair.rb +71 -71
- data/lib/cosmos/io/serial_driver.rb +85 -85
- data/lib/cosmos/io/stderr.rb +36 -36
- data/lib/cosmos/io/stdout.rb +36 -36
- data/lib/cosmos/io/tcpip_server.rb +571 -571
- data/lib/cosmos/io/udp_sockets.rb +152 -152
- data/lib/cosmos/io/win32_serial_driver.rb +145 -145
- data/lib/cosmos/packet_logs.rb +7 -7
- data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -104
- data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
- data/lib/cosmos/packet_logs/packet_log_reader.rb +450 -450
- data/lib/cosmos/packet_logs/packet_log_writer.rb +323 -323
- data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
- data/lib/cosmos/packets/binary_accessor.rb +634 -634
- data/lib/cosmos/packets/commands.rb +293 -293
- data/lib/cosmos/packets/limits.rb +267 -267
- data/lib/cosmos/packets/limits_response.rb +38 -38
- data/lib/cosmos/packets/packet.rb +786 -786
- data/lib/cosmos/packets/packet_config.rb +482 -482
- data/lib/cosmos/packets/packet_item.rb +317 -317
- data/lib/cosmos/packets/packet_item_limits.rb +128 -128
- data/lib/cosmos/packets/parsers/format_string_parser.rb +58 -58
- data/lib/cosmos/packets/parsers/limits_parser.rb +146 -146
- data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -52
- data/lib/cosmos/packets/parsers/macro_parser.rb +116 -116
- data/lib/cosmos/packets/parsers/packet_item_parser.rb +215 -215
- data/lib/cosmos/packets/parsers/packet_parser.rb +123 -123
- data/lib/cosmos/packets/parsers/processor_parser.rb +63 -63
- data/lib/cosmos/packets/parsers/state_parser.rb +116 -116
- data/lib/cosmos/packets/structure.rb +458 -458
- data/lib/cosmos/packets/structure_item.rb +233 -233
- data/lib/cosmos/packets/telemetry.rb +350 -350
- data/lib/cosmos/processors.rb +6 -6
- data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
- data/lib/cosmos/processors/processor.rb +71 -71
- data/lib/cosmos/processors/statistics_processor.rb +65 -65
- data/lib/cosmos/processors/watermark_processor.rb +44 -44
- data/lib/cosmos/script.rb +9 -9
- data/lib/cosmos/script/cmd_tlm_server.rb +110 -110
- data/lib/cosmos/script/commands.rb +184 -184
- data/lib/cosmos/script/extract.rb +123 -123
- data/lib/cosmos/script/limits.rb +114 -114
- data/lib/cosmos/script/script.rb +76 -76
- data/lib/cosmos/script/scripting.rb +897 -897
- data/lib/cosmos/script/telemetry.rb +174 -174
- data/lib/cosmos/script/tools.rb +138 -138
- data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
- data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
- data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
- data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
- data/lib/cosmos/streams/serial_stream.rb +157 -157
- data/lib/cosmos/streams/stream.rb +63 -63
- data/lib/cosmos/streams/stream_protocol.rb +373 -373
- data/lib/cosmos/streams/tcpip_client_stream.rb +113 -113
- data/lib/cosmos/streams/tcpip_socket_stream.rb +143 -143
- data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
- data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
- data/lib/cosmos/system.rb +4 -4
- data/lib/cosmos/system/system.rb +618 -618
- data/lib/cosmos/system/target.rb +197 -197
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +255 -255
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +717 -717
- data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
- data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +1034 -1034
- data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -67
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +515 -515
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +253 -253
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +408 -408
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
- data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -175
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +200 -200
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -176
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +150 -150
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +244 -244
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +90 -90
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +266 -266
- data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
- data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
- data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +621 -621
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +134 -134
- data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -156
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -382
- data/lib/cosmos/tools/launcher/launcher.rb +188 -188
- data/lib/cosmos/tools/launcher/launcher_config.rb +256 -256
- data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -40
- data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -116
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +837 -837
- data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
- data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +542 -542
- data/lib/cosmos/tools/replay/replay.rb +501 -501
- data/lib/cosmos/tools/replay/replay_server.rb +91 -91
- data/lib/cosmos/tools/script_runner/script_audit.rb +147 -147
- data/lib/cosmos/tools/script_runner/script_runner.rb +922 -922
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1798 -1798
- data/lib/cosmos/tools/table_manager/table.rb +70 -70
- data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
- data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
- data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
- data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
- data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
- data/lib/cosmos/tools/test_runner/test.rb +539 -539
- data/lib/cosmos/tools/test_runner/test_runner.rb +1189 -1189
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -341
- data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1016 -1016
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -95
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +181 -181
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -174
- data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -193
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +407 -407
- data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
- data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -323
- data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
- data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
- data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
- data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
- data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
- data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
- data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
- data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -1291
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -114
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -78
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
- data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -486
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +561 -561
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +290 -290
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
- data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -66
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
- data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
- data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
- data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
- data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
- data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
- data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
- data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
- data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
- data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
- data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
- data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
- data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
- data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
- data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
- data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
- data/lib/cosmos/top_level.rb +759 -759
- data/lib/cosmos/utilities.rb +11 -11
- data/lib/cosmos/utilities/crc.rb +166 -166
- data/lib/cosmos/utilities/csv.rb +83 -83
- data/lib/cosmos/utilities/logger.rb +137 -137
- data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
- data/lib/cosmos/utilities/message_log.rb +79 -79
- data/lib/cosmos/utilities/quaternion.rb +258 -258
- data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
- data/lib/cosmos/utilities/simulated_target.rb +99 -99
- data/lib/cosmos/utilities/sleeper.rb +44 -44
- data/lib/cosmos/version.rb +12 -12
- data/lib/cosmos/win32/excel.rb +66 -66
- data/lib/cosmos/win32/win32.rb +387 -387
- data/lib/cosmos/win32/win32_main.rb +321 -321
- data/roodi.yml +24 -24
- data/run_gui_tests.bat +0 -0
- data/spec/ccsds/ccsds_packet_spec.rb +67 -67
- data/spec/ccsds/ccsds_parser_spec.rb +148 -148
- data/spec/config/config_parser_spec.rb +322 -322
- data/spec/conversions/conversion_spec.rb +31 -31
- data/spec/conversions/generic_conversion_spec.rb +45 -45
- data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
- data/spec/conversions/polynomial_conversion_spec.rb +40 -40
- data/spec/conversions/processor_conversion_spec.rb +45 -45
- data/spec/conversions/received_count_conversion_spec.rb +43 -43
- data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
- data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
- data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
- data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
- data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
- data/spec/core_ext/array_spec.rb +186 -186
- data/spec/core_ext/class_spec.rb +36 -36
- data/spec/core_ext/cosmos_io_spec.rb +77 -77
- data/spec/core_ext/exception_spec.rb +91 -91
- data/spec/core_ext/file_spec.rb +72 -72
- data/spec/core_ext/hash_spec.rb +24 -24
- data/spec/core_ext/io_spec.rb +46 -46
- data/spec/core_ext/kernel_spec.rb +54 -54
- data/spec/core_ext/math_spec.rb +116 -116
- data/spec/core_ext/matrix_spec.rb +66 -66
- data/spec/core_ext/objectspace_spec.rb +29 -29
- data/spec/core_ext/range_spec.rb +21 -21
- data/spec/core_ext/socket_spec.rb +32 -32
- data/spec/core_ext/string_spec.rb +223 -223
- data/spec/core_ext/stringio_spec.rb +21 -21
- data/spec/core_ext/time_spec.rb +202 -202
- data/spec/gui/line_graph/line_clip_spec.rb +322 -322
- data/spec/gui/qt_spec.rb +102 -102
- data/spec/install/config/system/system.txt +33 -33
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
- data/spec/install/config/targets/COSMOS/target.txt +5 -5
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
- data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -305
- data/spec/install/config/targets/INST/target.txt +10 -10
- data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
- data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
- data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
- data/spec/interfaces/interface_spec.rb +130 -130
- data/spec/interfaces/linc_interface_spec.rb +259 -259
- data/spec/interfaces/serial_interface_spec.rb +56 -56
- data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
- data/spec/interfaces/stream_interface_spec.rb +157 -157
- data/spec/interfaces/tcpip_client_interface_spec.rb +55 -55
- data/spec/interfaces/tcpip_server_interface_spec.rb +160 -160
- data/spec/interfaces/udp_interface_spec.rb +175 -175
- data/spec/io/buffered_file_spec.rb +113 -113
- data/spec/io/io_multiplexer_spec.rb +94 -94
- data/spec/io/json_drb_object_spec.rb +119 -119
- data/spec/io/json_drb_spec.rb +311 -311
- data/spec/io/json_rpc_spec.rb +264 -264
- data/spec/io/raw_logger_pair_spec.rb +76 -76
- data/spec/io/raw_logger_spec.rb +133 -133
- data/spec/io/serial_driver_spec.rb +60 -60
- data/spec/io/stderr_spec.rb +32 -32
- data/spec/io/stdout_spec.rb +32 -32
- data/spec/io/tcpip_server_spec.rb +338 -338
- data/spec/io/udp_sockets_spec.rb +94 -94
- data/spec/io/win32_serial_driver_spec.rb +88 -88
- data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
- data/spec/packet_logs/packet_log_reader_spec.rb +468 -468
- data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
- data/spec/packet_logs/packet_log_writer_spec.rb +225 -225
- data/spec/packets/binary_accessor_spec.rb +2326 -2326
- data/spec/packets/commands_spec.rb +369 -369
- data/spec/packets/limits_response_spec.rb +25 -25
- data/spec/packets/limits_spec.rb +344 -344
- data/spec/packets/packet_config_spec.rb +805 -805
- data/spec/packets/packet_item_limits_spec.rb +161 -161
- data/spec/packets/packet_item_spec.rb +386 -386
- data/spec/packets/packet_spec.rb +1317 -1317
- data/spec/packets/parsers/format_string_parser_spec.rb +122 -122
- data/spec/packets/parsers/limits_parser_spec.rb +282 -282
- data/spec/packets/parsers/limits_response_parser_spec.rb +149 -149
- data/spec/packets/parsers/macro_parser_spec.rb +212 -212
- data/spec/packets/parsers/packet_item_parser_spec.rb +306 -306
- data/spec/packets/parsers/packet_parser_spec.rb +99 -99
- data/spec/packets/parsers/processor_parser_spec.rb +114 -114
- data/spec/packets/parsers/state_parser_spec.rb +156 -156
- data/spec/packets/structure_item_spec.rb +195 -195
- data/spec/packets/structure_spec.rb +565 -565
- data/spec/packets/telemetry_spec.rb +578 -578
- data/spec/processors/new_packet_log_processor_spec.rb +39 -39
- data/spec/processors/processor_spec.rb +55 -55
- data/spec/processors/statistics_processor_spec.rb +60 -60
- data/spec/processors/watermark_processor_spec.rb +51 -51
- data/spec/script/cmd_tlm_server_spec.rb +110 -110
- data/spec/script/commands_disconnect_spec.rb +270 -270
- data/spec/script/commands_spec.rb +302 -302
- data/spec/script/limits_spec.rb +153 -153
- data/spec/script/script_spec.rb +86 -86
- data/spec/script/scripting_spec.rb +440 -440
- data/spec/script/telemetry_spec.rb +165 -165
- data/spec/script/tools_spec.rb +117 -117
- data/spec/spec_helper.rb +190 -190
- data/spec/streams/burst_stream_protocol_spec.rb +32 -32
- data/spec/streams/fixed_stream_protocol_spec.rb +113 -113
- data/spec/streams/length_stream_protocol_spec.rb +300 -300
- data/spec/streams/preidentified_stream_protocol_spec.rb +121 -121
- data/spec/streams/serial_stream_spec.rb +117 -117
- data/spec/streams/stream_protocol_spec.rb +346 -346
- data/spec/streams/stream_spec.rb +30 -30
- data/spec/streams/tcpip_client_stream_spec.rb +57 -57
- data/spec/streams/tcpip_socket_stream_spec.rb +193 -193
- data/spec/streams/template_stream_protocol_spec.rb +156 -156
- data/spec/streams/terminated_stream_protocol_spec.rb +127 -127
- data/spec/system/system_spec.rb +665 -665
- data/spec/system/target_spec.rb +250 -250
- data/spec/tools/cmd_tlm_server/api_spec.rb +1117 -1117
- data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +453 -453
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -151
- data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -235
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -252
- data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +151 -151
- data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -223
- data/spec/tools/launcher/launcher_config_spec.rb +464 -464
- data/spec/top_level/top_level_spec.rb +334 -334
- data/spec/utilities/crc_spec.rb +45 -45
- data/spec/utilities/csv_spec.rb +97 -97
- data/spec/utilities/logger_spec.rb +102 -102
- data/spec/utilities/message_log_spec.rb +89 -89
- data/spec/utilities/quaternion_spec.rb +107 -107
- data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
- data/tasks/manifest.rake +22 -22
- data/tasks/spec.rake +23 -23
- data/test/benchmarks/binary_accessor_benchmark.rb +14 -14
- data/test/benchmarks/gsub_benchmark.rb +152 -152
- data/test/benchmarks/is_a_benchmark.rb +34 -34
- data/test/performance/PACKETS.bat +0 -0
- data/test/performance/Rakefile +77 -77
- data/test/performance/THREADS.bat +0 -0
- data/test/performance/config/data/crc.txt +196 -196
- data/test/performance/config/data/diamond.STL +57 -57
- data/test/performance/config/data/meta_init.txt +4 -4
- data/test/performance/config/system/system_packets.txt +39 -39
- data/test/performance/config/system/system_threads.txt +59 -59
- data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -46
- data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/test/performance/config/targets/COSMOS/screens/version.txt +19 -19
- data/test/performance/config/targets/COSMOS/target.txt +11 -11
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -20
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -98
- data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -6
- data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -22
- data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -24
- data/test/performance/config/targets/PACKET/screens/status.txt +25 -25
- data/test/performance/config/targets/PACKET/target.txt +28 -28
- data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -12
- data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -17
- data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -18
- data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -6
- data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -22
- data/test/performance/config/targets/THREAD/screens/status.txt +25 -25
- data/test/performance/config/targets/THREAD/target.txt +6 -6
- data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -28
- data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -68
- data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -11
- data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -66
- data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/test/performance/config/tools/launcher/launcher_packets.txt +34 -34
- data/test/performance/config/tools/launcher/launcher_threads.txt +83 -83
- data/test/performance/config/tools/script_runner/script_runner.txt +3 -3
- data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
- data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
- data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
- data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
- data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
- data/test/performance/config/tools/test_runner/test_runner.txt +17 -17
- data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
- data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
- data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
- data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -204
- data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -13
- data/test/performance/lib/packet_target.rb +126 -126
- data/test/performance/lib/thread_target.rb +120 -120
- data/test/performance/lib/user_version.rb +3 -3
- data/test/performance/procedures/checks.rb +11 -11
- data/test/performance/procedures/clear_util.rb +7 -7
- data/test/performance/procedures/collect.rb +18 -18
- data/test/performance/procedures/collect_util.rb +14 -14
- data/test/performance/procedures/cosmos_api_test.rb +293 -293
- data/test/performance/procedures/disconnect.rb +29 -29
- data/test/performance/procedures/example_test.rb +182 -182
- data/test/performance/procedures/plot_test.rb +8 -8
- data/test/performance/procedures/procedure.rb +2 -2
- data/test/performance/procedures/run_example_test.rb +3 -3
- data/test/performance/procedures/test.rb +51 -51
- data/test/performance/tools/CmdExtractor +14 -14
- data/test/performance/tools/CmdExtractor.bat +0 -0
- data/test/performance/tools/CmdSender +14 -14
- data/test/performance/tools/CmdSender.bat +0 -0
- data/test/performance/tools/CmdTlmServer +16 -16
- data/test/performance/tools/CmdTlmServer.bat +0 -0
- data/test/performance/tools/CmdTlmServerMemProf +20 -20
- data/test/performance/tools/CmdTlmServerMemProf.bat +0 -0
- data/test/performance/tools/DataViewer +14 -14
- data/test/performance/tools/DataViewer.bat +0 -0
- data/test/performance/tools/HandbookCreator +14 -14
- data/test/performance/tools/HandbookCreator.bat +0 -0
- data/test/performance/tools/Launcher +14 -14
- data/test/performance/tools/Launcher.bat +0 -0
- data/test/performance/tools/LimitsMonitor +14 -14
- data/test/performance/tools/LimitsMonitor.bat +0 -0
- data/test/performance/tools/OpenGLBuilder +14 -14
- data/test/performance/tools/OpenGLBuilder.bat +0 -0
- data/test/performance/tools/PacketTarget +14 -14
- data/test/performance/tools/PacketTarget.bat +0 -0
- data/test/performance/tools/PacketViewer +14 -14
- data/test/performance/tools/PacketViewer.bat +0 -0
- data/test/performance/tools/Replay +14 -14
- data/test/performance/tools/Replay.bat +0 -0
- data/test/performance/tools/ScpiTarget +14 -14
- data/test/performance/tools/ScpiTarget.bat +0 -0
- data/test/performance/tools/ScriptRunner +14 -14
- data/test/performance/tools/ScriptRunner.bat +0 -0
- data/test/performance/tools/TableManager +14 -14
- data/test/performance/tools/TableManager.bat +0 -0
- data/test/performance/tools/TestRunner +14 -14
- data/test/performance/tools/TestRunner.bat +0 -0
- data/test/performance/tools/ThreadTarget +14 -14
- data/test/performance/tools/ThreadTarget.bat +0 -0
- data/test/performance/tools/TlmExtractor +14 -14
- data/test/performance/tools/TlmExtractor.bat +0 -0
- data/test/performance/tools/TlmGrapher +14 -14
- data/test/performance/tools/TlmGrapher.bat +0 -0
- data/test/performance/tools/TlmGrapherMemProf +19 -19
- data/test/performance/tools/TlmGrapherMemProf.bat +0 -0
- data/test/performance/tools/TlmViewer +14 -14
- data/test/performance/tools/TlmViewer.bat +0 -0
- data/test/performance/tools/TlmViewerMemProf +19 -19
- data/test/performance/tools/TlmViewerMemProf.bat +0 -0
- data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
- data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
- data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
- data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
- data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
- data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
- data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
- data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
- data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
- data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
- data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
- data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
- data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
- data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
- data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
- data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
- data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
- metadata +3 -3
|
@@ -1,30 +1,30 @@
|
|
|
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
|
-
module Cosmos
|
|
12
|
-
|
|
13
|
-
# Holds a cmd/tlm pair of packet log writers
|
|
14
|
-
class PacketLogWriterPair
|
|
15
|
-
|
|
16
|
-
# @return [PacketLogWriter] The comamnd log writer
|
|
17
|
-
attr_reader :cmd_log_writer
|
|
18
|
-
# @return [PacketLogWriter] The telemetry log writer
|
|
19
|
-
attr_reader :tlm_log_writer
|
|
20
|
-
|
|
21
|
-
# @param cmd_log_writer [PacketLogWriter] The command log writer
|
|
22
|
-
# @param tlm_log_writer [PacketLogWriter] The telemetry log writer
|
|
23
|
-
def initialize(cmd_log_writer, tlm_log_writer)
|
|
24
|
-
@cmd_log_writer = cmd_log_writer
|
|
25
|
-
@tlm_log_writer = tlm_log_writer
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
end # class PacketLogWriterPair
|
|
29
|
-
|
|
30
|
-
end # module Cosmos
|
|
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
|
+
module Cosmos
|
|
12
|
+
|
|
13
|
+
# Holds a cmd/tlm pair of packet log writers
|
|
14
|
+
class PacketLogWriterPair
|
|
15
|
+
|
|
16
|
+
# @return [PacketLogWriter] The comamnd log writer
|
|
17
|
+
attr_reader :cmd_log_writer
|
|
18
|
+
# @return [PacketLogWriter] The telemetry log writer
|
|
19
|
+
attr_reader :tlm_log_writer
|
|
20
|
+
|
|
21
|
+
# @param cmd_log_writer [PacketLogWriter] The command log writer
|
|
22
|
+
# @param tlm_log_writer [PacketLogWriter] The telemetry log writer
|
|
23
|
+
def initialize(cmd_log_writer, tlm_log_writer)
|
|
24
|
+
@cmd_log_writer = cmd_log_writer
|
|
25
|
+
@tlm_log_writer = tlm_log_writer
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end # class PacketLogWriterPair
|
|
29
|
+
|
|
30
|
+
end # module Cosmos
|
|
@@ -1,634 +1,634 @@
|
|
|
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 Lesser 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
|
-
# This file contains the implementation of the BinaryAccessor class.
|
|
12
|
-
# This class allows for easy reading and writing of binary data in Ruby
|
|
13
|
-
|
|
14
|
-
require 'cosmos/ext/packet'
|
|
15
|
-
|
|
16
|
-
module Cosmos
|
|
17
|
-
|
|
18
|
-
# Provides methods for binary reading and writing
|
|
19
|
-
class BinaryAccessor
|
|
20
|
-
|
|
21
|
-
# Constants for ruby packing directives
|
|
22
|
-
PACK_8_BIT_INT = 'c'
|
|
23
|
-
PACK_NATIVE_16_BIT_INT = 's'
|
|
24
|
-
PACK_LITTLE_ENDIAN_16_BIT_UINT = 'v'
|
|
25
|
-
PACK_BIG_ENDIAN_16_BIT_UINT = 'n'
|
|
26
|
-
PACK_NATIVE_32_BIT_INT = 'l'
|
|
27
|
-
PACK_NATIVE_32_BIT_UINT = 'L'
|
|
28
|
-
PACK_NATIVE_64_BIT_INT = 'q'
|
|
29
|
-
PACK_NATIVE_64_BIT_UINT = 'Q'
|
|
30
|
-
PACK_LITTLE_ENDIAN_32_BIT_UINT = 'V'
|
|
31
|
-
PACK_BIG_ENDIAN_32_BIT_UINT = 'N'
|
|
32
|
-
PACK_LITTLE_ENDIAN_32_BIT_FLOAT = 'e'
|
|
33
|
-
PACK_LITTLE_ENDIAN_64_BIT_FLOAT = 'E'
|
|
34
|
-
PACK_BIG_ENDIAN_32_BIT_FLOAT = 'g'
|
|
35
|
-
PACK_BIG_ENDIAN_64_BIT_FLOAT = 'G'
|
|
36
|
-
PACK_NULL_TERMINATED_STRING = 'Z*'
|
|
37
|
-
PACK_BLOCK = 'a*'
|
|
38
|
-
PACK_8_BIT_INT_ARRAY = 'c*'
|
|
39
|
-
PACK_8_BIT_UINT_ARRAY = 'C*'
|
|
40
|
-
PACK_NATIVE_16_BIT_INT_ARRAY = 's*'
|
|
41
|
-
PACK_BIG_ENDIAN_16_BIT_UINT_ARRAY = 'n*'
|
|
42
|
-
PACK_LITTLE_ENDIAN_16_BIT_UINT_ARRAY = 'v*'
|
|
43
|
-
PACK_NATIVE_32_BIT_INT_ARRAY = 'l*'
|
|
44
|
-
PACK_BIG_ENDIAN_32_BIT_UINT_ARRAY = 'N*'
|
|
45
|
-
PACK_LITTLE_ENDIAN_32_BIT_UINT_ARRAY = 'V*'
|
|
46
|
-
PACK_NATIVE_64_BIT_INT_ARRAY = 'q*'
|
|
47
|
-
PACK_NATIVE_64_BIT_UINT_ARRAY = 'Q*'
|
|
48
|
-
PACK_LITTLE_ENDIAN_32_BIT_FLOAT_ARRAY = 'e*'
|
|
49
|
-
PACK_LITTLE_ENDIAN_64_BIT_FLOAT_ARRAY = 'E*'
|
|
50
|
-
PACK_BIG_ENDIAN_32_BIT_FLOAT_ARRAY = 'g*'
|
|
51
|
-
PACK_BIG_ENDIAN_64_BIT_FLOAT_ARRAY = 'G*'
|
|
52
|
-
|
|
53
|
-
# Additional Constants
|
|
54
|
-
ZERO_STRING = "\000"
|
|
55
|
-
|
|
56
|
-
# Valid data types
|
|
57
|
-
DATA_TYPES = [:INT, :UINT, :FLOAT, :STRING, :BLOCK]
|
|
58
|
-
|
|
59
|
-
# Valid overflow types
|
|
60
|
-
OVERFLOW_TYPES = [:TRUNCATE, :SATURATE, :ERROR, :ERROR_ALLOW_HEX]
|
|
61
|
-
|
|
62
|
-
protected
|
|
63
|
-
|
|
64
|
-
# Determines the endianness of the host running this code
|
|
65
|
-
#
|
|
66
|
-
# This method is protected to force the use of the constant
|
|
67
|
-
# HOST_ENDIANNESS rather than this method
|
|
68
|
-
#
|
|
69
|
-
# @return [Symbol] :BIG_ENDIAN or :LITTLE_ENDIAN
|
|
70
|
-
def self.get_host_endianness
|
|
71
|
-
value = 0x01020304
|
|
72
|
-
packed = [value].pack(PACK_NATIVE_32_BIT_UINT)
|
|
73
|
-
unpacked = packed.unpack(PACK_LITTLE_ENDIAN_32_BIT_UINT)[0]
|
|
74
|
-
if unpacked == value
|
|
75
|
-
:LITTLE_ENDIAN
|
|
76
|
-
else
|
|
77
|
-
:BIG_ENDIAN
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def self.raise_buffer_error(read_write, buffer, data_type, given_bit_offset, given_bit_size)
|
|
82
|
-
raise ArgumentError, "#{buffer.length} byte buffer insufficient to #{read_write} #{data_type} at bit_offset #{given_bit_offset} with bit_size #{given_bit_size}"
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
public
|
|
86
|
-
|
|
87
|
-
# Store the host endianness so that it only has to be determined once
|
|
88
|
-
HOST_ENDIANNESS = get_host_endianness()
|
|
89
|
-
# Valid endianess
|
|
90
|
-
ENDIANNESS = [:BIG_ENDIAN, :LITTLE_ENDIAN]
|
|
91
|
-
|
|
92
|
-
# Reads binary data of any data type from a buffer
|
|
93
|
-
#
|
|
94
|
-
# @param bit_offset [Integer] Bit offset to the start of the item. A
|
|
95
|
-
# negative number means to offset from the end of the buffer.
|
|
96
|
-
# @param bit_size [Integer] Size of the item in bits
|
|
97
|
-
# @param data_type [Symbol] {DATA_TYPES}
|
|
98
|
-
# @param buffer [String] Binary string buffer to read from
|
|
99
|
-
# @param endianness [Symbol] {ENDIANNESS}
|
|
100
|
-
# @return [Integer] value read from the buffer
|
|
101
|
-
# def self.read(bit_offset, bit_size, data_type, buffer, endianness)
|
|
102
|
-
|
|
103
|
-
# Writes binary data of any data type to a buffer
|
|
104
|
-
#
|
|
105
|
-
# @param value [Varies] Value to write into the buffer
|
|
106
|
-
# @param bit_offset [Integer] Bit offset to the start of the item. A
|
|
107
|
-
# negative number means to offset from the end of the buffer.
|
|
108
|
-
# @param bit_size [Integer] Size of the item in bits
|
|
109
|
-
# @param data_type [Symbol] {DATA_TYPES}
|
|
110
|
-
# @param buffer [String] Binary string buffer to write to
|
|
111
|
-
# @param endianness [Symbol] {ENDIANNESS}
|
|
112
|
-
# @param overflow [Symbol] {OVERFLOW_TYPES}
|
|
113
|
-
# @return [Integer] value passed in as a parameter
|
|
114
|
-
# def self.write(value, bit_offset, bit_size, data_type, buffer, endianness, overflow)
|
|
115
|
-
|
|
116
|
-
# Reads an array of binary data of any data type from a buffer
|
|
117
|
-
#
|
|
118
|
-
# @param bit_offset [Integer] Bit offset to the start of the array. A
|
|
119
|
-
# negative number means to offset from the end of the buffer.
|
|
120
|
-
# @param bit_size [Integer] Size of each item in the array in bits
|
|
121
|
-
# @param data_type [Symbol] {DATA_TYPES}
|
|
122
|
-
# @param array_size [Integer] Size in bits of the array. 0 or negative means
|
|
123
|
-
# fill the array with as many bit_size number of items that exist (negative
|
|
124
|
-
# means excluding the final X number of bits).
|
|
125
|
-
# @param buffer [String] Binary string buffer to read from
|
|
126
|
-
# @param endianness [Symbol] {ENDIANNESS}
|
|
127
|
-
# @return [Array] Array created from reading the buffer
|
|
128
|
-
def self.read_array(bit_offset, bit_size, data_type, array_size, buffer, endianness)
|
|
129
|
-
# Save given values of bit offset, bit size, and array_size
|
|
130
|
-
given_bit_offset = bit_offset
|
|
131
|
-
given_bit_size = bit_size
|
|
132
|
-
given_array_size = array_size
|
|
133
|
-
|
|
134
|
-
# Handle negative and zero bit sizes
|
|
135
|
-
raise ArgumentError, "bit_size #{given_bit_size} must be positive for arrays" if bit_size <= 0
|
|
136
|
-
|
|
137
|
-
# Handle negative bit offsets
|
|
138
|
-
if bit_offset < 0
|
|
139
|
-
bit_offset = ((buffer.length * 8) + bit_offset)
|
|
140
|
-
raise_buffer_error(:read, buffer, data_type, given_bit_offset, given_bit_size) if bit_offset < 0
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
# Handle negative and zero array sizes
|
|
144
|
-
if array_size <= 0
|
|
145
|
-
if given_bit_offset < 0
|
|
146
|
-
raise ArgumentError, "negative or zero array_size (#{given_array_size}) cannot be given with negative bit_offset (#{given_bit_offset})"
|
|
147
|
-
else
|
|
148
|
-
array_size = ((buffer.length * 8) - bit_offset + array_size)
|
|
149
|
-
if array_size == 0
|
|
150
|
-
return []
|
|
151
|
-
elsif array_size < 0
|
|
152
|
-
raise_buffer_error(:read, buffer, data_type, given_bit_offset, given_bit_size)
|
|
153
|
-
end
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
# Calculate number of items in the array
|
|
158
|
-
# If there is a remainder then we have a problem
|
|
159
|
-
raise ArgumentError, "array_size #{given_array_size} not a multiple of bit_size #{given_bit_size}" if array_size % bit_size != 0
|
|
160
|
-
num_items = array_size / bit_size
|
|
161
|
-
|
|
162
|
-
# Define bounds of string to access this item
|
|
163
|
-
lower_bound = bit_offset / 8
|
|
164
|
-
upper_bound = (bit_offset + array_size - 1) / 8
|
|
165
|
-
|
|
166
|
-
# Check for byte alignment
|
|
167
|
-
byte_aligned = ((bit_offset % 8) == 0)
|
|
168
|
-
|
|
169
|
-
case data_type
|
|
170
|
-
when :STRING, :BLOCK
|
|
171
|
-
#######################################
|
|
172
|
-
# Handle :STRING and :BLOCK data types
|
|
173
|
-
#######################################
|
|
174
|
-
|
|
175
|
-
if byte_aligned
|
|
176
|
-
value = []
|
|
177
|
-
num_items.times do
|
|
178
|
-
value << self.read(bit_offset, bit_size, data_type, buffer, endianness)
|
|
179
|
-
bit_offset += bit_size
|
|
180
|
-
end
|
|
181
|
-
else
|
|
182
|
-
raise ArgumentError, "bit_offset #{given_bit_offset} is not byte aligned for data_type #{data_type}"
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
when :INT, :UINT
|
|
186
|
-
###################################
|
|
187
|
-
# Handle :INT and :UINT data types
|
|
188
|
-
###################################
|
|
189
|
-
|
|
190
|
-
if byte_aligned and (bit_size == 8 or bit_size == 16 or bit_size == 32 or bit_size == 64)
|
|
191
|
-
###########################################################
|
|
192
|
-
# Handle byte-aligned 8, 16, 32, and 64 bit :INT and :UINT
|
|
193
|
-
###########################################################
|
|
194
|
-
|
|
195
|
-
case bit_size
|
|
196
|
-
when 8
|
|
197
|
-
if data_type == :INT
|
|
198
|
-
value = buffer[lower_bound..upper_bound].unpack(PACK_8_BIT_INT_ARRAY)
|
|
199
|
-
else # data_type == :UINT
|
|
200
|
-
value = buffer[lower_bound..upper_bound].unpack(PACK_8_BIT_UINT_ARRAY)
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
when 16
|
|
204
|
-
if data_type == :INT
|
|
205
|
-
if endianness == HOST_ENDIANNESS
|
|
206
|
-
value = buffer[lower_bound..upper_bound].unpack(PACK_NATIVE_16_BIT_INT_ARRAY)
|
|
207
|
-
else # endianness != HOST_ENDIANNESS
|
|
208
|
-
temp = self.byte_swap_buffer(buffer[lower_bound..upper_bound], 2)
|
|
209
|
-
value = temp.to_s.unpack(PACK_NATIVE_16_BIT_INT_ARRAY)
|
|
210
|
-
end
|
|
211
|
-
else # data_type == :UINT
|
|
212
|
-
if endianness == :BIG_ENDIAN
|
|
213
|
-
value = buffer[lower_bound..upper_bound].unpack(PACK_BIG_ENDIAN_16_BIT_UINT_ARRAY)
|
|
214
|
-
else # endianness == :LITTLE_ENDIAN
|
|
215
|
-
value = buffer[lower_bound..upper_bound].unpack(PACK_LITTLE_ENDIAN_16_BIT_UINT_ARRAY)
|
|
216
|
-
end
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
when 32
|
|
220
|
-
if data_type == :INT
|
|
221
|
-
if endianness == HOST_ENDIANNESS
|
|
222
|
-
value = buffer[lower_bound..upper_bound].unpack(PACK_NATIVE_32_BIT_INT_ARRAY)
|
|
223
|
-
else # endianness != HOST_ENDIANNESS
|
|
224
|
-
temp = self.byte_swap_buffer(buffer[lower_bound..upper_bound], 4)
|
|
225
|
-
value = temp.to_s.unpack(PACK_NATIVE_32_BIT_INT_ARRAY)
|
|
226
|
-
end
|
|
227
|
-
else # data_type == :UINT
|
|
228
|
-
if endianness == :BIG_ENDIAN
|
|
229
|
-
value = buffer[lower_bound..upper_bound].unpack(PACK_BIG_ENDIAN_32_BIT_UINT_ARRAY)
|
|
230
|
-
else # endianness == :LITTLE_ENDIAN
|
|
231
|
-
value = buffer[lower_bound..upper_bound].unpack(PACK_LITTLE_ENDIAN_32_BIT_UINT_ARRAY)
|
|
232
|
-
end
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
when 64
|
|
236
|
-
if data_type == :INT
|
|
237
|
-
if endianness == HOST_ENDIANNESS
|
|
238
|
-
value = buffer[lower_bound..upper_bound].unpack(PACK_NATIVE_64_BIT_INT_ARRAY)
|
|
239
|
-
else # endianness != HOST_ENDIANNESS
|
|
240
|
-
temp = self.byte_swap_buffer(buffer[lower_bound..upper_bound], 8)
|
|
241
|
-
value = temp.to_s.unpack(PACK_NATIVE_64_BIT_INT_ARRAY)
|
|
242
|
-
end
|
|
243
|
-
else # data_type == :UINT
|
|
244
|
-
if endianness == HOST_ENDIANNESS
|
|
245
|
-
value = buffer[lower_bound..upper_bound].unpack(PACK_NATIVE_64_BIT_UINT_ARRAY)
|
|
246
|
-
else # endianness != HOST_ENDIANNESS
|
|
247
|
-
temp = self.byte_swap_buffer(buffer[lower_bound..upper_bound], 8)
|
|
248
|
-
value = temp.to_s.unpack(PACK_NATIVE_64_BIT_UINT_ARRAY)
|
|
249
|
-
end
|
|
250
|
-
end
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
else
|
|
254
|
-
##################################
|
|
255
|
-
# Handle :INT and :UINT Bitfields
|
|
256
|
-
##################################
|
|
257
|
-
raise ArgumentError, "read_array does not support little endian bit fields with bit_size greater than 1-bit" if endianness == :LITTLE_ENDIAN and bit_size > 1
|
|
258
|
-
|
|
259
|
-
value = []
|
|
260
|
-
num_items.times do
|
|
261
|
-
value << self.read(bit_offset, bit_size, data_type, buffer, endianness)
|
|
262
|
-
bit_offset += bit_size
|
|
263
|
-
end
|
|
264
|
-
end
|
|
265
|
-
|
|
266
|
-
when :FLOAT
|
|
267
|
-
##########################
|
|
268
|
-
# Handle :FLOAT data type
|
|
269
|
-
##########################
|
|
270
|
-
|
|
271
|
-
if byte_aligned
|
|
272
|
-
case bit_size
|
|
273
|
-
when 32
|
|
274
|
-
if endianness == :BIG_ENDIAN
|
|
275
|
-
value = buffer[lower_bound..upper_bound].unpack(PACK_BIG_ENDIAN_32_BIT_FLOAT_ARRAY)
|
|
276
|
-
else # endianness == :LITTLE_ENDIAN
|
|
277
|
-
value = buffer[lower_bound..upper_bound].unpack(PACK_LITTLE_ENDIAN_32_BIT_FLOAT_ARRAY)
|
|
278
|
-
end
|
|
279
|
-
|
|
280
|
-
when 64
|
|
281
|
-
if endianness == :BIG_ENDIAN
|
|
282
|
-
value = buffer[lower_bound..upper_bound].unpack(PACK_BIG_ENDIAN_64_BIT_FLOAT_ARRAY)
|
|
283
|
-
else # endianness == :LITTLE_ENDIAN
|
|
284
|
-
value = buffer[lower_bound..upper_bound].unpack(PACK_LITTLE_ENDIAN_64_BIT_FLOAT_ARRAY)
|
|
285
|
-
end
|
|
286
|
-
|
|
287
|
-
else
|
|
288
|
-
raise ArgumentError, "bit_size is #{given_bit_size} but must be 32 or 64 for data_type #{data_type}"
|
|
289
|
-
end
|
|
290
|
-
|
|
291
|
-
else
|
|
292
|
-
raise ArgumentError, "bit_offset #{given_bit_offset} is not byte aligned for data_type #{data_type}"
|
|
293
|
-
end
|
|
294
|
-
|
|
295
|
-
else
|
|
296
|
-
############################
|
|
297
|
-
# Handle Unknown data types
|
|
298
|
-
############################
|
|
299
|
-
|
|
300
|
-
raise ArgumentError, "data_type #{data_type} is not recognized"
|
|
301
|
-
end
|
|
302
|
-
|
|
303
|
-
value
|
|
304
|
-
end # def read_array
|
|
305
|
-
|
|
306
|
-
# Writes an array of binary data of any data type to a buffer
|
|
307
|
-
#
|
|
308
|
-
# @param values [Array] Values to write into the buffer
|
|
309
|
-
# @param bit_offset [Integer] Bit offset to the start of the array. A
|
|
310
|
-
# negative number means to offset from the end of the buffer.
|
|
311
|
-
# @param bit_size [Integer] Size of each item in the array in bits
|
|
312
|
-
# @param data_type [Symbol] {DATA_TYPES}
|
|
313
|
-
# @param array_size [Integer] Size in bits of the array as represented in the buffer.
|
|
314
|
-
# Size 0 means to fill the buffer with as many bit_size number of items that exist
|
|
315
|
-
# (negative means excluding the final X number of bits).
|
|
316
|
-
# @param buffer [String] Binary string buffer to write to
|
|
317
|
-
# @param endianness [Symbol] {ENDIANNESS}
|
|
318
|
-
# @return [Array] values passed in as a parameter
|
|
319
|
-
def self.write_array(values, bit_offset, bit_size, data_type, array_size, buffer, endianness, overflow)
|
|
320
|
-
# Save given values of bit offset, bit size, and array_size
|
|
321
|
-
given_bit_offset = bit_offset
|
|
322
|
-
given_bit_size = bit_size
|
|
323
|
-
given_array_size = array_size
|
|
324
|
-
|
|
325
|
-
# Verify an array was given
|
|
326
|
-
raise ArgumentError, "values must be an Array type class is #{values.class}" unless values.kind_of? Array
|
|
327
|
-
|
|
328
|
-
# Handle negative and zero bit sizes
|
|
329
|
-
raise ArgumentError, "bit_size #{given_bit_size} must be positive for arrays" if bit_size <= 0
|
|
330
|
-
|
|
331
|
-
# Handle negative bit offsets
|
|
332
|
-
if bit_offset < 0
|
|
333
|
-
bit_offset = ((buffer.length * 8) + bit_offset)
|
|
334
|
-
raise_buffer_error(:write, buffer, data_type, given_bit_offset, given_bit_size) if bit_offset < 0
|
|
335
|
-
end
|
|
336
|
-
|
|
337
|
-
# Handle negative and zero array sizes
|
|
338
|
-
if array_size <= 0
|
|
339
|
-
if given_bit_offset < 0
|
|
340
|
-
raise ArgumentError, "negative or zero array_size (#{given_array_size}) cannot be given with negative bit_offset (#{given_bit_offset})"
|
|
341
|
-
else
|
|
342
|
-
end_bytes = -(given_array_size / 8)
|
|
343
|
-
lower_bound = bit_offset / 8
|
|
344
|
-
upper_bound = (bit_offset + (bit_size * values.length) - 1) / 8
|
|
345
|
-
old_upper_bound = buffer.length - 1 - end_bytes
|
|
346
|
-
|
|
347
|
-
if upper_bound < old_upper_bound
|
|
348
|
-
# Remove extra bytes from old buffer
|
|
349
|
-
buffer[(upper_bound + 1)..old_upper_bound] = ''
|
|
350
|
-
elsif upper_bound > old_upper_bound
|
|
351
|
-
# Grow buffer and preserve bytes at end of buffer if necesssary
|
|
352
|
-
buffer_length = buffer.length
|
|
353
|
-
diff = upper_bound - old_upper_bound
|
|
354
|
-
buffer << ZERO_STRING * diff
|
|
355
|
-
if end_bytes > 0
|
|
356
|
-
buffer[(upper_bound + 1)..(buffer.length - 1)] = buffer[(old_upper_bound + 1)..(buffer_length - 1)]
|
|
357
|
-
end
|
|
358
|
-
end
|
|
359
|
-
|
|
360
|
-
array_size = ((buffer.length * 8) - bit_offset + array_size)
|
|
361
|
-
end
|
|
362
|
-
end
|
|
363
|
-
|
|
364
|
-
# Get data bounds for this array
|
|
365
|
-
lower_bound = bit_offset / 8
|
|
366
|
-
upper_bound = (bit_offset + array_size - 1) / 8
|
|
367
|
-
num_bytes = upper_bound - lower_bound + 1
|
|
368
|
-
|
|
369
|
-
# Check for byte alignment
|
|
370
|
-
byte_aligned = ((bit_offset % 8) == 0)
|
|
371
|
-
|
|
372
|
-
# Calculate the number of writes
|
|
373
|
-
num_writes = array_size / bit_size
|
|
374
|
-
# Check for a negative array_size and adjust the number of writes
|
|
375
|
-
# to simply be the number of values in the passed in array
|
|
376
|
-
if given_array_size <= 0
|
|
377
|
-
num_writes = values.length
|
|
378
|
-
end
|
|
379
|
-
|
|
380
|
-
# Ensure the buffer has enough room
|
|
381
|
-
if bit_offset + num_writes * bit_size > buffer.length * 8
|
|
382
|
-
raise_buffer_error(:write, buffer, data_type, given_bit_offset, given_bit_size)
|
|
383
|
-
end
|
|
384
|
-
|
|
385
|
-
# Ensure the given_array_size is an even multiple of bit_size
|
|
386
|
-
raise ArgumentError, "array_size #{given_array_size} not a multiple of bit_size #{given_bit_size}" if array_size % bit_size != 0
|
|
387
|
-
|
|
388
|
-
raise ArgumentError, "too many values #{values.length} for given array_size #{given_array_size} and bit_size #{given_bit_size}" if num_writes < values.length
|
|
389
|
-
|
|
390
|
-
# Check overflow type
|
|
391
|
-
raise "unknown overflow type #{overflow}" unless OVERFLOW_TYPES.include?(overflow)
|
|
392
|
-
|
|
393
|
-
case data_type
|
|
394
|
-
when :STRING, :BLOCK
|
|
395
|
-
#######################################
|
|
396
|
-
# Handle :STRING and :BLOCK data types
|
|
397
|
-
#######################################
|
|
398
|
-
|
|
399
|
-
if byte_aligned
|
|
400
|
-
num_writes.times do |index|
|
|
401
|
-
self.write(values[index], bit_offset, bit_size, data_type, buffer, endianness, overflow)
|
|
402
|
-
bit_offset += bit_size
|
|
403
|
-
end
|
|
404
|
-
else
|
|
405
|
-
raise ArgumentError, "bit_offset #{given_bit_offset} is not byte aligned for data_type #{data_type}"
|
|
406
|
-
end
|
|
407
|
-
|
|
408
|
-
when :INT, :UINT
|
|
409
|
-
###################################
|
|
410
|
-
# Handle :INT and :UINT data types
|
|
411
|
-
###################################
|
|
412
|
-
|
|
413
|
-
if byte_aligned and (bit_size == 8 or bit_size == 16 or bit_size == 32 or bit_size == 64)
|
|
414
|
-
###########################################################
|
|
415
|
-
# Handle byte-aligned 8, 16, 32, and 64 bit :INT and :UINT
|
|
416
|
-
###########################################################
|
|
417
|
-
|
|
418
|
-
case bit_size
|
|
419
|
-
when 8
|
|
420
|
-
if data_type == :INT
|
|
421
|
-
values = self.check_overflow_array(values, -128, 127, 255, bit_size, data_type, overflow)
|
|
422
|
-
packed = values.pack(PACK_8_BIT_INT_ARRAY)
|
|
423
|
-
else # data_type == :UINT
|
|
424
|
-
values = self.check_overflow_array(values, 0, 255, 255, bit_size, data_type, overflow)
|
|
425
|
-
packed = values.pack(PACK_8_BIT_UINT_ARRAY)
|
|
426
|
-
end
|
|
427
|
-
|
|
428
|
-
when 16
|
|
429
|
-
if data_type == :INT
|
|
430
|
-
values = self.check_overflow_array(values, -32768, 32767, 65535, bit_size, data_type, overflow)
|
|
431
|
-
if endianness == HOST_ENDIANNESS
|
|
432
|
-
packed = values.pack(PACK_NATIVE_16_BIT_INT_ARRAY)
|
|
433
|
-
else # endianness != HOST_ENDIANNESS
|
|
434
|
-
packed = values.pack(PACK_NATIVE_16_BIT_INT_ARRAY)
|
|
435
|
-
self.byte_swap_buffer!(packed, 2)
|
|
436
|
-
end
|
|
437
|
-
else # data_type == :UINT
|
|
438
|
-
values = self.check_overflow_array(values, 0, 65535, 65535, bit_size, data_type, overflow)
|
|
439
|
-
if endianness == :BIG_ENDIAN
|
|
440
|
-
packed = values.pack(PACK_BIG_ENDIAN_16_BIT_UINT_ARRAY)
|
|
441
|
-
else # endianness == :LITTLE_ENDIAN
|
|
442
|
-
packed = values.pack(PACK_LITTLE_ENDIAN_16_BIT_UINT_ARRAY)
|
|
443
|
-
end
|
|
444
|
-
end
|
|
445
|
-
|
|
446
|
-
when 32
|
|
447
|
-
if data_type == :INT
|
|
448
|
-
values = self.check_overflow_array(values, -2147483648, 2147483647, 4294967295, bit_size, data_type, overflow)
|
|
449
|
-
if endianness == HOST_ENDIANNESS
|
|
450
|
-
packed = values.pack(PACK_NATIVE_32_BIT_INT_ARRAY)
|
|
451
|
-
else # endianness != HOST_ENDIANNESS
|
|
452
|
-
packed = values.pack(PACK_NATIVE_32_BIT_INT_ARRAY)
|
|
453
|
-
self.byte_swap_buffer!(packed, 4)
|
|
454
|
-
end
|
|
455
|
-
else # data_type == :UINT
|
|
456
|
-
values = self.check_overflow_array(values, 0, 4294967295, 4294967295, bit_size, data_type, overflow)
|
|
457
|
-
if endianness == :BIG_ENDIAN
|
|
458
|
-
packed = values.pack(PACK_BIG_ENDIAN_32_BIT_UINT_ARRAY)
|
|
459
|
-
else # endianness == :LITTLE_ENDIAN
|
|
460
|
-
packed = values.pack(PACK_LITTLE_ENDIAN_32_BIT_UINT_ARRAY)
|
|
461
|
-
end
|
|
462
|
-
end
|
|
463
|
-
|
|
464
|
-
when 64
|
|
465
|
-
if data_type == :INT
|
|
466
|
-
values = self.check_overflow_array(values, -9223372036854775808, 9223372036854775807, 18446744073709551615, bit_size, data_type, overflow)
|
|
467
|
-
if endianness == HOST_ENDIANNESS
|
|
468
|
-
packed = values.pack(PACK_NATIVE_64_BIT_INT_ARRAY)
|
|
469
|
-
else # endianness != HOST_ENDIANNESS
|
|
470
|
-
packed = values.pack(PACK_NATIVE_64_BIT_INT_ARRAY)
|
|
471
|
-
self.byte_swap_buffer!(packed, 8)
|
|
472
|
-
end
|
|
473
|
-
else # data_type == :UINT
|
|
474
|
-
values = self.check_overflow_array(values, 0, 18446744073709551615, 18446744073709551615, bit_size, data_type, overflow)
|
|
475
|
-
if endianness == HOST_ENDIANNESS
|
|
476
|
-
packed = values.pack(PACK_NATIVE_64_BIT_UINT_ARRAY)
|
|
477
|
-
else # endianness != HOST_ENDIANNESS
|
|
478
|
-
packed = values.pack(PACK_NATIVE_64_BIT_UINT_ARRAY)
|
|
479
|
-
self.byte_swap_buffer!(packed, 8)
|
|
480
|
-
end
|
|
481
|
-
end
|
|
482
|
-
end
|
|
483
|
-
|
|
484
|
-
# Adjust packed size to hold number of items written
|
|
485
|
-
buffer[lower_bound..upper_bound] = adjust_packed_size(num_bytes, packed) if num_bytes > 0
|
|
486
|
-
|
|
487
|
-
else
|
|
488
|
-
##################################
|
|
489
|
-
# Handle :INT and :UINT Bitfields
|
|
490
|
-
##################################
|
|
491
|
-
|
|
492
|
-
raise ArgumentError, "write_array does not support little endian bit fields with bit_size greater than 1-bit" if endianness == :LITTLE_ENDIAN and bit_size > 1
|
|
493
|
-
|
|
494
|
-
num_writes.times do |index|
|
|
495
|
-
self.write(values[index], bit_offset, bit_size, data_type, buffer, endianness, overflow)
|
|
496
|
-
bit_offset += bit_size
|
|
497
|
-
end
|
|
498
|
-
end
|
|
499
|
-
|
|
500
|
-
when :FLOAT
|
|
501
|
-
##########################
|
|
502
|
-
# Handle :FLOAT data type
|
|
503
|
-
##########################
|
|
504
|
-
|
|
505
|
-
if byte_aligned
|
|
506
|
-
case bit_size
|
|
507
|
-
when 32
|
|
508
|
-
if endianness == :BIG_ENDIAN
|
|
509
|
-
packed = values.pack(PACK_BIG_ENDIAN_32_BIT_FLOAT_ARRAY)
|
|
510
|
-
else # endianness == :LITTLE_ENDIAN
|
|
511
|
-
packed = values.pack(PACK_LITTLE_ENDIAN_32_BIT_FLOAT_ARRAY)
|
|
512
|
-
end
|
|
513
|
-
|
|
514
|
-
when 64
|
|
515
|
-
if endianness == :BIG_ENDIAN
|
|
516
|
-
packed = values.pack(PACK_BIG_ENDIAN_64_BIT_FLOAT_ARRAY)
|
|
517
|
-
else # endianness == :LITTLE_ENDIAN
|
|
518
|
-
packed = values.pack(PACK_LITTLE_ENDIAN_64_BIT_FLOAT_ARRAY)
|
|
519
|
-
end
|
|
520
|
-
|
|
521
|
-
else
|
|
522
|
-
raise ArgumentError, "bit_size is #{given_bit_size} but must be 32 or 64 for data_type #{data_type}"
|
|
523
|
-
end
|
|
524
|
-
|
|
525
|
-
# Adjust packed size to hold number of items written
|
|
526
|
-
buffer[lower_bound..upper_bound] = adjust_packed_size(num_bytes, packed) if num_bytes > 0
|
|
527
|
-
|
|
528
|
-
else
|
|
529
|
-
raise ArgumentError, "bit_offset #{given_bit_offset} is not byte aligned for data_type #{data_type}"
|
|
530
|
-
end
|
|
531
|
-
|
|
532
|
-
else
|
|
533
|
-
############################
|
|
534
|
-
# Handle Unknown data types
|
|
535
|
-
############################
|
|
536
|
-
raise ArgumentError, "data_type #{data_type} is not recognized"
|
|
537
|
-
end # case data_type
|
|
538
|
-
|
|
539
|
-
values
|
|
540
|
-
end # def write_array
|
|
541
|
-
|
|
542
|
-
# Adjusts the packed array to be the given number of bytes
|
|
543
|
-
#
|
|
544
|
-
# @param num_bytes [Integer] The desired number of bytes
|
|
545
|
-
# @param packet [Array] The packed data buffer
|
|
546
|
-
def self.adjust_packed_size(num_bytes, packed)
|
|
547
|
-
difference = num_bytes - packed.length
|
|
548
|
-
if difference > 0
|
|
549
|
-
packed << (ZERO_STRING * difference)
|
|
550
|
-
elsif difference < 0
|
|
551
|
-
packed = packed[0..(packed.length - 1 + difference)]
|
|
552
|
-
end
|
|
553
|
-
packed
|
|
554
|
-
end
|
|
555
|
-
|
|
556
|
-
# Byte swaps every X bytes of data in a buffer overwriting the buffer
|
|
557
|
-
#
|
|
558
|
-
# @param buffer [String] Buffer to modify
|
|
559
|
-
# @param num_bytes_per_word [Integer] Number of bytes per word that will be swapped
|
|
560
|
-
# @return [String] buffer passed in as a parameter
|
|
561
|
-
def self.byte_swap_buffer!(buffer, num_bytes_per_word)
|
|
562
|
-
num_swaps = buffer.length / num_bytes_per_word
|
|
563
|
-
index = 0
|
|
564
|
-
num_swaps.times do
|
|
565
|
-
range = index..(index + num_bytes_per_word - 1)
|
|
566
|
-
buffer[range] = buffer[range].reverse
|
|
567
|
-
index += num_bytes_per_word
|
|
568
|
-
end
|
|
569
|
-
buffer
|
|
570
|
-
end
|
|
571
|
-
|
|
572
|
-
# Byte swaps every X bytes of data in a buffer into a new buffer
|
|
573
|
-
#
|
|
574
|
-
# @param buffer [String] Buffer that will be copied then modified
|
|
575
|
-
# @param num_bytes_per_word [Integer] Number of bytes per word that will be swapped
|
|
576
|
-
# @return [String] modified buffer
|
|
577
|
-
def self.byte_swap_buffer(buffer, num_bytes_per_word)
|
|
578
|
-
buffer = buffer.clone
|
|
579
|
-
self.byte_swap_buffer!(buffer, num_bytes_per_word)
|
|
580
|
-
end
|
|
581
|
-
|
|
582
|
-
# Checks for overflow of an integer data type
|
|
583
|
-
#
|
|
584
|
-
# @param value [Integer] Value to write into the buffer
|
|
585
|
-
# @param min_value [Integer] Minimum allowed value
|
|
586
|
-
# @param max_value [Integer] Maximum allowed value
|
|
587
|
-
# @param hex_max_value [Integer] Maximum allowed value if specified in hex
|
|
588
|
-
# @param bit_size [Integer] Size of the item in bits
|
|
589
|
-
# @param data_type [Symbol] {DATA_TYPES}
|
|
590
|
-
# @param overflow [Symbol] {OVERFLOW_TYPES}
|
|
591
|
-
# @return [Integer] Potentially modified value
|
|
592
|
-
def self.check_overflow(value, min_value, max_value, hex_max_value, bit_size, data_type, overflow)
|
|
593
|
-
if overflow != :TRUNCATE
|
|
594
|
-
if value > max_value
|
|
595
|
-
if overflow == :SATURATE
|
|
596
|
-
value = max_value
|
|
597
|
-
else
|
|
598
|
-
if overflow == :ERROR or value > hex_max_value
|
|
599
|
-
raise ArgumentError, "value of #{value} invalid for #{bit_size}-bit #{data_type}"
|
|
600
|
-
end
|
|
601
|
-
end
|
|
602
|
-
elsif value < min_value
|
|
603
|
-
if overflow == :SATURATE
|
|
604
|
-
value = min_value
|
|
605
|
-
else
|
|
606
|
-
raise ArgumentError, "value of #{value} invalid for #{bit_size}-bit #{data_type}"
|
|
607
|
-
end
|
|
608
|
-
end
|
|
609
|
-
end
|
|
610
|
-
value
|
|
611
|
-
end
|
|
612
|
-
|
|
613
|
-
# Checks for overflow of an array of integer data types
|
|
614
|
-
#
|
|
615
|
-
# @param values [Array[Integer]] Values to write into the buffer
|
|
616
|
-
# @param min_value [Integer] Minimum allowed value
|
|
617
|
-
# @param max_value [Integer] Maximum allowed value
|
|
618
|
-
# @param hex_max_value [Integer] Maximum allowed value if specified in hex
|
|
619
|
-
# @param bit_size [Integer] Size of the item in bits
|
|
620
|
-
# @param data_type [Symbol] {DATA_TYPES}
|
|
621
|
-
# @param overflow [Symbol] {OVERFLOW_TYPES}
|
|
622
|
-
# @return [Array[Integer]] Potentially modified values
|
|
623
|
-
def self.check_overflow_array(values, min_value, max_value, hex_max_value, bit_size, data_type, overflow)
|
|
624
|
-
if overflow != :TRUNCATE
|
|
625
|
-
values.each_with_index do |value, index|
|
|
626
|
-
values[index] = check_overflow(value, min_value, max_value, hex_max_value, bit_size, data_type, overflow)
|
|
627
|
-
end
|
|
628
|
-
end
|
|
629
|
-
values
|
|
630
|
-
end
|
|
631
|
-
|
|
632
|
-
end # class BinaryAccessor
|
|
633
|
-
|
|
634
|
-
end # module Cosmos
|
|
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 Lesser 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
|
+
# This file contains the implementation of the BinaryAccessor class.
|
|
12
|
+
# This class allows for easy reading and writing of binary data in Ruby
|
|
13
|
+
|
|
14
|
+
require 'cosmos/ext/packet'
|
|
15
|
+
|
|
16
|
+
module Cosmos
|
|
17
|
+
|
|
18
|
+
# Provides methods for binary reading and writing
|
|
19
|
+
class BinaryAccessor
|
|
20
|
+
|
|
21
|
+
# Constants for ruby packing directives
|
|
22
|
+
PACK_8_BIT_INT = 'c'
|
|
23
|
+
PACK_NATIVE_16_BIT_INT = 's'
|
|
24
|
+
PACK_LITTLE_ENDIAN_16_BIT_UINT = 'v'
|
|
25
|
+
PACK_BIG_ENDIAN_16_BIT_UINT = 'n'
|
|
26
|
+
PACK_NATIVE_32_BIT_INT = 'l'
|
|
27
|
+
PACK_NATIVE_32_BIT_UINT = 'L'
|
|
28
|
+
PACK_NATIVE_64_BIT_INT = 'q'
|
|
29
|
+
PACK_NATIVE_64_BIT_UINT = 'Q'
|
|
30
|
+
PACK_LITTLE_ENDIAN_32_BIT_UINT = 'V'
|
|
31
|
+
PACK_BIG_ENDIAN_32_BIT_UINT = 'N'
|
|
32
|
+
PACK_LITTLE_ENDIAN_32_BIT_FLOAT = 'e'
|
|
33
|
+
PACK_LITTLE_ENDIAN_64_BIT_FLOAT = 'E'
|
|
34
|
+
PACK_BIG_ENDIAN_32_BIT_FLOAT = 'g'
|
|
35
|
+
PACK_BIG_ENDIAN_64_BIT_FLOAT = 'G'
|
|
36
|
+
PACK_NULL_TERMINATED_STRING = 'Z*'
|
|
37
|
+
PACK_BLOCK = 'a*'
|
|
38
|
+
PACK_8_BIT_INT_ARRAY = 'c*'
|
|
39
|
+
PACK_8_BIT_UINT_ARRAY = 'C*'
|
|
40
|
+
PACK_NATIVE_16_BIT_INT_ARRAY = 's*'
|
|
41
|
+
PACK_BIG_ENDIAN_16_BIT_UINT_ARRAY = 'n*'
|
|
42
|
+
PACK_LITTLE_ENDIAN_16_BIT_UINT_ARRAY = 'v*'
|
|
43
|
+
PACK_NATIVE_32_BIT_INT_ARRAY = 'l*'
|
|
44
|
+
PACK_BIG_ENDIAN_32_BIT_UINT_ARRAY = 'N*'
|
|
45
|
+
PACK_LITTLE_ENDIAN_32_BIT_UINT_ARRAY = 'V*'
|
|
46
|
+
PACK_NATIVE_64_BIT_INT_ARRAY = 'q*'
|
|
47
|
+
PACK_NATIVE_64_BIT_UINT_ARRAY = 'Q*'
|
|
48
|
+
PACK_LITTLE_ENDIAN_32_BIT_FLOAT_ARRAY = 'e*'
|
|
49
|
+
PACK_LITTLE_ENDIAN_64_BIT_FLOAT_ARRAY = 'E*'
|
|
50
|
+
PACK_BIG_ENDIAN_32_BIT_FLOAT_ARRAY = 'g*'
|
|
51
|
+
PACK_BIG_ENDIAN_64_BIT_FLOAT_ARRAY = 'G*'
|
|
52
|
+
|
|
53
|
+
# Additional Constants
|
|
54
|
+
ZERO_STRING = "\000"
|
|
55
|
+
|
|
56
|
+
# Valid data types
|
|
57
|
+
DATA_TYPES = [:INT, :UINT, :FLOAT, :STRING, :BLOCK]
|
|
58
|
+
|
|
59
|
+
# Valid overflow types
|
|
60
|
+
OVERFLOW_TYPES = [:TRUNCATE, :SATURATE, :ERROR, :ERROR_ALLOW_HEX]
|
|
61
|
+
|
|
62
|
+
protected
|
|
63
|
+
|
|
64
|
+
# Determines the endianness of the host running this code
|
|
65
|
+
#
|
|
66
|
+
# This method is protected to force the use of the constant
|
|
67
|
+
# HOST_ENDIANNESS rather than this method
|
|
68
|
+
#
|
|
69
|
+
# @return [Symbol] :BIG_ENDIAN or :LITTLE_ENDIAN
|
|
70
|
+
def self.get_host_endianness
|
|
71
|
+
value = 0x01020304
|
|
72
|
+
packed = [value].pack(PACK_NATIVE_32_BIT_UINT)
|
|
73
|
+
unpacked = packed.unpack(PACK_LITTLE_ENDIAN_32_BIT_UINT)[0]
|
|
74
|
+
if unpacked == value
|
|
75
|
+
:LITTLE_ENDIAN
|
|
76
|
+
else
|
|
77
|
+
:BIG_ENDIAN
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def self.raise_buffer_error(read_write, buffer, data_type, given_bit_offset, given_bit_size)
|
|
82
|
+
raise ArgumentError, "#{buffer.length} byte buffer insufficient to #{read_write} #{data_type} at bit_offset #{given_bit_offset} with bit_size #{given_bit_size}"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
public
|
|
86
|
+
|
|
87
|
+
# Store the host endianness so that it only has to be determined once
|
|
88
|
+
HOST_ENDIANNESS = get_host_endianness()
|
|
89
|
+
# Valid endianess
|
|
90
|
+
ENDIANNESS = [:BIG_ENDIAN, :LITTLE_ENDIAN]
|
|
91
|
+
|
|
92
|
+
# Reads binary data of any data type from a buffer
|
|
93
|
+
#
|
|
94
|
+
# @param bit_offset [Integer] Bit offset to the start of the item. A
|
|
95
|
+
# negative number means to offset from the end of the buffer.
|
|
96
|
+
# @param bit_size [Integer] Size of the item in bits
|
|
97
|
+
# @param data_type [Symbol] {DATA_TYPES}
|
|
98
|
+
# @param buffer [String] Binary string buffer to read from
|
|
99
|
+
# @param endianness [Symbol] {ENDIANNESS}
|
|
100
|
+
# @return [Integer] value read from the buffer
|
|
101
|
+
# def self.read(bit_offset, bit_size, data_type, buffer, endianness)
|
|
102
|
+
|
|
103
|
+
# Writes binary data of any data type to a buffer
|
|
104
|
+
#
|
|
105
|
+
# @param value [Varies] Value to write into the buffer
|
|
106
|
+
# @param bit_offset [Integer] Bit offset to the start of the item. A
|
|
107
|
+
# negative number means to offset from the end of the buffer.
|
|
108
|
+
# @param bit_size [Integer] Size of the item in bits
|
|
109
|
+
# @param data_type [Symbol] {DATA_TYPES}
|
|
110
|
+
# @param buffer [String] Binary string buffer to write to
|
|
111
|
+
# @param endianness [Symbol] {ENDIANNESS}
|
|
112
|
+
# @param overflow [Symbol] {OVERFLOW_TYPES}
|
|
113
|
+
# @return [Integer] value passed in as a parameter
|
|
114
|
+
# def self.write(value, bit_offset, bit_size, data_type, buffer, endianness, overflow)
|
|
115
|
+
|
|
116
|
+
# Reads an array of binary data of any data type from a buffer
|
|
117
|
+
#
|
|
118
|
+
# @param bit_offset [Integer] Bit offset to the start of the array. A
|
|
119
|
+
# negative number means to offset from the end of the buffer.
|
|
120
|
+
# @param bit_size [Integer] Size of each item in the array in bits
|
|
121
|
+
# @param data_type [Symbol] {DATA_TYPES}
|
|
122
|
+
# @param array_size [Integer] Size in bits of the array. 0 or negative means
|
|
123
|
+
# fill the array with as many bit_size number of items that exist (negative
|
|
124
|
+
# means excluding the final X number of bits).
|
|
125
|
+
# @param buffer [String] Binary string buffer to read from
|
|
126
|
+
# @param endianness [Symbol] {ENDIANNESS}
|
|
127
|
+
# @return [Array] Array created from reading the buffer
|
|
128
|
+
def self.read_array(bit_offset, bit_size, data_type, array_size, buffer, endianness)
|
|
129
|
+
# Save given values of bit offset, bit size, and array_size
|
|
130
|
+
given_bit_offset = bit_offset
|
|
131
|
+
given_bit_size = bit_size
|
|
132
|
+
given_array_size = array_size
|
|
133
|
+
|
|
134
|
+
# Handle negative and zero bit sizes
|
|
135
|
+
raise ArgumentError, "bit_size #{given_bit_size} must be positive for arrays" if bit_size <= 0
|
|
136
|
+
|
|
137
|
+
# Handle negative bit offsets
|
|
138
|
+
if bit_offset < 0
|
|
139
|
+
bit_offset = ((buffer.length * 8) + bit_offset)
|
|
140
|
+
raise_buffer_error(:read, buffer, data_type, given_bit_offset, given_bit_size) if bit_offset < 0
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Handle negative and zero array sizes
|
|
144
|
+
if array_size <= 0
|
|
145
|
+
if given_bit_offset < 0
|
|
146
|
+
raise ArgumentError, "negative or zero array_size (#{given_array_size}) cannot be given with negative bit_offset (#{given_bit_offset})"
|
|
147
|
+
else
|
|
148
|
+
array_size = ((buffer.length * 8) - bit_offset + array_size)
|
|
149
|
+
if array_size == 0
|
|
150
|
+
return []
|
|
151
|
+
elsif array_size < 0
|
|
152
|
+
raise_buffer_error(:read, buffer, data_type, given_bit_offset, given_bit_size)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Calculate number of items in the array
|
|
158
|
+
# If there is a remainder then we have a problem
|
|
159
|
+
raise ArgumentError, "array_size #{given_array_size} not a multiple of bit_size #{given_bit_size}" if array_size % bit_size != 0
|
|
160
|
+
num_items = array_size / bit_size
|
|
161
|
+
|
|
162
|
+
# Define bounds of string to access this item
|
|
163
|
+
lower_bound = bit_offset / 8
|
|
164
|
+
upper_bound = (bit_offset + array_size - 1) / 8
|
|
165
|
+
|
|
166
|
+
# Check for byte alignment
|
|
167
|
+
byte_aligned = ((bit_offset % 8) == 0)
|
|
168
|
+
|
|
169
|
+
case data_type
|
|
170
|
+
when :STRING, :BLOCK
|
|
171
|
+
#######################################
|
|
172
|
+
# Handle :STRING and :BLOCK data types
|
|
173
|
+
#######################################
|
|
174
|
+
|
|
175
|
+
if byte_aligned
|
|
176
|
+
value = []
|
|
177
|
+
num_items.times do
|
|
178
|
+
value << self.read(bit_offset, bit_size, data_type, buffer, endianness)
|
|
179
|
+
bit_offset += bit_size
|
|
180
|
+
end
|
|
181
|
+
else
|
|
182
|
+
raise ArgumentError, "bit_offset #{given_bit_offset} is not byte aligned for data_type #{data_type}"
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
when :INT, :UINT
|
|
186
|
+
###################################
|
|
187
|
+
# Handle :INT and :UINT data types
|
|
188
|
+
###################################
|
|
189
|
+
|
|
190
|
+
if byte_aligned and (bit_size == 8 or bit_size == 16 or bit_size == 32 or bit_size == 64)
|
|
191
|
+
###########################################################
|
|
192
|
+
# Handle byte-aligned 8, 16, 32, and 64 bit :INT and :UINT
|
|
193
|
+
###########################################################
|
|
194
|
+
|
|
195
|
+
case bit_size
|
|
196
|
+
when 8
|
|
197
|
+
if data_type == :INT
|
|
198
|
+
value = buffer[lower_bound..upper_bound].unpack(PACK_8_BIT_INT_ARRAY)
|
|
199
|
+
else # data_type == :UINT
|
|
200
|
+
value = buffer[lower_bound..upper_bound].unpack(PACK_8_BIT_UINT_ARRAY)
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
when 16
|
|
204
|
+
if data_type == :INT
|
|
205
|
+
if endianness == HOST_ENDIANNESS
|
|
206
|
+
value = buffer[lower_bound..upper_bound].unpack(PACK_NATIVE_16_BIT_INT_ARRAY)
|
|
207
|
+
else # endianness != HOST_ENDIANNESS
|
|
208
|
+
temp = self.byte_swap_buffer(buffer[lower_bound..upper_bound], 2)
|
|
209
|
+
value = temp.to_s.unpack(PACK_NATIVE_16_BIT_INT_ARRAY)
|
|
210
|
+
end
|
|
211
|
+
else # data_type == :UINT
|
|
212
|
+
if endianness == :BIG_ENDIAN
|
|
213
|
+
value = buffer[lower_bound..upper_bound].unpack(PACK_BIG_ENDIAN_16_BIT_UINT_ARRAY)
|
|
214
|
+
else # endianness == :LITTLE_ENDIAN
|
|
215
|
+
value = buffer[lower_bound..upper_bound].unpack(PACK_LITTLE_ENDIAN_16_BIT_UINT_ARRAY)
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
when 32
|
|
220
|
+
if data_type == :INT
|
|
221
|
+
if endianness == HOST_ENDIANNESS
|
|
222
|
+
value = buffer[lower_bound..upper_bound].unpack(PACK_NATIVE_32_BIT_INT_ARRAY)
|
|
223
|
+
else # endianness != HOST_ENDIANNESS
|
|
224
|
+
temp = self.byte_swap_buffer(buffer[lower_bound..upper_bound], 4)
|
|
225
|
+
value = temp.to_s.unpack(PACK_NATIVE_32_BIT_INT_ARRAY)
|
|
226
|
+
end
|
|
227
|
+
else # data_type == :UINT
|
|
228
|
+
if endianness == :BIG_ENDIAN
|
|
229
|
+
value = buffer[lower_bound..upper_bound].unpack(PACK_BIG_ENDIAN_32_BIT_UINT_ARRAY)
|
|
230
|
+
else # endianness == :LITTLE_ENDIAN
|
|
231
|
+
value = buffer[lower_bound..upper_bound].unpack(PACK_LITTLE_ENDIAN_32_BIT_UINT_ARRAY)
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
when 64
|
|
236
|
+
if data_type == :INT
|
|
237
|
+
if endianness == HOST_ENDIANNESS
|
|
238
|
+
value = buffer[lower_bound..upper_bound].unpack(PACK_NATIVE_64_BIT_INT_ARRAY)
|
|
239
|
+
else # endianness != HOST_ENDIANNESS
|
|
240
|
+
temp = self.byte_swap_buffer(buffer[lower_bound..upper_bound], 8)
|
|
241
|
+
value = temp.to_s.unpack(PACK_NATIVE_64_BIT_INT_ARRAY)
|
|
242
|
+
end
|
|
243
|
+
else # data_type == :UINT
|
|
244
|
+
if endianness == HOST_ENDIANNESS
|
|
245
|
+
value = buffer[lower_bound..upper_bound].unpack(PACK_NATIVE_64_BIT_UINT_ARRAY)
|
|
246
|
+
else # endianness != HOST_ENDIANNESS
|
|
247
|
+
temp = self.byte_swap_buffer(buffer[lower_bound..upper_bound], 8)
|
|
248
|
+
value = temp.to_s.unpack(PACK_NATIVE_64_BIT_UINT_ARRAY)
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
else
|
|
254
|
+
##################################
|
|
255
|
+
# Handle :INT and :UINT Bitfields
|
|
256
|
+
##################################
|
|
257
|
+
raise ArgumentError, "read_array does not support little endian bit fields with bit_size greater than 1-bit" if endianness == :LITTLE_ENDIAN and bit_size > 1
|
|
258
|
+
|
|
259
|
+
value = []
|
|
260
|
+
num_items.times do
|
|
261
|
+
value << self.read(bit_offset, bit_size, data_type, buffer, endianness)
|
|
262
|
+
bit_offset += bit_size
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
when :FLOAT
|
|
267
|
+
##########################
|
|
268
|
+
# Handle :FLOAT data type
|
|
269
|
+
##########################
|
|
270
|
+
|
|
271
|
+
if byte_aligned
|
|
272
|
+
case bit_size
|
|
273
|
+
when 32
|
|
274
|
+
if endianness == :BIG_ENDIAN
|
|
275
|
+
value = buffer[lower_bound..upper_bound].unpack(PACK_BIG_ENDIAN_32_BIT_FLOAT_ARRAY)
|
|
276
|
+
else # endianness == :LITTLE_ENDIAN
|
|
277
|
+
value = buffer[lower_bound..upper_bound].unpack(PACK_LITTLE_ENDIAN_32_BIT_FLOAT_ARRAY)
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
when 64
|
|
281
|
+
if endianness == :BIG_ENDIAN
|
|
282
|
+
value = buffer[lower_bound..upper_bound].unpack(PACK_BIG_ENDIAN_64_BIT_FLOAT_ARRAY)
|
|
283
|
+
else # endianness == :LITTLE_ENDIAN
|
|
284
|
+
value = buffer[lower_bound..upper_bound].unpack(PACK_LITTLE_ENDIAN_64_BIT_FLOAT_ARRAY)
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
else
|
|
288
|
+
raise ArgumentError, "bit_size is #{given_bit_size} but must be 32 or 64 for data_type #{data_type}"
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
else
|
|
292
|
+
raise ArgumentError, "bit_offset #{given_bit_offset} is not byte aligned for data_type #{data_type}"
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
else
|
|
296
|
+
############################
|
|
297
|
+
# Handle Unknown data types
|
|
298
|
+
############################
|
|
299
|
+
|
|
300
|
+
raise ArgumentError, "data_type #{data_type} is not recognized"
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
value
|
|
304
|
+
end # def read_array
|
|
305
|
+
|
|
306
|
+
# Writes an array of binary data of any data type to a buffer
|
|
307
|
+
#
|
|
308
|
+
# @param values [Array] Values to write into the buffer
|
|
309
|
+
# @param bit_offset [Integer] Bit offset to the start of the array. A
|
|
310
|
+
# negative number means to offset from the end of the buffer.
|
|
311
|
+
# @param bit_size [Integer] Size of each item in the array in bits
|
|
312
|
+
# @param data_type [Symbol] {DATA_TYPES}
|
|
313
|
+
# @param array_size [Integer] Size in bits of the array as represented in the buffer.
|
|
314
|
+
# Size 0 means to fill the buffer with as many bit_size number of items that exist
|
|
315
|
+
# (negative means excluding the final X number of bits).
|
|
316
|
+
# @param buffer [String] Binary string buffer to write to
|
|
317
|
+
# @param endianness [Symbol] {ENDIANNESS}
|
|
318
|
+
# @return [Array] values passed in as a parameter
|
|
319
|
+
def self.write_array(values, bit_offset, bit_size, data_type, array_size, buffer, endianness, overflow)
|
|
320
|
+
# Save given values of bit offset, bit size, and array_size
|
|
321
|
+
given_bit_offset = bit_offset
|
|
322
|
+
given_bit_size = bit_size
|
|
323
|
+
given_array_size = array_size
|
|
324
|
+
|
|
325
|
+
# Verify an array was given
|
|
326
|
+
raise ArgumentError, "values must be an Array type class is #{values.class}" unless values.kind_of? Array
|
|
327
|
+
|
|
328
|
+
# Handle negative and zero bit sizes
|
|
329
|
+
raise ArgumentError, "bit_size #{given_bit_size} must be positive for arrays" if bit_size <= 0
|
|
330
|
+
|
|
331
|
+
# Handle negative bit offsets
|
|
332
|
+
if bit_offset < 0
|
|
333
|
+
bit_offset = ((buffer.length * 8) + bit_offset)
|
|
334
|
+
raise_buffer_error(:write, buffer, data_type, given_bit_offset, given_bit_size) if bit_offset < 0
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
# Handle negative and zero array sizes
|
|
338
|
+
if array_size <= 0
|
|
339
|
+
if given_bit_offset < 0
|
|
340
|
+
raise ArgumentError, "negative or zero array_size (#{given_array_size}) cannot be given with negative bit_offset (#{given_bit_offset})"
|
|
341
|
+
else
|
|
342
|
+
end_bytes = -(given_array_size / 8)
|
|
343
|
+
lower_bound = bit_offset / 8
|
|
344
|
+
upper_bound = (bit_offset + (bit_size * values.length) - 1) / 8
|
|
345
|
+
old_upper_bound = buffer.length - 1 - end_bytes
|
|
346
|
+
|
|
347
|
+
if upper_bound < old_upper_bound
|
|
348
|
+
# Remove extra bytes from old buffer
|
|
349
|
+
buffer[(upper_bound + 1)..old_upper_bound] = ''
|
|
350
|
+
elsif upper_bound > old_upper_bound
|
|
351
|
+
# Grow buffer and preserve bytes at end of buffer if necesssary
|
|
352
|
+
buffer_length = buffer.length
|
|
353
|
+
diff = upper_bound - old_upper_bound
|
|
354
|
+
buffer << ZERO_STRING * diff
|
|
355
|
+
if end_bytes > 0
|
|
356
|
+
buffer[(upper_bound + 1)..(buffer.length - 1)] = buffer[(old_upper_bound + 1)..(buffer_length - 1)]
|
|
357
|
+
end
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
array_size = ((buffer.length * 8) - bit_offset + array_size)
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
# Get data bounds for this array
|
|
365
|
+
lower_bound = bit_offset / 8
|
|
366
|
+
upper_bound = (bit_offset + array_size - 1) / 8
|
|
367
|
+
num_bytes = upper_bound - lower_bound + 1
|
|
368
|
+
|
|
369
|
+
# Check for byte alignment
|
|
370
|
+
byte_aligned = ((bit_offset % 8) == 0)
|
|
371
|
+
|
|
372
|
+
# Calculate the number of writes
|
|
373
|
+
num_writes = array_size / bit_size
|
|
374
|
+
# Check for a negative array_size and adjust the number of writes
|
|
375
|
+
# to simply be the number of values in the passed in array
|
|
376
|
+
if given_array_size <= 0
|
|
377
|
+
num_writes = values.length
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
# Ensure the buffer has enough room
|
|
381
|
+
if bit_offset + num_writes * bit_size > buffer.length * 8
|
|
382
|
+
raise_buffer_error(:write, buffer, data_type, given_bit_offset, given_bit_size)
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
# Ensure the given_array_size is an even multiple of bit_size
|
|
386
|
+
raise ArgumentError, "array_size #{given_array_size} not a multiple of bit_size #{given_bit_size}" if array_size % bit_size != 0
|
|
387
|
+
|
|
388
|
+
raise ArgumentError, "too many values #{values.length} for given array_size #{given_array_size} and bit_size #{given_bit_size}" if num_writes < values.length
|
|
389
|
+
|
|
390
|
+
# Check overflow type
|
|
391
|
+
raise "unknown overflow type #{overflow}" unless OVERFLOW_TYPES.include?(overflow)
|
|
392
|
+
|
|
393
|
+
case data_type
|
|
394
|
+
when :STRING, :BLOCK
|
|
395
|
+
#######################################
|
|
396
|
+
# Handle :STRING and :BLOCK data types
|
|
397
|
+
#######################################
|
|
398
|
+
|
|
399
|
+
if byte_aligned
|
|
400
|
+
num_writes.times do |index|
|
|
401
|
+
self.write(values[index], bit_offset, bit_size, data_type, buffer, endianness, overflow)
|
|
402
|
+
bit_offset += bit_size
|
|
403
|
+
end
|
|
404
|
+
else
|
|
405
|
+
raise ArgumentError, "bit_offset #{given_bit_offset} is not byte aligned for data_type #{data_type}"
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
when :INT, :UINT
|
|
409
|
+
###################################
|
|
410
|
+
# Handle :INT and :UINT data types
|
|
411
|
+
###################################
|
|
412
|
+
|
|
413
|
+
if byte_aligned and (bit_size == 8 or bit_size == 16 or bit_size == 32 or bit_size == 64)
|
|
414
|
+
###########################################################
|
|
415
|
+
# Handle byte-aligned 8, 16, 32, and 64 bit :INT and :UINT
|
|
416
|
+
###########################################################
|
|
417
|
+
|
|
418
|
+
case bit_size
|
|
419
|
+
when 8
|
|
420
|
+
if data_type == :INT
|
|
421
|
+
values = self.check_overflow_array(values, -128, 127, 255, bit_size, data_type, overflow)
|
|
422
|
+
packed = values.pack(PACK_8_BIT_INT_ARRAY)
|
|
423
|
+
else # data_type == :UINT
|
|
424
|
+
values = self.check_overflow_array(values, 0, 255, 255, bit_size, data_type, overflow)
|
|
425
|
+
packed = values.pack(PACK_8_BIT_UINT_ARRAY)
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
when 16
|
|
429
|
+
if data_type == :INT
|
|
430
|
+
values = self.check_overflow_array(values, -32768, 32767, 65535, bit_size, data_type, overflow)
|
|
431
|
+
if endianness == HOST_ENDIANNESS
|
|
432
|
+
packed = values.pack(PACK_NATIVE_16_BIT_INT_ARRAY)
|
|
433
|
+
else # endianness != HOST_ENDIANNESS
|
|
434
|
+
packed = values.pack(PACK_NATIVE_16_BIT_INT_ARRAY)
|
|
435
|
+
self.byte_swap_buffer!(packed, 2)
|
|
436
|
+
end
|
|
437
|
+
else # data_type == :UINT
|
|
438
|
+
values = self.check_overflow_array(values, 0, 65535, 65535, bit_size, data_type, overflow)
|
|
439
|
+
if endianness == :BIG_ENDIAN
|
|
440
|
+
packed = values.pack(PACK_BIG_ENDIAN_16_BIT_UINT_ARRAY)
|
|
441
|
+
else # endianness == :LITTLE_ENDIAN
|
|
442
|
+
packed = values.pack(PACK_LITTLE_ENDIAN_16_BIT_UINT_ARRAY)
|
|
443
|
+
end
|
|
444
|
+
end
|
|
445
|
+
|
|
446
|
+
when 32
|
|
447
|
+
if data_type == :INT
|
|
448
|
+
values = self.check_overflow_array(values, -2147483648, 2147483647, 4294967295, bit_size, data_type, overflow)
|
|
449
|
+
if endianness == HOST_ENDIANNESS
|
|
450
|
+
packed = values.pack(PACK_NATIVE_32_BIT_INT_ARRAY)
|
|
451
|
+
else # endianness != HOST_ENDIANNESS
|
|
452
|
+
packed = values.pack(PACK_NATIVE_32_BIT_INT_ARRAY)
|
|
453
|
+
self.byte_swap_buffer!(packed, 4)
|
|
454
|
+
end
|
|
455
|
+
else # data_type == :UINT
|
|
456
|
+
values = self.check_overflow_array(values, 0, 4294967295, 4294967295, bit_size, data_type, overflow)
|
|
457
|
+
if endianness == :BIG_ENDIAN
|
|
458
|
+
packed = values.pack(PACK_BIG_ENDIAN_32_BIT_UINT_ARRAY)
|
|
459
|
+
else # endianness == :LITTLE_ENDIAN
|
|
460
|
+
packed = values.pack(PACK_LITTLE_ENDIAN_32_BIT_UINT_ARRAY)
|
|
461
|
+
end
|
|
462
|
+
end
|
|
463
|
+
|
|
464
|
+
when 64
|
|
465
|
+
if data_type == :INT
|
|
466
|
+
values = self.check_overflow_array(values, -9223372036854775808, 9223372036854775807, 18446744073709551615, bit_size, data_type, overflow)
|
|
467
|
+
if endianness == HOST_ENDIANNESS
|
|
468
|
+
packed = values.pack(PACK_NATIVE_64_BIT_INT_ARRAY)
|
|
469
|
+
else # endianness != HOST_ENDIANNESS
|
|
470
|
+
packed = values.pack(PACK_NATIVE_64_BIT_INT_ARRAY)
|
|
471
|
+
self.byte_swap_buffer!(packed, 8)
|
|
472
|
+
end
|
|
473
|
+
else # data_type == :UINT
|
|
474
|
+
values = self.check_overflow_array(values, 0, 18446744073709551615, 18446744073709551615, bit_size, data_type, overflow)
|
|
475
|
+
if endianness == HOST_ENDIANNESS
|
|
476
|
+
packed = values.pack(PACK_NATIVE_64_BIT_UINT_ARRAY)
|
|
477
|
+
else # endianness != HOST_ENDIANNESS
|
|
478
|
+
packed = values.pack(PACK_NATIVE_64_BIT_UINT_ARRAY)
|
|
479
|
+
self.byte_swap_buffer!(packed, 8)
|
|
480
|
+
end
|
|
481
|
+
end
|
|
482
|
+
end
|
|
483
|
+
|
|
484
|
+
# Adjust packed size to hold number of items written
|
|
485
|
+
buffer[lower_bound..upper_bound] = adjust_packed_size(num_bytes, packed) if num_bytes > 0
|
|
486
|
+
|
|
487
|
+
else
|
|
488
|
+
##################################
|
|
489
|
+
# Handle :INT and :UINT Bitfields
|
|
490
|
+
##################################
|
|
491
|
+
|
|
492
|
+
raise ArgumentError, "write_array does not support little endian bit fields with bit_size greater than 1-bit" if endianness == :LITTLE_ENDIAN and bit_size > 1
|
|
493
|
+
|
|
494
|
+
num_writes.times do |index|
|
|
495
|
+
self.write(values[index], bit_offset, bit_size, data_type, buffer, endianness, overflow)
|
|
496
|
+
bit_offset += bit_size
|
|
497
|
+
end
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
when :FLOAT
|
|
501
|
+
##########################
|
|
502
|
+
# Handle :FLOAT data type
|
|
503
|
+
##########################
|
|
504
|
+
|
|
505
|
+
if byte_aligned
|
|
506
|
+
case bit_size
|
|
507
|
+
when 32
|
|
508
|
+
if endianness == :BIG_ENDIAN
|
|
509
|
+
packed = values.pack(PACK_BIG_ENDIAN_32_BIT_FLOAT_ARRAY)
|
|
510
|
+
else # endianness == :LITTLE_ENDIAN
|
|
511
|
+
packed = values.pack(PACK_LITTLE_ENDIAN_32_BIT_FLOAT_ARRAY)
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
when 64
|
|
515
|
+
if endianness == :BIG_ENDIAN
|
|
516
|
+
packed = values.pack(PACK_BIG_ENDIAN_64_BIT_FLOAT_ARRAY)
|
|
517
|
+
else # endianness == :LITTLE_ENDIAN
|
|
518
|
+
packed = values.pack(PACK_LITTLE_ENDIAN_64_BIT_FLOAT_ARRAY)
|
|
519
|
+
end
|
|
520
|
+
|
|
521
|
+
else
|
|
522
|
+
raise ArgumentError, "bit_size is #{given_bit_size} but must be 32 or 64 for data_type #{data_type}"
|
|
523
|
+
end
|
|
524
|
+
|
|
525
|
+
# Adjust packed size to hold number of items written
|
|
526
|
+
buffer[lower_bound..upper_bound] = adjust_packed_size(num_bytes, packed) if num_bytes > 0
|
|
527
|
+
|
|
528
|
+
else
|
|
529
|
+
raise ArgumentError, "bit_offset #{given_bit_offset} is not byte aligned for data_type #{data_type}"
|
|
530
|
+
end
|
|
531
|
+
|
|
532
|
+
else
|
|
533
|
+
############################
|
|
534
|
+
# Handle Unknown data types
|
|
535
|
+
############################
|
|
536
|
+
raise ArgumentError, "data_type #{data_type} is not recognized"
|
|
537
|
+
end # case data_type
|
|
538
|
+
|
|
539
|
+
values
|
|
540
|
+
end # def write_array
|
|
541
|
+
|
|
542
|
+
# Adjusts the packed array to be the given number of bytes
|
|
543
|
+
#
|
|
544
|
+
# @param num_bytes [Integer] The desired number of bytes
|
|
545
|
+
# @param packet [Array] The packed data buffer
|
|
546
|
+
def self.adjust_packed_size(num_bytes, packed)
|
|
547
|
+
difference = num_bytes - packed.length
|
|
548
|
+
if difference > 0
|
|
549
|
+
packed << (ZERO_STRING * difference)
|
|
550
|
+
elsif difference < 0
|
|
551
|
+
packed = packed[0..(packed.length - 1 + difference)]
|
|
552
|
+
end
|
|
553
|
+
packed
|
|
554
|
+
end
|
|
555
|
+
|
|
556
|
+
# Byte swaps every X bytes of data in a buffer overwriting the buffer
|
|
557
|
+
#
|
|
558
|
+
# @param buffer [String] Buffer to modify
|
|
559
|
+
# @param num_bytes_per_word [Integer] Number of bytes per word that will be swapped
|
|
560
|
+
# @return [String] buffer passed in as a parameter
|
|
561
|
+
def self.byte_swap_buffer!(buffer, num_bytes_per_word)
|
|
562
|
+
num_swaps = buffer.length / num_bytes_per_word
|
|
563
|
+
index = 0
|
|
564
|
+
num_swaps.times do
|
|
565
|
+
range = index..(index + num_bytes_per_word - 1)
|
|
566
|
+
buffer[range] = buffer[range].reverse
|
|
567
|
+
index += num_bytes_per_word
|
|
568
|
+
end
|
|
569
|
+
buffer
|
|
570
|
+
end
|
|
571
|
+
|
|
572
|
+
# Byte swaps every X bytes of data in a buffer into a new buffer
|
|
573
|
+
#
|
|
574
|
+
# @param buffer [String] Buffer that will be copied then modified
|
|
575
|
+
# @param num_bytes_per_word [Integer] Number of bytes per word that will be swapped
|
|
576
|
+
# @return [String] modified buffer
|
|
577
|
+
def self.byte_swap_buffer(buffer, num_bytes_per_word)
|
|
578
|
+
buffer = buffer.clone
|
|
579
|
+
self.byte_swap_buffer!(buffer, num_bytes_per_word)
|
|
580
|
+
end
|
|
581
|
+
|
|
582
|
+
# Checks for overflow of an integer data type
|
|
583
|
+
#
|
|
584
|
+
# @param value [Integer] Value to write into the buffer
|
|
585
|
+
# @param min_value [Integer] Minimum allowed value
|
|
586
|
+
# @param max_value [Integer] Maximum allowed value
|
|
587
|
+
# @param hex_max_value [Integer] Maximum allowed value if specified in hex
|
|
588
|
+
# @param bit_size [Integer] Size of the item in bits
|
|
589
|
+
# @param data_type [Symbol] {DATA_TYPES}
|
|
590
|
+
# @param overflow [Symbol] {OVERFLOW_TYPES}
|
|
591
|
+
# @return [Integer] Potentially modified value
|
|
592
|
+
def self.check_overflow(value, min_value, max_value, hex_max_value, bit_size, data_type, overflow)
|
|
593
|
+
if overflow != :TRUNCATE
|
|
594
|
+
if value > max_value
|
|
595
|
+
if overflow == :SATURATE
|
|
596
|
+
value = max_value
|
|
597
|
+
else
|
|
598
|
+
if overflow == :ERROR or value > hex_max_value
|
|
599
|
+
raise ArgumentError, "value of #{value} invalid for #{bit_size}-bit #{data_type}"
|
|
600
|
+
end
|
|
601
|
+
end
|
|
602
|
+
elsif value < min_value
|
|
603
|
+
if overflow == :SATURATE
|
|
604
|
+
value = min_value
|
|
605
|
+
else
|
|
606
|
+
raise ArgumentError, "value of #{value} invalid for #{bit_size}-bit #{data_type}"
|
|
607
|
+
end
|
|
608
|
+
end
|
|
609
|
+
end
|
|
610
|
+
value
|
|
611
|
+
end
|
|
612
|
+
|
|
613
|
+
# Checks for overflow of an array of integer data types
|
|
614
|
+
#
|
|
615
|
+
# @param values [Array[Integer]] Values to write into the buffer
|
|
616
|
+
# @param min_value [Integer] Minimum allowed value
|
|
617
|
+
# @param max_value [Integer] Maximum allowed value
|
|
618
|
+
# @param hex_max_value [Integer] Maximum allowed value if specified in hex
|
|
619
|
+
# @param bit_size [Integer] Size of the item in bits
|
|
620
|
+
# @param data_type [Symbol] {DATA_TYPES}
|
|
621
|
+
# @param overflow [Symbol] {OVERFLOW_TYPES}
|
|
622
|
+
# @return [Array[Integer]] Potentially modified values
|
|
623
|
+
def self.check_overflow_array(values, min_value, max_value, hex_max_value, bit_size, data_type, overflow)
|
|
624
|
+
if overflow != :TRUNCATE
|
|
625
|
+
values.each_with_index do |value, index|
|
|
626
|
+
values[index] = check_overflow(value, min_value, max_value, hex_max_value, bit_size, data_type, overflow)
|
|
627
|
+
end
|
|
628
|
+
end
|
|
629
|
+
values
|
|
630
|
+
end
|
|
631
|
+
|
|
632
|
+
end # class BinaryAccessor
|
|
633
|
+
|
|
634
|
+
end # module Cosmos
|