cosmos 3.0.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.gitignore +48 -48
- data/.travis.yml +7 -7
- data/CONTRIBUTING.txt +50 -50
- data/Gemfile +6 -6
- data/Guardfile +27 -27
- data/LICENSE.txt +879 -879
- data/Manifest.txt +1116 -1114
- data/README.md +109 -107
- data/Rakefile +214 -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 +247 -247
- 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 -294
- 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.rb +18 -18
- 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 +20 -20
- 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/Replay.bat +59 -59
- 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/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 +18 -18
- data/autohotkey/tools/TlmViewerAHK3 +18 -18
- data/autohotkey/tools/TlmViewerAHK4 +18 -18
- data/autohotkey/tools/TlmViewerAHK5 +18 -18
- data/autohotkey/tools/autohotkey.rb +37 -37
- data/autohotkey/tools/cmd_extractor.ahk +27 -27
- data/autohotkey/tools/cmd_sender.ahk +182 -162
- data/autohotkey/tools/cmd_tlm_server.ahk +89 -89
- data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
- data/autohotkey/tools/data_viewer.ahk +135 -135
- data/autohotkey/tools/handbook_creator.ahk +23 -23
- data/autohotkey/tools/launcher.ahk +41 -41
- data/autohotkey/tools/limits_monitor.ahk +70 -70
- data/autohotkey/tools/open_gl_builder.ahk +134 -134
- data/autohotkey/tools/packet_viewer.ahk +143 -143
- data/autohotkey/tools/packet_viewer2.ahk +9 -9
- data/autohotkey/tools/replay.ahk +98 -98
- data/autohotkey/tools/script_runner.ahk +589 -589
- data/autohotkey/tools/script_runner2.ahk +34 -31
- data/autohotkey/tools/table_manager.ahk +220 -220
- data/autohotkey/tools/test_runner.ahk +262 -259
- data/autohotkey/tools/test_runner2.ahk +52 -52
- data/autohotkey/tools/test_runner3.ahk +13 -13
- data/autohotkey/tools/tlm_extractor.ahk +272 -272
- data/autohotkey/tools/tlm_grapher.ahk +642 -642
- 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 -49
- 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 +98 -97
- data/data/about.txt +4 -4
- data/data/crc.txt +306 -305
- data/data/diamond.STL +57 -57
- data/data/legal.txt +9 -9
- data/demo/Gemfile +6 -6
- data/demo/Launcher +15 -15
- data/demo/Launcher.bat +59 -59
- data/demo/Rakefile +61 -61
- data/demo/config/data/crc.txt +222 -206
- data/demo/config/data/diamond.STL +57 -57
- data/demo/config/data/meta_init.txt +4 -4
- data/demo/config/system/system.txt +34 -34
- 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 +3 -3
- 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 -294
- 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 -12
- 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 +54 -48
- data/demo/config/targets/TEMPLATED/target.txt +6 -6
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +33 -33
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +29 -29
- 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 +86 -86
- 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 +80 -80
- 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 -52
- data/demo/lib/example_target.rb +113 -108
- 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 +182 -182
- 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 +15 -15
- data/demo/tools/CmdExtractor.bat +59 -59
- data/demo/tools/CmdSender +15 -15
- data/demo/tools/CmdSender.bat +59 -59
- data/demo/tools/CmdTlmServer +15 -15
- data/demo/tools/CmdTlmServer.bat +59 -59
- data/demo/tools/DataViewer +15 -15
- data/demo/tools/DataViewer.bat +59 -59
- data/demo/tools/ExampleTarget +15 -15
- data/demo/tools/ExampleTarget.bat +59 -59
- data/demo/tools/HandbookCreator +15 -15
- data/demo/tools/HandbookCreator.bat +61 -61
- data/demo/tools/Launcher +15 -15
- data/demo/tools/Launcher.bat +59 -59
- data/demo/tools/LimitsMonitor +15 -15
- data/demo/tools/LimitsMonitor.bat +59 -59
- data/demo/tools/OpenGLBuilder +15 -15
- data/demo/tools/OpenGLBuilder.bat +59 -59
- data/demo/tools/PacketViewer +15 -15
- data/demo/tools/PacketViewer.bat +59 -59
- data/demo/tools/Replay +15 -15
- data/demo/tools/Replay.bat +59 -59
- data/demo/tools/ScpiTarget +15 -15
- data/demo/tools/ScpiTarget.bat +59 -59
- data/demo/tools/ScriptRunner +15 -15
- data/demo/tools/ScriptRunner.bat +59 -59
- data/demo/tools/TableManager +15 -15
- data/demo/tools/TableManager.bat +59 -59
- data/demo/tools/TestRunner +15 -15
- data/demo/tools/TestRunner.bat +59 -59
- data/demo/tools/TlmExtractor +15 -15
- data/demo/tools/TlmExtractor.bat +59 -59
- data/demo/tools/TlmGrapher +15 -15
- data/demo/tools/TlmGrapher.bat +59 -59
- data/demo/tools/TlmViewer +15 -15
- data/demo/tools/TlmViewer.bat +59 -59
- data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
- data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
- data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
- data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
- 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 +261 -261
- 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 +81 -81
- 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 +894 -894
- 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 +306 -306
- data/ext/mkrf_conf.rb +40 -40
- data/install/Gemfile +6 -6
- data/install/Launcher +14 -14
- data/install/Launcher.bat +59 -59
- data/install/Rakefile +61 -61
- data/install/config/data/crc.txt +134 -133
- 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 +39 -39
- 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 +15 -15
- data/install/tools/CmdExtractor.bat +59 -59
- data/install/tools/CmdSender +15 -15
- data/install/tools/CmdSender.bat +59 -59
- data/install/tools/CmdTlmServer +15 -15
- data/install/tools/CmdTlmServer.bat +59 -59
- data/install/tools/DataViewer +15 -15
- data/install/tools/DataViewer.bat +59 -59
- data/install/tools/HandbookCreator +15 -15
- data/install/tools/HandbookCreator.bat +61 -61
- data/install/tools/Launcher +15 -15
- data/install/tools/Launcher.bat +59 -59
- data/install/tools/LimitsMonitor +15 -15
- data/install/tools/LimitsMonitor.bat +59 -59
- data/install/tools/OpenGLBuilder +15 -15
- data/install/tools/OpenGLBuilder.bat +59 -59
- data/install/tools/PacketViewer +15 -15
- data/install/tools/PacketViewer.bat +59 -59
- data/install/tools/Replay +15 -15
- data/install/tools/Replay.bat +59 -59
- data/install/tools/ScriptRunner +15 -15
- data/install/tools/ScriptRunner.bat +59 -59
- data/install/tools/TableManager +15 -15
- data/install/tools/TableManager.bat +59 -59
- data/install/tools/TestRunner +15 -15
- data/install/tools/TestRunner.bat +59 -59
- data/install/tools/TlmExtractor +15 -15
- data/install/tools/TlmExtractor.bat +59 -59
- data/install/tools/TlmGrapher +15 -15
- data/install/tools/TlmGrapher.bat +59 -59
- data/install/tools/TlmViewer +15 -15
- data/install/tools/TlmViewer.bat +59 -59
- data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
- data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
- data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
- data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
- data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
- data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
- data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
- 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 +310 -310
- data/lib/cosmos/core_ext/stringio.rb +24 -24
- data/lib/cosmos/core_ext/time.rb +446 -446
- 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 +317 -317
- data/lib/cosmos/gui/dialogs/about_dialog.rb +128 -128
- 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 +196 -196
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -168
- data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
- data/lib/cosmos/gui/dialogs/progress_dialog.rb +270 -262
- data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -161
- 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 +113 -113
- 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 +494 -494
- data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
- data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +460 -460
- 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 +459 -459
- 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 -712
- 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 +813 -786
- data/lib/cosmos/gui/qt_tool.rb +378 -373
- 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 +395 -395
- data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
- data/lib/cosmos/gui/utilities/script_module_gui.rb +203 -203
- 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 -149
- data/lib/cosmos/interfaces/interface.rb +213 -213
- 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 -128
- data/lib/cosmos/interfaces/stream_interface.rb +156 -156
- data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +154 -154
- data/lib/cosmos/interfaces/udp_interface.rb +173 -173
- 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 +344 -320
- data/lib/cosmos/io/json_drb_object.rb +137 -137
- 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 +583 -532
- data/lib/cosmos/io/udp_sockets.rb +152 -152
- data/lib/cosmos/io/win32_serial_driver.rb +147 -147
- data/lib/cosmos/packet_logs.rb +6 -6
- data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
- data/lib/cosmos/packet_logs/packet_log_reader.rb +441 -439
- data/lib/cosmos/packet_logs/packet_log_writer.rb +321 -309
- data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
- data/lib/cosmos/packets/binary_accessor.rb +921 -921
- data/lib/cosmos/packets/commands.rb +291 -291
- data/lib/cosmos/packets/limits.rb +263 -263
- data/lib/cosmos/packets/limits_response.rb +38 -38
- data/lib/cosmos/packets/packet.rb +714 -699
- data/lib/cosmos/packets/packet_config.rb +1034 -1034
- data/lib/cosmos/packets/packet_item.rb +317 -317
- data/lib/cosmos/packets/packet_item_limits.rb +128 -128
- data/lib/cosmos/packets/structure.rb +421 -386
- data/lib/cosmos/packets/structure_item.rb +233 -233
- data/lib/cosmos/packets/telemetry.rb +317 -317
- 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/extract.rb +115 -115
- data/lib/cosmos/script/script.rb +1513 -1493
- 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 +152 -143
- data/lib/cosmos/streams/stream.rb +57 -57
- data/lib/cosmos/streams/stream_protocol.rb +369 -369
- data/lib/cosmos/streams/tcpip_client_stream.rb +77 -77
- data/lib/cosmos/streams/tcpip_socket_stream.rb +139 -139
- 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 +558 -558
- data/lib/cosmos/system/target.rb +178 -178
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +254 -253
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +716 -716
- 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 +936 -940
- data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -63
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +511 -497
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +241 -241
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1033 -1008
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
- data/lib/cosmos/tools/cmd_tlm_server/connections.rb +176 -176
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +241 -221
- 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 +628 -600
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +167 -167
- data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +149 -149
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +360 -360
- data/lib/cosmos/tools/launcher/launcher.rb +184 -184
- data/lib/cosmos/tools/launcher/launcher_config.rb +175 -167
- data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -41
- data/lib/cosmos/tools/launcher/launcher_tool.rb +104 -104
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +796 -768
- 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 +525 -525
- data/lib/cosmos/tools/replay/replay.rb +495 -488
- data/lib/cosmos/tools/replay/replay_server.rb +91 -91
- data/lib/cosmos/tools/script_runner/script_audit.rb +147 -139
- data/lib/cosmos/tools/script_runner/script_runner.rb +914 -914
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1892 -1859
- 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 +480 -480
- data/lib/cosmos/tools/test_runner/test_runner.rb +1157 -1157
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +338 -338
- data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1008 -1008
- 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 +94 -94
- 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 +180 -180
- 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 +173 -173
- data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +177 -177
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +412 -409
- 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 -320
- 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 +1278 -1278
- 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 +111 -95
- 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 +72 -66
- 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 -458
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +563 -544
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +287 -287
- 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 +70 -70
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +61 -61
- 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 +647 -596
- data/lib/cosmos/utilities.rb +11 -10
- 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 +74 -74
- 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 -0
- 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 +311 -311
- data/roodi.yml +24 -24
- data/run_gui_tests.bat +32 -32
- 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 +151 -151
- data/spec/gui/line_graph/line_clip_spec.rb +322 -322
- 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 -294
- 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 -131
- data/spec/interfaces/linc_interface_spec.rb +199 -199
- 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 +54 -54
- data/spec/interfaces/tcpip_server_interface_spec.rb +151 -151
- data/spec/interfaces/udp_interface_spec.rb +175 -177
- 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 +99 -99
- 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 +61 -61
- 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 +408 -408
- data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
- data/spec/packet_logs/packet_log_writer_spec.rb +223 -223
- data/spec/packets/binary_accessor_spec.rb +2073 -2073
- data/spec/packets/commands_spec.rb +369 -369
- data/spec/packets/limits_response_spec.rb +25 -25
- data/spec/packets/limits_spec.rb +326 -326
- data/spec/packets/packet_config_spec.rb +1620 -1620
- 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 +1057 -949
- data/spec/packets/structure_item_spec.rb +195 -195
- data/spec/packets/structure_spec.rb +419 -419
- data/spec/packets/telemetry_spec.rb +535 -535
- 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/script_spec.rb +654 -654
- data/spec/spec_helper.rb +154 -148
- data/spec/streams/burst_stream_protocol_spec.rb +32 -32
- data/spec/streams/fixed_stream_protocol_spec.rb +110 -110
- data/spec/streams/length_stream_protocol_spec.rb +297 -297
- data/spec/streams/preidentified_stream_protocol_spec.rb +118 -118
- data/spec/streams/serial_stream_spec.rb +105 -105
- data/spec/streams/stream_protocol_spec.rb +332 -332
- data/spec/streams/stream_spec.rb +29 -29
- data/spec/streams/tcpip_client_stream_spec.rb +54 -54
- data/spec/streams/tcpip_socket_stream_spec.rb +146 -146
- data/spec/streams/template_stream_protocol_spec.rb +151 -151
- data/spec/streams/terminated_stream_protocol_spec.rb +123 -123
- data/spec/system/system_spec.rb +645 -645
- data/spec/system/target_spec.rb +248 -248
- data/spec/tools/cmd_tlm_server/api_spec.rb +1087 -1113
- 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 +411 -411
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +123 -123
- data/spec/tools/cmd_tlm_server/connections_spec.rb +147 -147
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -238
- data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +98 -101
- data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -208
- data/spec/top_level/top_level_spec.rb +334 -321
- 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
- metadata +18 -2
|
@@ -1,195 +1,195 @@
|
|
|
1
|
-
# encoding: ascii-8bit
|
|
2
|
-
|
|
3
|
-
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
-
# All Rights Reserved.
|
|
5
|
-
#
|
|
6
|
-
# This program is free software; you can modify and/or redistribute it
|
|
7
|
-
# under the terms of the GNU General Public License
|
|
8
|
-
# as published by the Free Software Foundation; version 3 with
|
|
9
|
-
# attribution addendums as found in the LICENSE.txt
|
|
10
|
-
|
|
11
|
-
require 'spec_helper'
|
|
12
|
-
require 'cosmos'
|
|
13
|
-
require 'cosmos/packets/structure_item'
|
|
14
|
-
|
|
15
|
-
module Cosmos
|
|
16
|
-
|
|
17
|
-
describe StructureItem do
|
|
18
|
-
|
|
19
|
-
describe "name=" do
|
|
20
|
-
it "should create new structure items" do
|
|
21
|
-
StructureItem.new("test", 0, 8, :UINT, :BIG_ENDIAN, nil).name.should eql "test"
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should complain about non String names" do
|
|
25
|
-
expect { StructureItem.new(nil, 0, 8, :UINT, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "name must be a String but is a NilClass")
|
|
26
|
-
expect { StructureItem.new(5, 0, 8, :UINT, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "name must be a String but is a Fixnum")
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "should complain about blank names" do
|
|
30
|
-
expect { StructureItem.new("", 0, 8, :UINT, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "name must contain at least one character")
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
describe "endianness=" do
|
|
35
|
-
it "should accept BIG_ENDIAN and LITTLE_ENDIAN" do
|
|
36
|
-
StructureItem.new("test", 0, 8, :UINT, :BIG_ENDIAN, nil).endianness.should eql :BIG_ENDIAN
|
|
37
|
-
StructureItem.new("test", 0, 8, :UINT, :LITTLE_ENDIAN, nil).endianness.should eql :LITTLE_ENDIAN
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "should complain about bad endianness" do
|
|
41
|
-
expect { StructureItem.new("test", 0, 8, :UINT, :BLAH, nil) }.to raise_error(ArgumentError, "test: unknown endianness: BLAH - Must be :BIG_ENDIAN or :LITTLE_ENDIAN")
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
describe "data_type=" do
|
|
46
|
-
it "should accept INT, UINT, FLOAT, STRING, BLOCK, and DERIVED data types" do
|
|
47
|
-
%w(INT UINT FLOAT STRING BLOCK).each do |type|
|
|
48
|
-
StructureItem.new("test", 0, 32, type.to_sym, :BIG_ENDIAN, nil).data_type.should eql type.to_sym
|
|
49
|
-
end
|
|
50
|
-
StructureItem.new("test", 0, 0, :DERIVED, :BIG_ENDIAN, nil).data_type.should eql :DERIVED
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "should complain about bad data types" do
|
|
54
|
-
expect { StructureItem.new("test", 0, 0, :UNKNOWN, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: unknown data_type: UNKNOWN - Must be :INT, :UINT, :FLOAT, :STRING, :BLOCK, or :DERIVED")
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
describe "overflow=" do
|
|
59
|
-
it "should accept ERROR, ERROR_ALLOW_HEX, TRUNCATE and SATURATE overflow types" do
|
|
60
|
-
%w(ERROR ERROR_ALLOW_HEX TRUNCATE SATURATE).each do |type|
|
|
61
|
-
StructureItem.new("test", 0, 32, :INT, :BIG_ENDIAN, nil, type.to_sym).overflow.should eql type.to_sym
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
it "should complain about bad overflow types" do
|
|
66
|
-
expect { StructureItem.new("test", 0, 32, :INT, :BIG_ENDIAN, nil, :UNKNOWN) }.to raise_error(ArgumentError, "test: unknown overflow type: UNKNOWN - Must be :ERROR, :ERROR_ALLOW_HEX, :TRUNCATE, or :SATURATE")
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
describe "bit_offset=" do
|
|
71
|
-
it "should compain about bad bit offsets types" do
|
|
72
|
-
expect { StructureItem.new("test", nil, 8, :UINT, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: bit_offset must be a Fixnum")
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
it "should complain about unaligned bit offsets" do
|
|
76
|
-
%w(FLOAT STRING BLOCK).each do |type|
|
|
77
|
-
expect { StructureItem.new("test", 1, 32, type.to_sym, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: bit_offset for :FLOAT, :STRING, and :BLOCK items must be byte aligned")
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "should complain about non zero DERIVED bit offsets" do
|
|
82
|
-
expect { StructureItem.new("test", 8, 0, :DERIVED, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: DERIVED items must have bit_offset of zero")
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
describe "bit_size=" do
|
|
87
|
-
it "should complain about bad bit sizes types" do
|
|
88
|
-
expect { StructureItem.new("test", 0, nil, :UINT, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: bit_size must be a Fixnum")
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "should complain about 0 size INT, UINT, and FLOAT" do
|
|
92
|
-
%w(INT UINT FLOAT).each do |type|
|
|
93
|
-
expect { StructureItem.new("test", 0, 0, type.to_sym, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: bit_size cannot be negative or zero for :INT, :UINT, and :FLOAT items: 0")
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
it "should complain about bad float bit sizes" do
|
|
98
|
-
expect { StructureItem.new("test", 0, 8, :FLOAT, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: bit_size for FLOAT items must be 32 or 64. Given: 8")
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
it "should create 32 and 64 bit floats" do
|
|
102
|
-
StructureItem.new("test", 0, 32, :FLOAT, :BIG_ENDIAN, nil).bit_size.should eql 32
|
|
103
|
-
StructureItem.new("test", 0, 64, :FLOAT, :BIG_ENDIAN, nil).bit_size.should eql 64
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
it "should complain about non zero DERIVED bit sizes" do
|
|
107
|
-
expect { StructureItem.new("test", 0, 8, :DERIVED, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: DERIVED items must have bit_size of zero")
|
|
108
|
-
end
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
describe "array_size=" do
|
|
112
|
-
it "should complain about bad array size types" do
|
|
113
|
-
expect { StructureItem.new("test", 0, 8, :UINT, :BIG_ENDIAN, "") }.to raise_error(ArgumentError, "test: array_size must be a Fixnum")
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
it "should complain about array size != multiple of bit size" do
|
|
117
|
-
expect { StructureItem.new("test", 0, 8, :UINT, :BIG_ENDIAN, 10) }.to raise_error(ArgumentError, "test: array_size must be a multiple of bit_size")
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
it "should not complain about array size != multiple of bit size with negative array size" do
|
|
121
|
-
expect { StructureItem.new("test", 0, 32, :UINT, :BIG_ENDIAN, -8) }.not_to raise_error
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
describe "<=>" do
|
|
126
|
-
it "should sort items according to positive bit offset" do
|
|
127
|
-
si1 = StructureItem.new("si1", 0, 8, :UINT, :BIG_ENDIAN, nil)
|
|
128
|
-
si2 = StructureItem.new("si2", 8, 8, :UINT, :BIG_ENDIAN, nil)
|
|
129
|
-
(si1 < si2).should be_truthy
|
|
130
|
-
(si1 == si2).should be_falsey
|
|
131
|
-
(si1 > si2).should be_falsey
|
|
132
|
-
|
|
133
|
-
si2 = StructureItem.new("si2", 0, 8, :UINT, :BIG_ENDIAN, nil)
|
|
134
|
-
(si1 < si2).should be_falsey
|
|
135
|
-
(si1 == si2).should be_truthy
|
|
136
|
-
(si1 > si2).should be_falsey
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
it "should sort items with 0 bit offset according to bit size" do
|
|
140
|
-
si1 = StructureItem.new("si1", 0, 8, :UINT, :BIG_ENDIAN, nil)
|
|
141
|
-
si2 = StructureItem.new("si2", 0, 0, :BLOCK, :BIG_ENDIAN, nil)
|
|
142
|
-
(si1 < si2).should be_falsey
|
|
143
|
-
(si1 == si2).should be_falsey
|
|
144
|
-
(si1 > si2).should be_truthy
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
it "should sort items according to negative bit offset" do
|
|
148
|
-
si1 = StructureItem.new("si1", -8, 8, :UINT, :BIG_ENDIAN, nil)
|
|
149
|
-
si2 = StructureItem.new("si2", -16, 8, :UINT, :BIG_ENDIAN, nil)
|
|
150
|
-
(si1 < si2).should be_falsey
|
|
151
|
-
(si1 == si2).should be_falsey
|
|
152
|
-
(si1 > si2).should be_truthy
|
|
153
|
-
|
|
154
|
-
si2 = StructureItem.new("si2", -8, 8, :UINT, :BIG_ENDIAN, nil)
|
|
155
|
-
(si1 < si2).should be_falsey
|
|
156
|
-
# si1 == si2 even though they have different names and sizes
|
|
157
|
-
(si1 == si2).should be_truthy
|
|
158
|
-
(si1 > si2).should be_falsey
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
it "should sort items according to mixed bit offset" do
|
|
162
|
-
si1 = StructureItem.new("si1", 16, 8, :UINT, :BIG_ENDIAN, nil)
|
|
163
|
-
si2 = StructureItem.new("si2", -8, 8, :UINT, :BIG_ENDIAN, nil)
|
|
164
|
-
(si1 < si2).should be_truthy
|
|
165
|
-
(si1 == si2).should be_falsey
|
|
166
|
-
(si1 > si2).should be_falsey
|
|
167
|
-
end
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
describe "clone" do
|
|
171
|
-
it "should duplicate the entire structure item " do
|
|
172
|
-
si1 = StructureItem.new("si1", -8, 1, :UINT, :LITTLE_ENDIAN, nil)
|
|
173
|
-
si2 = si1.clone
|
|
174
|
-
(si1 == si2).should be_truthy
|
|
175
|
-
end
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
describe "to_hash" do
|
|
179
|
-
it "should create a Hash" do
|
|
180
|
-
item = StructureItem.new("test", 0, 8, :UINT, :BIG_ENDIAN, 16)
|
|
181
|
-
hash = item.to_hash
|
|
182
|
-
hash.keys.length.should eql 7
|
|
183
|
-
hash.keys.should include('name','bit_offset','bit_size','data_type','endianness','array_size', 'overflow')
|
|
184
|
-
hash["name"].should eql "test"
|
|
185
|
-
hash["bit_offset"].should eql 0
|
|
186
|
-
hash["bit_size"].should eql 8
|
|
187
|
-
hash["data_type"].should eql :UINT
|
|
188
|
-
hash["endianness"].should eql :BIG_ENDIAN
|
|
189
|
-
hash["array_size"].should eql 16
|
|
190
|
-
hash["overflow"].should eql :ERROR
|
|
191
|
-
end
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
end
|
|
195
|
-
end
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'spec_helper'
|
|
12
|
+
require 'cosmos'
|
|
13
|
+
require 'cosmos/packets/structure_item'
|
|
14
|
+
|
|
15
|
+
module Cosmos
|
|
16
|
+
|
|
17
|
+
describe StructureItem do
|
|
18
|
+
|
|
19
|
+
describe "name=" do
|
|
20
|
+
it "should create new structure items" do
|
|
21
|
+
StructureItem.new("test", 0, 8, :UINT, :BIG_ENDIAN, nil).name.should eql "test"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should complain about non String names" do
|
|
25
|
+
expect { StructureItem.new(nil, 0, 8, :UINT, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "name must be a String but is a NilClass")
|
|
26
|
+
expect { StructureItem.new(5, 0, 8, :UINT, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "name must be a String but is a Fixnum")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it "should complain about blank names" do
|
|
30
|
+
expect { StructureItem.new("", 0, 8, :UINT, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "name must contain at least one character")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe "endianness=" do
|
|
35
|
+
it "should accept BIG_ENDIAN and LITTLE_ENDIAN" do
|
|
36
|
+
StructureItem.new("test", 0, 8, :UINT, :BIG_ENDIAN, nil).endianness.should eql :BIG_ENDIAN
|
|
37
|
+
StructureItem.new("test", 0, 8, :UINT, :LITTLE_ENDIAN, nil).endianness.should eql :LITTLE_ENDIAN
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should complain about bad endianness" do
|
|
41
|
+
expect { StructureItem.new("test", 0, 8, :UINT, :BLAH, nil) }.to raise_error(ArgumentError, "test: unknown endianness: BLAH - Must be :BIG_ENDIAN or :LITTLE_ENDIAN")
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe "data_type=" do
|
|
46
|
+
it "should accept INT, UINT, FLOAT, STRING, BLOCK, and DERIVED data types" do
|
|
47
|
+
%w(INT UINT FLOAT STRING BLOCK).each do |type|
|
|
48
|
+
StructureItem.new("test", 0, 32, type.to_sym, :BIG_ENDIAN, nil).data_type.should eql type.to_sym
|
|
49
|
+
end
|
|
50
|
+
StructureItem.new("test", 0, 0, :DERIVED, :BIG_ENDIAN, nil).data_type.should eql :DERIVED
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should complain about bad data types" do
|
|
54
|
+
expect { StructureItem.new("test", 0, 0, :UNKNOWN, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: unknown data_type: UNKNOWN - Must be :INT, :UINT, :FLOAT, :STRING, :BLOCK, or :DERIVED")
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe "overflow=" do
|
|
59
|
+
it "should accept ERROR, ERROR_ALLOW_HEX, TRUNCATE and SATURATE overflow types" do
|
|
60
|
+
%w(ERROR ERROR_ALLOW_HEX TRUNCATE SATURATE).each do |type|
|
|
61
|
+
StructureItem.new("test", 0, 32, :INT, :BIG_ENDIAN, nil, type.to_sym).overflow.should eql type.to_sym
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should complain about bad overflow types" do
|
|
66
|
+
expect { StructureItem.new("test", 0, 32, :INT, :BIG_ENDIAN, nil, :UNKNOWN) }.to raise_error(ArgumentError, "test: unknown overflow type: UNKNOWN - Must be :ERROR, :ERROR_ALLOW_HEX, :TRUNCATE, or :SATURATE")
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
describe "bit_offset=" do
|
|
71
|
+
it "should compain about bad bit offsets types" do
|
|
72
|
+
expect { StructureItem.new("test", nil, 8, :UINT, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: bit_offset must be a Fixnum")
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "should complain about unaligned bit offsets" do
|
|
76
|
+
%w(FLOAT STRING BLOCK).each do |type|
|
|
77
|
+
expect { StructureItem.new("test", 1, 32, type.to_sym, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: bit_offset for :FLOAT, :STRING, and :BLOCK items must be byte aligned")
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "should complain about non zero DERIVED bit offsets" do
|
|
82
|
+
expect { StructureItem.new("test", 8, 0, :DERIVED, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: DERIVED items must have bit_offset of zero")
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe "bit_size=" do
|
|
87
|
+
it "should complain about bad bit sizes types" do
|
|
88
|
+
expect { StructureItem.new("test", 0, nil, :UINT, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: bit_size must be a Fixnum")
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "should complain about 0 size INT, UINT, and FLOAT" do
|
|
92
|
+
%w(INT UINT FLOAT).each do |type|
|
|
93
|
+
expect { StructureItem.new("test", 0, 0, type.to_sym, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: bit_size cannot be negative or zero for :INT, :UINT, and :FLOAT items: 0")
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it "should complain about bad float bit sizes" do
|
|
98
|
+
expect { StructureItem.new("test", 0, 8, :FLOAT, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: bit_size for FLOAT items must be 32 or 64. Given: 8")
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "should create 32 and 64 bit floats" do
|
|
102
|
+
StructureItem.new("test", 0, 32, :FLOAT, :BIG_ENDIAN, nil).bit_size.should eql 32
|
|
103
|
+
StructureItem.new("test", 0, 64, :FLOAT, :BIG_ENDIAN, nil).bit_size.should eql 64
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
it "should complain about non zero DERIVED bit sizes" do
|
|
107
|
+
expect { StructureItem.new("test", 0, 8, :DERIVED, :BIG_ENDIAN, nil) }.to raise_error(ArgumentError, "test: DERIVED items must have bit_size of zero")
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
describe "array_size=" do
|
|
112
|
+
it "should complain about bad array size types" do
|
|
113
|
+
expect { StructureItem.new("test", 0, 8, :UINT, :BIG_ENDIAN, "") }.to raise_error(ArgumentError, "test: array_size must be a Fixnum")
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "should complain about array size != multiple of bit size" do
|
|
117
|
+
expect { StructureItem.new("test", 0, 8, :UINT, :BIG_ENDIAN, 10) }.to raise_error(ArgumentError, "test: array_size must be a multiple of bit_size")
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "should not complain about array size != multiple of bit size with negative array size" do
|
|
121
|
+
expect { StructureItem.new("test", 0, 32, :UINT, :BIG_ENDIAN, -8) }.not_to raise_error
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
describe "<=>" do
|
|
126
|
+
it "should sort items according to positive bit offset" do
|
|
127
|
+
si1 = StructureItem.new("si1", 0, 8, :UINT, :BIG_ENDIAN, nil)
|
|
128
|
+
si2 = StructureItem.new("si2", 8, 8, :UINT, :BIG_ENDIAN, nil)
|
|
129
|
+
(si1 < si2).should be_truthy
|
|
130
|
+
(si1 == si2).should be_falsey
|
|
131
|
+
(si1 > si2).should be_falsey
|
|
132
|
+
|
|
133
|
+
si2 = StructureItem.new("si2", 0, 8, :UINT, :BIG_ENDIAN, nil)
|
|
134
|
+
(si1 < si2).should be_falsey
|
|
135
|
+
(si1 == si2).should be_truthy
|
|
136
|
+
(si1 > si2).should be_falsey
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it "should sort items with 0 bit offset according to bit size" do
|
|
140
|
+
si1 = StructureItem.new("si1", 0, 8, :UINT, :BIG_ENDIAN, nil)
|
|
141
|
+
si2 = StructureItem.new("si2", 0, 0, :BLOCK, :BIG_ENDIAN, nil)
|
|
142
|
+
(si1 < si2).should be_falsey
|
|
143
|
+
(si1 == si2).should be_falsey
|
|
144
|
+
(si1 > si2).should be_truthy
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it "should sort items according to negative bit offset" do
|
|
148
|
+
si1 = StructureItem.new("si1", -8, 8, :UINT, :BIG_ENDIAN, nil)
|
|
149
|
+
si2 = StructureItem.new("si2", -16, 8, :UINT, :BIG_ENDIAN, nil)
|
|
150
|
+
(si1 < si2).should be_falsey
|
|
151
|
+
(si1 == si2).should be_falsey
|
|
152
|
+
(si1 > si2).should be_truthy
|
|
153
|
+
|
|
154
|
+
si2 = StructureItem.new("si2", -8, 8, :UINT, :BIG_ENDIAN, nil)
|
|
155
|
+
(si1 < si2).should be_falsey
|
|
156
|
+
# si1 == si2 even though they have different names and sizes
|
|
157
|
+
(si1 == si2).should be_truthy
|
|
158
|
+
(si1 > si2).should be_falsey
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it "should sort items according to mixed bit offset" do
|
|
162
|
+
si1 = StructureItem.new("si1", 16, 8, :UINT, :BIG_ENDIAN, nil)
|
|
163
|
+
si2 = StructureItem.new("si2", -8, 8, :UINT, :BIG_ENDIAN, nil)
|
|
164
|
+
(si1 < si2).should be_truthy
|
|
165
|
+
(si1 == si2).should be_falsey
|
|
166
|
+
(si1 > si2).should be_falsey
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
describe "clone" do
|
|
171
|
+
it "should duplicate the entire structure item " do
|
|
172
|
+
si1 = StructureItem.new("si1", -8, 1, :UINT, :LITTLE_ENDIAN, nil)
|
|
173
|
+
si2 = si1.clone
|
|
174
|
+
(si1 == si2).should be_truthy
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
describe "to_hash" do
|
|
179
|
+
it "should create a Hash" do
|
|
180
|
+
item = StructureItem.new("test", 0, 8, :UINT, :BIG_ENDIAN, 16)
|
|
181
|
+
hash = item.to_hash
|
|
182
|
+
hash.keys.length.should eql 7
|
|
183
|
+
hash.keys.should include('name','bit_offset','bit_size','data_type','endianness','array_size', 'overflow')
|
|
184
|
+
hash["name"].should eql "test"
|
|
185
|
+
hash["bit_offset"].should eql 0
|
|
186
|
+
hash["bit_size"].should eql 8
|
|
187
|
+
hash["data_type"].should eql :UINT
|
|
188
|
+
hash["endianness"].should eql :BIG_ENDIAN
|
|
189
|
+
hash["array_size"].should eql 16
|
|
190
|
+
hash["overflow"].should eql :ERROR
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
end
|
|
195
|
+
end
|
|
@@ -1,419 +1,419 @@
|
|
|
1
|
-
# encoding: ascii-8bit
|
|
2
|
-
|
|
3
|
-
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
-
# All Rights Reserved.
|
|
5
|
-
#
|
|
6
|
-
# This program is free software; you can modify and/or redistribute it
|
|
7
|
-
# under the terms of the GNU General Public License
|
|
8
|
-
# as published by the Free Software Foundation; version 3 with
|
|
9
|
-
# attribution addendums as found in the LICENSE.txt
|
|
10
|
-
|
|
11
|
-
require 'spec_helper'
|
|
12
|
-
require 'cosmos'
|
|
13
|
-
require 'cosmos/packets/structure'
|
|
14
|
-
|
|
15
|
-
module Cosmos
|
|
16
|
-
|
|
17
|
-
describe Structure do
|
|
18
|
-
|
|
19
|
-
describe "initialize" do
|
|
20
|
-
it "should complain about non string buffers" do
|
|
21
|
-
expect { Structure.new(:BIG_ENDIAN, Array.new) }.to raise_error(TypeError, "wrong argument type Array (expected String)")
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it "should complain about unrecognized data types" do
|
|
25
|
-
expect { Structure.new(:BLAH) }.to raise_error(ArgumentError, "Unrecognized endianness: BLAH - Must be :BIG_ENDIAN or :LITTLE_ENDIAN")
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
it "should create BIG_ENDIAN structures" do
|
|
29
|
-
Structure.new(:BIG_ENDIAN).default_endianness.should eql :BIG_ENDIAN
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "should create LITTLE_ENDIAN structures" do
|
|
33
|
-
Structure.new(:LITTLE_ENDIAN).default_endianness.should eql :LITTLE_ENDIAN
|
|
34
|
-
end
|
|
35
|
-
end # describe "initialize"
|
|
36
|
-
|
|
37
|
-
describe "define_item" do
|
|
38
|
-
before(:each) do
|
|
39
|
-
@s = Structure.new
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "should add item to items and sorted_items" do
|
|
43
|
-
@s.items["test1"].should be_nil
|
|
44
|
-
@s.sorted_items[0].should be_nil
|
|
45
|
-
@s.define_item("test1", 0, 8, :UINT)
|
|
46
|
-
@s.items["TEST1"].should_not be_nil
|
|
47
|
-
@s.sorted_items[0].should_not be_nil
|
|
48
|
-
@s.sorted_items[0].name.should eql "TEST1"
|
|
49
|
-
@s.defined_length.should eql 1
|
|
50
|
-
@s.fixed_size.should be_truthy
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it "should add items with negative offsets" do
|
|
54
|
-
@s.define_item("test1", -8, 8, :UINT)
|
|
55
|
-
@s.defined_length.should eql 1
|
|
56
|
-
@s.define_item("test2", 0, 4, :UINT)
|
|
57
|
-
@s.defined_length.should eql 2
|
|
58
|
-
@s.define_item("test3", 4, 4, :UINT)
|
|
59
|
-
@s.defined_length.should eql 2
|
|
60
|
-
@s.define_item("test4", 8, 0, :BLOCK)
|
|
61
|
-
@s.defined_length.should eql 2
|
|
62
|
-
@s.define_item("test5", -16, 8, :UINT)
|
|
63
|
-
@s.defined_length.should eql 3
|
|
64
|
-
@s.fixed_size.should be_falsey
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
it "should add item with negative offset" do
|
|
68
|
-
expect { @s.define_item("test11", -64, 8, :UINT, 128) }.to raise_error(ArgumentError, "TEST11: Can't define an item with array_size 128 greater than negative bit_offset -64")
|
|
69
|
-
expect { @s.define_item("test10", -64, 8, :UINT, -64) }.to raise_error(ArgumentError, "TEST10: Can't define an item with negative array_size -64 and negative bit_offset -64")
|
|
70
|
-
expect { @s.define_item("test9", -64, -64, :BLOCK) }.to raise_error(ArgumentError, "TEST9: Can't define an item with negative bit_size -64 and negative bit_offset -64")
|
|
71
|
-
expect { @s.define_item("test8", 0, -32, :BLOCK, 64) }.to raise_error(ArgumentError, "TEST8: bit_size cannot be negative or zero for array items")
|
|
72
|
-
expect { @s.define_item("test7", 0, 0, :BLOCK, 64) }.to raise_error(ArgumentError, "TEST7: bit_size cannot be negative or zero for array items")
|
|
73
|
-
expect { @s.define_item("test6", -24, 32, :UINT) }.to raise_error(ArgumentError, "TEST6: Can't define an item with bit_size 32 greater than negative bit_offset -24")
|
|
74
|
-
@s.define_item("test5", -16, 8, :UINT)
|
|
75
|
-
@s.defined_length.should eql 2
|
|
76
|
-
@s.define_item("test1", -8, 8, :UINT)
|
|
77
|
-
@s.defined_length.should eql 2
|
|
78
|
-
@s.define_item("test2", 0, 4, :UINT)
|
|
79
|
-
@s.defined_length.should eql 3
|
|
80
|
-
@s.define_item("test3", 4, 4, :UINT)
|
|
81
|
-
@s.defined_length.should eql 3
|
|
82
|
-
@s.define_item("test4", 8, 0, :BLOCK)
|
|
83
|
-
@s.defined_length.should eql 3
|
|
84
|
-
@s.fixed_size.should be_falsey
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it "should recalulate sorted_items when adding multiple items" do
|
|
88
|
-
@s.define_item("test1", 8, 32, :UINT)
|
|
89
|
-
@s.sorted_items[0].name.should eql "TEST1"
|
|
90
|
-
@s.defined_length.should eql 5
|
|
91
|
-
@s.define_item("test2", 0, 8, :UINT)
|
|
92
|
-
@s.sorted_items[0].name.should eql "TEST2"
|
|
93
|
-
@s.defined_length.should eql 5
|
|
94
|
-
@s.define_item("test3", 16, 8, :UINT)
|
|
95
|
-
@s.sorted_items[-1].name.should eql "TEST3"
|
|
96
|
-
@s.defined_length.should eql 5
|
|
97
|
-
@s.fixed_size.should be_truthy
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
it "should overwrite existing items" do
|
|
101
|
-
@s.define_item("test1", 0, 8, :UINT)
|
|
102
|
-
@s.sorted_items[0].name.should eql "TEST1"
|
|
103
|
-
@s.items["TEST1"].bit_size.should eql 8
|
|
104
|
-
@s.items["TEST1"].data_type.should eql :UINT
|
|
105
|
-
@s.defined_length.should eql 1
|
|
106
|
-
@s.define_item("test1", 0, 16, :INT)
|
|
107
|
-
@s.sorted_items[0].name.should eql "TEST1"
|
|
108
|
-
@s.items["TEST1"].bit_size.should eql 16
|
|
109
|
-
@s.items["TEST1"].data_type.should eql :INT
|
|
110
|
-
@s.defined_length.should eql 2
|
|
111
|
-
@s.fixed_size.should be_truthy
|
|
112
|
-
end
|
|
113
|
-
end # describe "define_item"
|
|
114
|
-
|
|
115
|
-
describe "append_item" do
|
|
116
|
-
before(:each) do
|
|
117
|
-
@s = Structure.new
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
it "should append an item to items" do
|
|
121
|
-
@s.define_item("test1", 0, 8, :UINT)
|
|
122
|
-
@s.items["TEST1"].bit_size.should eql 8
|
|
123
|
-
@s.sorted_items[0].name.should eql "TEST1"
|
|
124
|
-
@s.sorted_items[1].should be_nil
|
|
125
|
-
@s.defined_length.should eql 1
|
|
126
|
-
@s.append_item("test2", 16, :UINT)
|
|
127
|
-
@s.items["TEST2"].bit_size.should eql 16
|
|
128
|
-
@s.sorted_items[0].name.should eql "TEST1"
|
|
129
|
-
@s.sorted_items[1].name.should eql "TEST2"
|
|
130
|
-
@s.defined_length.should eql 3
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
it "should append an item after an array item " do
|
|
134
|
-
@s.define_item("test1", 0, 8, :UINT, 16)
|
|
135
|
-
@s.items["TEST1"].bit_size.should eql 8
|
|
136
|
-
@s.sorted_items[0].name.should eql "TEST1"
|
|
137
|
-
@s.sorted_items[1].should be_nil
|
|
138
|
-
@s.defined_length.should eql 2
|
|
139
|
-
@s.append_item("test2", 16, :UINT)
|
|
140
|
-
@s.items["TEST2"].bit_size.should eql 16
|
|
141
|
-
@s.sorted_items[0].name.should eql "TEST1"
|
|
142
|
-
@s.sorted_items[1].name.should eql "TEST2"
|
|
143
|
-
@s.defined_length.should eql 4
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
it "should complain if appending after a variably sized item" do
|
|
147
|
-
@s.define_item("test1", 0, 0, :BLOCK)
|
|
148
|
-
expect { @s.append_item("test2", 8, :UINT) }.to raise_error(ArgumentError, "Can't append an item after a variably sized item")
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
it "should complain if appending after a variably sized array" do
|
|
152
|
-
@s.define_item("test1", 0, 8, :UINT, -8)
|
|
153
|
-
expect { @s.append_item("test2", 8, :UINT) }.to raise_error(ArgumentError, "Can't append an item after a variably sized item")
|
|
154
|
-
end
|
|
155
|
-
end # describe "define_item"
|
|
156
|
-
|
|
157
|
-
describe "get_item" do
|
|
158
|
-
before(:each) do
|
|
159
|
-
@s = Structure.new
|
|
160
|
-
@s.define_item("test1", 0, 8, :UINT)
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
it "should return a defined item" do
|
|
164
|
-
@s.get_item("test1").should_not be_nil
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
it "should complain if an item doesn't exist" do
|
|
168
|
-
expect { @s.get_item("test2") }.to raise_error(ArgumentError, "Unknown item: test2")
|
|
169
|
-
end
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
describe "set_item" do
|
|
173
|
-
before(:each) do
|
|
174
|
-
@s = Structure.new
|
|
175
|
-
@s.define_item("test1", 0, 8, :UINT)
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
it "should set a defined item" do
|
|
179
|
-
item = @s.get_item("test1")
|
|
180
|
-
item.bit_size.should eql 8
|
|
181
|
-
item.bit_size = 16
|
|
182
|
-
@s.set_item(item)
|
|
183
|
-
@s.get_item("test1").bit_size.should eql 16
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
it "should complain if an item doesn't exist" do
|
|
187
|
-
item = @s.get_item("test1")
|
|
188
|
-
item.name = "TEST2"
|
|
189
|
-
expect { @s.set_item(item) }.to raise_error(ArgumentError, "Unknown item: TEST2 - Ensure item name is uppercase")
|
|
190
|
-
end
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
describe "read_item" do
|
|
194
|
-
it "should complain if no buffer given" do
|
|
195
|
-
s = Structure.new
|
|
196
|
-
s.define_item("test1", 0, 8, :UINT)
|
|
197
|
-
expect { s.read_item(s.get_item("test1"), :RAW, nil) }.to raise_error(RuntimeError, "No buffer given to read_item")
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
it "should read data from the buffer" do
|
|
201
|
-
s = Structure.new
|
|
202
|
-
s.define_item("test1", 0, 8, :UINT)
|
|
203
|
-
buffer = "\x01"
|
|
204
|
-
s.read_item(s.get_item("test1"), :RAW, buffer).should eql 1
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
it "should read array data from the buffer" do
|
|
208
|
-
s = Structure.new
|
|
209
|
-
s.define_item("test1", 0, 8, :UINT, 16)
|
|
210
|
-
buffer = "\x01\x02"
|
|
211
|
-
s.read_item(s.get_item("test1"), :RAW, buffer).should eql [1,2]
|
|
212
|
-
end
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
describe "write_item" do
|
|
216
|
-
it "should complain if no buffer given" do
|
|
217
|
-
expect { Structure.new.write_item(nil, nil, nil, nil) }.to raise_error(RuntimeError, "No buffer given to write_item")
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
it "should write data to the buffer" do
|
|
221
|
-
s = Structure.new
|
|
222
|
-
s.define_item("test1", 0, 8, :UINT)
|
|
223
|
-
buffer = "\x01"
|
|
224
|
-
s.read_item(s.get_item("test1"), :RAW, buffer).should eql 1
|
|
225
|
-
s.write_item(s.get_item("test1"), 2, :RAW, buffer)
|
|
226
|
-
s.read_item(s.get_item("test1"), :RAW, buffer).should eql 2
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
it "should write array data to the buffer" do
|
|
230
|
-
s = Structure.new
|
|
231
|
-
s.define_item("test1", 0, 8, :UINT, 16)
|
|
232
|
-
buffer = "\x01\x02"
|
|
233
|
-
s.read_item(s.get_item("test1"), :RAW, buffer).should eql [1,2]
|
|
234
|
-
s.write_item(s.get_item("test1"), [3,4], :RAW, buffer)
|
|
235
|
-
s.read_item(s.get_item("test1"), :RAW, buffer).should eql [3,4]
|
|
236
|
-
end
|
|
237
|
-
end
|
|
238
|
-
|
|
239
|
-
describe "read" do
|
|
240
|
-
it "should complain if item doesn't exist" do
|
|
241
|
-
expect { Structure.new.read("BLAH") }.to raise_error(ArgumentError, "Unknown item: BLAH")
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
it "should read data from the buffer" do
|
|
245
|
-
s = Structure.new
|
|
246
|
-
s.define_item("test1", 0, 8, :UINT)
|
|
247
|
-
buffer = "\x01"
|
|
248
|
-
s.read("test1", :RAW, buffer).should eql 1
|
|
249
|
-
end
|
|
250
|
-
|
|
251
|
-
it "should read array data from the buffer" do
|
|
252
|
-
s = Structure.new
|
|
253
|
-
s.define_item("test1", 0, 8, :UINT, 16)
|
|
254
|
-
buffer = "\x01\x02"
|
|
255
|
-
s.read("test1", :RAW, buffer).should eql [1,2]
|
|
256
|
-
end
|
|
257
|
-
end
|
|
258
|
-
|
|
259
|
-
describe "write" do
|
|
260
|
-
it "should complain if item doesn't exist" do
|
|
261
|
-
expect { Structure.new.write("BLAH", 0) }.to raise_error(ArgumentError, "Unknown item: BLAH")
|
|
262
|
-
end
|
|
263
|
-
|
|
264
|
-
it "should write data to the buffer" do
|
|
265
|
-
s = Structure.new
|
|
266
|
-
s.define_item("test1", 0, 8, :UINT)
|
|
267
|
-
buffer = "\x01"
|
|
268
|
-
s.read("test1", :RAW, buffer).should eql 1
|
|
269
|
-
s.write("test1", 2, :RAW, buffer)
|
|
270
|
-
s.read("test1", :RAW, buffer).should eql 2
|
|
271
|
-
end
|
|
272
|
-
|
|
273
|
-
it "should write array data to the buffer" do
|
|
274
|
-
s = Structure.new
|
|
275
|
-
s.define_item("test1", 0, 8, :UINT, 16)
|
|
276
|
-
buffer = "\x01\x02"
|
|
277
|
-
s.read("test1", :RAW, buffer).should eql [1,2]
|
|
278
|
-
s.write("test1", [3,4], :RAW, buffer)
|
|
279
|
-
s.read("test1", :RAW, buffer).should eql [3,4]
|
|
280
|
-
end
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
describe "read_all" do
|
|
284
|
-
it "should read all defined items" do
|
|
285
|
-
s = Structure.new(:BIG_ENDIAN)
|
|
286
|
-
s.append_item("test1", 8, :UINT, 16)
|
|
287
|
-
s.append_item("test2", 16, :UINT)
|
|
288
|
-
s.append_item("test3", 32, :UINT)
|
|
289
|
-
|
|
290
|
-
buffer = "\x01\x02\x03\x04\x05\x06\x07\x08"
|
|
291
|
-
vals = s.read_all(:RAW, buffer)
|
|
292
|
-
vals[0][0].should eql "TEST1"
|
|
293
|
-
vals[1][0].should eql "TEST2"
|
|
294
|
-
vals[2][0].should eql "TEST3"
|
|
295
|
-
vals[0][1].should eql [1,2]
|
|
296
|
-
vals[1][1].should eql 0x0304
|
|
297
|
-
vals[2][1].should eql 0x05060708
|
|
298
|
-
end
|
|
299
|
-
end
|
|
300
|
-
|
|
301
|
-
describe "formatted" do
|
|
302
|
-
it "should print out all the items and values" do
|
|
303
|
-
s = Structure.new(:BIG_ENDIAN)
|
|
304
|
-
s.append_item("test1", 8, :UINT, 16)
|
|
305
|
-
s.write("test1", [1,2])
|
|
306
|
-
s.append_item("test2", 16, :UINT)
|
|
307
|
-
s.write("test2", 3456)
|
|
308
|
-
s.append_item("test3", 32, :BLOCK)
|
|
309
|
-
s.write("test3", "\x07\x08\x09\x0A")
|
|
310
|
-
s.formatted.should include("TEST1: [1, 2]")
|
|
311
|
-
s.formatted.should include("TEST2: 3456")
|
|
312
|
-
s.formatted.should include("TEST3")
|
|
313
|
-
s.formatted.should include("00000000: 07 08 09 0A")
|
|
314
|
-
end
|
|
315
|
-
end
|
|
316
|
-
|
|
317
|
-
describe "buffer" do
|
|
318
|
-
it "should return the buffer" do
|
|
319
|
-
s = Structure.new(:BIG_ENDIAN)
|
|
320
|
-
s.append_item("test1", 8, :UINT, 16)
|
|
321
|
-
s.write("test1", [1,2])
|
|
322
|
-
s.append_item("test2", 16, :UINT)
|
|
323
|
-
s.write("test2", 0x0304)
|
|
324
|
-
s.append_item("test3", 32, :UINT)
|
|
325
|
-
s.write("test3", 0x05060708)
|
|
326
|
-
s.buffer.should eql "\x01\x02\x03\x04\x05\x06\x07\x08"
|
|
327
|
-
end
|
|
328
|
-
end
|
|
329
|
-
|
|
330
|
-
describe "buffer=" do
|
|
331
|
-
it "should complain if the given buffer is too small" do
|
|
332
|
-
s = Structure.new(:BIG_ENDIAN)
|
|
333
|
-
s.append_item("test1", 16, :UINT)
|
|
334
|
-
expect { s.buffer = "\x00" }.to raise_error(RuntimeError, "Buffer length less than defined length")
|
|
335
|
-
end
|
|
336
|
-
|
|
337
|
-
it "should complain if the given buffer is too big" do
|
|
338
|
-
s = Structure.new(:BIG_ENDIAN)
|
|
339
|
-
s.append_item("test1", 16, :UINT)
|
|
340
|
-
expect { s.buffer = "\x00\x00\x00" }.to raise_error(RuntimeError, "Buffer length greater than defined length")
|
|
341
|
-
end
|
|
342
|
-
|
|
343
|
-
it "shouldn't complain if the given buffer is too big and we're not fixed length" do
|
|
344
|
-
s = Structure.new(:BIG_ENDIAN)
|
|
345
|
-
s.append_item("test1", 8, :UINT)
|
|
346
|
-
s.append_item("test2", 0, :BLOCK)
|
|
347
|
-
s.buffer = "\x01\x02\x03"
|
|
348
|
-
s.read("test1").should eql 1
|
|
349
|
-
s.read("test2").should eql "\x02\x03"
|
|
350
|
-
end
|
|
351
|
-
|
|
352
|
-
it "should set the buffer" do
|
|
353
|
-
s = Structure.new(:BIG_ENDIAN)
|
|
354
|
-
s.append_item("test1", 8, :UINT, 16)
|
|
355
|
-
s.write("test1", [1,2])
|
|
356
|
-
s.append_item("test2", 16, :UINT)
|
|
357
|
-
s.write("test2", 0x0304)
|
|
358
|
-
s.append_item("test3", 32, :UINT)
|
|
359
|
-
s.write("test3", 0x05060708)
|
|
360
|
-
s.read("test1").should eql [1,2]
|
|
361
|
-
s.read("test2").should eql 0x0304
|
|
362
|
-
s.read("test3").should eql 0x05060708
|
|
363
|
-
s.buffer = "\x00\x01\x02\x03\x04\x05\x06\x07"
|
|
364
|
-
s.read("test1").should eql [0,1]
|
|
365
|
-
s.read("test2").should eql 0x0203
|
|
366
|
-
s.read("test3").should eql 0x04050607
|
|
367
|
-
end
|
|
368
|
-
end
|
|
369
|
-
|
|
370
|
-
describe "clone" do
|
|
371
|
-
it "should duplicate the structure with a new buffer" do
|
|
372
|
-
s = Structure.new(:BIG_ENDIAN)
|
|
373
|
-
s.append_item("test1", 8, :UINT, 16)
|
|
374
|
-
s.write("test1", [1,2])
|
|
375
|
-
s.append_item("test2", 16, :UINT)
|
|
376
|
-
s.write("test2", 0x0304)
|
|
377
|
-
s.append_item("test3", 32, :UINT)
|
|
378
|
-
s.write("test3", 0x05060708)
|
|
379
|
-
|
|
380
|
-
s2 = s.clone
|
|
381
|
-
s2.read("test1").should eql [1,2]
|
|
382
|
-
s2.read("test2").should eql 0x0304
|
|
383
|
-
s2.read("test3").should eql 0x05060708
|
|
384
|
-
s2.write("test1", [0,0])
|
|
385
|
-
s2.read("test1").should eql [0,0]
|
|
386
|
-
# Ensure we didn't change the original
|
|
387
|
-
s.read("test1").should eql [1,2]
|
|
388
|
-
end
|
|
389
|
-
end
|
|
390
|
-
|
|
391
|
-
describe "enable_method_missing" do
|
|
392
|
-
it "should enable reading by name" do
|
|
393
|
-
s = Structure.new(:BIG_ENDIAN)
|
|
394
|
-
s.append_item("test1", 8, :UINT, 16)
|
|
395
|
-
s.write("test1", [1,2])
|
|
396
|
-
s.enable_method_missing
|
|
397
|
-
s.test1.should eql [1,2]
|
|
398
|
-
end
|
|
399
|
-
|
|
400
|
-
it "should enable writing by name" do
|
|
401
|
-
s = Structure.new(:BIG_ENDIAN)
|
|
402
|
-
s.append_item("test1", 8, :UINT, 16)
|
|
403
|
-
s.write("test1", [1,2])
|
|
404
|
-
s.enable_method_missing
|
|
405
|
-
s.test1.should eql [1,2]
|
|
406
|
-
s.test1 = [3,4]
|
|
407
|
-
s.test1.should eql [3,4]
|
|
408
|
-
end
|
|
409
|
-
|
|
410
|
-
it "should complain if it can't find an item" do
|
|
411
|
-
s = Structure.new(:BIG_ENDIAN)
|
|
412
|
-
s.enable_method_missing
|
|
413
|
-
expect { s.test1 }.to raise_error(ArgumentError, "Unknown item: test1")
|
|
414
|
-
end
|
|
415
|
-
end
|
|
416
|
-
|
|
417
|
-
end # describe Structure
|
|
418
|
-
|
|
419
|
-
end
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'spec_helper'
|
|
12
|
+
require 'cosmos'
|
|
13
|
+
require 'cosmos/packets/structure'
|
|
14
|
+
|
|
15
|
+
module Cosmos
|
|
16
|
+
|
|
17
|
+
describe Structure do
|
|
18
|
+
|
|
19
|
+
describe "initialize" do
|
|
20
|
+
it "should complain about non string buffers" do
|
|
21
|
+
expect { Structure.new(:BIG_ENDIAN, Array.new) }.to raise_error(TypeError, "wrong argument type Array (expected String)")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should complain about unrecognized data types" do
|
|
25
|
+
expect { Structure.new(:BLAH) }.to raise_error(ArgumentError, "Unrecognized endianness: BLAH - Must be :BIG_ENDIAN or :LITTLE_ENDIAN")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it "should create BIG_ENDIAN structures" do
|
|
29
|
+
Structure.new(:BIG_ENDIAN).default_endianness.should eql :BIG_ENDIAN
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should create LITTLE_ENDIAN structures" do
|
|
33
|
+
Structure.new(:LITTLE_ENDIAN).default_endianness.should eql :LITTLE_ENDIAN
|
|
34
|
+
end
|
|
35
|
+
end # describe "initialize"
|
|
36
|
+
|
|
37
|
+
describe "define_item" do
|
|
38
|
+
before(:each) do
|
|
39
|
+
@s = Structure.new
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should add item to items and sorted_items" do
|
|
43
|
+
@s.items["test1"].should be_nil
|
|
44
|
+
@s.sorted_items[0].should be_nil
|
|
45
|
+
@s.define_item("test1", 0, 8, :UINT)
|
|
46
|
+
@s.items["TEST1"].should_not be_nil
|
|
47
|
+
@s.sorted_items[0].should_not be_nil
|
|
48
|
+
@s.sorted_items[0].name.should eql "TEST1"
|
|
49
|
+
@s.defined_length.should eql 1
|
|
50
|
+
@s.fixed_size.should be_truthy
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should add items with negative offsets" do
|
|
54
|
+
@s.define_item("test1", -8, 8, :UINT)
|
|
55
|
+
@s.defined_length.should eql 1
|
|
56
|
+
@s.define_item("test2", 0, 4, :UINT)
|
|
57
|
+
@s.defined_length.should eql 2
|
|
58
|
+
@s.define_item("test3", 4, 4, :UINT)
|
|
59
|
+
@s.defined_length.should eql 2
|
|
60
|
+
@s.define_item("test4", 8, 0, :BLOCK)
|
|
61
|
+
@s.defined_length.should eql 2
|
|
62
|
+
@s.define_item("test5", -16, 8, :UINT)
|
|
63
|
+
@s.defined_length.should eql 3
|
|
64
|
+
@s.fixed_size.should be_falsey
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "should add item with negative offset" do
|
|
68
|
+
expect { @s.define_item("test11", -64, 8, :UINT, 128) }.to raise_error(ArgumentError, "TEST11: Can't define an item with array_size 128 greater than negative bit_offset -64")
|
|
69
|
+
expect { @s.define_item("test10", -64, 8, :UINT, -64) }.to raise_error(ArgumentError, "TEST10: Can't define an item with negative array_size -64 and negative bit_offset -64")
|
|
70
|
+
expect { @s.define_item("test9", -64, -64, :BLOCK) }.to raise_error(ArgumentError, "TEST9: Can't define an item with negative bit_size -64 and negative bit_offset -64")
|
|
71
|
+
expect { @s.define_item("test8", 0, -32, :BLOCK, 64) }.to raise_error(ArgumentError, "TEST8: bit_size cannot be negative or zero for array items")
|
|
72
|
+
expect { @s.define_item("test7", 0, 0, :BLOCK, 64) }.to raise_error(ArgumentError, "TEST7: bit_size cannot be negative or zero for array items")
|
|
73
|
+
expect { @s.define_item("test6", -24, 32, :UINT) }.to raise_error(ArgumentError, "TEST6: Can't define an item with bit_size 32 greater than negative bit_offset -24")
|
|
74
|
+
@s.define_item("test5", -16, 8, :UINT)
|
|
75
|
+
@s.defined_length.should eql 2
|
|
76
|
+
@s.define_item("test1", -8, 8, :UINT)
|
|
77
|
+
@s.defined_length.should eql 2
|
|
78
|
+
@s.define_item("test2", 0, 4, :UINT)
|
|
79
|
+
@s.defined_length.should eql 3
|
|
80
|
+
@s.define_item("test3", 4, 4, :UINT)
|
|
81
|
+
@s.defined_length.should eql 3
|
|
82
|
+
@s.define_item("test4", 8, 0, :BLOCK)
|
|
83
|
+
@s.defined_length.should eql 3
|
|
84
|
+
@s.fixed_size.should be_falsey
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
it "should recalulate sorted_items when adding multiple items" do
|
|
88
|
+
@s.define_item("test1", 8, 32, :UINT)
|
|
89
|
+
@s.sorted_items[0].name.should eql "TEST1"
|
|
90
|
+
@s.defined_length.should eql 5
|
|
91
|
+
@s.define_item("test2", 0, 8, :UINT)
|
|
92
|
+
@s.sorted_items[0].name.should eql "TEST2"
|
|
93
|
+
@s.defined_length.should eql 5
|
|
94
|
+
@s.define_item("test3", 16, 8, :UINT)
|
|
95
|
+
@s.sorted_items[-1].name.should eql "TEST3"
|
|
96
|
+
@s.defined_length.should eql 5
|
|
97
|
+
@s.fixed_size.should be_truthy
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it "should overwrite existing items" do
|
|
101
|
+
@s.define_item("test1", 0, 8, :UINT)
|
|
102
|
+
@s.sorted_items[0].name.should eql "TEST1"
|
|
103
|
+
@s.items["TEST1"].bit_size.should eql 8
|
|
104
|
+
@s.items["TEST1"].data_type.should eql :UINT
|
|
105
|
+
@s.defined_length.should eql 1
|
|
106
|
+
@s.define_item("test1", 0, 16, :INT)
|
|
107
|
+
@s.sorted_items[0].name.should eql "TEST1"
|
|
108
|
+
@s.items["TEST1"].bit_size.should eql 16
|
|
109
|
+
@s.items["TEST1"].data_type.should eql :INT
|
|
110
|
+
@s.defined_length.should eql 2
|
|
111
|
+
@s.fixed_size.should be_truthy
|
|
112
|
+
end
|
|
113
|
+
end # describe "define_item"
|
|
114
|
+
|
|
115
|
+
describe "append_item" do
|
|
116
|
+
before(:each) do
|
|
117
|
+
@s = Structure.new
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "should append an item to items" do
|
|
121
|
+
@s.define_item("test1", 0, 8, :UINT)
|
|
122
|
+
@s.items["TEST1"].bit_size.should eql 8
|
|
123
|
+
@s.sorted_items[0].name.should eql "TEST1"
|
|
124
|
+
@s.sorted_items[1].should be_nil
|
|
125
|
+
@s.defined_length.should eql 1
|
|
126
|
+
@s.append_item("test2", 16, :UINT)
|
|
127
|
+
@s.items["TEST2"].bit_size.should eql 16
|
|
128
|
+
@s.sorted_items[0].name.should eql "TEST1"
|
|
129
|
+
@s.sorted_items[1].name.should eql "TEST2"
|
|
130
|
+
@s.defined_length.should eql 3
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it "should append an item after an array item " do
|
|
134
|
+
@s.define_item("test1", 0, 8, :UINT, 16)
|
|
135
|
+
@s.items["TEST1"].bit_size.should eql 8
|
|
136
|
+
@s.sorted_items[0].name.should eql "TEST1"
|
|
137
|
+
@s.sorted_items[1].should be_nil
|
|
138
|
+
@s.defined_length.should eql 2
|
|
139
|
+
@s.append_item("test2", 16, :UINT)
|
|
140
|
+
@s.items["TEST2"].bit_size.should eql 16
|
|
141
|
+
@s.sorted_items[0].name.should eql "TEST1"
|
|
142
|
+
@s.sorted_items[1].name.should eql "TEST2"
|
|
143
|
+
@s.defined_length.should eql 4
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it "should complain if appending after a variably sized item" do
|
|
147
|
+
@s.define_item("test1", 0, 0, :BLOCK)
|
|
148
|
+
expect { @s.append_item("test2", 8, :UINT) }.to raise_error(ArgumentError, "Can't append an item after a variably sized item")
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it "should complain if appending after a variably sized array" do
|
|
152
|
+
@s.define_item("test1", 0, 8, :UINT, -8)
|
|
153
|
+
expect { @s.append_item("test2", 8, :UINT) }.to raise_error(ArgumentError, "Can't append an item after a variably sized item")
|
|
154
|
+
end
|
|
155
|
+
end # describe "define_item"
|
|
156
|
+
|
|
157
|
+
describe "get_item" do
|
|
158
|
+
before(:each) do
|
|
159
|
+
@s = Structure.new
|
|
160
|
+
@s.define_item("test1", 0, 8, :UINT)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
it "should return a defined item" do
|
|
164
|
+
@s.get_item("test1").should_not be_nil
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
it "should complain if an item doesn't exist" do
|
|
168
|
+
expect { @s.get_item("test2") }.to raise_error(ArgumentError, "Unknown item: test2")
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
describe "set_item" do
|
|
173
|
+
before(:each) do
|
|
174
|
+
@s = Structure.new
|
|
175
|
+
@s.define_item("test1", 0, 8, :UINT)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
it "should set a defined item" do
|
|
179
|
+
item = @s.get_item("test1")
|
|
180
|
+
item.bit_size.should eql 8
|
|
181
|
+
item.bit_size = 16
|
|
182
|
+
@s.set_item(item)
|
|
183
|
+
@s.get_item("test1").bit_size.should eql 16
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
it "should complain if an item doesn't exist" do
|
|
187
|
+
item = @s.get_item("test1")
|
|
188
|
+
item.name = "TEST2"
|
|
189
|
+
expect { @s.set_item(item) }.to raise_error(ArgumentError, "Unknown item: TEST2 - Ensure item name is uppercase")
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
describe "read_item" do
|
|
194
|
+
it "should complain if no buffer given" do
|
|
195
|
+
s = Structure.new
|
|
196
|
+
s.define_item("test1", 0, 8, :UINT)
|
|
197
|
+
expect { s.read_item(s.get_item("test1"), :RAW, nil) }.to raise_error(RuntimeError, "No buffer given to read_item")
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it "should read data from the buffer" do
|
|
201
|
+
s = Structure.new
|
|
202
|
+
s.define_item("test1", 0, 8, :UINT)
|
|
203
|
+
buffer = "\x01"
|
|
204
|
+
s.read_item(s.get_item("test1"), :RAW, buffer).should eql 1
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
it "should read array data from the buffer" do
|
|
208
|
+
s = Structure.new
|
|
209
|
+
s.define_item("test1", 0, 8, :UINT, 16)
|
|
210
|
+
buffer = "\x01\x02"
|
|
211
|
+
s.read_item(s.get_item("test1"), :RAW, buffer).should eql [1,2]
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
describe "write_item" do
|
|
216
|
+
it "should complain if no buffer given" do
|
|
217
|
+
expect { Structure.new.write_item(nil, nil, nil, nil) }.to raise_error(RuntimeError, "No buffer given to write_item")
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
it "should write data to the buffer" do
|
|
221
|
+
s = Structure.new
|
|
222
|
+
s.define_item("test1", 0, 8, :UINT)
|
|
223
|
+
buffer = "\x01"
|
|
224
|
+
s.read_item(s.get_item("test1"), :RAW, buffer).should eql 1
|
|
225
|
+
s.write_item(s.get_item("test1"), 2, :RAW, buffer)
|
|
226
|
+
s.read_item(s.get_item("test1"), :RAW, buffer).should eql 2
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
it "should write array data to the buffer" do
|
|
230
|
+
s = Structure.new
|
|
231
|
+
s.define_item("test1", 0, 8, :UINT, 16)
|
|
232
|
+
buffer = "\x01\x02"
|
|
233
|
+
s.read_item(s.get_item("test1"), :RAW, buffer).should eql [1,2]
|
|
234
|
+
s.write_item(s.get_item("test1"), [3,4], :RAW, buffer)
|
|
235
|
+
s.read_item(s.get_item("test1"), :RAW, buffer).should eql [3,4]
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
describe "read" do
|
|
240
|
+
it "should complain if item doesn't exist" do
|
|
241
|
+
expect { Structure.new.read("BLAH") }.to raise_error(ArgumentError, "Unknown item: BLAH")
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
it "should read data from the buffer" do
|
|
245
|
+
s = Structure.new
|
|
246
|
+
s.define_item("test1", 0, 8, :UINT)
|
|
247
|
+
buffer = "\x01"
|
|
248
|
+
s.read("test1", :RAW, buffer).should eql 1
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
it "should read array data from the buffer" do
|
|
252
|
+
s = Structure.new
|
|
253
|
+
s.define_item("test1", 0, 8, :UINT, 16)
|
|
254
|
+
buffer = "\x01\x02"
|
|
255
|
+
s.read("test1", :RAW, buffer).should eql [1,2]
|
|
256
|
+
end
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
describe "write" do
|
|
260
|
+
it "should complain if item doesn't exist" do
|
|
261
|
+
expect { Structure.new.write("BLAH", 0) }.to raise_error(ArgumentError, "Unknown item: BLAH")
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
it "should write data to the buffer" do
|
|
265
|
+
s = Structure.new
|
|
266
|
+
s.define_item("test1", 0, 8, :UINT)
|
|
267
|
+
buffer = "\x01"
|
|
268
|
+
s.read("test1", :RAW, buffer).should eql 1
|
|
269
|
+
s.write("test1", 2, :RAW, buffer)
|
|
270
|
+
s.read("test1", :RAW, buffer).should eql 2
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
it "should write array data to the buffer" do
|
|
274
|
+
s = Structure.new
|
|
275
|
+
s.define_item("test1", 0, 8, :UINT, 16)
|
|
276
|
+
buffer = "\x01\x02"
|
|
277
|
+
s.read("test1", :RAW, buffer).should eql [1,2]
|
|
278
|
+
s.write("test1", [3,4], :RAW, buffer)
|
|
279
|
+
s.read("test1", :RAW, buffer).should eql [3,4]
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
describe "read_all" do
|
|
284
|
+
it "should read all defined items" do
|
|
285
|
+
s = Structure.new(:BIG_ENDIAN)
|
|
286
|
+
s.append_item("test1", 8, :UINT, 16)
|
|
287
|
+
s.append_item("test2", 16, :UINT)
|
|
288
|
+
s.append_item("test3", 32, :UINT)
|
|
289
|
+
|
|
290
|
+
buffer = "\x01\x02\x03\x04\x05\x06\x07\x08"
|
|
291
|
+
vals = s.read_all(:RAW, buffer)
|
|
292
|
+
vals[0][0].should eql "TEST1"
|
|
293
|
+
vals[1][0].should eql "TEST2"
|
|
294
|
+
vals[2][0].should eql "TEST3"
|
|
295
|
+
vals[0][1].should eql [1,2]
|
|
296
|
+
vals[1][1].should eql 0x0304
|
|
297
|
+
vals[2][1].should eql 0x05060708
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
describe "formatted" do
|
|
302
|
+
it "should print out all the items and values" do
|
|
303
|
+
s = Structure.new(:BIG_ENDIAN)
|
|
304
|
+
s.append_item("test1", 8, :UINT, 16)
|
|
305
|
+
s.write("test1", [1,2])
|
|
306
|
+
s.append_item("test2", 16, :UINT)
|
|
307
|
+
s.write("test2", 3456)
|
|
308
|
+
s.append_item("test3", 32, :BLOCK)
|
|
309
|
+
s.write("test3", "\x07\x08\x09\x0A")
|
|
310
|
+
s.formatted.should include("TEST1: [1, 2]")
|
|
311
|
+
s.formatted.should include("TEST2: 3456")
|
|
312
|
+
s.formatted.should include("TEST3")
|
|
313
|
+
s.formatted.should include("00000000: 07 08 09 0A")
|
|
314
|
+
end
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
describe "buffer" do
|
|
318
|
+
it "should return the buffer" do
|
|
319
|
+
s = Structure.new(:BIG_ENDIAN)
|
|
320
|
+
s.append_item("test1", 8, :UINT, 16)
|
|
321
|
+
s.write("test1", [1,2])
|
|
322
|
+
s.append_item("test2", 16, :UINT)
|
|
323
|
+
s.write("test2", 0x0304)
|
|
324
|
+
s.append_item("test3", 32, :UINT)
|
|
325
|
+
s.write("test3", 0x05060708)
|
|
326
|
+
s.buffer.should eql "\x01\x02\x03\x04\x05\x06\x07\x08"
|
|
327
|
+
end
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
describe "buffer=" do
|
|
331
|
+
it "should complain if the given buffer is too small" do
|
|
332
|
+
s = Structure.new(:BIG_ENDIAN)
|
|
333
|
+
s.append_item("test1", 16, :UINT)
|
|
334
|
+
expect { s.buffer = "\x00" }.to raise_error(RuntimeError, "Buffer length less than defined length")
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
it "should complain if the given buffer is too big" do
|
|
338
|
+
s = Structure.new(:BIG_ENDIAN)
|
|
339
|
+
s.append_item("test1", 16, :UINT)
|
|
340
|
+
expect { s.buffer = "\x00\x00\x00" }.to raise_error(RuntimeError, "Buffer length greater than defined length")
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
it "shouldn't complain if the given buffer is too big and we're not fixed length" do
|
|
344
|
+
s = Structure.new(:BIG_ENDIAN)
|
|
345
|
+
s.append_item("test1", 8, :UINT)
|
|
346
|
+
s.append_item("test2", 0, :BLOCK)
|
|
347
|
+
s.buffer = "\x01\x02\x03"
|
|
348
|
+
s.read("test1").should eql 1
|
|
349
|
+
s.read("test2").should eql "\x02\x03"
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
it "should set the buffer" do
|
|
353
|
+
s = Structure.new(:BIG_ENDIAN)
|
|
354
|
+
s.append_item("test1", 8, :UINT, 16)
|
|
355
|
+
s.write("test1", [1,2])
|
|
356
|
+
s.append_item("test2", 16, :UINT)
|
|
357
|
+
s.write("test2", 0x0304)
|
|
358
|
+
s.append_item("test3", 32, :UINT)
|
|
359
|
+
s.write("test3", 0x05060708)
|
|
360
|
+
s.read("test1").should eql [1,2]
|
|
361
|
+
s.read("test2").should eql 0x0304
|
|
362
|
+
s.read("test3").should eql 0x05060708
|
|
363
|
+
s.buffer = "\x00\x01\x02\x03\x04\x05\x06\x07"
|
|
364
|
+
s.read("test1").should eql [0,1]
|
|
365
|
+
s.read("test2").should eql 0x0203
|
|
366
|
+
s.read("test3").should eql 0x04050607
|
|
367
|
+
end
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
describe "clone" do
|
|
371
|
+
it "should duplicate the structure with a new buffer" do
|
|
372
|
+
s = Structure.new(:BIG_ENDIAN)
|
|
373
|
+
s.append_item("test1", 8, :UINT, 16)
|
|
374
|
+
s.write("test1", [1,2])
|
|
375
|
+
s.append_item("test2", 16, :UINT)
|
|
376
|
+
s.write("test2", 0x0304)
|
|
377
|
+
s.append_item("test3", 32, :UINT)
|
|
378
|
+
s.write("test3", 0x05060708)
|
|
379
|
+
|
|
380
|
+
s2 = s.clone
|
|
381
|
+
s2.read("test1").should eql [1,2]
|
|
382
|
+
s2.read("test2").should eql 0x0304
|
|
383
|
+
s2.read("test3").should eql 0x05060708
|
|
384
|
+
s2.write("test1", [0,0])
|
|
385
|
+
s2.read("test1").should eql [0,0]
|
|
386
|
+
# Ensure we didn't change the original
|
|
387
|
+
s.read("test1").should eql [1,2]
|
|
388
|
+
end
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
describe "enable_method_missing" do
|
|
392
|
+
it "should enable reading by name" do
|
|
393
|
+
s = Structure.new(:BIG_ENDIAN)
|
|
394
|
+
s.append_item("test1", 8, :UINT, 16)
|
|
395
|
+
s.write("test1", [1,2])
|
|
396
|
+
s.enable_method_missing
|
|
397
|
+
s.test1.should eql [1,2]
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
it "should enable writing by name" do
|
|
401
|
+
s = Structure.new(:BIG_ENDIAN)
|
|
402
|
+
s.append_item("test1", 8, :UINT, 16)
|
|
403
|
+
s.write("test1", [1,2])
|
|
404
|
+
s.enable_method_missing
|
|
405
|
+
s.test1.should eql [1,2]
|
|
406
|
+
s.test1 = [3,4]
|
|
407
|
+
s.test1.should eql [3,4]
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
it "should complain if it can't find an item" do
|
|
411
|
+
s = Structure.new(:BIG_ENDIAN)
|
|
412
|
+
s.enable_method_missing
|
|
413
|
+
expect { s.test1 }.to raise_error(ArgumentError, "Unknown item: test1")
|
|
414
|
+
end
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
end # describe Structure
|
|
418
|
+
|
|
419
|
+
end
|