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
data/spec/packets/packet_spec.rb
CHANGED
|
@@ -1,949 +1,1057 @@
|
|
|
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/packet'
|
|
14
|
-
require 'cosmos/conversions/generic_conversion'
|
|
15
|
-
|
|
16
|
-
module Cosmos
|
|
17
|
-
|
|
18
|
-
describe Packet do
|
|
19
|
-
|
|
20
|
-
describe "buffer=" do
|
|
21
|
-
it "should set the buffer" do
|
|
22
|
-
p = Packet.new("tgt", "pkt")
|
|
23
|
-
p.buffer = "\x00\x01\x02\x03"
|
|
24
|
-
p.buffer.should eql "\x00\x01\x02\x03"
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should complain if the given buffer is too big" do
|
|
28
|
-
capture_io do |stdout|
|
|
29
|
-
p = Packet.new("tgt", "pkt")
|
|
30
|
-
p.append_item("test1", 16, :UINT)
|
|
31
|
-
|
|
32
|
-
p.buffer = "\x00\x00\x00"
|
|
33
|
-
stdout.string.should match(/TGT PKT received with actual packet length of 3 but defined length of 2/)
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it "should run processors if present" do
|
|
38
|
-
p = Packet.new("tgt", "pkt")
|
|
39
|
-
p.processors['processor'] = double("call", :call => true)
|
|
40
|
-
p.buffer = "\x00\x01\x02\x03"
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
describe "target_name=" do
|
|
45
|
-
it "should set the target_name to an uppercase String" do
|
|
46
|
-
p = Packet.new("tgt", "pkt")
|
|
47
|
-
p.target_name.should eql "TGT"
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "should set target_name to nil" do
|
|
51
|
-
p = Packet.new(nil,"pkt")
|
|
52
|
-
p.target_name.should be_nil
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it "should complain about non String target_names" do
|
|
56
|
-
expect { Packet.new(5, "pkt") }.to raise_error(ArgumentError, "target_name must be a String but is a Fixnum")
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
describe "packet_name=" do
|
|
61
|
-
it "should set the packet_name to an uppercase String" do
|
|
62
|
-
p = Packet.new("tgt", "pkt")
|
|
63
|
-
p.packet_name.should eql "PKT"
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it "should set packet_name to nil" do
|
|
67
|
-
p = Packet.new("tgt",nil)
|
|
68
|
-
p.packet_name.should be_nil
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it "should complain about non String packet_names" do
|
|
72
|
-
expect { Packet.new("tgt", 5) }.to raise_error(ArgumentError, "packet_name must be a String but is a Fixnum")
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
describe "description=" do
|
|
77
|
-
it "should set the description to a String" do
|
|
78
|
-
p = Packet.new("tgt", "pkt", :BIG_ENDIAN, "This is a description")
|
|
79
|
-
p.description.should eql "This is a description"
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
it "should set description to nil" do
|
|
83
|
-
p = Packet.new("tgt","pkt")
|
|
84
|
-
p.description = nil
|
|
85
|
-
p.description.should be_nil
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
it "should complain about non String descriptions" do
|
|
89
|
-
p = Packet.new("tgt","pkt")
|
|
90
|
-
expect { p.description = 5 }.to raise_error(ArgumentError, "description must be a String but is a Fixnum")
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
describe "received_time=" do
|
|
95
|
-
it "should set the received_time to a Time" do
|
|
96
|
-
p = Packet.new("tgt", "pkt")
|
|
97
|
-
t = Time.now
|
|
98
|
-
p.received_time = t
|
|
99
|
-
p.received_time.should eql t
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
it "should set received_time to nil" do
|
|
103
|
-
p = Packet.new("tgt","pkt")
|
|
104
|
-
p.received_time = nil
|
|
105
|
-
p.received_time.should be_nil
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
it "should complain about non Time received_times" do
|
|
109
|
-
p = Packet.new("tgt","pkt")
|
|
110
|
-
expect {p.received_time = "1pm" }.to raise_error(ArgumentError, "received_time must be a Time but is a String")
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
describe "received_count=" do
|
|
115
|
-
it "should set the received_count to a Fixnum" do
|
|
116
|
-
p = Packet.new("tgt", "pkt")
|
|
117
|
-
p.received_count = 10
|
|
118
|
-
p.received_count.should eql 10
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
it "should complain about nil received_count" do
|
|
122
|
-
p = Packet.new("tgt","pkt")
|
|
123
|
-
expect {p.received_count = nil }.to raise_error(ArgumentError, "received_count must be a Fixnum but is a NilClass")
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it "should complain about non Fixnum received_counts" do
|
|
127
|
-
p = Packet.new("tgt","pkt")
|
|
128
|
-
expect {p.received_count = "5" }.to raise_error(ArgumentError, "received_count must be a Fixnum but is a String")
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
describe "hazardous_description=" do
|
|
133
|
-
it "should set the hazardous_description to a String" do
|
|
134
|
-
p = Packet.new("tgt", "pkt")
|
|
135
|
-
p.hazardous_description = "This is a description"
|
|
136
|
-
p.hazardous_description.should eql "This is a description"
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
it "should set hazardous_description to nil" do
|
|
140
|
-
p = Packet.new("tgt","pkt")
|
|
141
|
-
p.hazardous_description = nil
|
|
142
|
-
p.hazardous_description.should be_nil
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
it "should complain about non String hazardous_descriptions" do
|
|
146
|
-
p = Packet.new("tgt","pkt")
|
|
147
|
-
expect {p.hazardous_description = 5 }.to raise_error(ArgumentError, "hazardous_description must be a String but is a Fixnum")
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
describe "given_values=" do
|
|
152
|
-
it "should set the given_values to a Hash" do
|
|
153
|
-
p = Packet.new("tgt", "pkt")
|
|
154
|
-
gv = {}
|
|
155
|
-
p.given_values = gv
|
|
156
|
-
p.given_values.should eql gv
|
|
157
|
-
end
|
|
158
|
-
|
|
159
|
-
it "should set given_values to nil" do
|
|
160
|
-
p = Packet.new("tgt","pkt")
|
|
161
|
-
p.given_values = nil
|
|
162
|
-
p.given_values.should be_nil
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
it "should complain about non Hash given_valuess" do
|
|
166
|
-
p = Packet.new("tgt","pkt")
|
|
167
|
-
expect {p.given_values = [] }.to raise_error(ArgumentError, "given_values must be a Hash but is a Array")
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
describe "meta" do
|
|
172
|
-
it "should allow adding items to the meta hash" do
|
|
173
|
-
p = Packet.new("tgt","pkt")
|
|
174
|
-
p.meta['TYPE'] = 'float32'
|
|
175
|
-
p.meta['TYPE'].should eql 'float32'
|
|
176
|
-
end
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
describe "limits_change_callback=" do
|
|
180
|
-
it "should set the limits_change_callback to something that responds to call" do
|
|
181
|
-
p = Packet.new("tgt", "pkt")
|
|
182
|
-
callback = Object.new
|
|
183
|
-
allow(callback).to receive(:call)
|
|
184
|
-
expect { p.limits_change_callback = callback }.to_not raise_error
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
it "should set limits_change_callback to nil" do
|
|
188
|
-
p = Packet.new("tgt","pkt")
|
|
189
|
-
expect { p.limits_change_callback = nil }.to_not raise_error
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
it "should complain about non #call limits_change_callbacks" do
|
|
193
|
-
p = Packet.new("tgt","pkt")
|
|
194
|
-
expect {p.limits_change_callback = "" }.to raise_error(ArgumentError, "limits_change_callback must respond to call")
|
|
195
|
-
end
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
describe "define_item" do
|
|
199
|
-
it "should take a format_string, read_conversion, write_conversion, and id_value" do
|
|
200
|
-
p = Packet.new("tgt","pkt")
|
|
201
|
-
rc = GenericConversion.new("value / 2")
|
|
202
|
-
wc = GenericConversion.new("value * 2")
|
|
203
|
-
p.define_item("item",0,32,:FLOAT,nil,:BIG_ENDIAN,:ERROR,"%5.1f",rc,wc,5)
|
|
204
|
-
i = p.get_item("ITEM")
|
|
205
|
-
i.format_string.should eql "%5.1f"
|
|
206
|
-
i.read_conversion.to_s.should eql rc.to_s
|
|
207
|
-
i.write_conversion.to_s.should eql wc.to_s
|
|
208
|
-
i.id_value.should eql 5.0
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
it "should initialize format_string, read_conversion, write_conversion, and id_value to nil" do
|
|
212
|
-
p = Packet.new("tgt","pkt")
|
|
213
|
-
p.define_item("item",0,32,:FLOAT)
|
|
214
|
-
i = p.get_item("ITEM")
|
|
215
|
-
i.format_string.should be_nil
|
|
216
|
-
i.read_conversion.should be_nil
|
|
217
|
-
i.write_conversion.should be_nil
|
|
218
|
-
i.id_value.should be_nil
|
|
219
|
-
end
|
|
220
|
-
end
|
|
221
|
-
|
|
222
|
-
describe "append_item" do
|
|
223
|
-
it "should take a format_string, read_conversion, write_conversion, and id_value" do
|
|
224
|
-
p = Packet.new("tgt","pkt")
|
|
225
|
-
rc = GenericConversion.new("value / 2")
|
|
226
|
-
wc = GenericConversion.new("value * 2")
|
|
227
|
-
p.append_item("item",32,:FLOAT,nil,:BIG_ENDIAN,:ERROR,"%5.1f",rc,wc,5)
|
|
228
|
-
i = p.get_item("ITEM")
|
|
229
|
-
i.format_string.should eql "%5.1f"
|
|
230
|
-
i.read_conversion.to_s.should eql rc.to_s
|
|
231
|
-
i.write_conversion.to_s.should eql wc.to_s
|
|
232
|
-
i.id_value.should eql 5.0
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
it "should initialize format_string, read_conversion, write_conversion, and id_value to nil" do
|
|
236
|
-
p = Packet.new("tgt","pkt")
|
|
237
|
-
p.append_item("item",32,:FLOAT)
|
|
238
|
-
i = p.get_item("ITEM")
|
|
239
|
-
i.format_string.should be_nil
|
|
240
|
-
i.read_conversion.should be_nil
|
|
241
|
-
i.write_conversion.should be_nil
|
|
242
|
-
i.id_value.should be_nil
|
|
243
|
-
end
|
|
244
|
-
end
|
|
245
|
-
|
|
246
|
-
describe "get_item" do
|
|
247
|
-
it "should complain if an item doesn't exist" do
|
|
248
|
-
p = Packet.new("tgt","pkt")
|
|
249
|
-
expect { p.get_item("test") }.to raise_error(RuntimeError, "Packet item 'TGT PKT TEST' does not exist")
|
|
250
|
-
end
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
describe "read and read_item" do
|
|
254
|
-
before (:each) do
|
|
255
|
-
@p = Packet.new("tgt","pkt")
|
|
256
|
-
end
|
|
257
|
-
|
|
258
|
-
it "should complain about unknown value_type" do
|
|
259
|
-
@p.append_item("item",32,:UINT)
|
|
260
|
-
i = @p.get_item("ITEM")
|
|
261
|
-
expect { @p.read("ITEM", :MINE, "\x01\x02\x03\x04") }.to raise_error(ArgumentError, "Unknown value type on read: MINE")
|
|
262
|
-
expect { @p.read_item(i, :MINE, "\x01\x02\x03\x04") }.to raise_error(ArgumentError, "Unknown value type on read: MINE")
|
|
263
|
-
end
|
|
264
|
-
|
|
265
|
-
it "should read the RAW value" do
|
|
266
|
-
@p.append_item("item",32,:UINT)
|
|
267
|
-
i = @p.get_item("ITEM")
|
|
268
|
-
@p.read("ITEM", :RAW, "\x01\x02\x03\x04").should eql 0x01020304
|
|
269
|
-
@p.read_item(i, :RAW, "\x01\x02\x03\x04").should eql 0x01020304
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
it "should read the CONVERTED value" do
|
|
273
|
-
@p.append_item("item",8,:UINT)
|
|
274
|
-
i = @p.get_item("ITEM")
|
|
275
|
-
@p.read("ITEM", :CONVERTED, "\x02").should eql 2
|
|
276
|
-
@p.read_item(i, :CONVERTED, "\x02").should eql 2
|
|
277
|
-
i.read_conversion = GenericConversion.new("value / 2")
|
|
278
|
-
@p.read("ITEM", :CONVERTED, "\x02").should eql 1
|
|
279
|
-
@p.read_item(i, :CONVERTED, "\x02").should eql 1
|
|
280
|
-
end
|
|
281
|
-
|
|
282
|
-
it "should read the CONVERTED value with states" do
|
|
283
|
-
@p.append_item("item",8,:UINT)
|
|
284
|
-
i = @p.get_item("ITEM")
|
|
285
|
-
i.states = {"TRUE"=>1, "FALSE"=>2}
|
|
286
|
-
@p.read("ITEM", :CONVERTED, "\x00").should eql 0
|
|
287
|
-
@p.read_item(i, :CONVERTED, "\x00").should eql 0
|
|
288
|
-
@p.read("ITEM", :CONVERTED, "\x01").should eql "TRUE"
|
|
289
|
-
@p.read_item(i, :CONVERTED, "\x01").should eql "TRUE"
|
|
290
|
-
i.read_conversion = GenericConversion.new("value / 2")
|
|
291
|
-
@p.read("ITEM", :CONVERTED, "\x04").should eql "FALSE"
|
|
292
|
-
@p.read_item(i, :CONVERTED, "\x04").should eql "FALSE"
|
|
293
|
-
end
|
|
294
|
-
|
|
295
|
-
it "should read the FORMATTED value" do
|
|
296
|
-
@p.append_item("item",8,:UINT)
|
|
297
|
-
i = @p.get_item("ITEM")
|
|
298
|
-
@p.read("ITEM", :FORMATTED, "\x02").should eql "2"
|
|
299
|
-
@p.read_item(i, :FORMATTED, "\x02").should eql "2"
|
|
300
|
-
i.format_string = "0x%x"
|
|
301
|
-
@p.read("ITEM", :FORMATTED, "\x02").should eql "0x2"
|
|
302
|
-
@p.read_item(i, :FORMATTED, "\x02").should eql "0x2"
|
|
303
|
-
i.states = {"TRUE"=>1, "FALSE"=>2}
|
|
304
|
-
@p.read("ITEM", :FORMATTED, "\x01").should eql "TRUE"
|
|
305
|
-
@p.read_item(i, :FORMATTED, "\x01").should eql "TRUE"
|
|
306
|
-
@p.read("ITEM", :FORMATTED, "\x02").should eql "FALSE"
|
|
307
|
-
@p.read_item(i, :FORMATTED, "\x02").should eql "FALSE"
|
|
308
|
-
@p.read("ITEM", :FORMATTED, "\x04").should eql "0x4"
|
|
309
|
-
@p.read_item(i, :FORMATTED, "\x04").should eql "0x4"
|
|
310
|
-
i.read_conversion = GenericConversion.new("value / 2")
|
|
311
|
-
@p.read("ITEM", :FORMATTED, "\x04").should eql "FALSE"
|
|
312
|
-
@p.read_item(i, :FORMATTED, "\x04").should eql "FALSE"
|
|
313
|
-
end
|
|
314
|
-
|
|
315
|
-
it "should read the WITH_UNITS value" do
|
|
316
|
-
@p.append_item("item",8,:UINT)
|
|
317
|
-
i = @p.get_item("ITEM")
|
|
318
|
-
i.units = "V"
|
|
319
|
-
@p.read("ITEM", :WITH_UNITS, "\x02").should eql "2 V"
|
|
320
|
-
@p.read_item(i, :WITH_UNITS, "\x02").should eql "2 V"
|
|
321
|
-
i.format_string = "0x%x"
|
|
322
|
-
@p.read("ITEM", :WITH_UNITS, "\x02").should eql "0x2 V"
|
|
323
|
-
@p.read_item(i, :WITH_UNITS, "\x02").should eql "0x2 V"
|
|
324
|
-
i.states = {"TRUE"=>1, "FALSE"=>2}
|
|
325
|
-
@p.read("ITEM", :WITH_UNITS, "\x01").should eql "TRUE"
|
|
326
|
-
@p.read_item(i, :WITH_UNITS, "\x01").should eql "TRUE"
|
|
327
|
-
@p.read("ITEM", :WITH_UNITS, "\x02").should eql "FALSE"
|
|
328
|
-
@p.read_item(i, :WITH_UNITS, "\x02").should eql "FALSE"
|
|
329
|
-
@p.read("ITEM", :WITH_UNITS, "\x04").should eql "0x4 V"
|
|
330
|
-
@p.read_item(i, :WITH_UNITS, "\x04").should eql "0x4 V"
|
|
331
|
-
i.read_conversion = GenericConversion.new("value / 2")
|
|
332
|
-
@p.read("ITEM", :WITH_UNITS, "\x04").should eql "FALSE"
|
|
333
|
-
@p.read_item(i, :WITH_UNITS, "\x04").should eql "FALSE"
|
|
334
|
-
end
|
|
335
|
-
|
|
336
|
-
it "should read the WITH_UNITS array value" do
|
|
337
|
-
@p.append_item("item",8,:UINT, 16)
|
|
338
|
-
i = @p.get_item("ITEM")
|
|
339
|
-
i.units = "V"
|
|
340
|
-
@p.read("ITEM", :WITH_UNITS, "\x01\x02").should eql ["1 V", "2 V"]
|
|
341
|
-
@p.read_item(i, :WITH_UNITS, "\x01\x02").should eql ["1 V", "2 V"]
|
|
342
|
-
i.format_string = "0x%x"
|
|
343
|
-
@p.read("ITEM", :WITH_UNITS, "\x01\x02").should eql ["0x1 V", "0x2 V"]
|
|
344
|
-
@p.read_item(i, :WITH_UNITS, "\x01\x02").should eql ["0x1 V", "0x2 V"]
|
|
345
|
-
i.states = {"TRUE"=>1, "FALSE"=>2}
|
|
346
|
-
@p.read("ITEM", :WITH_UNITS, "\x01\x02").should eql ["TRUE", "FALSE"]
|
|
347
|
-
@p.read_item(i, :WITH_UNITS, "\x01\x02").should eql ["TRUE", "FALSE"]
|
|
348
|
-
@p.read("ITEM", :WITH_UNITS, "\x00\x01").should eql ["0x0 V", "TRUE"]
|
|
349
|
-
@p.read_item(i, :WITH_UNITS, "\x00\x01").should eql ["0x0 V", "TRUE"]
|
|
350
|
-
@p.read("ITEM", :WITH_UNITS, "\x02\x03").should eql ["FALSE", "0x3 V"]
|
|
351
|
-
@p.read_item(i, :WITH_UNITS, "\x02\x03").should eql ["FALSE", "0x3 V"]
|
|
352
|
-
@p.read("ITEM", :WITH_UNITS, "\x04").should eql ["0x4 V"]
|
|
353
|
-
@p.read_item(i, :WITH_UNITS, "\x04").should eql ["0x4 V"]
|
|
354
|
-
@p.read("ITEM", :WITH_UNITS, "\x04").should eql ["0x4 V"]
|
|
355
|
-
@p.read_item(i, :WITH_UNITS, "\x04").should eql ["0x4 V"]
|
|
356
|
-
i.read_conversion = GenericConversion.new("value / 2")
|
|
357
|
-
@p.read("ITEM", :WITH_UNITS, "\x02\x04").should eql ["TRUE","FALSE"]
|
|
358
|
-
@p.read_item(i, :WITH_UNITS, "\x02\x04").should eql ["TRUE","FALSE"]
|
|
359
|
-
@p.read("ITEM", :WITH_UNITS, "\x08").should eql ["0x4 V"]
|
|
360
|
-
@p.read_item(i, :WITH_UNITS, "\x08").should eql ["0x4 V"]
|
|
361
|
-
end
|
|
362
|
-
end
|
|
363
|
-
|
|
364
|
-
describe "write and write_item" do
|
|
365
|
-
before (:each) do
|
|
366
|
-
@p = Packet.new("tgt","pkt")
|
|
367
|
-
@buffer = "\x00\x00\x00\x00"
|
|
368
|
-
end
|
|
369
|
-
|
|
370
|
-
it "should complain about unknown value_type" do
|
|
371
|
-
@p.append_item("item",32,:UINT)
|
|
372
|
-
i = @p.get_item("ITEM")
|
|
373
|
-
expect { @p.write("ITEM", 0, :MINE) }.to raise_error(ArgumentError, "Unknown value type on write: MINE")
|
|
374
|
-
expect { @p.write_item(i, 0, :MINE) }.to raise_error(ArgumentError, "Unknown value type on write: MINE")
|
|
375
|
-
end
|
|
376
|
-
|
|
377
|
-
it "should write the RAW value" do
|
|
378
|
-
@p.append_item("item",32,:UINT)
|
|
379
|
-
i = @p.get_item("ITEM")
|
|
380
|
-
@p.write("ITEM", 0x01020304, :RAW, @buffer)
|
|
381
|
-
@buffer.should eql "\x01\x02\x03\x04"
|
|
382
|
-
@p.write_item(i, 0x05060708, :RAW, @buffer)
|
|
383
|
-
@buffer.should eql "\x05\x06\x07\x08"
|
|
384
|
-
end
|
|
385
|
-
|
|
386
|
-
it "should write the CONVERTED value" do
|
|
387
|
-
@p.append_item("item",8,:UINT)
|
|
388
|
-
i = @p.get_item("ITEM")
|
|
389
|
-
@p.write("ITEM", 1, :CONVERTED, @buffer)
|
|
390
|
-
@buffer.should eql "\x01\x00\x00\x00"
|
|
391
|
-
@p.write_item(i, 2, :CONVERTED, @buffer)
|
|
392
|
-
@buffer.should eql "\x02\x00\x00\x00"
|
|
393
|
-
i.write_conversion = GenericConversion.new("value / 2")
|
|
394
|
-
@p.write("ITEM", 1, :CONVERTED, @buffer)
|
|
395
|
-
@buffer.should eql "\x00\x00\x00\x00"
|
|
396
|
-
@p.write_item(i, 2, :CONVERTED, @buffer)
|
|
397
|
-
@buffer.should eql "\x01\x00\x00\x00"
|
|
398
|
-
end
|
|
399
|
-
|
|
400
|
-
it "should write the CONVERTED value with states" do
|
|
401
|
-
@p.append_item("item",8,:UINT)
|
|
402
|
-
i = @p.get_item("ITEM")
|
|
403
|
-
i.states = {"TRUE"=>1, "FALSE"=>2}
|
|
404
|
-
@p.write("ITEM", 3, :CONVERTED, @buffer)
|
|
405
|
-
@buffer.should eql "\x03\x00\x00\x00"
|
|
406
|
-
@p.write_item(i, 4, :CONVERTED, @buffer)
|
|
407
|
-
@buffer.should eql "\x04\x00\x00\x00"
|
|
408
|
-
@p.write("ITEM", "TRUE", :CONVERTED, @buffer)
|
|
409
|
-
@buffer.should eql "\x01\x00\x00\x00"
|
|
410
|
-
@p.write_item(i, "FALSE", :CONVERTED, @buffer)
|
|
411
|
-
@buffer.should eql "\x02\x00\x00\x00"
|
|
412
|
-
i.write_conversion = GenericConversion.new("value / 2")
|
|
413
|
-
@p.write("ITEM", 4, :CONVERTED, @buffer)
|
|
414
|
-
@buffer.should eql "\x02\x00\x00\x00"
|
|
415
|
-
@p.write("ITEM", "TRUE", :CONVERTED, @buffer)
|
|
416
|
-
@buffer.should eql "\x00\x00\x00\x00"
|
|
417
|
-
@p.write_item(i, "FALSE", :CONVERTED, @buffer)
|
|
418
|
-
@buffer.should eql "\x01\x00\x00\x00"
|
|
419
|
-
end
|
|
420
|
-
|
|
421
|
-
it "should complain about the FORMATTED value_type" do
|
|
422
|
-
@p.append_item("item",8,:UINT)
|
|
423
|
-
i = @p.get_item("ITEM")
|
|
424
|
-
expect { @p.write("ITEM", 3, :FORMATTED, @buffer) }.to raise_error(ArgumentError, "Invalid value type on write: FORMATTED")
|
|
425
|
-
expect { @p.write_item(i, 3, :FORMATTED, @buffer) }.to raise_error(ArgumentError, "Invalid value type on write: FORMATTED")
|
|
426
|
-
end
|
|
427
|
-
|
|
428
|
-
it "should complain about the WITH_UNITS value_type" do
|
|
429
|
-
@p.append_item("item",8,:UINT)
|
|
430
|
-
i = @p.get_item("ITEM")
|
|
431
|
-
expect { @p.write("ITEM", 3, :WITH_UNITS, @buffer) }.to raise_error(ArgumentError, "Invalid value type on write: WITH_UNITS")
|
|
432
|
-
expect { @p.write_item(i, 3, :WITH_UNITS, @buffer) }.to raise_error(ArgumentError, "Invalid value type on write: WITH_UNITS")
|
|
433
|
-
end
|
|
434
|
-
end
|
|
435
|
-
|
|
436
|
-
describe "read_all" do
|
|
437
|
-
it "should default to read all CONVERTED items" do
|
|
438
|
-
p = Packet.new("tgt","pkt")
|
|
439
|
-
p.append_item("test1", 8, :UINT, 16)
|
|
440
|
-
p.append_item("test2", 16, :UINT)
|
|
441
|
-
i = p.get_item("TEST2")
|
|
442
|
-
i.states = {"TRUE"=>0x0304}
|
|
443
|
-
p.append_item("test3", 32, :UINT)
|
|
444
|
-
i = p.get_item("TEST3")
|
|
445
|
-
i.read_conversion = GenericConversion.new("value / 2")
|
|
446
|
-
|
|
447
|
-
buffer = "\x01\x02\x03\x04\x04\x06\x08\x0A"
|
|
448
|
-
p.buffer = buffer
|
|
449
|
-
vals = p.read_all
|
|
450
|
-
vals[0][0].should eql "TEST1"
|
|
451
|
-
vals[1][0].should eql "TEST2"
|
|
452
|
-
vals[2][0].should eql "TEST3"
|
|
453
|
-
vals[0][1].should eql [1,2]
|
|
454
|
-
vals[1][1].should eql "TRUE"
|
|
455
|
-
vals[2][1].should eql 0x02030405
|
|
456
|
-
end
|
|
457
|
-
end
|
|
458
|
-
|
|
459
|
-
describe "read_all_with_limits_states" do
|
|
460
|
-
it "should return an array of items with their limit states" do
|
|
461
|
-
p = Packet.new("tgt","pkt")
|
|
462
|
-
p.append_item("test1", 8, :UINT)
|
|
463
|
-
i = p.get_item("TEST1")
|
|
464
|
-
i.states = {"TRUE"=>1,"FALSE"=>0}
|
|
465
|
-
i.state_colors = {"TRUE"=>:GREEN,"FALSE"=>:RED}
|
|
466
|
-
p.write("TEST1",0)
|
|
467
|
-
p.enable_limits("TEST1")
|
|
468
|
-
p.append_item("test2", 16, :UINT)
|
|
469
|
-
i = p.get_item("TEST2")
|
|
470
|
-
i.limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
471
|
-
p.write("TEST2",3)
|
|
472
|
-
p.enable_limits("TEST2")
|
|
473
|
-
p.update_limits_items_cache
|
|
474
|
-
p.check_limits
|
|
475
|
-
|
|
476
|
-
vals = p.read_all_with_limits_states
|
|
477
|
-
vals[0][0].should eql "TEST1"
|
|
478
|
-
vals[1][0].should eql "TEST2"
|
|
479
|
-
vals[0][1].should eql "FALSE"
|
|
480
|
-
vals[1][1].should eql 3
|
|
481
|
-
vals[0][2].should eql :RED
|
|
482
|
-
vals[1][2].should eql :GREEN
|
|
483
|
-
end
|
|
484
|
-
end
|
|
485
|
-
|
|
486
|
-
describe "formatted" do
|
|
487
|
-
it "should print out all the items and CONVERTED values" do
|
|
488
|
-
p = Packet.new("tgt","pkt")
|
|
489
|
-
p.append_item("test1", 8, :UINT, 16)
|
|
490
|
-
p.write("test1", [1,2])
|
|
491
|
-
p.append_item("test2", 16, :UINT)
|
|
492
|
-
i = p.get_item("TEST2")
|
|
493
|
-
i.states = {"TRUE"=>0x0304}
|
|
494
|
-
p.write("test2", 0x0304)
|
|
495
|
-
p.append_item("test3", 32, :UINT)
|
|
496
|
-
i = p.get_item("TEST3")
|
|
497
|
-
i.read_conversion = GenericConversion.new("value / 2")
|
|
498
|
-
p.write("test3", 0x0406080A)
|
|
499
|
-
p.formatted.should include("TEST1: [1, 2]")
|
|
500
|
-
p.formatted.should include("TEST2: TRUE")
|
|
501
|
-
p.formatted.should include("TEST3: #{0x02030405}")
|
|
502
|
-
end
|
|
503
|
-
end
|
|
504
|
-
|
|
505
|
-
describe "identify?" do
|
|
506
|
-
it "should identify a buffer based on id_items" do
|
|
507
|
-
p = Packet.new("tgt","pkt")
|
|
508
|
-
p.append_item("item1",8,:UINT)
|
|
509
|
-
p.append_item("item2",16,:UINT,nil,:BIG_ENDIAN,:ERROR,nil,nil,nil,5)
|
|
510
|
-
p.append_item("item3",32,:UINT)
|
|
511
|
-
p.identify?("\x00\x00\x05\x01\x02\x03\x04").should be_truthy
|
|
512
|
-
p.identify?("\x00\x00\x04\x01\x02\x03\x04").should be_falsey
|
|
513
|
-
p.identify?("\x00").should be_falsey
|
|
514
|
-
end
|
|
515
|
-
|
|
516
|
-
it "should identify if the buffer is too short" do
|
|
517
|
-
p = Packet.new("tgt","pkt")
|
|
518
|
-
p.append_item("item1",8,:UINT)
|
|
519
|
-
p.append_item("item2",16,:UINT,nil,:BIG_ENDIAN,:ERROR,nil,nil,nil,5)
|
|
520
|
-
p.append_item("item3",32,:UINT)
|
|
521
|
-
p.identify?("\x00\x00\x05\x01\x02\x03").should be_truthy
|
|
522
|
-
end
|
|
523
|
-
|
|
524
|
-
it "should identify if the buffer is too long" do
|
|
525
|
-
p = Packet.new("tgt","pkt")
|
|
526
|
-
p.append_item("item1",8,:UINT)
|
|
527
|
-
p.append_item("item2",16,:UINT,nil,:BIG_ENDIAN,:ERROR,nil,nil,nil,5)
|
|
528
|
-
p.append_item("item3",32,:UINT)
|
|
529
|
-
p.identify?("\x00\x00\x05\x01\x02\x03\x04\x05").should be_truthy
|
|
530
|
-
end
|
|
531
|
-
end
|
|
532
|
-
|
|
533
|
-
describe "identified?" do
|
|
534
|
-
it "should return true if the target name and packet name are set" do
|
|
535
|
-
Packet.new('TGT',nil).identified?.should be_falsey
|
|
536
|
-
Packet.new(nil,'PKT').identified?.should be_falsey
|
|
537
|
-
Packet.new('TGT','PKT').identified?.should be_truthy
|
|
538
|
-
end
|
|
539
|
-
end
|
|
540
|
-
|
|
541
|
-
describe "restore_defaults" do
|
|
542
|
-
it "should write all the items back to their default values" do
|
|
543
|
-
p = Packet.new("tgt","pkt")
|
|
544
|
-
p.append_item("test1", 8, :UINT, 16)
|
|
545
|
-
i = p.get_item("TEST1")
|
|
546
|
-
i.default = [3,4]
|
|
547
|
-
p.write("test1", [1,2])
|
|
548
|
-
p.append_item("test2", 16, :UINT)
|
|
549
|
-
i = p.get_item("TEST2")
|
|
550
|
-
i.default = 0x0102
|
|
551
|
-
i.states = {"TRUE"=>0x0304}
|
|
552
|
-
p.write("test2", 0x0304)
|
|
553
|
-
p.append_item("test3", 32, :UINT)
|
|
554
|
-
i = p.get_item("TEST3")
|
|
555
|
-
i.default = 0x02030405
|
|
556
|
-
i.write_conversion = GenericConversion.new("value * 2")
|
|
557
|
-
p.write("test3", 0x01020304)
|
|
558
|
-
p.buffer.should eql "\x01\x02\x03\x04\x02\x04\x06\x08"
|
|
559
|
-
p.restore_defaults
|
|
560
|
-
p.buffer.should eql "\x03\x04\x01\x02\x04\x06\x08\x0A"
|
|
561
|
-
end
|
|
562
|
-
end
|
|
563
|
-
|
|
564
|
-
describe "enable_limits" do
|
|
565
|
-
it "should enable limits on each packet item" do
|
|
566
|
-
p = Packet.new("tgt","pkt")
|
|
567
|
-
p.append_item("test1", 8, :UINT, 16)
|
|
568
|
-
p.append_item("test2", 16, :UINT)
|
|
569
|
-
p.get_item("TEST1").limits.enabled.should be_falsey
|
|
570
|
-
p.get_item("TEST2").limits.enabled.should be_falsey
|
|
571
|
-
p.enable_limits("TEST1")
|
|
572
|
-
p.get_item("TEST1").limits.enabled.should be_truthy
|
|
573
|
-
p.get_item("TEST2").limits.enabled.should be_falsey
|
|
574
|
-
p.enable_limits("TEST2")
|
|
575
|
-
p.get_item("TEST1").limits.enabled.should be_truthy
|
|
576
|
-
p.get_item("TEST2").limits.enabled.should be_truthy
|
|
577
|
-
end
|
|
578
|
-
end
|
|
579
|
-
|
|
580
|
-
describe "disable_limits" do
|
|
581
|
-
it "should disable limits on each packet item" do
|
|
582
|
-
p = Packet.new("tgt","pkt")
|
|
583
|
-
p.append_item("test1", 8, :UINT)
|
|
584
|
-
p.append_item("test2", 16, :UINT)
|
|
585
|
-
p.enable_limits("TEST1")
|
|
586
|
-
p.enable_limits("TEST2")
|
|
587
|
-
p.get_item("TEST1").limits.enabled.should be_truthy
|
|
588
|
-
p.get_item("TEST2").limits.enabled.should be_truthy
|
|
589
|
-
p.disable_limits("TEST1")
|
|
590
|
-
p.get_item("TEST1").limits.enabled.should be_falsey
|
|
591
|
-
p.get_item("TEST2").limits.enabled.should be_truthy
|
|
592
|
-
p.disable_limits("TEST2")
|
|
593
|
-
p.get_item("TEST1").limits.enabled.should be_falsey
|
|
594
|
-
p.get_item("TEST2").limits.enabled.should be_falsey
|
|
595
|
-
end
|
|
596
|
-
|
|
597
|
-
it "should call the limits_change_callback for all non STALE items" do
|
|
598
|
-
p = Packet.new("tgt","pkt")
|
|
599
|
-
p.append_item("test1", 8, :UINT)
|
|
600
|
-
p.get_item("TEST1").limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
601
|
-
p.append_item("test2", 16, :UINT)
|
|
602
|
-
p.get_item("TEST2").limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
603
|
-
p.write("TEST1",3)
|
|
604
|
-
p.write("TEST2",3)
|
|
605
|
-
p.enable_limits("TEST1")
|
|
606
|
-
p.enable_limits("TEST2")
|
|
607
|
-
p.update_limits_items_cache
|
|
608
|
-
|
|
609
|
-
callback = double("callback", :call => true)
|
|
610
|
-
p.limits_change_callback = callback
|
|
611
|
-
expect(callback).to receive(:call).with(p, p.get_item("TEST1"),:GREEN,nil,false)
|
|
612
|
-
expect(callback).to receive(:call).with(p, p.get_item("TEST2"),:GREEN,nil,false)
|
|
613
|
-
p.check_limits
|
|
614
|
-
p.disable_limits("TEST1")
|
|
615
|
-
p.disable_limits("TEST2")
|
|
616
|
-
p.get_item("TEST1").limits.enabled.should be_falsey
|
|
617
|
-
p.get_item("TEST2").limits.enabled.should be_falsey
|
|
618
|
-
end
|
|
619
|
-
end
|
|
620
|
-
|
|
621
|
-
describe "limits_items" do
|
|
622
|
-
it "should return all items with limits" do
|
|
623
|
-
p = Packet.new("tgt","pkt")
|
|
624
|
-
p.append_item("test1", 8, :UINT)
|
|
625
|
-
p.enable_limits("TEST1")
|
|
626
|
-
p.append_item("test2", 16, :UINT)
|
|
627
|
-
p.enable_limits("TEST2")
|
|
628
|
-
p.limits_items.should eql []
|
|
629
|
-
|
|
630
|
-
test1 = p.get_item("TEST1")
|
|
631
|
-
test1.limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
632
|
-
p.update_limits_items_cache
|
|
633
|
-
p.limits_items.should eql [test1]
|
|
634
|
-
test2 = p.get_item("TEST2")
|
|
635
|
-
test2.limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
636
|
-
p.update_limits_items_cache
|
|
637
|
-
p.limits_items.should eql [test1, test2]
|
|
638
|
-
end
|
|
639
|
-
end
|
|
640
|
-
|
|
641
|
-
describe "out_of_limits" do
|
|
642
|
-
it "should return an array indicating all items out of limits" do
|
|
643
|
-
p = Packet.new("tgt","pkt")
|
|
644
|
-
p.append_item("test1", 8, :UINT)
|
|
645
|
-
p.get_item("TEST1").limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
646
|
-
p.enable_limits("TEST1")
|
|
647
|
-
p.write("TEST1",3)
|
|
648
|
-
p.append_item("test2", 16, :UINT)
|
|
649
|
-
p.get_item("TEST2").limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
650
|
-
p.write("TEST2",3)
|
|
651
|
-
p.enable_limits("TEST2")
|
|
652
|
-
p.update_limits_items_cache
|
|
653
|
-
p.check_limits
|
|
654
|
-
p.out_of_limits.should eql []
|
|
655
|
-
|
|
656
|
-
p.write("TEST1",6)
|
|
657
|
-
p.check_limits
|
|
658
|
-
p.out_of_limits.should eql [["TGT","PKT","TEST1",:RED_HIGH]]
|
|
659
|
-
p.write("TEST2",2)
|
|
660
|
-
p.check_limits
|
|
661
|
-
p.out_of_limits.should eql [["TGT","PKT","TEST1",:RED_HIGH],["TGT","PKT","TEST2",:YELLOW_LOW]]
|
|
662
|
-
end
|
|
663
|
-
end
|
|
664
|
-
|
|
665
|
-
describe "set_all_limits_states" do
|
|
666
|
-
it "should set all limits states to the given state" do
|
|
667
|
-
p = Packet.new("tgt","pkt")
|
|
668
|
-
p.append_item("test1", 8, :UINT)
|
|
669
|
-
p.get_item("TEST1").limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
670
|
-
p.enable_limits("TEST1")
|
|
671
|
-
p.append_item("test2", 16, :UINT)
|
|
672
|
-
p.get_item("TEST2").limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
673
|
-
p.enable_limits("TEST2")
|
|
674
|
-
p.update_limits_items_cache
|
|
675
|
-
p.out_of_limits.should eql []
|
|
676
|
-
|
|
677
|
-
PacketItemLimits::OUT_OF_LIMITS_STATES.each do |state|
|
|
678
|
-
p.set_all_limits_states(state)
|
|
679
|
-
p.out_of_limits.should eql [["TGT","PKT","TEST1",state],["TGT","PKT","TEST2",state]]
|
|
680
|
-
end
|
|
681
|
-
end
|
|
682
|
-
end
|
|
683
|
-
|
|
684
|
-
describe "check_limits" do
|
|
685
|
-
before(:each) do
|
|
686
|
-
@p = Packet.new("tgt","pkt")
|
|
687
|
-
@p.append_item("test1", 8, :UINT)
|
|
688
|
-
@p.append_item("test2", 16, :UINT)
|
|
689
|
-
@p.append_item("test3", 32, :FLOAT)
|
|
690
|
-
end
|
|
691
|
-
|
|
692
|
-
it "should set clear the stale flag" do
|
|
693
|
-
@p.stale.should be_truthy
|
|
694
|
-
@p.check_limits
|
|
695
|
-
@p.stale.should be_falsey
|
|
696
|
-
end
|
|
697
|
-
|
|
698
|
-
it "should not call the limits_change_callback if limits are disabled" do
|
|
699
|
-
@p.get_item("TEST1").limits.enabled.should be_falsey
|
|
700
|
-
@p.get_item("TEST2").limits.enabled.should be_falsey
|
|
701
|
-
callback = double("callback")
|
|
702
|
-
allow(callback).to receive(:call)
|
|
703
|
-
@p.limits_change_callback = callback
|
|
704
|
-
@p.check_limits
|
|
705
|
-
expect(callback).to_not receive(:call)
|
|
706
|
-
end
|
|
707
|
-
|
|
708
|
-
context "with states" do
|
|
709
|
-
it "should call the limits_change_callback" do
|
|
710
|
-
test1 = @p.get_item("TEST1")
|
|
711
|
-
test1.limits.enabled.should be_falsey
|
|
712
|
-
test1.states = {"TRUE"=>1,"FALSE"=>0}
|
|
713
|
-
test1.state_colors = {"TRUE"=>:GREEN,"FALSE"=>:RED}
|
|
714
|
-
@p.write("TEST1", 0)
|
|
715
|
-
@p.enable_limits("TEST1")
|
|
716
|
-
test2 = @p.get_item("TEST2")
|
|
717
|
-
test2.limits.enabled.should be_falsey
|
|
718
|
-
test2.states = {"TRUE"=>1,"FALSE"=>0}
|
|
719
|
-
test2.state_colors = {"TRUE"=>:RED,"FALSE"=>:GREEN}
|
|
720
|
-
@p.write("TEST2", 0)
|
|
721
|
-
@p.enable_limits("TEST2")
|
|
722
|
-
@p.update_limits_items_cache
|
|
723
|
-
|
|
724
|
-
# Mock the callback so we can see if it is called properly
|
|
725
|
-
callback = double("callback", :call => true)
|
|
726
|
-
@p.limits_change_callback = callback
|
|
727
|
-
|
|
728
|
-
# Check the limits for the first time, TEST1 should be :RED and TEST2
|
|
729
|
-
# should be :GREEN
|
|
730
|
-
expect(callback).to receive(:call).once.with(@p, test1,nil,"FALSE",true)
|
|
731
|
-
@p.check_limits
|
|
732
|
-
|
|
733
|
-
# Change the TEST2 state to :RED, we were previously :GREEN
|
|
734
|
-
@p.write("TEST2", 1)
|
|
735
|
-
expect(callback).to receive(:call).once.with(@p, test2,:GREEN,"TRUE",true)
|
|
736
|
-
@p.check_limits
|
|
737
|
-
|
|
738
|
-
# Change the TEST2 value to something that doesn't map to a state
|
|
739
|
-
@p.write("TEST2", 2)
|
|
740
|
-
expect(callback).to receive(:call).once.with(@p, test2,:RED,2,false)
|
|
741
|
-
@p.check_limits
|
|
742
|
-
end
|
|
743
|
-
end
|
|
744
|
-
|
|
745
|
-
context "with values" do
|
|
746
|
-
before(:each) do
|
|
747
|
-
@test1 = @p.get_item("TEST1")
|
|
748
|
-
@test1.limits.enabled.should be_falsey
|
|
749
|
-
@test1.limits.values = {:DEFAULT=>[1,2,4,5]} # red yellow
|
|
750
|
-
@p.enable_limits("TEST1")
|
|
751
|
-
|
|
752
|
-
@test2 = @p.get_item("TEST2")
|
|
753
|
-
@test2.limits.enabled.should be_falsey
|
|
754
|
-
@test2.limits.values = {:DEFAULT=>[1,2,6,7,3,5]} # red yellow and blue
|
|
755
|
-
@p.enable_limits("TEST2")
|
|
756
|
-
|
|
757
|
-
@test3 = @p.get_item("TEST3")
|
|
758
|
-
@test3.limits.enabled.should be_falsey
|
|
759
|
-
@test3.limits.values = {:DEFAULT=>[1,1.5,2.5,3]} # red yellow
|
|
760
|
-
@p.enable_limits("TEST3")
|
|
761
|
-
@p.update_limits_items_cache
|
|
762
|
-
|
|
763
|
-
# Mock the callback so we can see if it is called properly
|
|
764
|
-
@callback = double("callback", :call => true)
|
|
765
|
-
@p.limits_change_callback = @callback
|
|
766
|
-
end
|
|
767
|
-
|
|
768
|
-
it "should detect initial low states" do
|
|
769
|
-
@p.write("TEST1", 0)
|
|
770
|
-
@p.write("TEST2", 3)
|
|
771
|
-
@p.write("TEST3", 1.25)
|
|
772
|
-
@p.check_limits
|
|
773
|
-
@p.get_item("TEST1").limits.state.should eql :RED_LOW
|
|
774
|
-
@p.get_item("TEST2").limits.state.should eql :GREEN_LOW
|
|
775
|
-
@p.get_item("TEST3").limits.state.should eql :YELLOW_LOW
|
|
776
|
-
end
|
|
777
|
-
|
|
778
|
-
it "should detect initial high states" do
|
|
779
|
-
@p.write("TEST1", 6)
|
|
780
|
-
@p.write("TEST2", 5)
|
|
781
|
-
@p.write("TEST3", 2.75)
|
|
782
|
-
@p.check_limits
|
|
783
|
-
@p.get_item("TEST1").limits.state.should eql :RED_HIGH
|
|
784
|
-
@p.get_item("TEST2").limits.state.should eql :GREEN_HIGH
|
|
785
|
-
@p.get_item("TEST3").limits.state.should eql :YELLOW_HIGH
|
|
786
|
-
end
|
|
787
|
-
|
|
788
|
-
it "should detect initial middle states" do
|
|
789
|
-
@p.write("TEST1", 3)
|
|
790
|
-
@p.write("TEST2", 4)
|
|
791
|
-
@p.write("TEST3", 2.0)
|
|
792
|
-
@p.check_limits
|
|
793
|
-
@p.get_item("TEST1").limits.state.should eql :GREEN
|
|
794
|
-
@p.get_item("TEST2").limits.state.should eql :BLUE
|
|
795
|
-
@p.get_item("TEST3").limits.state.should eql :GREEN
|
|
796
|
-
end
|
|
797
|
-
|
|
798
|
-
it "should clear persistence when initial state is nil" do
|
|
799
|
-
@p.get_item("TEST1").limits.persistence_count = 2
|
|
800
|
-
@p.get_item("TEST2").limits.persistence_count = 3
|
|
801
|
-
@p.get_item("TEST3").limits.persistence_count = 4
|
|
802
|
-
@p.check_limits
|
|
803
|
-
@p.get_item("TEST1").limits.persistence_count.should eql 0
|
|
804
|
-
@p.get_item("TEST2").limits.persistence_count.should eql 0
|
|
805
|
-
@p.get_item("TEST3").limits.persistence_count.should eql 0
|
|
806
|
-
end
|
|
807
|
-
|
|
808
|
-
context "when calling the limits_change_callback" do
|
|
809
|
-
it "should initially call only for out of limits" do
|
|
810
|
-
@p.write("TEST1", 0)
|
|
811
|
-
@p.write("TEST2", 4)
|
|
812
|
-
@p.write("TEST3", 1.25)
|
|
813
|
-
|
|
814
|
-
# Check the limits for the first time, TEST1 should be :RED_LOW, TEST2
|
|
815
|
-
# should be :BLUE, TEST3 should be YELLOW_LOW
|
|
816
|
-
expect(@callback).to receive(:call).with(@p, @test1,nil,0,true)
|
|
817
|
-
expect(@callback).to receive(:call).with(@p, @test3,nil,1.25,true)
|
|
818
|
-
@p.check_limits
|
|
819
|
-
end
|
|
820
|
-
|
|
821
|
-
it "should call when limits change states" do
|
|
822
|
-
@p.write("TEST1", 0)
|
|
823
|
-
@p.write("TEST2", 4)
|
|
824
|
-
@p.write("TEST3", 1.25)
|
|
825
|
-
@p.check_limits
|
|
826
|
-
|
|
827
|
-
# Make TEST2 be GREEN_LOW, we were previously :BLUE
|
|
828
|
-
@p.write("TEST2", 3)
|
|
829
|
-
expect(@callback).to receive(:call).once.with(@p, @test2,:BLUE,3,true)
|
|
830
|
-
@p.check_limits
|
|
831
|
-
end
|
|
832
|
-
|
|
833
|
-
it "should call only when persistence is achieved" do
|
|
834
|
-
|
|
835
|
-
@p.get_item("
|
|
836
|
-
@p.get_item("
|
|
837
|
-
|
|
838
|
-
@p.write("TEST1", 3)
|
|
839
|
-
@p.write("TEST2", 4)
|
|
840
|
-
@p.write("TEST3", 2.0)
|
|
841
|
-
@p
|
|
842
|
-
|
|
843
|
-
@
|
|
844
|
-
@p.
|
|
845
|
-
@
|
|
846
|
-
@
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
@p.
|
|
851
|
-
|
|
852
|
-
@p.
|
|
853
|
-
|
|
854
|
-
@p.write("TEST1", 0)
|
|
855
|
-
@p.write("TEST2",
|
|
856
|
-
@p.write("TEST3", 1.25)
|
|
857
|
-
|
|
858
|
-
@
|
|
859
|
-
|
|
860
|
-
@
|
|
861
|
-
|
|
862
|
-
@p.write("
|
|
863
|
-
|
|
864
|
-
@p.
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
@
|
|
869
|
-
@
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
@p.write("
|
|
873
|
-
@p.write("
|
|
874
|
-
@
|
|
875
|
-
@p.check_limits
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
@
|
|
879
|
-
|
|
880
|
-
@p.write("
|
|
881
|
-
@p.
|
|
882
|
-
|
|
883
|
-
@
|
|
884
|
-
@p.
|
|
885
|
-
@
|
|
886
|
-
@
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
@p.write("
|
|
891
|
-
@p.write("
|
|
892
|
-
@p.
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
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/packet'
|
|
14
|
+
require 'cosmos/conversions/generic_conversion'
|
|
15
|
+
|
|
16
|
+
module Cosmos
|
|
17
|
+
|
|
18
|
+
describe Packet do
|
|
19
|
+
|
|
20
|
+
describe "buffer=" do
|
|
21
|
+
it "should set the buffer" do
|
|
22
|
+
p = Packet.new("tgt", "pkt")
|
|
23
|
+
p.buffer = "\x00\x01\x02\x03"
|
|
24
|
+
p.buffer.should eql "\x00\x01\x02\x03"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should complain if the given buffer is too big" do
|
|
28
|
+
capture_io do |stdout|
|
|
29
|
+
p = Packet.new("tgt", "pkt")
|
|
30
|
+
p.append_item("test1", 16, :UINT)
|
|
31
|
+
|
|
32
|
+
p.buffer = "\x00\x00\x00"
|
|
33
|
+
stdout.string.should match(/TGT PKT received with actual packet length of 3 but defined length of 2/)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "should run processors if present" do
|
|
38
|
+
p = Packet.new("tgt", "pkt")
|
|
39
|
+
p.processors['processor'] = double("call", :call => true)
|
|
40
|
+
p.buffer = "\x00\x01\x02\x03"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe "target_name=" do
|
|
45
|
+
it "should set the target_name to an uppercase String" do
|
|
46
|
+
p = Packet.new("tgt", "pkt")
|
|
47
|
+
p.target_name.should eql "TGT"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "should set target_name to nil" do
|
|
51
|
+
p = Packet.new(nil,"pkt")
|
|
52
|
+
p.target_name.should be_nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it "should complain about non String target_names" do
|
|
56
|
+
expect { Packet.new(5, "pkt") }.to raise_error(ArgumentError, "target_name must be a String but is a Fixnum")
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe "packet_name=" do
|
|
61
|
+
it "should set the packet_name to an uppercase String" do
|
|
62
|
+
p = Packet.new("tgt", "pkt")
|
|
63
|
+
p.packet_name.should eql "PKT"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "should set packet_name to nil" do
|
|
67
|
+
p = Packet.new("tgt",nil)
|
|
68
|
+
p.packet_name.should be_nil
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "should complain about non String packet_names" do
|
|
72
|
+
expect { Packet.new("tgt", 5) }.to raise_error(ArgumentError, "packet_name must be a String but is a Fixnum")
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe "description=" do
|
|
77
|
+
it "should set the description to a String" do
|
|
78
|
+
p = Packet.new("tgt", "pkt", :BIG_ENDIAN, "This is a description")
|
|
79
|
+
p.description.should eql "This is a description"
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "should set description to nil" do
|
|
83
|
+
p = Packet.new("tgt","pkt")
|
|
84
|
+
p.description = nil
|
|
85
|
+
p.description.should be_nil
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "should complain about non String descriptions" do
|
|
89
|
+
p = Packet.new("tgt","pkt")
|
|
90
|
+
expect { p.description = 5 }.to raise_error(ArgumentError, "description must be a String but is a Fixnum")
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
describe "received_time=" do
|
|
95
|
+
it "should set the received_time to a Time" do
|
|
96
|
+
p = Packet.new("tgt", "pkt")
|
|
97
|
+
t = Time.now
|
|
98
|
+
p.received_time = t
|
|
99
|
+
p.received_time.should eql t
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "should set received_time to nil" do
|
|
103
|
+
p = Packet.new("tgt","pkt")
|
|
104
|
+
p.received_time = nil
|
|
105
|
+
p.received_time.should be_nil
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "should complain about non Time received_times" do
|
|
109
|
+
p = Packet.new("tgt","pkt")
|
|
110
|
+
expect {p.received_time = "1pm" }.to raise_error(ArgumentError, "received_time must be a Time but is a String")
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
describe "received_count=" do
|
|
115
|
+
it "should set the received_count to a Fixnum" do
|
|
116
|
+
p = Packet.new("tgt", "pkt")
|
|
117
|
+
p.received_count = 10
|
|
118
|
+
p.received_count.should eql 10
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it "should complain about nil received_count" do
|
|
122
|
+
p = Packet.new("tgt","pkt")
|
|
123
|
+
expect {p.received_count = nil }.to raise_error(ArgumentError, "received_count must be a Fixnum but is a NilClass")
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it "should complain about non Fixnum received_counts" do
|
|
127
|
+
p = Packet.new("tgt","pkt")
|
|
128
|
+
expect {p.received_count = "5" }.to raise_error(ArgumentError, "received_count must be a Fixnum but is a String")
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
describe "hazardous_description=" do
|
|
133
|
+
it "should set the hazardous_description to a String" do
|
|
134
|
+
p = Packet.new("tgt", "pkt")
|
|
135
|
+
p.hazardous_description = "This is a description"
|
|
136
|
+
p.hazardous_description.should eql "This is a description"
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it "should set hazardous_description to nil" do
|
|
140
|
+
p = Packet.new("tgt","pkt")
|
|
141
|
+
p.hazardous_description = nil
|
|
142
|
+
p.hazardous_description.should be_nil
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
it "should complain about non String hazardous_descriptions" do
|
|
146
|
+
p = Packet.new("tgt","pkt")
|
|
147
|
+
expect {p.hazardous_description = 5 }.to raise_error(ArgumentError, "hazardous_description must be a String but is a Fixnum")
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
describe "given_values=" do
|
|
152
|
+
it "should set the given_values to a Hash" do
|
|
153
|
+
p = Packet.new("tgt", "pkt")
|
|
154
|
+
gv = {}
|
|
155
|
+
p.given_values = gv
|
|
156
|
+
p.given_values.should eql gv
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
it "should set given_values to nil" do
|
|
160
|
+
p = Packet.new("tgt","pkt")
|
|
161
|
+
p.given_values = nil
|
|
162
|
+
p.given_values.should be_nil
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
it "should complain about non Hash given_valuess" do
|
|
166
|
+
p = Packet.new("tgt","pkt")
|
|
167
|
+
expect {p.given_values = [] }.to raise_error(ArgumentError, "given_values must be a Hash but is a Array")
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
describe "meta" do
|
|
172
|
+
it "should allow adding items to the meta hash" do
|
|
173
|
+
p = Packet.new("tgt","pkt")
|
|
174
|
+
p.meta['TYPE'] = 'float32'
|
|
175
|
+
p.meta['TYPE'].should eql 'float32'
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
describe "limits_change_callback=" do
|
|
180
|
+
it "should set the limits_change_callback to something that responds to call" do
|
|
181
|
+
p = Packet.new("tgt", "pkt")
|
|
182
|
+
callback = Object.new
|
|
183
|
+
allow(callback).to receive(:call)
|
|
184
|
+
expect { p.limits_change_callback = callback }.to_not raise_error
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
it "should set limits_change_callback to nil" do
|
|
188
|
+
p = Packet.new("tgt","pkt")
|
|
189
|
+
expect { p.limits_change_callback = nil }.to_not raise_error
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
it "should complain about non #call limits_change_callbacks" do
|
|
193
|
+
p = Packet.new("tgt","pkt")
|
|
194
|
+
expect {p.limits_change_callback = "" }.to raise_error(ArgumentError, "limits_change_callback must respond to call")
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
describe "define_item" do
|
|
199
|
+
it "should take a format_string, read_conversion, write_conversion, and id_value" do
|
|
200
|
+
p = Packet.new("tgt","pkt")
|
|
201
|
+
rc = GenericConversion.new("value / 2")
|
|
202
|
+
wc = GenericConversion.new("value * 2")
|
|
203
|
+
p.define_item("item",0,32,:FLOAT,nil,:BIG_ENDIAN,:ERROR,"%5.1f",rc,wc,5)
|
|
204
|
+
i = p.get_item("ITEM")
|
|
205
|
+
i.format_string.should eql "%5.1f"
|
|
206
|
+
i.read_conversion.to_s.should eql rc.to_s
|
|
207
|
+
i.write_conversion.to_s.should eql wc.to_s
|
|
208
|
+
i.id_value.should eql 5.0
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
it "should initialize format_string, read_conversion, write_conversion, and id_value to nil" do
|
|
212
|
+
p = Packet.new("tgt","pkt")
|
|
213
|
+
p.define_item("item",0,32,:FLOAT)
|
|
214
|
+
i = p.get_item("ITEM")
|
|
215
|
+
i.format_string.should be_nil
|
|
216
|
+
i.read_conversion.should be_nil
|
|
217
|
+
i.write_conversion.should be_nil
|
|
218
|
+
i.id_value.should be_nil
|
|
219
|
+
end
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
describe "append_item" do
|
|
223
|
+
it "should take a format_string, read_conversion, write_conversion, and id_value" do
|
|
224
|
+
p = Packet.new("tgt","pkt")
|
|
225
|
+
rc = GenericConversion.new("value / 2")
|
|
226
|
+
wc = GenericConversion.new("value * 2")
|
|
227
|
+
p.append_item("item",32,:FLOAT,nil,:BIG_ENDIAN,:ERROR,"%5.1f",rc,wc,5)
|
|
228
|
+
i = p.get_item("ITEM")
|
|
229
|
+
i.format_string.should eql "%5.1f"
|
|
230
|
+
i.read_conversion.to_s.should eql rc.to_s
|
|
231
|
+
i.write_conversion.to_s.should eql wc.to_s
|
|
232
|
+
i.id_value.should eql 5.0
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
it "should initialize format_string, read_conversion, write_conversion, and id_value to nil" do
|
|
236
|
+
p = Packet.new("tgt","pkt")
|
|
237
|
+
p.append_item("item",32,:FLOAT)
|
|
238
|
+
i = p.get_item("ITEM")
|
|
239
|
+
i.format_string.should be_nil
|
|
240
|
+
i.read_conversion.should be_nil
|
|
241
|
+
i.write_conversion.should be_nil
|
|
242
|
+
i.id_value.should be_nil
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
describe "get_item" do
|
|
247
|
+
it "should complain if an item doesn't exist" do
|
|
248
|
+
p = Packet.new("tgt","pkt")
|
|
249
|
+
expect { p.get_item("test") }.to raise_error(RuntimeError, "Packet item 'TGT PKT TEST' does not exist")
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
describe "read and read_item" do
|
|
254
|
+
before (:each) do
|
|
255
|
+
@p = Packet.new("tgt","pkt")
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
it "should complain about unknown value_type" do
|
|
259
|
+
@p.append_item("item",32,:UINT)
|
|
260
|
+
i = @p.get_item("ITEM")
|
|
261
|
+
expect { @p.read("ITEM", :MINE, "\x01\x02\x03\x04") }.to raise_error(ArgumentError, "Unknown value type on read: MINE")
|
|
262
|
+
expect { @p.read_item(i, :MINE, "\x01\x02\x03\x04") }.to raise_error(ArgumentError, "Unknown value type on read: MINE")
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
it "should read the RAW value" do
|
|
266
|
+
@p.append_item("item",32,:UINT)
|
|
267
|
+
i = @p.get_item("ITEM")
|
|
268
|
+
@p.read("ITEM", :RAW, "\x01\x02\x03\x04").should eql 0x01020304
|
|
269
|
+
@p.read_item(i, :RAW, "\x01\x02\x03\x04").should eql 0x01020304
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
it "should read the CONVERTED value" do
|
|
273
|
+
@p.append_item("item",8,:UINT)
|
|
274
|
+
i = @p.get_item("ITEM")
|
|
275
|
+
@p.read("ITEM", :CONVERTED, "\x02").should eql 2
|
|
276
|
+
@p.read_item(i, :CONVERTED, "\x02").should eql 2
|
|
277
|
+
i.read_conversion = GenericConversion.new("value / 2")
|
|
278
|
+
@p.read("ITEM", :CONVERTED, "\x02").should eql 1
|
|
279
|
+
@p.read_item(i, :CONVERTED, "\x02").should eql 1
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
it "should read the CONVERTED value with states" do
|
|
283
|
+
@p.append_item("item",8,:UINT)
|
|
284
|
+
i = @p.get_item("ITEM")
|
|
285
|
+
i.states = {"TRUE"=>1, "FALSE"=>2}
|
|
286
|
+
@p.read("ITEM", :CONVERTED, "\x00").should eql 0
|
|
287
|
+
@p.read_item(i, :CONVERTED, "\x00").should eql 0
|
|
288
|
+
@p.read("ITEM", :CONVERTED, "\x01").should eql "TRUE"
|
|
289
|
+
@p.read_item(i, :CONVERTED, "\x01").should eql "TRUE"
|
|
290
|
+
i.read_conversion = GenericConversion.new("value / 2")
|
|
291
|
+
@p.read("ITEM", :CONVERTED, "\x04").should eql "FALSE"
|
|
292
|
+
@p.read_item(i, :CONVERTED, "\x04").should eql "FALSE"
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
it "should read the FORMATTED value" do
|
|
296
|
+
@p.append_item("item",8,:UINT)
|
|
297
|
+
i = @p.get_item("ITEM")
|
|
298
|
+
@p.read("ITEM", :FORMATTED, "\x02").should eql "2"
|
|
299
|
+
@p.read_item(i, :FORMATTED, "\x02").should eql "2"
|
|
300
|
+
i.format_string = "0x%x"
|
|
301
|
+
@p.read("ITEM", :FORMATTED, "\x02").should eql "0x2"
|
|
302
|
+
@p.read_item(i, :FORMATTED, "\x02").should eql "0x2"
|
|
303
|
+
i.states = {"TRUE"=>1, "FALSE"=>2}
|
|
304
|
+
@p.read("ITEM", :FORMATTED, "\x01").should eql "TRUE"
|
|
305
|
+
@p.read_item(i, :FORMATTED, "\x01").should eql "TRUE"
|
|
306
|
+
@p.read("ITEM", :FORMATTED, "\x02").should eql "FALSE"
|
|
307
|
+
@p.read_item(i, :FORMATTED, "\x02").should eql "FALSE"
|
|
308
|
+
@p.read("ITEM", :FORMATTED, "\x04").should eql "0x4"
|
|
309
|
+
@p.read_item(i, :FORMATTED, "\x04").should eql "0x4"
|
|
310
|
+
i.read_conversion = GenericConversion.new("value / 2")
|
|
311
|
+
@p.read("ITEM", :FORMATTED, "\x04").should eql "FALSE"
|
|
312
|
+
@p.read_item(i, :FORMATTED, "\x04").should eql "FALSE"
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
it "should read the WITH_UNITS value" do
|
|
316
|
+
@p.append_item("item",8,:UINT)
|
|
317
|
+
i = @p.get_item("ITEM")
|
|
318
|
+
i.units = "V"
|
|
319
|
+
@p.read("ITEM", :WITH_UNITS, "\x02").should eql "2 V"
|
|
320
|
+
@p.read_item(i, :WITH_UNITS, "\x02").should eql "2 V"
|
|
321
|
+
i.format_string = "0x%x"
|
|
322
|
+
@p.read("ITEM", :WITH_UNITS, "\x02").should eql "0x2 V"
|
|
323
|
+
@p.read_item(i, :WITH_UNITS, "\x02").should eql "0x2 V"
|
|
324
|
+
i.states = {"TRUE"=>1, "FALSE"=>2}
|
|
325
|
+
@p.read("ITEM", :WITH_UNITS, "\x01").should eql "TRUE"
|
|
326
|
+
@p.read_item(i, :WITH_UNITS, "\x01").should eql "TRUE"
|
|
327
|
+
@p.read("ITEM", :WITH_UNITS, "\x02").should eql "FALSE"
|
|
328
|
+
@p.read_item(i, :WITH_UNITS, "\x02").should eql "FALSE"
|
|
329
|
+
@p.read("ITEM", :WITH_UNITS, "\x04").should eql "0x4 V"
|
|
330
|
+
@p.read_item(i, :WITH_UNITS, "\x04").should eql "0x4 V"
|
|
331
|
+
i.read_conversion = GenericConversion.new("value / 2")
|
|
332
|
+
@p.read("ITEM", :WITH_UNITS, "\x04").should eql "FALSE"
|
|
333
|
+
@p.read_item(i, :WITH_UNITS, "\x04").should eql "FALSE"
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
it "should read the WITH_UNITS array value" do
|
|
337
|
+
@p.append_item("item",8,:UINT, 16)
|
|
338
|
+
i = @p.get_item("ITEM")
|
|
339
|
+
i.units = "V"
|
|
340
|
+
@p.read("ITEM", :WITH_UNITS, "\x01\x02").should eql ["1 V", "2 V"]
|
|
341
|
+
@p.read_item(i, :WITH_UNITS, "\x01\x02").should eql ["1 V", "2 V"]
|
|
342
|
+
i.format_string = "0x%x"
|
|
343
|
+
@p.read("ITEM", :WITH_UNITS, "\x01\x02").should eql ["0x1 V", "0x2 V"]
|
|
344
|
+
@p.read_item(i, :WITH_UNITS, "\x01\x02").should eql ["0x1 V", "0x2 V"]
|
|
345
|
+
i.states = {"TRUE"=>1, "FALSE"=>2}
|
|
346
|
+
@p.read("ITEM", :WITH_UNITS, "\x01\x02").should eql ["TRUE", "FALSE"]
|
|
347
|
+
@p.read_item(i, :WITH_UNITS, "\x01\x02").should eql ["TRUE", "FALSE"]
|
|
348
|
+
@p.read("ITEM", :WITH_UNITS, "\x00\x01").should eql ["0x0 V", "TRUE"]
|
|
349
|
+
@p.read_item(i, :WITH_UNITS, "\x00\x01").should eql ["0x0 V", "TRUE"]
|
|
350
|
+
@p.read("ITEM", :WITH_UNITS, "\x02\x03").should eql ["FALSE", "0x3 V"]
|
|
351
|
+
@p.read_item(i, :WITH_UNITS, "\x02\x03").should eql ["FALSE", "0x3 V"]
|
|
352
|
+
@p.read("ITEM", :WITH_UNITS, "\x04").should eql ["0x4 V"]
|
|
353
|
+
@p.read_item(i, :WITH_UNITS, "\x04").should eql ["0x4 V"]
|
|
354
|
+
@p.read("ITEM", :WITH_UNITS, "\x04").should eql ["0x4 V"]
|
|
355
|
+
@p.read_item(i, :WITH_UNITS, "\x04").should eql ["0x4 V"]
|
|
356
|
+
i.read_conversion = GenericConversion.new("value / 2")
|
|
357
|
+
@p.read("ITEM", :WITH_UNITS, "\x02\x04").should eql ["TRUE","FALSE"]
|
|
358
|
+
@p.read_item(i, :WITH_UNITS, "\x02\x04").should eql ["TRUE","FALSE"]
|
|
359
|
+
@p.read("ITEM", :WITH_UNITS, "\x08").should eql ["0x4 V"]
|
|
360
|
+
@p.read_item(i, :WITH_UNITS, "\x08").should eql ["0x4 V"]
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
describe "write and write_item" do
|
|
365
|
+
before (:each) do
|
|
366
|
+
@p = Packet.new("tgt","pkt")
|
|
367
|
+
@buffer = "\x00\x00\x00\x00"
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
it "should complain about unknown value_type" do
|
|
371
|
+
@p.append_item("item",32,:UINT)
|
|
372
|
+
i = @p.get_item("ITEM")
|
|
373
|
+
expect { @p.write("ITEM", 0, :MINE) }.to raise_error(ArgumentError, "Unknown value type on write: MINE")
|
|
374
|
+
expect { @p.write_item(i, 0, :MINE) }.to raise_error(ArgumentError, "Unknown value type on write: MINE")
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
it "should write the RAW value" do
|
|
378
|
+
@p.append_item("item",32,:UINT)
|
|
379
|
+
i = @p.get_item("ITEM")
|
|
380
|
+
@p.write("ITEM", 0x01020304, :RAW, @buffer)
|
|
381
|
+
@buffer.should eql "\x01\x02\x03\x04"
|
|
382
|
+
@p.write_item(i, 0x05060708, :RAW, @buffer)
|
|
383
|
+
@buffer.should eql "\x05\x06\x07\x08"
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
it "should write the CONVERTED value" do
|
|
387
|
+
@p.append_item("item",8,:UINT)
|
|
388
|
+
i = @p.get_item("ITEM")
|
|
389
|
+
@p.write("ITEM", 1, :CONVERTED, @buffer)
|
|
390
|
+
@buffer.should eql "\x01\x00\x00\x00"
|
|
391
|
+
@p.write_item(i, 2, :CONVERTED, @buffer)
|
|
392
|
+
@buffer.should eql "\x02\x00\x00\x00"
|
|
393
|
+
i.write_conversion = GenericConversion.new("value / 2")
|
|
394
|
+
@p.write("ITEM", 1, :CONVERTED, @buffer)
|
|
395
|
+
@buffer.should eql "\x00\x00\x00\x00"
|
|
396
|
+
@p.write_item(i, 2, :CONVERTED, @buffer)
|
|
397
|
+
@buffer.should eql "\x01\x00\x00\x00"
|
|
398
|
+
end
|
|
399
|
+
|
|
400
|
+
it "should write the CONVERTED value with states" do
|
|
401
|
+
@p.append_item("item",8,:UINT)
|
|
402
|
+
i = @p.get_item("ITEM")
|
|
403
|
+
i.states = {"TRUE"=>1, "FALSE"=>2}
|
|
404
|
+
@p.write("ITEM", 3, :CONVERTED, @buffer)
|
|
405
|
+
@buffer.should eql "\x03\x00\x00\x00"
|
|
406
|
+
@p.write_item(i, 4, :CONVERTED, @buffer)
|
|
407
|
+
@buffer.should eql "\x04\x00\x00\x00"
|
|
408
|
+
@p.write("ITEM", "TRUE", :CONVERTED, @buffer)
|
|
409
|
+
@buffer.should eql "\x01\x00\x00\x00"
|
|
410
|
+
@p.write_item(i, "FALSE", :CONVERTED, @buffer)
|
|
411
|
+
@buffer.should eql "\x02\x00\x00\x00"
|
|
412
|
+
i.write_conversion = GenericConversion.new("value / 2")
|
|
413
|
+
@p.write("ITEM", 4, :CONVERTED, @buffer)
|
|
414
|
+
@buffer.should eql "\x02\x00\x00\x00"
|
|
415
|
+
@p.write("ITEM", "TRUE", :CONVERTED, @buffer)
|
|
416
|
+
@buffer.should eql "\x00\x00\x00\x00"
|
|
417
|
+
@p.write_item(i, "FALSE", :CONVERTED, @buffer)
|
|
418
|
+
@buffer.should eql "\x01\x00\x00\x00"
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
it "should complain about the FORMATTED value_type" do
|
|
422
|
+
@p.append_item("item",8,:UINT)
|
|
423
|
+
i = @p.get_item("ITEM")
|
|
424
|
+
expect { @p.write("ITEM", 3, :FORMATTED, @buffer) }.to raise_error(ArgumentError, "Invalid value type on write: FORMATTED")
|
|
425
|
+
expect { @p.write_item(i, 3, :FORMATTED, @buffer) }.to raise_error(ArgumentError, "Invalid value type on write: FORMATTED")
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
it "should complain about the WITH_UNITS value_type" do
|
|
429
|
+
@p.append_item("item",8,:UINT)
|
|
430
|
+
i = @p.get_item("ITEM")
|
|
431
|
+
expect { @p.write("ITEM", 3, :WITH_UNITS, @buffer) }.to raise_error(ArgumentError, "Invalid value type on write: WITH_UNITS")
|
|
432
|
+
expect { @p.write_item(i, 3, :WITH_UNITS, @buffer) }.to raise_error(ArgumentError, "Invalid value type on write: WITH_UNITS")
|
|
433
|
+
end
|
|
434
|
+
end
|
|
435
|
+
|
|
436
|
+
describe "read_all" do
|
|
437
|
+
it "should default to read all CONVERTED items" do
|
|
438
|
+
p = Packet.new("tgt","pkt")
|
|
439
|
+
p.append_item("test1", 8, :UINT, 16)
|
|
440
|
+
p.append_item("test2", 16, :UINT)
|
|
441
|
+
i = p.get_item("TEST2")
|
|
442
|
+
i.states = {"TRUE"=>0x0304}
|
|
443
|
+
p.append_item("test3", 32, :UINT)
|
|
444
|
+
i = p.get_item("TEST3")
|
|
445
|
+
i.read_conversion = GenericConversion.new("value / 2")
|
|
446
|
+
|
|
447
|
+
buffer = "\x01\x02\x03\x04\x04\x06\x08\x0A"
|
|
448
|
+
p.buffer = buffer
|
|
449
|
+
vals = p.read_all
|
|
450
|
+
vals[0][0].should eql "TEST1"
|
|
451
|
+
vals[1][0].should eql "TEST2"
|
|
452
|
+
vals[2][0].should eql "TEST3"
|
|
453
|
+
vals[0][1].should eql [1,2]
|
|
454
|
+
vals[1][1].should eql "TRUE"
|
|
455
|
+
vals[2][1].should eql 0x02030405
|
|
456
|
+
end
|
|
457
|
+
end
|
|
458
|
+
|
|
459
|
+
describe "read_all_with_limits_states" do
|
|
460
|
+
it "should return an array of items with their limit states" do
|
|
461
|
+
p = Packet.new("tgt","pkt")
|
|
462
|
+
p.append_item("test1", 8, :UINT)
|
|
463
|
+
i = p.get_item("TEST1")
|
|
464
|
+
i.states = {"TRUE"=>1,"FALSE"=>0}
|
|
465
|
+
i.state_colors = {"TRUE"=>:GREEN,"FALSE"=>:RED}
|
|
466
|
+
p.write("TEST1",0)
|
|
467
|
+
p.enable_limits("TEST1")
|
|
468
|
+
p.append_item("test2", 16, :UINT)
|
|
469
|
+
i = p.get_item("TEST2")
|
|
470
|
+
i.limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
471
|
+
p.write("TEST2",3)
|
|
472
|
+
p.enable_limits("TEST2")
|
|
473
|
+
p.update_limits_items_cache
|
|
474
|
+
p.check_limits
|
|
475
|
+
|
|
476
|
+
vals = p.read_all_with_limits_states
|
|
477
|
+
vals[0][0].should eql "TEST1"
|
|
478
|
+
vals[1][0].should eql "TEST2"
|
|
479
|
+
vals[0][1].should eql "FALSE"
|
|
480
|
+
vals[1][1].should eql 3
|
|
481
|
+
vals[0][2].should eql :RED
|
|
482
|
+
vals[1][2].should eql :GREEN
|
|
483
|
+
end
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
describe "formatted" do
|
|
487
|
+
it "should print out all the items and CONVERTED values" do
|
|
488
|
+
p = Packet.new("tgt","pkt")
|
|
489
|
+
p.append_item("test1", 8, :UINT, 16)
|
|
490
|
+
p.write("test1", [1,2])
|
|
491
|
+
p.append_item("test2", 16, :UINT)
|
|
492
|
+
i = p.get_item("TEST2")
|
|
493
|
+
i.states = {"TRUE"=>0x0304}
|
|
494
|
+
p.write("test2", 0x0304)
|
|
495
|
+
p.append_item("test3", 32, :UINT)
|
|
496
|
+
i = p.get_item("TEST3")
|
|
497
|
+
i.read_conversion = GenericConversion.new("value / 2")
|
|
498
|
+
p.write("test3", 0x0406080A)
|
|
499
|
+
p.formatted.should include("TEST1: [1, 2]")
|
|
500
|
+
p.formatted.should include("TEST2: TRUE")
|
|
501
|
+
p.formatted.should include("TEST3: #{0x02030405}")
|
|
502
|
+
end
|
|
503
|
+
end
|
|
504
|
+
|
|
505
|
+
describe "identify?" do
|
|
506
|
+
it "should identify a buffer based on id_items" do
|
|
507
|
+
p = Packet.new("tgt","pkt")
|
|
508
|
+
p.append_item("item1",8,:UINT)
|
|
509
|
+
p.append_item("item2",16,:UINT,nil,:BIG_ENDIAN,:ERROR,nil,nil,nil,5)
|
|
510
|
+
p.append_item("item3",32,:UINT)
|
|
511
|
+
p.identify?("\x00\x00\x05\x01\x02\x03\x04").should be_truthy
|
|
512
|
+
p.identify?("\x00\x00\x04\x01\x02\x03\x04").should be_falsey
|
|
513
|
+
p.identify?("\x00").should be_falsey
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
it "should identify if the buffer is too short" do
|
|
517
|
+
p = Packet.new("tgt","pkt")
|
|
518
|
+
p.append_item("item1",8,:UINT)
|
|
519
|
+
p.append_item("item2",16,:UINT,nil,:BIG_ENDIAN,:ERROR,nil,nil,nil,5)
|
|
520
|
+
p.append_item("item3",32,:UINT)
|
|
521
|
+
p.identify?("\x00\x00\x05\x01\x02\x03").should be_truthy
|
|
522
|
+
end
|
|
523
|
+
|
|
524
|
+
it "should identify if the buffer is too long" do
|
|
525
|
+
p = Packet.new("tgt","pkt")
|
|
526
|
+
p.append_item("item1",8,:UINT)
|
|
527
|
+
p.append_item("item2",16,:UINT,nil,:BIG_ENDIAN,:ERROR,nil,nil,nil,5)
|
|
528
|
+
p.append_item("item3",32,:UINT)
|
|
529
|
+
p.identify?("\x00\x00\x05\x01\x02\x03\x04\x05").should be_truthy
|
|
530
|
+
end
|
|
531
|
+
end
|
|
532
|
+
|
|
533
|
+
describe "identified?" do
|
|
534
|
+
it "should return true if the target name and packet name are set" do
|
|
535
|
+
Packet.new('TGT',nil).identified?.should be_falsey
|
|
536
|
+
Packet.new(nil,'PKT').identified?.should be_falsey
|
|
537
|
+
Packet.new('TGT','PKT').identified?.should be_truthy
|
|
538
|
+
end
|
|
539
|
+
end
|
|
540
|
+
|
|
541
|
+
describe "restore_defaults" do
|
|
542
|
+
it "should write all the items back to their default values" do
|
|
543
|
+
p = Packet.new("tgt","pkt")
|
|
544
|
+
p.append_item("test1", 8, :UINT, 16)
|
|
545
|
+
i = p.get_item("TEST1")
|
|
546
|
+
i.default = [3,4]
|
|
547
|
+
p.write("test1", [1,2])
|
|
548
|
+
p.append_item("test2", 16, :UINT)
|
|
549
|
+
i = p.get_item("TEST2")
|
|
550
|
+
i.default = 0x0102
|
|
551
|
+
i.states = {"TRUE"=>0x0304}
|
|
552
|
+
p.write("test2", 0x0304)
|
|
553
|
+
p.append_item("test3", 32, :UINT)
|
|
554
|
+
i = p.get_item("TEST3")
|
|
555
|
+
i.default = 0x02030405
|
|
556
|
+
i.write_conversion = GenericConversion.new("value * 2")
|
|
557
|
+
p.write("test3", 0x01020304)
|
|
558
|
+
p.buffer.should eql "\x01\x02\x03\x04\x02\x04\x06\x08"
|
|
559
|
+
p.restore_defaults
|
|
560
|
+
p.buffer.should eql "\x03\x04\x01\x02\x04\x06\x08\x0A"
|
|
561
|
+
end
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
describe "enable_limits" do
|
|
565
|
+
it "should enable limits on each packet item" do
|
|
566
|
+
p = Packet.new("tgt","pkt")
|
|
567
|
+
p.append_item("test1", 8, :UINT, 16)
|
|
568
|
+
p.append_item("test2", 16, :UINT)
|
|
569
|
+
p.get_item("TEST1").limits.enabled.should be_falsey
|
|
570
|
+
p.get_item("TEST2").limits.enabled.should be_falsey
|
|
571
|
+
p.enable_limits("TEST1")
|
|
572
|
+
p.get_item("TEST1").limits.enabled.should be_truthy
|
|
573
|
+
p.get_item("TEST2").limits.enabled.should be_falsey
|
|
574
|
+
p.enable_limits("TEST2")
|
|
575
|
+
p.get_item("TEST1").limits.enabled.should be_truthy
|
|
576
|
+
p.get_item("TEST2").limits.enabled.should be_truthy
|
|
577
|
+
end
|
|
578
|
+
end
|
|
579
|
+
|
|
580
|
+
describe "disable_limits" do
|
|
581
|
+
it "should disable limits on each packet item" do
|
|
582
|
+
p = Packet.new("tgt","pkt")
|
|
583
|
+
p.append_item("test1", 8, :UINT)
|
|
584
|
+
p.append_item("test2", 16, :UINT)
|
|
585
|
+
p.enable_limits("TEST1")
|
|
586
|
+
p.enable_limits("TEST2")
|
|
587
|
+
p.get_item("TEST1").limits.enabled.should be_truthy
|
|
588
|
+
p.get_item("TEST2").limits.enabled.should be_truthy
|
|
589
|
+
p.disable_limits("TEST1")
|
|
590
|
+
p.get_item("TEST1").limits.enabled.should be_falsey
|
|
591
|
+
p.get_item("TEST2").limits.enabled.should be_truthy
|
|
592
|
+
p.disable_limits("TEST2")
|
|
593
|
+
p.get_item("TEST1").limits.enabled.should be_falsey
|
|
594
|
+
p.get_item("TEST2").limits.enabled.should be_falsey
|
|
595
|
+
end
|
|
596
|
+
|
|
597
|
+
it "should call the limits_change_callback for all non STALE items" do
|
|
598
|
+
p = Packet.new("tgt","pkt")
|
|
599
|
+
p.append_item("test1", 8, :UINT)
|
|
600
|
+
p.get_item("TEST1").limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
601
|
+
p.append_item("test2", 16, :UINT)
|
|
602
|
+
p.get_item("TEST2").limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
603
|
+
p.write("TEST1",3)
|
|
604
|
+
p.write("TEST2",3)
|
|
605
|
+
p.enable_limits("TEST1")
|
|
606
|
+
p.enable_limits("TEST2")
|
|
607
|
+
p.update_limits_items_cache
|
|
608
|
+
|
|
609
|
+
callback = double("callback", :call => true)
|
|
610
|
+
p.limits_change_callback = callback
|
|
611
|
+
expect(callback).to receive(:call).with(p, p.get_item("TEST1"),:GREEN,nil,false)
|
|
612
|
+
expect(callback).to receive(:call).with(p, p.get_item("TEST2"),:GREEN,nil,false)
|
|
613
|
+
p.check_limits
|
|
614
|
+
p.disable_limits("TEST1")
|
|
615
|
+
p.disable_limits("TEST2")
|
|
616
|
+
p.get_item("TEST1").limits.enabled.should be_falsey
|
|
617
|
+
p.get_item("TEST2").limits.enabled.should be_falsey
|
|
618
|
+
end
|
|
619
|
+
end
|
|
620
|
+
|
|
621
|
+
describe "limits_items" do
|
|
622
|
+
it "should return all items with limits" do
|
|
623
|
+
p = Packet.new("tgt","pkt")
|
|
624
|
+
p.append_item("test1", 8, :UINT)
|
|
625
|
+
p.enable_limits("TEST1")
|
|
626
|
+
p.append_item("test2", 16, :UINT)
|
|
627
|
+
p.enable_limits("TEST2")
|
|
628
|
+
p.limits_items.should eql []
|
|
629
|
+
|
|
630
|
+
test1 = p.get_item("TEST1")
|
|
631
|
+
test1.limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
632
|
+
p.update_limits_items_cache
|
|
633
|
+
p.limits_items.should eql [test1]
|
|
634
|
+
test2 = p.get_item("TEST2")
|
|
635
|
+
test2.limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
636
|
+
p.update_limits_items_cache
|
|
637
|
+
p.limits_items.should eql [test1, test2]
|
|
638
|
+
end
|
|
639
|
+
end
|
|
640
|
+
|
|
641
|
+
describe "out_of_limits" do
|
|
642
|
+
it "should return an array indicating all items out of limits" do
|
|
643
|
+
p = Packet.new("tgt","pkt")
|
|
644
|
+
p.append_item("test1", 8, :UINT)
|
|
645
|
+
p.get_item("TEST1").limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
646
|
+
p.enable_limits("TEST1")
|
|
647
|
+
p.write("TEST1",3)
|
|
648
|
+
p.append_item("test2", 16, :UINT)
|
|
649
|
+
p.get_item("TEST2").limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
650
|
+
p.write("TEST2",3)
|
|
651
|
+
p.enable_limits("TEST2")
|
|
652
|
+
p.update_limits_items_cache
|
|
653
|
+
p.check_limits
|
|
654
|
+
p.out_of_limits.should eql []
|
|
655
|
+
|
|
656
|
+
p.write("TEST1",6)
|
|
657
|
+
p.check_limits
|
|
658
|
+
p.out_of_limits.should eql [["TGT","PKT","TEST1",:RED_HIGH]]
|
|
659
|
+
p.write("TEST2",2)
|
|
660
|
+
p.check_limits
|
|
661
|
+
p.out_of_limits.should eql [["TGT","PKT","TEST1",:RED_HIGH],["TGT","PKT","TEST2",:YELLOW_LOW]]
|
|
662
|
+
end
|
|
663
|
+
end
|
|
664
|
+
|
|
665
|
+
describe "set_all_limits_states" do
|
|
666
|
+
it "should set all limits states to the given state" do
|
|
667
|
+
p = Packet.new("tgt","pkt")
|
|
668
|
+
p.append_item("test1", 8, :UINT)
|
|
669
|
+
p.get_item("TEST1").limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
670
|
+
p.enable_limits("TEST1")
|
|
671
|
+
p.append_item("test2", 16, :UINT)
|
|
672
|
+
p.get_item("TEST2").limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
673
|
+
p.enable_limits("TEST2")
|
|
674
|
+
p.update_limits_items_cache
|
|
675
|
+
p.out_of_limits.should eql []
|
|
676
|
+
|
|
677
|
+
PacketItemLimits::OUT_OF_LIMITS_STATES.each do |state|
|
|
678
|
+
p.set_all_limits_states(state)
|
|
679
|
+
p.out_of_limits.should eql [["TGT","PKT","TEST1",state],["TGT","PKT","TEST2",state]]
|
|
680
|
+
end
|
|
681
|
+
end
|
|
682
|
+
end
|
|
683
|
+
|
|
684
|
+
describe "check_limits" do
|
|
685
|
+
before(:each) do
|
|
686
|
+
@p = Packet.new("tgt","pkt")
|
|
687
|
+
@p.append_item("test1", 8, :UINT)
|
|
688
|
+
@p.append_item("test2", 16, :UINT)
|
|
689
|
+
@p.append_item("test3", 32, :FLOAT)
|
|
690
|
+
end
|
|
691
|
+
|
|
692
|
+
it "should set clear the stale flag" do
|
|
693
|
+
@p.stale.should be_truthy
|
|
694
|
+
@p.check_limits
|
|
695
|
+
@p.stale.should be_falsey
|
|
696
|
+
end
|
|
697
|
+
|
|
698
|
+
it "should not call the limits_change_callback if limits are disabled" do
|
|
699
|
+
@p.get_item("TEST1").limits.enabled.should be_falsey
|
|
700
|
+
@p.get_item("TEST2").limits.enabled.should be_falsey
|
|
701
|
+
callback = double("callback")
|
|
702
|
+
allow(callback).to receive(:call)
|
|
703
|
+
@p.limits_change_callback = callback
|
|
704
|
+
@p.check_limits
|
|
705
|
+
expect(callback).to_not receive(:call)
|
|
706
|
+
end
|
|
707
|
+
|
|
708
|
+
context "with states" do
|
|
709
|
+
it "should call the limits_change_callback" do
|
|
710
|
+
test1 = @p.get_item("TEST1")
|
|
711
|
+
test1.limits.enabled.should be_falsey
|
|
712
|
+
test1.states = {"TRUE"=>1,"FALSE"=>0}
|
|
713
|
+
test1.state_colors = {"TRUE"=>:GREEN,"FALSE"=>:RED}
|
|
714
|
+
@p.write("TEST1", 0)
|
|
715
|
+
@p.enable_limits("TEST1")
|
|
716
|
+
test2 = @p.get_item("TEST2")
|
|
717
|
+
test2.limits.enabled.should be_falsey
|
|
718
|
+
test2.states = {"TRUE"=>1,"FALSE"=>0}
|
|
719
|
+
test2.state_colors = {"TRUE"=>:RED,"FALSE"=>:GREEN}
|
|
720
|
+
@p.write("TEST2", 0)
|
|
721
|
+
@p.enable_limits("TEST2")
|
|
722
|
+
@p.update_limits_items_cache
|
|
723
|
+
|
|
724
|
+
# Mock the callback so we can see if it is called properly
|
|
725
|
+
callback = double("callback", :call => true)
|
|
726
|
+
@p.limits_change_callback = callback
|
|
727
|
+
|
|
728
|
+
# Check the limits for the first time, TEST1 should be :RED and TEST2
|
|
729
|
+
# should be :GREEN
|
|
730
|
+
expect(callback).to receive(:call).once.with(@p, test1,nil,"FALSE",true)
|
|
731
|
+
@p.check_limits
|
|
732
|
+
|
|
733
|
+
# Change the TEST2 state to :RED, we were previously :GREEN
|
|
734
|
+
@p.write("TEST2", 1)
|
|
735
|
+
expect(callback).to receive(:call).once.with(@p, test2,:GREEN,"TRUE",true)
|
|
736
|
+
@p.check_limits
|
|
737
|
+
|
|
738
|
+
# Change the TEST2 value to something that doesn't map to a state
|
|
739
|
+
@p.write("TEST2", 2)
|
|
740
|
+
expect(callback).to receive(:call).once.with(@p, test2,:RED,2,false)
|
|
741
|
+
@p.check_limits
|
|
742
|
+
end
|
|
743
|
+
end
|
|
744
|
+
|
|
745
|
+
context "with values" do
|
|
746
|
+
before(:each) do
|
|
747
|
+
@test1 = @p.get_item("TEST1")
|
|
748
|
+
@test1.limits.enabled.should be_falsey
|
|
749
|
+
@test1.limits.values = {:DEFAULT=>[1,2,4,5]} # red yellow
|
|
750
|
+
@p.enable_limits("TEST1")
|
|
751
|
+
|
|
752
|
+
@test2 = @p.get_item("TEST2")
|
|
753
|
+
@test2.limits.enabled.should be_falsey
|
|
754
|
+
@test2.limits.values = {:DEFAULT=>[1,2,6,7,3,5]} # red yellow and blue
|
|
755
|
+
@p.enable_limits("TEST2")
|
|
756
|
+
|
|
757
|
+
@test3 = @p.get_item("TEST3")
|
|
758
|
+
@test3.limits.enabled.should be_falsey
|
|
759
|
+
@test3.limits.values = {:DEFAULT=>[1,1.5,2.5,3]} # red yellow
|
|
760
|
+
@p.enable_limits("TEST3")
|
|
761
|
+
@p.update_limits_items_cache
|
|
762
|
+
|
|
763
|
+
# Mock the callback so we can see if it is called properly
|
|
764
|
+
@callback = double("callback", :call => true)
|
|
765
|
+
@p.limits_change_callback = @callback
|
|
766
|
+
end
|
|
767
|
+
|
|
768
|
+
it "should detect initial low states" do
|
|
769
|
+
@p.write("TEST1", 0)
|
|
770
|
+
@p.write("TEST2", 3)
|
|
771
|
+
@p.write("TEST3", 1.25)
|
|
772
|
+
@p.check_limits
|
|
773
|
+
@p.get_item("TEST1").limits.state.should eql :RED_LOW
|
|
774
|
+
@p.get_item("TEST2").limits.state.should eql :GREEN_LOW
|
|
775
|
+
@p.get_item("TEST3").limits.state.should eql :YELLOW_LOW
|
|
776
|
+
end
|
|
777
|
+
|
|
778
|
+
it "should detect initial high states" do
|
|
779
|
+
@p.write("TEST1", 6)
|
|
780
|
+
@p.write("TEST2", 5)
|
|
781
|
+
@p.write("TEST3", 2.75)
|
|
782
|
+
@p.check_limits
|
|
783
|
+
@p.get_item("TEST1").limits.state.should eql :RED_HIGH
|
|
784
|
+
@p.get_item("TEST2").limits.state.should eql :GREEN_HIGH
|
|
785
|
+
@p.get_item("TEST3").limits.state.should eql :YELLOW_HIGH
|
|
786
|
+
end
|
|
787
|
+
|
|
788
|
+
it "should detect initial middle states" do
|
|
789
|
+
@p.write("TEST1", 3)
|
|
790
|
+
@p.write("TEST2", 4)
|
|
791
|
+
@p.write("TEST3", 2.0)
|
|
792
|
+
@p.check_limits
|
|
793
|
+
@p.get_item("TEST1").limits.state.should eql :GREEN
|
|
794
|
+
@p.get_item("TEST2").limits.state.should eql :BLUE
|
|
795
|
+
@p.get_item("TEST3").limits.state.should eql :GREEN
|
|
796
|
+
end
|
|
797
|
+
|
|
798
|
+
it "should clear persistence when initial state is nil" do
|
|
799
|
+
@p.get_item("TEST1").limits.persistence_count = 2
|
|
800
|
+
@p.get_item("TEST2").limits.persistence_count = 3
|
|
801
|
+
@p.get_item("TEST3").limits.persistence_count = 4
|
|
802
|
+
@p.check_limits
|
|
803
|
+
@p.get_item("TEST1").limits.persistence_count.should eql 0
|
|
804
|
+
@p.get_item("TEST2").limits.persistence_count.should eql 0
|
|
805
|
+
@p.get_item("TEST3").limits.persistence_count.should eql 0
|
|
806
|
+
end
|
|
807
|
+
|
|
808
|
+
context "when calling the limits_change_callback" do
|
|
809
|
+
it "should initially call only for out of limits" do
|
|
810
|
+
@p.write("TEST1", 0)
|
|
811
|
+
@p.write("TEST2", 4)
|
|
812
|
+
@p.write("TEST3", 1.25)
|
|
813
|
+
|
|
814
|
+
# Check the limits for the first time, TEST1 should be :RED_LOW, TEST2
|
|
815
|
+
# should be :BLUE, TEST3 should be YELLOW_LOW
|
|
816
|
+
expect(@callback).to receive(:call).with(@p, @test1,nil,0,true)
|
|
817
|
+
expect(@callback).to receive(:call).with(@p, @test3,nil,1.25,true)
|
|
818
|
+
@p.check_limits
|
|
819
|
+
end
|
|
820
|
+
|
|
821
|
+
it "should call when limits change states" do
|
|
822
|
+
@p.write("TEST1", 0)
|
|
823
|
+
@p.write("TEST2", 4)
|
|
824
|
+
@p.write("TEST3", 1.25)
|
|
825
|
+
@p.check_limits
|
|
826
|
+
|
|
827
|
+
# Make TEST2 be GREEN_LOW, we were previously :BLUE
|
|
828
|
+
@p.write("TEST2", 3)
|
|
829
|
+
expect(@callback).to receive(:call).once.with(@p, @test2,:BLUE,3,true)
|
|
830
|
+
@p.check_limits
|
|
831
|
+
end
|
|
832
|
+
|
|
833
|
+
it "should call only when persistence is achieved" do
|
|
834
|
+
# First establish the green state when coming from nil
|
|
835
|
+
@p.get_item("TEST1").limits.persistence_setting = 1
|
|
836
|
+
@p.get_item("TEST2").limits.persistence_setting = 1
|
|
837
|
+
@p.get_item("TEST3").limits.persistence_setting = 1
|
|
838
|
+
@p.write("TEST1", 3)
|
|
839
|
+
@p.write("TEST2", 4)
|
|
840
|
+
@p.write("TEST3", 2.0)
|
|
841
|
+
expect(@callback).to receive(:call).with(@p, @test1,nil,3,true)
|
|
842
|
+
expect(@callback).to receive(:call).with(@p, @test2,nil,4,true)
|
|
843
|
+
expect(@callback).to receive(:call).with(@p, @test3,nil,2.0,true)
|
|
844
|
+
@p.check_limits
|
|
845
|
+
@test1.limits.state.should eql :GREEN
|
|
846
|
+
@test2.limits.state.should eql :BLUE
|
|
847
|
+
@test3.limits.state.should eql :GREEN
|
|
848
|
+
|
|
849
|
+
# Now test the persistence setting by going out of limits
|
|
850
|
+
@p.get_item("TEST1").limits.persistence_setting = 2
|
|
851
|
+
@p.get_item("TEST2").limits.persistence_setting = 3
|
|
852
|
+
@p.get_item("TEST3").limits.persistence_setting = 4
|
|
853
|
+
|
|
854
|
+
@p.write("TEST1", 0)
|
|
855
|
+
@p.write("TEST2", 8)
|
|
856
|
+
@p.write("TEST3", 1.25)
|
|
857
|
+
@p.check_limits
|
|
858
|
+
@test1.limits.state.should eql :GREEN
|
|
859
|
+
@test2.limits.state.should eql :BLUE
|
|
860
|
+
@test3.limits.state.should eql :GREEN
|
|
861
|
+
|
|
862
|
+
@p.write("TEST1", 0)
|
|
863
|
+
@p.write("TEST2", 8)
|
|
864
|
+
@p.write("TEST3", 1.25)
|
|
865
|
+
expect(@callback).to receive(:call).with(@p, @test1,:GREEN,0,true)
|
|
866
|
+
@p.check_limits
|
|
867
|
+
@test1.limits.state.should eql :RED_LOW
|
|
868
|
+
@test2.limits.state.should eql :BLUE
|
|
869
|
+
@test3.limits.state.should eql :GREEN
|
|
870
|
+
|
|
871
|
+
@p.write("TEST1", 0)
|
|
872
|
+
@p.write("TEST2", 8)
|
|
873
|
+
@p.write("TEST3", 1.25)
|
|
874
|
+
expect(@callback).to receive(:call).with(@p, @test2,:BLUE,8,true)
|
|
875
|
+
@p.check_limits
|
|
876
|
+
@test1.limits.state.should eql :RED_LOW
|
|
877
|
+
@test2.limits.state.should eql :RED_HIGH
|
|
878
|
+
@test3.limits.state.should eql :GREEN
|
|
879
|
+
|
|
880
|
+
@p.write("TEST1", 0)
|
|
881
|
+
@p.write("TEST2", 8)
|
|
882
|
+
@p.write("TEST3", 1.25)
|
|
883
|
+
expect(@callback).to receive(:call).with(@p, @test3,:GREEN,1.25,true)
|
|
884
|
+
@p.check_limits
|
|
885
|
+
@test1.limits.state.should eql :RED_LOW
|
|
886
|
+
@test2.limits.state.should eql :RED_HIGH
|
|
887
|
+
@test3.limits.state.should eql :YELLOW_LOW
|
|
888
|
+
|
|
889
|
+
# Now go back to good on everything and verify persistence still applies
|
|
890
|
+
@p.write("TEST1", 3)
|
|
891
|
+
@p.write("TEST2", 4)
|
|
892
|
+
@p.write("TEST3", 2.0)
|
|
893
|
+
@p.check_limits
|
|
894
|
+
@test1.limits.state.should eql :RED_LOW
|
|
895
|
+
@test2.limits.state.should eql :RED_HIGH
|
|
896
|
+
@test3.limits.state.should eql :YELLOW_LOW
|
|
897
|
+
|
|
898
|
+
@p.write("TEST1", 3)
|
|
899
|
+
@p.write("TEST2", 4)
|
|
900
|
+
@p.write("TEST3", 2.0)
|
|
901
|
+
expect(@callback).to receive(:call).with(@p, @test1,:RED_LOW,3,true)
|
|
902
|
+
@p.check_limits
|
|
903
|
+
@test1.limits.state.should eql :GREEN
|
|
904
|
+
@test2.limits.state.should eql :RED_HIGH
|
|
905
|
+
@test3.limits.state.should eql :YELLOW_LOW
|
|
906
|
+
|
|
907
|
+
@p.write("TEST1", 3)
|
|
908
|
+
@p.write("TEST2", 4)
|
|
909
|
+
@p.write("TEST3", 2.0)
|
|
910
|
+
expect(@callback).to receive(:call).with(@p, @test2,:RED_HIGH,4,true)
|
|
911
|
+
@p.check_limits
|
|
912
|
+
@test1.limits.state.should eql :GREEN
|
|
913
|
+
@test2.limits.state.should eql :BLUE
|
|
914
|
+
@test3.limits.state.should eql :YELLOW_LOW
|
|
915
|
+
|
|
916
|
+
@p.write("TEST1", 3)
|
|
917
|
+
@p.write("TEST2", 4)
|
|
918
|
+
@p.write("TEST3", 2.0)
|
|
919
|
+
expect(@callback).to receive(:call).with(@p, @test3,:YELLOW_LOW,2.0,true)
|
|
920
|
+
@p.check_limits
|
|
921
|
+
@test1.limits.state.should eql :GREEN
|
|
922
|
+
@test2.limits.state.should eql :BLUE
|
|
923
|
+
@test3.limits.state.should eql :GREEN
|
|
924
|
+
end
|
|
925
|
+
|
|
926
|
+
it "should not call when state changes before persistence is achieved" do
|
|
927
|
+
# First establish the green state when coming from nil
|
|
928
|
+
@p.get_item("TEST1").limits.persistence_setting = 1
|
|
929
|
+
@p.get_item("TEST2").limits.persistence_setting = 1
|
|
930
|
+
@p.get_item("TEST3").limits.persistence_setting = 1
|
|
931
|
+
@p.write("TEST1", 3)
|
|
932
|
+
@p.write("TEST2", 4)
|
|
933
|
+
@p.write("TEST3", 2.0)
|
|
934
|
+
expect(@callback).to receive(:call).with(@p, @test1,nil,3,true)
|
|
935
|
+
expect(@callback).to receive(:call).with(@p, @test2,nil,4,true)
|
|
936
|
+
expect(@callback).to receive(:call).with(@p, @test3,nil,2.0,true)
|
|
937
|
+
@p.check_limits
|
|
938
|
+
@test1.limits.state.should eql :GREEN
|
|
939
|
+
@test2.limits.state.should eql :BLUE
|
|
940
|
+
@test3.limits.state.should eql :GREEN
|
|
941
|
+
|
|
942
|
+
# Set all persistence the same
|
|
943
|
+
@p.get_item("TEST1").limits.persistence_setting = 3
|
|
944
|
+
@p.get_item("TEST2").limits.persistence_setting = 3
|
|
945
|
+
@p.get_item("TEST3").limits.persistence_setting = 3
|
|
946
|
+
|
|
947
|
+
# Write bad values twice
|
|
948
|
+
@p.write("TEST1", 0)
|
|
949
|
+
@p.write("TEST2", 8)
|
|
950
|
+
@p.write("TEST3", 1.25)
|
|
951
|
+
expect(@callback).to_not receive(:call)
|
|
952
|
+
@p.check_limits
|
|
953
|
+
@test1.limits.state.should eql :GREEN
|
|
954
|
+
@test2.limits.state.should eql :BLUE
|
|
955
|
+
@test3.limits.state.should eql :GREEN
|
|
956
|
+
|
|
957
|
+
@p.write("TEST1", 0)
|
|
958
|
+
@p.write("TEST2", 8)
|
|
959
|
+
@p.write("TEST3", 1.25)
|
|
960
|
+
expect(@callback).to_not receive(:call)
|
|
961
|
+
@p.check_limits
|
|
962
|
+
@test1.limits.state.should eql :GREEN
|
|
963
|
+
@test2.limits.state.should eql :BLUE
|
|
964
|
+
@test3.limits.state.should eql :GREEN
|
|
965
|
+
|
|
966
|
+
# Set the values back to good
|
|
967
|
+
@p.write("TEST1", 3)
|
|
968
|
+
@p.write("TEST2", 4)
|
|
969
|
+
@p.write("TEST3", 2.0)
|
|
970
|
+
@p.check_limits
|
|
971
|
+
@test1.limits.state.should eql :GREEN
|
|
972
|
+
@test2.limits.state.should eql :BLUE
|
|
973
|
+
@test3.limits.state.should eql :GREEN
|
|
974
|
+
|
|
975
|
+
# Write bad values twice
|
|
976
|
+
@p.write("TEST1", 0)
|
|
977
|
+
@p.write("TEST2", 8)
|
|
978
|
+
@p.write("TEST3", 1.25)
|
|
979
|
+
expect(@callback).to_not receive(:call)
|
|
980
|
+
@p.check_limits
|
|
981
|
+
@test1.limits.state.should eql :GREEN
|
|
982
|
+
@test2.limits.state.should eql :BLUE
|
|
983
|
+
@test3.limits.state.should eql :GREEN
|
|
984
|
+
|
|
985
|
+
@p.write("TEST1", 0)
|
|
986
|
+
@p.write("TEST2", 8)
|
|
987
|
+
@p.write("TEST3", 1.25)
|
|
988
|
+
expect(@callback).to_not receive(:call)
|
|
989
|
+
@p.check_limits
|
|
990
|
+
@test1.limits.state.should eql :GREEN
|
|
991
|
+
@test2.limits.state.should eql :BLUE
|
|
992
|
+
@test3.limits.state.should eql :GREEN
|
|
993
|
+
|
|
994
|
+
# Set the values back to good
|
|
995
|
+
@p.write("TEST1", 3)
|
|
996
|
+
@p.write("TEST2", 4)
|
|
997
|
+
@p.write("TEST3", 2.0)
|
|
998
|
+
@p.check_limits
|
|
999
|
+
@test1.limits.state.should eql :GREEN
|
|
1000
|
+
@test2.limits.state.should eql :BLUE
|
|
1001
|
+
@test3.limits.state.should eql :GREEN
|
|
1002
|
+
end
|
|
1003
|
+
end
|
|
1004
|
+
end
|
|
1005
|
+
end
|
|
1006
|
+
|
|
1007
|
+
describe "stale" do
|
|
1008
|
+
it "should set all limits states to stale" do
|
|
1009
|
+
p = Packet.new("tgt","pkt")
|
|
1010
|
+
p.append_item("test1", 8, :UINT)
|
|
1011
|
+
p.get_item("TEST1").limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
1012
|
+
p.enable_limits("TEST1")
|
|
1013
|
+
p.append_item("test2", 16, :UINT)
|
|
1014
|
+
p.get_item("TEST2").limits.values = {:DEFAULT=>[1,2,4,5]}
|
|
1015
|
+
p.enable_limits("TEST2")
|
|
1016
|
+
p.update_limits_items_cache
|
|
1017
|
+
p.out_of_limits.should eql []
|
|
1018
|
+
|
|
1019
|
+
p.stale.should be_truthy
|
|
1020
|
+
p.get_item("TEST1").limits.state.should eql :STALE
|
|
1021
|
+
p.get_item("TEST2").limits.state.should eql :STALE
|
|
1022
|
+
# Update the limits
|
|
1023
|
+
p.check_limits
|
|
1024
|
+
p.stale.should be_falsey
|
|
1025
|
+
p.get_item("TEST1").limits.state.should_not eql :STALE
|
|
1026
|
+
p.get_item("TEST2").limits.state.should_not eql :STALE
|
|
1027
|
+
# set them all back to stale
|
|
1028
|
+
p.set_stale
|
|
1029
|
+
p.get_item("TEST1").limits.state.should eql :STALE
|
|
1030
|
+
p.get_item("TEST2").limits.state.should eql :STALE
|
|
1031
|
+
end
|
|
1032
|
+
end
|
|
1033
|
+
|
|
1034
|
+
describe "clone" do
|
|
1035
|
+
it "should duplicate the packet" do
|
|
1036
|
+
p = Packet.new("tgt","pkt")
|
|
1037
|
+
p2 = p.clone
|
|
1038
|
+
p2.target_name.should eql "TGT"
|
|
1039
|
+
p2.packet_name.should eql "PKT"
|
|
1040
|
+
end
|
|
1041
|
+
end
|
|
1042
|
+
|
|
1043
|
+
describe "reset" do
|
|
1044
|
+
it "should reset the packet" do
|
|
1045
|
+
p = Packet.new("tgt","pkt")
|
|
1046
|
+
p.processors['processor'] = double("reset", :reset => true)
|
|
1047
|
+
p.received_time = Time.now
|
|
1048
|
+
p.received_count = 50
|
|
1049
|
+
p.reset
|
|
1050
|
+
p.received_time.should eql nil
|
|
1051
|
+
p.received_count.should eql 0
|
|
1052
|
+
end
|
|
1053
|
+
end
|
|
1054
|
+
|
|
1055
|
+
end # describe Packet
|
|
1056
|
+
|
|
1057
|
+
end
|