cosmos 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +48 -0
- data/.travis.yml +5 -0
- data/Gemfile +5 -0
- data/Guardfile +27 -0
- data/LICENSE.txt +879 -0
- data/Manifest.txt +1112 -0
- data/README.md +42 -0
- data/Rakefile +214 -0
- data/autohotkey/config/data/attitude.bin +0 -0
- data/autohotkey/config/data/diamond.STL +58 -0
- data/autohotkey/config/data/groundoff.gif +0 -0
- data/autohotkey/config/data/groundon.gif +0 -0
- data/autohotkey/config/data/position.bin +0 -0
- data/autohotkey/config/data/satellite.gif +0 -0
- data/autohotkey/config/data/tada.wav +0 -0
- data/autohotkey/config/system/system.txt +34 -0
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
- data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
- data/autohotkey/config/targets/COSMOS/target.txt +5 -0
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -0
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -0
- data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -0
- data/autohotkey/config/targets/INST/doc/README.txt +1 -0
- data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -0
- data/autohotkey/config/targets/INST/lib/sim_inst.rb +294 -0
- data/autohotkey/config/targets/INST/screens/adcs.txt +46 -0
- data/autohotkey/config/targets/INST/screens/array.txt +7 -0
- data/autohotkey/config/targets/INST/screens/block.txt +8 -0
- data/autohotkey/config/targets/INST/screens/commanding.txt +30 -0
- data/autohotkey/config/targets/INST/screens/graphs.txt +14 -0
- data/autohotkey/config/targets/INST/screens/ground.txt +25 -0
- data/autohotkey/config/targets/INST/screens/health_status.txt +33 -0
- data/autohotkey/config/targets/INST/screens/hs.txt +49 -0
- data/autohotkey/config/targets/INST/screens/image.txt +21 -0
- data/autohotkey/config/targets/INST/screens/latest.txt +23 -0
- data/autohotkey/config/targets/INST/screens/mech.txt +25 -0
- data/autohotkey/config/targets/INST/screens/other.txt +25 -0
- data/autohotkey/config/targets/INST/screens/params.txt +25 -0
- data/autohotkey/config/targets/INST/screens/tabs.txt +68 -0
- data/autohotkey/config/targets/INST/target.txt +27 -0
- data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -0
- data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -0
- data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
- data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -0
- data/autohotkey/config/tools/cmd_sender/cmd_sender.txt +1 -0
- data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -0
- data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -0
- data/autohotkey/config/tools/handbook_creator/default_toc.xsl +59 -0
- data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -0
- data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
- data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
- data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -0
- data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -0
- data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
- data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -0
- data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -0
- data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
- data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
- data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
- data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -0
- data/autohotkey/config/tools/launcher/launcher.txt +38 -0
- data/autohotkey/config/tools/limits_monitor/README.txt +1 -0
- data/autohotkey/config/tools/opengl_builder/error.txt +1 -0
- data/autohotkey/config/tools/script_runner/script_runner.txt +3 -0
- data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -0
- data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -0
- data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -0
- data/autohotkey/config/tools/test_runner/test_runner.txt +8 -0
- data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -0
- data/autohotkey/config/tools/test_runner/test_runner3.txt +7 -0
- data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -0
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +14 -0
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -0
- data/autohotkey/config/tools/tlm_grapher/README.txt +1 -0
- data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -0
- data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -0
- data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -0
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -0
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -0
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -0
- data/autohotkey/lib/example_background_task.rb +42 -0
- data/autohotkey/lib/user_version.rb +3 -0
- data/autohotkey/outputs/handbooks/assets/css/bootstrap-theme.css +397 -0
- data/autohotkey/outputs/handbooks/assets/css/bootstrap-theme.min.css +7 -0
- data/autohotkey/outputs/handbooks/assets/css/bootstrap.css +7118 -0
- data/autohotkey/outputs/handbooks/assets/css/bootstrap.min.css +7 -0
- data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/autohotkey/outputs/handbooks/assets/js/bootstrap.js +2006 -0
- data/autohotkey/outputs/handbooks/assets/js/bootstrap.min.js +7 -0
- data/autohotkey/outputs/logs/bigtlm.bin +0 -0
- data/autohotkey/outputs/logs/cmd.bin +0 -0
- data/autohotkey/outputs/logs/tlm.bin +0 -0
- data/autohotkey/outputs/saved_config/README.txt +1 -0
- data/autohotkey/outputs/tables/README.txt +1 -0
- data/autohotkey/outputs/tmp/README.txt +1 -0
- data/autohotkey/procedures/clear_util.rb +7 -0
- data/autohotkey/procedures/collect.rb +18 -0
- data/autohotkey/procedures/collect_util.rb +14 -0
- data/autohotkey/procedures/example_test.rb +67 -0
- data/autohotkey/procedures/example_test2.rb +74 -0
- data/autohotkey/procedures/script_test.rb +17 -0
- data/autohotkey/procedures/syntax_error.rb +18 -0
- data/autohotkey/tools/CmdExtractorAHK +16 -0
- data/autohotkey/tools/CmdSender +14 -0
- data/autohotkey/tools/CmdSenderAHK +18 -0
- data/autohotkey/tools/CmdTlmServer +14 -0
- data/autohotkey/tools/CmdTlmServerAHK +28 -0
- data/autohotkey/tools/CmdTlmServerAHK2 +17 -0
- data/autohotkey/tools/DataViewer +14 -0
- data/autohotkey/tools/DataViewerAHK +17 -0
- data/autohotkey/tools/HandbookCreatorAHK +20 -0
- data/autohotkey/tools/LauncherAHK +17 -0
- data/autohotkey/tools/LimitsMonitorAHK +20 -0
- data/autohotkey/tools/OpenGLBuilderAHK +20 -0
- data/autohotkey/tools/PacketViewer +14 -0
- data/autohotkey/tools/PacketViewerAHK +18 -0
- data/autohotkey/tools/PacketViewerAHK2 +17 -0
- data/autohotkey/tools/Replay +14 -0
- data/autohotkey/tools/Replay.bat +59 -0
- data/autohotkey/tools/ReplayAHK +17 -0
- data/autohotkey/tools/ScriptRunner +14 -0
- data/autohotkey/tools/ScriptRunnerAHK +20 -0
- data/autohotkey/tools/ScriptRunnerAHK2 +17 -0
- data/autohotkey/tools/TableManager +14 -0
- data/autohotkey/tools/TableManagerAHK +30 -0
- data/autohotkey/tools/TestRunner +15 -0
- data/autohotkey/tools/TestRunnerAHK +17 -0
- data/autohotkey/tools/TestRunnerAHK2 +17 -0
- data/autohotkey/tools/TestRunnerAHK3 +17 -0
- data/autohotkey/tools/TestRunnerAHK4 +17 -0
- data/autohotkey/tools/TlmExtractor +15 -0
- data/autohotkey/tools/TlmExtractorAHK +19 -0
- data/autohotkey/tools/TlmExtractorAHK2 +16 -0
- data/autohotkey/tools/TlmExtractorAHK3 +16 -0
- data/autohotkey/tools/TlmGrapher +14 -0
- data/autohotkey/tools/TlmGrapherAHK +19 -0
- data/autohotkey/tools/TlmGrapherAHK2 +23 -0
- data/autohotkey/tools/TlmGrapherAHK3 +17 -0
- data/autohotkey/tools/TlmGrapherAHK4 +17 -0
- data/autohotkey/tools/TlmViewer +14 -0
- data/autohotkey/tools/TlmViewerAHK +28 -0
- data/autohotkey/tools/TlmViewerAHK2 +18 -0
- data/autohotkey/tools/TlmViewerAHK3 +18 -0
- data/autohotkey/tools/TlmViewerAHK4 +18 -0
- data/autohotkey/tools/TlmViewerAHK5 +18 -0
- data/autohotkey/tools/autohotkey.rb +37 -0
- data/autohotkey/tools/cmd_extractor.ahk +27 -0
- data/autohotkey/tools/cmd_sender.ahk +162 -0
- data/autohotkey/tools/cmd_tlm_server.ahk +89 -0
- data/autohotkey/tools/cmd_tlm_server2.ahk +45 -0
- data/autohotkey/tools/data_viewer.ahk +135 -0
- data/autohotkey/tools/handbook_creator.ahk +23 -0
- data/autohotkey/tools/launcher.ahk +41 -0
- data/autohotkey/tools/limits_monitor.ahk +70 -0
- data/autohotkey/tools/open_gl_builder.ahk +134 -0
- data/autohotkey/tools/packet_viewer.ahk +143 -0
- data/autohotkey/tools/packet_viewer2.ahk +9 -0
- data/autohotkey/tools/replay.ahk +98 -0
- data/autohotkey/tools/script_runner.ahk +589 -0
- data/autohotkey/tools/script_runner2.ahk +31 -0
- data/autohotkey/tools/table_manager.ahk +220 -0
- data/autohotkey/tools/test_runner.ahk +259 -0
- data/autohotkey/tools/test_runner2.ahk +52 -0
- data/autohotkey/tools/test_runner3.ahk +13 -0
- data/autohotkey/tools/tlm_extractor.ahk +272 -0
- data/autohotkey/tools/tlm_grapher.ahk +642 -0
- data/autohotkey/tools/tlm_grapher2.ahk +115 -0
- data/autohotkey/tools/tlm_grapher3.ahk +24 -0
- data/autohotkey/tools/tlm_viewer.ahk +133 -0
- data/autohotkey/tools/tlm_viewer2.ahk +49 -0
- data/autohotkey/tools/tlm_viewer4.ahk +4 -0
- data/autohotkey/tools/tlm_viewer5.ahk +20 -0
- data/autohotkey/userpath.txt +1 -0
- data/bin/cosmos +96 -0
- data/bin/cstol_converter +1166 -0
- data/bin/exchndl20.dll +0 -0
- data/bin/exchndl21.dll +0 -0
- data/bin/mgwhelp.dll +0 -0
- data/bin/rubysloc +85 -0
- data/cosmos.gemspec +98 -0
- data/data/COSMOS_64x64.bmp +0 -0
- data/data/COSMOS_64x64.ico +0 -0
- data/data/COSMOS_64x64.png +0 -0
- data/data/CheckBoxCheck.gif +0 -0
- data/data/CheckBoxEmpty.gif +0 -0
- data/data/Earthmap1024x512.gif +0 -0
- data/data/about.txt +4 -0
- data/data/add_database.png +0 -0
- data/data/add_plot.png +0 -0
- data/data/add_tab.png +0 -0
- data/data/blank.png +0 -0
- data/data/bug.png +0 -0
- data/data/checkmark.png +0 -0
- data/data/close.png +0 -0
- data/data/cmd_extractor.png +0 -0
- data/data/cmd_sender.png +0 -0
- data/data/copy.png +0 -0
- data/data/cosmos.xcf +0 -0
- data/data/cosmos_word.gif +0 -0
- data/data/crc.txt +305 -0
- data/data/cts.png +0 -0
- data/data/cut.png +0 -0
- data/data/data_viewer.png +0 -0
- data/data/delete_database.png +0 -0
- data/data/delete_plot.png +0 -0
- data/data/delete_tab.png +0 -0
- data/data/diamond.STL +58 -0
- data/data/disconnected.png +0 -0
- data/data/edit.png +0 -0
- data/data/edit_database.png +0 -0
- data/data/edit_plot.png +0 -0
- data/data/edit_tab.png +0 -0
- data/data/end-26.png +0 -0
- data/data/fast_forward-26.png +0 -0
- data/data/file.png +0 -0
- data/data/handbook_creator.png +0 -0
- data/data/help.png +0 -0
- data/data/html-32.png +0 -0
- data/data/launcher.png +0 -0
- data/data/legal.gif +0 -0
- data/data/legal.txt +9 -0
- data/data/limits_monitor.png +0 -0
- data/data/moonmap1k.gif +0 -0
- data/data/multi.png +0 -0
- data/data/open.png +0 -0
- data/data/open_in_browser-32.png +0 -0
- data/data/opengl_builder.png +0 -0
- data/data/packet_viewer.png +0 -0
- data/data/pdf-32.png +0 -0
- data/data/play-26.png +0 -0
- data/data/redo.png +0 -0
- data/data/replay.png +0 -0
- data/data/reverse-play-26.png +0 -0
- data/data/rewind-26.png +0 -0
- data/data/running.png +0 -0
- data/data/save.png +0 -0
- data/data/save_as.png +0 -0
- data/data/screenshot.png +0 -0
- data/data/script_runner.png +0 -0
- data/data/search-14.png +0 -0
- data/data/search.png +0 -0
- data/data/send_file.png +0 -0
- data/data/skip_to_start-26.png +0 -0
- data/data/spinner.gif +0 -0
- data/data/splash.gif +0 -0
- data/data/stop-26.png +0 -0
- data/data/table_manager.png +0 -0
- data/data/test_runner.png +0 -0
- data/data/tlm_extractor.png +0 -0
- data/data/tlm_grapher.png +0 -0
- data/data/tlm_viewer.png +0 -0
- data/data/undo.png +0 -0
- data/demo/Gemfile +5 -0
- data/demo/Launcher +15 -0
- data/demo/Launcher.bat +59 -0
- data/demo/Rakefile +61 -0
- data/demo/config/data/attitude.bin +0 -0
- data/demo/config/data/crc.txt +206 -0
- data/demo/config/data/diamond.STL +58 -0
- data/demo/config/data/groundoff.gif +0 -0
- data/demo/config/data/groundon.gif +0 -0
- data/demo/config/data/hselectoff.gif +0 -0
- data/demo/config/data/hselecton.gif +0 -0
- data/demo/config/data/hswitchoff.gif +0 -0
- data/demo/config/data/hswitchon.gif +0 -0
- data/demo/config/data/meta_init.txt +4 -0
- data/demo/config/data/position.bin +0 -0
- data/demo/config/data/poweroff.gif +0 -0
- data/demo/config/data/poweron.gif +0 -0
- data/demo/config/data/satellite.gif +0 -0
- data/demo/config/data/tada.wav +0 -0
- data/demo/config/data/vswitchoff.gif +0 -0
- data/demo/config/data/vswitchon.gif +0 -0
- data/demo/config/system/system.txt +34 -0
- data/demo/config/system/system2.txt +33 -0
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
- data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
- data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -0
- data/demo/config/targets/COSMOS/screens/version.txt +19 -0
- data/demo/config/targets/COSMOS/target.txt +11 -0
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -0
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +3 -0
- data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -0
- data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -0
- data/demo/config/targets/EXAMPLE/target.txt +7 -0
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -0
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -0
- data/demo/config/targets/INST/cmd_tlm_server.txt +5 -0
- data/demo/config/targets/INST/doc/README.txt +1 -0
- data/demo/config/targets/INST/lib/example_limits_response.rb +30 -0
- data/demo/config/targets/INST/lib/sim_inst.rb +294 -0
- data/demo/config/targets/INST/screens/adcs.txt +46 -0
- data/demo/config/targets/INST/screens/array.txt +15 -0
- data/demo/config/targets/INST/screens/block.txt +8 -0
- data/demo/config/targets/INST/screens/commanding.txt +30 -0
- data/demo/config/targets/INST/screens/graphs.txt +14 -0
- data/demo/config/targets/INST/screens/ground.txt +25 -0
- data/demo/config/targets/INST/screens/hs.txt +44 -0
- data/demo/config/targets/INST/screens/latest.txt +23 -0
- data/demo/config/targets/INST/screens/other.txt +29 -0
- data/demo/config/targets/INST/screens/tabs.txt +70 -0
- data/demo/config/targets/INST/target.txt +33 -0
- data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -0
- data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -0
- data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
- data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -0
- data/demo/config/targets/SYSTEM/screens/status.txt +12 -0
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +12 -0
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -0
- data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -0
- data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +48 -0
- data/demo/config/targets/TEMPLATED/target.txt +6 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +33 -0
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +29 -0
- data/demo/config/tools/data_viewer/data_viewer.txt +11 -0
- data/demo/config/tools/handbook_creator/default_toc.xsl +59 -0
- data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -0
- data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
- data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
- data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -0
- data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -0
- data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
- data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -0
- data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -0
- data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
- data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
- data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
- data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
- data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
- data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -0
- data/demo/config/tools/launcher/launcher.txt +45 -0
- data/demo/config/tools/launcher/launcher2.txt +45 -0
- data/demo/config/tools/limits_monitor/README.txt +1 -0
- data/demo/config/tools/opengl_builder/README.txt +1 -0
- data/demo/config/tools/script_runner/script_runner.txt +3 -0
- data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -0
- data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -0
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -0
- data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -0
- data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -0
- data/demo/config/tools/test_runner/test_runner.txt +17 -0
- data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
- data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
- data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
- data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
- data/demo/config/tools/tlm_grapher/README.txt +1 -0
- data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -0
- data/demo/lib/example_background_task.rb +52 -0
- data/demo/lib/example_target.rb +108 -0
- data/demo/lib/scpi_target.rb +74 -0
- data/demo/lib/user_version.rb +3 -0
- data/demo/outputs/handbooks/assets/css/bootstrap-theme.css +397 -0
- data/demo/outputs/handbooks/assets/css/bootstrap-theme.min.css +7 -0
- data/demo/outputs/handbooks/assets/css/bootstrap.css +7118 -0
- data/demo/outputs/handbooks/assets/css/bootstrap.min.css +7 -0
- data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/demo/outputs/handbooks/assets/img/ball_logo.bmp +0 -0
- data/demo/outputs/handbooks/assets/img/ball_logo.gif +0 -0
- data/demo/outputs/handbooks/assets/img/ball_logo.jpg +0 -0
- data/demo/outputs/handbooks/assets/js/bootstrap.js +2006 -0
- data/demo/outputs/handbooks/assets/js/bootstrap.min.js +7 -0
- data/demo/outputs/handbooks/assets/js/html5shiv.js +8 -0
- data/demo/outputs/handbooks/assets/js/jquery-1.10.2.min.js +6 -0
- data/demo/outputs/handbooks/assets/js/respond.min.js +6 -0
- data/demo/outputs/logs/README.txt +1 -0
- data/demo/outputs/saved_config/README.txt +1 -0
- data/demo/outputs/tables/README.txt +1 -0
- data/demo/outputs/tmp/README.txt +1 -0
- data/demo/procedures/checks.rb +11 -0
- data/demo/procedures/clear_util.rb +7 -0
- data/demo/procedures/collect.rb +18 -0
- data/demo/procedures/collect_util.rb +14 -0
- data/demo/procedures/cosmos_api_test.rb +293 -0
- data/demo/procedures/disconnect.rb +29 -0
- data/demo/procedures/example_test.rb +182 -0
- data/demo/procedures/plot_test.rb +8 -0
- data/demo/procedures/run_example_test.rb +3 -0
- data/demo/procedures/test.rb +51 -0
- data/demo/tools/CmdExtractor +15 -0
- data/demo/tools/CmdExtractor.bat +59 -0
- data/demo/tools/CmdSender +15 -0
- data/demo/tools/CmdSender.bat +59 -0
- data/demo/tools/CmdTlmServer +15 -0
- data/demo/tools/CmdTlmServer.bat +59 -0
- data/demo/tools/DataViewer +15 -0
- data/demo/tools/DataViewer.bat +59 -0
- data/demo/tools/ExampleTarget +15 -0
- data/demo/tools/ExampleTarget.bat +59 -0
- data/demo/tools/HandbookCreator +15 -0
- data/demo/tools/HandbookCreator.bat +61 -0
- data/demo/tools/Launcher +15 -0
- data/demo/tools/Launcher.bat +59 -0
- data/demo/tools/LimitsMonitor +15 -0
- data/demo/tools/LimitsMonitor.bat +59 -0
- data/demo/tools/OpenGLBuilder +15 -0
- data/demo/tools/OpenGLBuilder.bat +59 -0
- data/demo/tools/PacketViewer +15 -0
- data/demo/tools/PacketViewer.bat +59 -0
- data/demo/tools/Replay +15 -0
- data/demo/tools/Replay.bat +59 -0
- data/demo/tools/ScpiTarget +15 -0
- data/demo/tools/ScpiTarget.bat +59 -0
- data/demo/tools/ScriptRunner +15 -0
- data/demo/tools/ScriptRunner.bat +59 -0
- data/demo/tools/TableManager +15 -0
- data/demo/tools/TableManager.bat +59 -0
- data/demo/tools/TestRunner +15 -0
- data/demo/tools/TestRunner.bat +59 -0
- data/demo/tools/TlmExtractor +15 -0
- data/demo/tools/TlmExtractor.bat +59 -0
- data/demo/tools/TlmGrapher +15 -0
- data/demo/tools/TlmGrapher.bat +59 -0
- data/demo/tools/TlmViewer +15 -0
- data/demo/tools/TlmViewer.bat +59 -0
- data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
- data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
- data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
- data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
- data/demo/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/demo/userpath.txt +1 -0
- data/ext/cosmos/ext/array/array.c +111 -0
- data/ext/cosmos/ext/array/extconf.rb +13 -0
- data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -0
- data/ext/cosmos/ext/buffered_file/extconf.rb +13 -0
- data/ext/cosmos/ext/config_parser/config_parser.c +237 -0
- data/ext/cosmos/ext/config_parser/extconf.rb +13 -0
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -0
- data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -0
- data/ext/cosmos/ext/crc/crc.c +341 -0
- data/ext/cosmos/ext/crc/extconf.rb +13 -0
- data/ext/cosmos/ext/line_graph/extconf.rb +13 -0
- data/ext/cosmos/ext/line_graph/line_graph.c +501 -0
- data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +13 -0
- data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +261 -0
- data/ext/cosmos/ext/packet/extconf.rb +13 -0
- data/ext/cosmos/ext/packet/packet.c +339 -0
- data/ext/cosmos/ext/platform/extconf.rb +13 -0
- data/ext/cosmos/ext/platform/platform.c +82 -0
- data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -0
- data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -0
- data/ext/cosmos/ext/string/extconf.rb +13 -0
- data/ext/cosmos/ext/string/string.c +49 -0
- data/ext/cosmos/ext/structure/structure.c +894 -0
- data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -0
- data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -0
- data/ext/cosmos/ext/telemetry/extconf.rb +13 -0
- data/ext/cosmos/ext/telemetry/telemetry.c +306 -0
- data/install/Gemfile +5 -0
- data/install/Launcher +14 -0
- data/install/Launcher.bat +59 -0
- data/install/Rakefile +61 -0
- data/install/config/data/README.txt +1 -0
- data/install/config/data/crc.txt +133 -0
- data/install/config/system/system.txt +29 -0
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
- data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
- data/install/config/targets/COSMOS/screens/limits_change.txt +20 -0
- data/install/config/targets/COSMOS/screens/version.txt +19 -0
- data/install/config/targets/COSMOS/target.txt +9 -0
- data/install/config/targets/SYSTEM/README.txt +1 -0
- data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -0
- data/install/config/tools/data_viewer/data_viewer.txt +4 -0
- data/install/config/tools/handbook_creator/default_toc.xsl +59 -0
- data/install/config/tools/handbook_creator/handbook_creator.txt +49 -0
- data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
- data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
- data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -0
- data/install/config/tools/handbook_creator/templates/header.html.erb +25 -0
- data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
- data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -0
- data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -0
- data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
- data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
- data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
- data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
- data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
- data/install/config/tools/handbook_creator/templates/title.html.erb +1 -0
- data/install/config/tools/launcher/launcher.txt +39 -0
- data/install/config/tools/limits_monitor/README.txt +1 -0
- data/install/config/tools/opengl_builder/README.txt +1 -0
- data/install/config/tools/script_runner/script_runner.txt +3 -0
- data/install/config/tools/table_manager/README.txt +1 -0
- data/install/config/tools/test_runner/test_runner.txt +8 -0
- data/install/config/tools/tlm_extractor/README.txt +1 -0
- data/install/config/tools/tlm_grapher/README.txt +1 -0
- data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -0
- data/install/lib/user_version.rb +3 -0
- data/install/outputs/handbooks/assets/css/bootstrap-theme.css +397 -0
- data/install/outputs/handbooks/assets/css/bootstrap-theme.min.css +7 -0
- data/install/outputs/handbooks/assets/css/bootstrap.css +7118 -0
- data/install/outputs/handbooks/assets/css/bootstrap.min.css +7 -0
- data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.eot +0 -0
- data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.svg +229 -0
- data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.woff +0 -0
- data/install/outputs/handbooks/assets/img/ball_logo.bmp +0 -0
- data/install/outputs/handbooks/assets/img/ball_logo.gif +0 -0
- data/install/outputs/handbooks/assets/img/ball_logo.jpg +0 -0
- data/install/outputs/handbooks/assets/js/bootstrap.js +2006 -0
- data/install/outputs/handbooks/assets/js/bootstrap.min.js +7 -0
- data/install/outputs/handbooks/assets/js/html5shiv.js +8 -0
- data/install/outputs/handbooks/assets/js/jquery-1.10.2.min.js +6 -0
- data/install/outputs/handbooks/assets/js/respond.min.js +6 -0
- data/install/outputs/logs/README.txt +1 -0
- data/install/outputs/saved_config/README.txt +1 -0
- data/install/outputs/tables/README.txt +1 -0
- data/install/outputs/tmp/README.txt +1 -0
- data/install/procedures/README.txt +1 -0
- data/install/tools/CmdExtractor +15 -0
- data/install/tools/CmdExtractor.bat +59 -0
- data/install/tools/CmdSender +15 -0
- data/install/tools/CmdSender.bat +59 -0
- data/install/tools/CmdTlmServer +15 -0
- data/install/tools/CmdTlmServer.bat +59 -0
- data/install/tools/DataViewer +15 -0
- data/install/tools/DataViewer.bat +59 -0
- data/install/tools/HandbookCreator +15 -0
- data/install/tools/HandbookCreator.bat +61 -0
- data/install/tools/Launcher +15 -0
- data/install/tools/Launcher.bat +59 -0
- data/install/tools/LimitsMonitor +15 -0
- data/install/tools/LimitsMonitor.bat +59 -0
- data/install/tools/OpenGLBuilder +15 -0
- data/install/tools/OpenGLBuilder.bat +59 -0
- data/install/tools/PacketViewer +15 -0
- data/install/tools/PacketViewer.bat +59 -0
- data/install/tools/Replay +15 -0
- data/install/tools/Replay.bat +59 -0
- data/install/tools/ScriptRunner +15 -0
- data/install/tools/ScriptRunner.bat +59 -0
- data/install/tools/TableManager +15 -0
- data/install/tools/TableManager.bat +59 -0
- data/install/tools/TestRunner +15 -0
- data/install/tools/TestRunner.bat +59 -0
- data/install/tools/TlmExtractor +15 -0
- data/install/tools/TlmExtractor.bat +59 -0
- data/install/tools/TlmGrapher +15 -0
- data/install/tools/TlmGrapher.bat +59 -0
- data/install/tools/TlmViewer +15 -0
- data/install/tools/TlmViewer.bat +59 -0
- data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
- data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
- data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
- data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
- data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -0
- data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
- data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/Replay.app/Contents/Info.plist +38 -0
- data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
- data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -0
- data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
- data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
- data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
- data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
- data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
- data/install/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
- data/install/userpath.txt +1 -0
- data/lib/cosmos/ccsds/ccsds_packet.rb +63 -0
- data/lib/cosmos/ccsds/ccsds_parser.rb +143 -0
- data/lib/cosmos/config/config_parser.rb +324 -0
- data/lib/cosmos/conversions/conversion.rb +47 -0
- data/lib/cosmos/conversions/generic_conversion.rb +55 -0
- data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -0
- data/lib/cosmos/conversions/polynomial_conversion.rb +57 -0
- data/lib/cosmos/conversions/processor_conversion.rb +46 -0
- data/lib/cosmos/conversions/received_count_conversion.rb +33 -0
- data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -0
- data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -0
- data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -0
- data/lib/cosmos/conversions/unix_time_conversion.rb +50 -0
- data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -0
- data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -0
- data/lib/cosmos/conversions.rb +13 -0
- data/lib/cosmos/core_ext/array.rb +354 -0
- data/lib/cosmos/core_ext/class.rb +51 -0
- data/lib/cosmos/core_ext/cosmos_io.rb +29 -0
- data/lib/cosmos/core_ext/exception.rb +52 -0
- data/lib/cosmos/core_ext/file.rb +75 -0
- data/lib/cosmos/core_ext/hash.rb +28 -0
- data/lib/cosmos/core_ext/io.rb +75 -0
- data/lib/cosmos/core_ext/kernel.rb +38 -0
- data/lib/cosmos/core_ext/math.rb +119 -0
- data/lib/cosmos/core_ext/matrix.rb +146 -0
- data/lib/cosmos/core_ext/objectspace.rb +29 -0
- data/lib/cosmos/core_ext/range.rb +22 -0
- data/lib/cosmos/core_ext/socket.rb +32 -0
- data/lib/cosmos/core_ext/string.rb +310 -0
- data/lib/cosmos/core_ext/stringio.rb +24 -0
- data/lib/cosmos/core_ext/time.rb +446 -0
- data/lib/cosmos/core_ext.rb +18 -0
- data/lib/cosmos/ext/.keep +0 -0
- data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -0
- data/lib/cosmos/gui/choosers/file_chooser.rb +68 -0
- data/lib/cosmos/gui/choosers/float_chooser.rb +82 -0
- data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -0
- data/lib/cosmos/gui/choosers/string_chooser.rb +53 -0
- data/lib/cosmos/gui/choosers/telemetry_chooser.rb +317 -0
- data/lib/cosmos/gui/dialogs/about_dialog.rb +128 -0
- data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -0
- data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -0
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -0
- data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -0
- data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -0
- data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -0
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +196 -0
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +168 -0
- data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -0
- data/lib/cosmos/gui/dialogs/progress_dialog.rb +262 -0
- data/lib/cosmos/gui/dialogs/pry_dialog.rb +161 -0
- data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -0
- data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -0
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -0
- data/lib/cosmos/gui/dialogs/splash.rb +113 -0
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -0
- data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -0
- data/lib/cosmos/gui/line_graph/line_graph.rb +456 -0
- data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -0
- data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +494 -0
- data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -0
- data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +460 -0
- data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -0
- data/lib/cosmos/gui/line_graph/lines.rb +290 -0
- data/lib/cosmos/gui/line_graph/overview_graph.rb +459 -0
- data/lib/cosmos/gui/opengl/earth_model.rb +22 -0
- data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -0
- data/lib/cosmos/gui/opengl/gl_light.rb +39 -0
- data/lib/cosmos/gui/opengl/gl_material.rb +29 -0
- data/lib/cosmos/gui/opengl/gl_scene.rb +72 -0
- data/lib/cosmos/gui/opengl/gl_shape.rb +146 -0
- data/lib/cosmos/gui/opengl/gl_viewer.rb +712 -0
- data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -0
- data/lib/cosmos/gui/opengl/moon_model.rb +22 -0
- data/lib/cosmos/gui/opengl/opengl.rb +8 -0
- data/lib/cosmos/gui/opengl/stl_reader.rb +211 -0
- data/lib/cosmos/gui/opengl/stl_shape.rb +124 -0
- data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -0
- data/lib/cosmos/gui/qt.rb +786 -0
- data/lib/cosmos/gui/qt_tool.rb +373 -0
- data/lib/cosmos/gui/text/completion.rb +381 -0
- data/lib/cosmos/gui/text/completion_line_edit.rb +30 -0
- data/lib/cosmos/gui/text/completion_text_edit.rb +179 -0
- data/lib/cosmos/gui/text/ruby_editor.rb +395 -0
- data/lib/cosmos/gui/utilities/screenshot.rb +25 -0
- data/lib/cosmos/gui/utilities/script_module_gui.rb +203 -0
- data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -0
- data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -0
- data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -0
- data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +149 -0
- data/lib/cosmos/interfaces/interface.rb +213 -0
- data/lib/cosmos/interfaces/linc_interface.rb +360 -0
- data/lib/cosmos/interfaces/serial_interface.rb +76 -0
- data/lib/cosmos/interfaces/simulated_target_interface.rb +128 -0
- data/lib/cosmos/interfaces/stream_interface.rb +156 -0
- data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -0
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +154 -0
- data/lib/cosmos/interfaces/udp_interface.rb +173 -0
- data/lib/cosmos/interfaces.rb +11 -0
- data/lib/cosmos/io/buffered_file.rb +11 -0
- data/lib/cosmos/io/cosmos_snmp.rb +50 -0
- data/lib/cosmos/io/io_multiplexer.rb +89 -0
- data/lib/cosmos/io/json_drb.rb +320 -0
- data/lib/cosmos/io/json_drb_object.rb +137 -0
- data/lib/cosmos/io/json_rpc.rb +365 -0
- data/lib/cosmos/io/posix_serial_driver.rb +145 -0
- data/lib/cosmos/io/raw_logger.rb +174 -0
- data/lib/cosmos/io/raw_logger_pair.rb +71 -0
- data/lib/cosmos/io/serial_driver.rb +85 -0
- data/lib/cosmos/io/stderr.rb +36 -0
- data/lib/cosmos/io/stdout.rb +36 -0
- data/lib/cosmos/io/tcpip_server.rb +532 -0
- data/lib/cosmos/io/udp_sockets.rb +152 -0
- data/lib/cosmos/io/win32_serial_driver.rb +147 -0
- data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -0
- data/lib/cosmos/packet_logs/packet_log_reader.rb +439 -0
- data/lib/cosmos/packet_logs/packet_log_writer.rb +309 -0
- data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -0
- data/lib/cosmos/packet_logs.rb +6 -0
- data/lib/cosmos/packets/binary_accessor.rb +921 -0
- data/lib/cosmos/packets/commands.rb +291 -0
- data/lib/cosmos/packets/limits.rb +263 -0
- data/lib/cosmos/packets/limits_response.rb +38 -0
- data/lib/cosmos/packets/packet.rb +699 -0
- data/lib/cosmos/packets/packet_config.rb +1034 -0
- data/lib/cosmos/packets/packet_item.rb +317 -0
- data/lib/cosmos/packets/packet_item_limits.rb +128 -0
- data/lib/cosmos/packets/structure.rb +386 -0
- data/lib/cosmos/packets/structure_item.rb +233 -0
- data/lib/cosmos/packets/telemetry.rb +317 -0
- data/lib/cosmos/processors/new_packet_log_processor.rb +34 -0
- data/lib/cosmos/processors/processor.rb +71 -0
- data/lib/cosmos/processors/statistics_processor.rb +65 -0
- data/lib/cosmos/processors/watermark_processor.rb +44 -0
- data/lib/cosmos/processors.rb +6 -0
- data/lib/cosmos/script/extract.rb +115 -0
- data/lib/cosmos/script/script.rb +1493 -0
- data/lib/cosmos/script.rb +9 -0
- data/lib/cosmos/streams/burst_stream_protocol.rb +25 -0
- data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -0
- data/lib/cosmos/streams/length_stream_protocol.rb +140 -0
- data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -0
- data/lib/cosmos/streams/serial_stream.rb +143 -0
- data/lib/cosmos/streams/stream.rb +57 -0
- data/lib/cosmos/streams/stream_protocol.rb +369 -0
- data/lib/cosmos/streams/tcpip_client_stream.rb +77 -0
- data/lib/cosmos/streams/tcpip_socket_stream.rb +139 -0
- data/lib/cosmos/streams/template_stream_protocol.rb +140 -0
- data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -0
- data/lib/cosmos/system/system.rb +558 -0
- data/lib/cosmos/system/target.rb +178 -0
- data/lib/cosmos/system.rb +4 -0
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +253 -0
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +716 -0
- data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -0
- data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -0
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +940 -0
- data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -0
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +63 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +496 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +241 -0
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1008 -0
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -0
- data/lib/cosmos/tools/cmd_tlm_server/connections.rb +176 -0
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +221 -0
- data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -0
- data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -0
- data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -0
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -0
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +600 -0
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +167 -0
- data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -0
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +149 -0
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +360 -0
- data/lib/cosmos/tools/launcher/launcher.rb +184 -0
- data/lib/cosmos/tools/launcher/launcher_config.rb +167 -0
- data/lib/cosmos/tools/launcher/launcher_multitool.rb +41 -0
- data/lib/cosmos/tools/launcher/launcher_tool.rb +104 -0
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +768 -0
- data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -0
- data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -0
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +525 -0
- data/lib/cosmos/tools/replay/replay.rb +488 -0
- data/lib/cosmos/tools/replay/replay_server.rb +91 -0
- data/lib/cosmos/tools/script_runner/script_audit.rb +139 -0
- data/lib/cosmos/tools/script_runner/script_runner.rb +914 -0
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -0
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1859 -0
- data/lib/cosmos/tools/table_manager/table.rb +70 -0
- data/lib/cosmos/tools/table_manager/table_config.rb +764 -0
- data/lib/cosmos/tools/table_manager/table_item.rb +74 -0
- data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -0
- data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -0
- data/lib/cosmos/tools/test_runner/results_writer.rb +283 -0
- data/lib/cosmos/tools/test_runner/test.rb +480 -0
- data/lib/cosmos/tools/test_runner/test_runner.rb +1157 -0
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +338 -0
- data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -0
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1008 -0
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -0
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +94 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +180 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -0
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +173 -0
- data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +177 -0
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +409 -0
- data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -0
- data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -0
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +320 -0
- data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -0
- data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -0
- data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -0
- data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -0
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -0
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -0
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -0
- data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -0
- data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -0
- data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -0
- data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1278 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +95 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +66 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -0
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -0
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -0
- data/lib/cosmos/tools/tlm_viewer/screen.rb +458 -0
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +544 -0
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +287 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +70 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +61 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -0
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -0
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -0
- data/lib/cosmos/top_level.rb +596 -0
- data/lib/cosmos/utilities/crc.rb +166 -0
- data/lib/cosmos/utilities/csv.rb +83 -0
- data/lib/cosmos/utilities/logger.rb +137 -0
- data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -0
- data/lib/cosmos/utilities/message_log.rb +74 -0
- data/lib/cosmos/utilities/quaternion.rb +258 -0
- data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -0
- data/lib/cosmos/utilities/simulated_target.rb +99 -0
- data/lib/cosmos/utilities.rb +10 -0
- data/lib/cosmos/version.rb +12 -0
- data/lib/cosmos/win32/excel.rb +66 -0
- data/lib/cosmos/win32/win32.rb +387 -0
- data/lib/cosmos/win32/win32_main.rb +311 -0
- data/lib/cosmos.rb +63 -0
- data/roodi.yml +24 -0
- data/run_gui_tests.bat +32 -0
- data/spec/ccsds/ccsds_packet_spec.rb +67 -0
- data/spec/ccsds/ccsds_parser_spec.rb +148 -0
- data/spec/config/config_parser_spec.rb +322 -0
- data/spec/conversions/conversion_spec.rb +31 -0
- data/spec/conversions/generic_conversion_spec.rb +45 -0
- data/spec/conversions/new_packet_log_conversion_spec.rb +39 -0
- data/spec/conversions/polynomial_conversion_spec.rb +40 -0
- data/spec/conversions/processor_conversion_spec.rb +45 -0
- data/spec/conversions/received_count_conversion_spec.rb +43 -0
- data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -0
- data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -0
- data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -0
- data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -0
- data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -0
- data/spec/core_ext/array_spec.rb +186 -0
- data/spec/core_ext/class_spec.rb +36 -0
- data/spec/core_ext/cosmos_io_spec.rb +77 -0
- data/spec/core_ext/exception_spec.rb +91 -0
- data/spec/core_ext/file_spec.rb +72 -0
- data/spec/core_ext/hash_spec.rb +24 -0
- data/spec/core_ext/io_spec.rb +46 -0
- data/spec/core_ext/kernel_spec.rb +54 -0
- data/spec/core_ext/math_spec.rb +116 -0
- data/spec/core_ext/matrix_spec.rb +66 -0
- data/spec/core_ext/objectspace_spec.rb +29 -0
- data/spec/core_ext/range_spec.rb +21 -0
- data/spec/core_ext/socket_spec.rb +32 -0
- data/spec/core_ext/string_spec.rb +223 -0
- data/spec/core_ext/stringio_spec.rb +21 -0
- data/spec/core_ext/time_spec.rb +151 -0
- data/spec/gui/line_graph/line_clip_spec.rb +322 -0
- data/spec/install/config/system/system.txt +33 -0
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
- data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
- data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -0
- data/spec/install/config/targets/COSMOS/screens/version.txt +19 -0
- data/spec/install/config/targets/COSMOS/target.txt +5 -0
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -0
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -0
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -0
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -0
- data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -0
- data/spec/install/config/targets/INST/lib/sim_inst.rb +294 -0
- data/spec/install/config/targets/INST/target.txt +10 -0
- data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -0
- data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -0
- data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
- data/spec/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +1 -0
- data/spec/install/lib/README.txt +1 -0
- data/spec/install/userpath.txt +1 -0
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -0
- data/spec/interfaces/interface_spec.rb +128 -0
- data/spec/interfaces/linc_interface_spec.rb +199 -0
- data/spec/interfaces/serial_interface_spec.rb +56 -0
- data/spec/interfaces/simulated_target_interface_spec.rb +128 -0
- data/spec/interfaces/stream_interface_spec.rb +157 -0
- data/spec/interfaces/tcpip_client_interface_spec.rb +54 -0
- data/spec/interfaces/tcpip_server_interface_spec.rb +151 -0
- data/spec/interfaces/udp_interface_spec.rb +175 -0
- data/spec/io/buffered_file_spec.rb +113 -0
- data/spec/io/io_multiplexer_spec.rb +94 -0
- data/spec/io/json_drb_object_spec.rb +93 -0
- data/spec/io/json_drb_spec.rb +293 -0
- data/spec/io/json_rpc_spec.rb +264 -0
- data/spec/io/raw_logger_pair_spec.rb +76 -0
- data/spec/io/raw_logger_spec.rb +133 -0
- data/spec/io/serial_driver_spec.rb +61 -0
- data/spec/io/stderr_spec.rb +32 -0
- data/spec/io/stdout_spec.rb +32 -0
- data/spec/io/tcpip_server_spec.rb +322 -0
- data/spec/io/udp_sockets_spec.rb +94 -0
- data/spec/io/win32_serial_driver_spec.rb +88 -0
- data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -0
- data/spec/packet_logs/packet_log_reader_spec.rb +408 -0
- data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -0
- data/spec/packet_logs/packet_log_writer_spec.rb +209 -0
- data/spec/packets/binary_accessor_spec.rb +2073 -0
- data/spec/packets/commands_spec.rb +369 -0
- data/spec/packets/limits_response_spec.rb +25 -0
- data/spec/packets/limits_spec.rb +326 -0
- data/spec/packets/packet_config_spec.rb +1620 -0
- data/spec/packets/packet_item_limits_spec.rb +161 -0
- data/spec/packets/packet_item_spec.rb +386 -0
- data/spec/packets/packet_spec.rb +949 -0
- data/spec/packets/structure_item_spec.rb +195 -0
- data/spec/packets/structure_spec.rb +419 -0
- data/spec/packets/telemetry_spec.rb +535 -0
- data/spec/processors/new_packet_log_processor_spec.rb +39 -0
- data/spec/processors/processor_spec.rb +55 -0
- data/spec/processors/statistics_processor_spec.rb +60 -0
- data/spec/processors/watermark_processor_spec.rb +51 -0
- data/spec/script/script_spec.rb +650 -0
- data/spec/spec_helper.rb +138 -0
- data/spec/streams/burst_stream_protocol_spec.rb +32 -0
- data/spec/streams/fixed_stream_protocol_spec.rb +110 -0
- data/spec/streams/length_stream_protocol_spec.rb +297 -0
- data/spec/streams/preidentified_stream_protocol_spec.rb +118 -0
- data/spec/streams/serial_stream_spec.rb +105 -0
- data/spec/streams/stream_protocol_spec.rb +332 -0
- data/spec/streams/stream_spec.rb +29 -0
- data/spec/streams/tcpip_client_stream_spec.rb +54 -0
- data/spec/streams/tcpip_socket_stream_spec.rb +146 -0
- data/spec/streams/template_stream_protocol_spec.rb +151 -0
- data/spec/streams/terminated_stream_protocol_spec.rb +123 -0
- data/spec/system/system_spec.rb +645 -0
- data/spec/system/target_spec.rb +248 -0
- data/spec/tools/cmd_tlm_server/api_spec.rb +1090 -0
- data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -0
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +82 -0
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +406 -0
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +418 -0
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +123 -0
- data/spec/tools/cmd_tlm_server/connections_spec.rb +147 -0
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +317 -0
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +228 -0
- data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -0
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +104 -0
- data/spec/tools/cmd_tlm_server/routers_spec.rb +196 -0
- data/spec/top_level/top_level_spec.rb +320 -0
- data/spec/utilities/crc_spec.rb +45 -0
- data/spec/utilities/csv_spec.rb +97 -0
- data/spec/utilities/logger_spec.rb +102 -0
- data/spec/utilities/message_log_spec.rb +89 -0
- data/spec/utilities/quaternion_spec.rb +107 -0
- data/spec/utilities/ruby_lex_utils_spec.rb +86 -0
- data/tasks/manifest.rake +22 -0
- data/tasks/spec.rake +23 -0
- metadata +1566 -0
|
@@ -0,0 +1,1620 @@
|
|
|
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_config'
|
|
14
|
+
require 'tempfile'
|
|
15
|
+
|
|
16
|
+
module Cosmos
|
|
17
|
+
|
|
18
|
+
describe PacketConfig do
|
|
19
|
+
|
|
20
|
+
describe "process_file" do
|
|
21
|
+
before(:each) do
|
|
22
|
+
@pc = PacketConfig.new
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should complain about unknown keywords" do
|
|
26
|
+
tf = Tempfile.new('unittest')
|
|
27
|
+
tf.puts("BLAH")
|
|
28
|
+
tf.close
|
|
29
|
+
expect { @pc.process_file(tf.path, 'SYSTEM') }.to raise_error(ConfigParser::Error, "Unknown keyword 'BLAH'")
|
|
30
|
+
tf.unlink
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should complain about overlapping items" do
|
|
34
|
+
tf = Tempfile.new('unittest')
|
|
35
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
36
|
+
tf.puts ' ITEM item1 0 8 UINT'
|
|
37
|
+
tf.puts ' ITEM item2 0 8 UINT'
|
|
38
|
+
tf.close
|
|
39
|
+
@pc.process_file(tf.path, "TGT1")
|
|
40
|
+
@pc.warnings[0].should eql "Bit definition overlap at bit offset 0 for Telemetry packet TGT1 PKT1 items ITEM2 and ITEM1"
|
|
41
|
+
tf.unlink
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it "should not complain with non-overlapping negative offsets" do
|
|
45
|
+
tf = Tempfile.new('unittest')
|
|
46
|
+
tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "Description"'
|
|
47
|
+
tf.puts ' ITEM item1 0 8 UINT'
|
|
48
|
+
tf.puts ' ITEM item2 8 -16 BLOCK'
|
|
49
|
+
tf.puts ' ITEM item3 -16 16 UINT'
|
|
50
|
+
tf.close
|
|
51
|
+
@pc.process_file(tf.path, "TGT1")
|
|
52
|
+
@pc.warnings[0].should be_nil
|
|
53
|
+
tf.unlink
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it "should complain with overlapping negative offsets" do
|
|
57
|
+
tf = Tempfile.new('unittest')
|
|
58
|
+
tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "Description"'
|
|
59
|
+
tf.puts ' ITEM item1 0 8 UINT'
|
|
60
|
+
tf.puts ' ITEM item2 8 -16 BLOCK'
|
|
61
|
+
tf.puts ' ITEM item3 -17 16 UINT'
|
|
62
|
+
tf.close
|
|
63
|
+
@pc.process_file(tf.path, "TGT1")
|
|
64
|
+
@pc.warnings[0].should eql "Bit definition overlap at bit offset -17 for Telemetry packet TGT1 PKT2 items ITEM3 and ITEM2"
|
|
65
|
+
tf.unlink
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "should complain about intersecting items" do
|
|
69
|
+
tf = Tempfile.new('unittest')
|
|
70
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
71
|
+
tf.puts ' ITEM item1 0 32 UINT'
|
|
72
|
+
tf.puts ' ITEM item2 16 32 UINT'
|
|
73
|
+
tf.close
|
|
74
|
+
@pc.process_file(tf.path, "TGT1")
|
|
75
|
+
@pc.warnings[0].should eql "Bit definition overlap at bit offset 16 for Telemetry packet TGT1 PKT1 items ITEM2 and ITEM1"
|
|
76
|
+
tf.unlink
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it "should complain about array overlapping items" do
|
|
80
|
+
tf = Tempfile.new('unittest')
|
|
81
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
82
|
+
tf.puts ' ARRAY_ITEM item1 0 8 UINT 32'
|
|
83
|
+
tf.puts ' ARRAY_ITEM item2 0 8 UINT 32'
|
|
84
|
+
tf.close
|
|
85
|
+
@pc.process_file(tf.path, "TGT1")
|
|
86
|
+
@pc.warnings[0].should eql "Bit definition overlap at bit offset 0 for Telemetry packet TGT1 PKT1 items ITEM2 and ITEM1"
|
|
87
|
+
tf.unlink
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "should not complain with array non-overlapping negative offsets" do
|
|
91
|
+
tf = Tempfile.new('unittest')
|
|
92
|
+
tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "Description"'
|
|
93
|
+
tf.puts ' ITEM item1 0 8 UINT'
|
|
94
|
+
tf.puts ' ARRAY_ITEM item2 8 8 INT -16'
|
|
95
|
+
tf.puts ' ITEM item3 -16 16 UINT'
|
|
96
|
+
tf.close
|
|
97
|
+
@pc.process_file(tf.path, "TGT1")
|
|
98
|
+
@pc.warnings[0].should be_nil
|
|
99
|
+
tf.unlink
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "should complain with array overlapping negative offsets" do
|
|
103
|
+
tf = Tempfile.new('unittest')
|
|
104
|
+
tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "Description"'
|
|
105
|
+
tf.puts ' ITEM item1 0 8 UINT'
|
|
106
|
+
tf.puts ' ARRAY_ITEM item2 8 8 INT -16'
|
|
107
|
+
tf.puts ' ITEM item3 -17 16 UINT'
|
|
108
|
+
tf.close
|
|
109
|
+
@pc.process_file(tf.path, "TGT1")
|
|
110
|
+
@pc.warnings[0].should eql "Bit definition overlap at bit offset -17 for Telemetry packet TGT1 PKT2 items ITEM3 and ITEM2"
|
|
111
|
+
tf.unlink
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it "should complain about array intersecting items" do
|
|
115
|
+
tf = Tempfile.new('unittest')
|
|
116
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
117
|
+
tf.puts ' ARRAY_ITEM item1 0 8 UINT 32'
|
|
118
|
+
tf.puts ' ARRAY_ITEM item2 16 8 UINT 32'
|
|
119
|
+
tf.close
|
|
120
|
+
@pc.process_file(tf.path, "TGT1")
|
|
121
|
+
@pc.warnings[0].should eql "Bit definition overlap at bit offset 16 for Telemetry packet TGT1 PKT1 items ITEM2 and ITEM1"
|
|
122
|
+
tf.unlink
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it "should not complain about nonoverlapping little endian bitfields" do
|
|
126
|
+
tf = Tempfile.new('unittest')
|
|
127
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
128
|
+
tf.puts ' ITEM item1 12 12 UINT'
|
|
129
|
+
tf.puts ' ITEM item2 16 16 UINT'
|
|
130
|
+
tf.close
|
|
131
|
+
@pc.process_file(tf.path, "TGT1")
|
|
132
|
+
@pc.warnings[0].should be_nil
|
|
133
|
+
tf.unlink
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
context "with all telemetry keywords" do
|
|
137
|
+
before(:all) do
|
|
138
|
+
# top level keywords
|
|
139
|
+
@top_keywords = %w(TELEMETRY SELECT_TELEMETRY LIMITS_GROUP LIMITS_GROUP_ITEM)
|
|
140
|
+
# Keywords that require a current packet from TELEMETRY keyword
|
|
141
|
+
@tlm_keywords = %w(SELECT_ITEM ITEM ID_ITEM ARRAY_ITEM APPEND_ITEM APPEND_ID_ITEM APPEND_ARRAY_ITEM MACRO_APPEND_START MACRO_APPEND_END PROCESSOR META)
|
|
142
|
+
# Keywords that require both a current packet and current item
|
|
143
|
+
@item_keywords = %w(STATE READ_CONVERSION WRITE_CONVERSION POLY_READ_CONVERSION POLY_WRITE_CONVERSION SEG_POLY_READ_CONVERSION SEG_POLY_WRITE_CONVERSION GENERIC_READ_CONVERSION_START GENERIC_WRITE_CONVERSION_START LIMITS LIMITS_RESPONSE UNITS FORMAT_STRING DESCRIPTION META)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it "should complain if a current packet is not defined" do
|
|
147
|
+
# Check for missing TELEMETRY line
|
|
148
|
+
@tlm_keywords.each do |keyword|
|
|
149
|
+
tf = Tempfile.new('unittest')
|
|
150
|
+
tf.puts(keyword)
|
|
151
|
+
tf.close
|
|
152
|
+
expect { @pc.process_file(tf.path, "SYSTEM") }.to raise_error(ConfigParser::Error, "No current packet for #{keyword}")
|
|
153
|
+
tf.unlink
|
|
154
|
+
end # end for each tlm_keywords
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "should complain if a current item is not defined" do
|
|
158
|
+
# Check for missing ITEM definitions
|
|
159
|
+
@item_keywords.each do |keyword|
|
|
160
|
+
next if %w(META).include? keyword
|
|
161
|
+
tf = Tempfile.new('unittest')
|
|
162
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
163
|
+
tf.puts keyword
|
|
164
|
+
tf.close
|
|
165
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "No current item for #{keyword}")
|
|
166
|
+
tf.unlink
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it "should complain if there are not enough parameters" do
|
|
171
|
+
@top_keywords.each do |keyword|
|
|
172
|
+
tf = Tempfile.new('unittest')
|
|
173
|
+
tf.puts(keyword)
|
|
174
|
+
tf.close
|
|
175
|
+
expect { @pc.process_file(tf.path, "SYSTEM") }.to raise_error(ConfigParser::Error, /Not enough parameters for #{keyword}/)
|
|
176
|
+
tf.unlink
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
@tlm_keywords.each do |keyword|
|
|
180
|
+
next if %w(MACRO_APPEND_END).include? keyword
|
|
181
|
+
tf = Tempfile.new('unittest')
|
|
182
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
183
|
+
tf.puts keyword
|
|
184
|
+
tf.close
|
|
185
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Not enough parameters for #{keyword}/)
|
|
186
|
+
tf.unlink
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
@item_keywords.each do |keyword|
|
|
190
|
+
next if %w(GENERIC_READ_CONVERSION_START GENERIC_WRITE_CONVERSION_START).include? keyword
|
|
191
|
+
tf = Tempfile.new('unittest')
|
|
192
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
193
|
+
tf.puts 'ITEM myitem 0 8 UINT "Test Item"'
|
|
194
|
+
tf.puts keyword
|
|
195
|
+
tf.close
|
|
196
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Not enough parameters for #{keyword}/)
|
|
197
|
+
tf.unlink
|
|
198
|
+
end
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
it "should complain if there are too many parameters" do
|
|
202
|
+
@top_keywords.each do |keyword|
|
|
203
|
+
tf = Tempfile.new('unittest')
|
|
204
|
+
case keyword
|
|
205
|
+
when "TELEMETRY"
|
|
206
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet" extra'
|
|
207
|
+
when "SELECT_TELEMETRY"
|
|
208
|
+
tf.puts 'SELECT_TELEMETRY tgt1 pkt1 extra'
|
|
209
|
+
when 'LIMITS_GROUP'
|
|
210
|
+
tf.puts "LIMITS_GROUP name extra"
|
|
211
|
+
when 'LIMITS_GROUP_ITEM'
|
|
212
|
+
tf.puts "LIMITS_GROUP_ITEM target packet item extra"
|
|
213
|
+
end
|
|
214
|
+
tf.close
|
|
215
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Too many parameters for #{keyword}/)
|
|
216
|
+
tf.unlink
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
@tlm_keywords.each do |keyword|
|
|
220
|
+
next if %w(MACRO_APPEND_END PROCESSOR META).include? keyword
|
|
221
|
+
tf = Tempfile.new('unittest')
|
|
222
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
223
|
+
case keyword
|
|
224
|
+
when "ITEM"
|
|
225
|
+
tf.puts 'ITEM myitem 0 8 UINT "Test Item" BIG_ENDIAN extra'
|
|
226
|
+
when "APPEND_ITEM"
|
|
227
|
+
tf.puts 'APPEND_ITEM myitem 8 UINT "Test Item" BIG_ENDIAN extra'
|
|
228
|
+
when "ID_ITEM"
|
|
229
|
+
tf.puts 'ID_ITEM myitem 0 8 UINT 1 "Test Item id=1" LITTLE_ENDIAN extra'
|
|
230
|
+
when "APPEND_ID_ITEM"
|
|
231
|
+
tf.puts 'APPEND_ID_ITEM myitem 8 UINT 1 "Test Item id=1" BIG_ENDIAN extra'
|
|
232
|
+
when "ARRAY_ITEM"
|
|
233
|
+
tf.puts 'ARRAY_ITEM myitem 0 8 UINT 24 "Test Item array" LITTLE_ENDIAN extra'
|
|
234
|
+
when "APPEND_ARRAY_ITEM"
|
|
235
|
+
tf.puts 'APPEND_ARRAY_ITEM myitem 0 8 UINT 24 "Test Item array" BIG_ENDIAN extra'
|
|
236
|
+
when "SELECT_ITEM"
|
|
237
|
+
tf.puts 'ITEM myitem 0 8 UINT'
|
|
238
|
+
tf.puts 'SELECT_ITEM myitem extra'
|
|
239
|
+
when "MACRO_APPEND_START"
|
|
240
|
+
tf.puts 'MACRO_APPEND_START 0 1 "%s_%d" extra'
|
|
241
|
+
when "ACRO_APPEND_END"
|
|
242
|
+
tf.puts 'MACRO_APPEND_END extra'
|
|
243
|
+
end
|
|
244
|
+
tf.close
|
|
245
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Too many parameters for #{keyword}/)
|
|
246
|
+
tf.unlink
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
@item_keywords.each do |keyword|
|
|
250
|
+
# The following can have an "unlimited" number of arguments
|
|
251
|
+
next if %w(POLY_READ_CONVERSION POLY_WRITE_CONVERSION READ_CONVERSION WRITE_CONVERSION SEG_POLY_READ_CONVERSION SEG_POLY_WRITE_CONVERSION LIMITS_RESPONSE META).include? keyword
|
|
252
|
+
tf = Tempfile.new('unittest')
|
|
253
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
254
|
+
tf.puts 'ITEM myitem 0 8 UINT "Test Item"'
|
|
255
|
+
case keyword
|
|
256
|
+
when "STATE"
|
|
257
|
+
tf.puts 'STATE mystate 0 RED extra'
|
|
258
|
+
when "GENERIC_READ_CONVERSION_START", "GENERIC_WRITE_CONVERSION_START"
|
|
259
|
+
tf.puts "#{keyword} FLOAT 64 extra"
|
|
260
|
+
when "LIMITS"
|
|
261
|
+
tf.puts 'LIMITS mylimits 1 ENABLED 0 10 20 30 12 18 20'
|
|
262
|
+
when "UNITS"
|
|
263
|
+
tf.puts 'UNITS degrees deg extra'
|
|
264
|
+
when "FORMAT_STRING", "DESCRIPTION"
|
|
265
|
+
tf.puts "#{keyword} 'string' extra"
|
|
266
|
+
end
|
|
267
|
+
tf.close
|
|
268
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Too many parameters for #{keyword}/)
|
|
269
|
+
tf.unlink
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
context "with COMMAND or TELEMETRY" do
|
|
275
|
+
it "should complain about invalid endianness" do
|
|
276
|
+
%w(COMMAND TELEMETRY).each do |keyword|
|
|
277
|
+
tf = Tempfile.new('unittest')
|
|
278
|
+
tf.puts keyword + ' tgt1 pkt1 MIDDLE_ENDIAN "Packet"'
|
|
279
|
+
tf.close
|
|
280
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "Invalid endianness MIDDLE_ENDIAN. Must be BIG_ENDIAN or LITTLE_ENDIAN.")
|
|
281
|
+
tf.unlink
|
|
282
|
+
end
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
it "should process target, packet, endianness, description" do
|
|
286
|
+
%w(COMMAND TELEMETRY).each do |keyword|
|
|
287
|
+
tf = Tempfile.new('unittest')
|
|
288
|
+
tf.puts keyword + ' tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
289
|
+
tf.close
|
|
290
|
+
@pc.process_file(tf.path, "TGT1")
|
|
291
|
+
pkt = @pc.commands["TGT1"]["PKT1"] if keyword == 'COMMAND'
|
|
292
|
+
pkt = @pc.telemetry["TGT1"]["PKT1"] if keyword == 'TELEMETRY'
|
|
293
|
+
pkt.target_name.should eql "TGT1"
|
|
294
|
+
pkt.packet_name.should eql "PKT1"
|
|
295
|
+
pkt.default_endianness.should eql :LITTLE_ENDIAN
|
|
296
|
+
pkt.description.should eql "Packet"
|
|
297
|
+
tf.unlink
|
|
298
|
+
end
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
it "should substitute the target name" do
|
|
302
|
+
%w(COMMAND TELEMETRY).each do |keyword|
|
|
303
|
+
tf = Tempfile.new('unittest')
|
|
304
|
+
tf.puts keyword + ' tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
305
|
+
tf.close
|
|
306
|
+
@pc.process_file(tf.path, "NEW")
|
|
307
|
+
pkt = @pc.commands["NEW"]["PKT1"] if keyword == 'COMMAND'
|
|
308
|
+
pkt = @pc.telemetry["NEW"]["PKT1"] if keyword == 'TELEMETRY'
|
|
309
|
+
pkt.target_name.should eql "NEW"
|
|
310
|
+
tf.unlink
|
|
311
|
+
end
|
|
312
|
+
end
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
context "with SELECT_COMMAND or SELECT_TELEMETRY" do
|
|
316
|
+
it "should complain if the packet is not found" do
|
|
317
|
+
%w(SELECT_COMMAND SELECT_TELEMETRY).each do |keyword|
|
|
318
|
+
tf = Tempfile.new('unittest')
|
|
319
|
+
tf.puts keyword + ' tgt1 pkt1'
|
|
320
|
+
tf.puts 'SELECT_ITEM ITEM1'
|
|
321
|
+
tf.puts ' DESCRIPTION "New description"'
|
|
322
|
+
tf.close
|
|
323
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Packet not found/)
|
|
324
|
+
tf.unlink
|
|
325
|
+
end
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
it "should select a packet for modification" do
|
|
329
|
+
%w(SELECT_COMMAND SELECT_TELEMETRY).each do |keyword|
|
|
330
|
+
tf = Tempfile.new('unittest')
|
|
331
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
332
|
+
tf.puts ' APPEND_PARAMETER item1 16 UINT 0 0 0 "Item"'
|
|
333
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
334
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
335
|
+
tf.close
|
|
336
|
+
@pc.process_file(tf.path, "TGT1")
|
|
337
|
+
pkt = @pc.commands["TGT1"]["PKT1"] if keyword =~ /COMMAND/
|
|
338
|
+
pkt = @pc.telemetry["TGT1"]["PKT1"] if keyword =~ /TELEMETRY/
|
|
339
|
+
pkt.get_item("ITEM1").description.should eql "Item"
|
|
340
|
+
tf.unlink
|
|
341
|
+
|
|
342
|
+
tf = Tempfile.new('unittest')
|
|
343
|
+
tf.puts keyword + ' tgt1 pkt1'
|
|
344
|
+
tf.puts 'SELECT_PARAMETER ITEM1' if keyword =~ /COMMAND/
|
|
345
|
+
tf.puts 'SELECT_ITEM ITEM1' if keyword =~ /TELEMETRY/
|
|
346
|
+
tf.puts ' DESCRIPTION "New description"'
|
|
347
|
+
tf.close
|
|
348
|
+
@pc.process_file(tf.path, "TGT1")
|
|
349
|
+
pkt = @pc.commands["TGT1"]["PKT1"] if keyword =~ /COMMAND/
|
|
350
|
+
pkt = @pc.telemetry["TGT1"]["PKT1"] if keyword =~ /TELEMETRY/
|
|
351
|
+
pkt.get_item("ITEM1").description.should eql "New description"
|
|
352
|
+
tf.unlink
|
|
353
|
+
end
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
it "should substitute the target name" do
|
|
357
|
+
%w(SELECT_COMMAND SELECT_TELEMETRY).each do |keyword|
|
|
358
|
+
tf = Tempfile.new('unittest')
|
|
359
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
360
|
+
tf.puts ' APPEND_PARAMETER item1 16 UINT 0 0 0 "Item"'
|
|
361
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
362
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
363
|
+
tf.close
|
|
364
|
+
@pc.process_file(tf.path, "NEW")
|
|
365
|
+
pkt = @pc.commands["NEW"]["PKT1"] if keyword =~ /COMMAND/
|
|
366
|
+
pkt = @pc.telemetry["NEW"]["PKT1"] if keyword =~ /TELEMETRY/
|
|
367
|
+
pkt.get_item("ITEM1").description.should eql "Item"
|
|
368
|
+
tf.unlink
|
|
369
|
+
|
|
370
|
+
tf = Tempfile.new('unittest')
|
|
371
|
+
tf.puts keyword + ' tgt1 pkt1'
|
|
372
|
+
tf.puts 'SELECT_PARAMETER ITEM1' if keyword =~ /COMMAND/
|
|
373
|
+
tf.puts 'SELECT_ITEM ITEM1' if keyword =~ /TELEMETRY/
|
|
374
|
+
tf.puts ' DESCRIPTION "New description"'
|
|
375
|
+
tf.close
|
|
376
|
+
@pc.process_file(tf.path, "NEW")
|
|
377
|
+
pkt = @pc.commands["NEW"]["PKT1"] if keyword =~ /COMMAND/
|
|
378
|
+
pkt = @pc.telemetry["NEW"]["PKT1"] if keyword =~ /TELEMETRY/
|
|
379
|
+
pkt.get_item("ITEM1").description.should eql "New description"
|
|
380
|
+
tf.unlink
|
|
381
|
+
end
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
context "with SELECT_PARAMETER" do
|
|
386
|
+
it "should complain if used with SELECT_TELEMETRY" do
|
|
387
|
+
tf = Tempfile.new('unittest')
|
|
388
|
+
tf.puts 'TELEMETRY TGT PKT LITTLE_ENDIAN "Packet"'
|
|
389
|
+
tf.puts ' APPEND_ITEM ITEM 16 UINT "Item"'
|
|
390
|
+
tf.puts 'SELECT_TELEMETRY TGT PKT'
|
|
391
|
+
tf.puts ' SELECT_PARAMETER ITEM'
|
|
392
|
+
tf.close
|
|
393
|
+
expect { @pc.process_file(tf.path, "TGT") }.to raise_error(ConfigParser::Error, "SELECT_PARAMETER only applies to command packets")
|
|
394
|
+
end
|
|
395
|
+
|
|
396
|
+
it "should complain if the parameter is not found" do
|
|
397
|
+
tf = Tempfile.new('unittest')
|
|
398
|
+
tf.puts 'COMMAND TGT PKT LITTLE_ENDIAN "Packet"'
|
|
399
|
+
tf.puts ' APPEND_PARAMETER PARAM 16 UINT 0 0 0 "Param"'
|
|
400
|
+
tf.close
|
|
401
|
+
@pc.process_file(tf.path, "TGT")
|
|
402
|
+
pkt = @pc.commands["TGT"]["PKT"]
|
|
403
|
+
pkt.get_item("PARAM").description.should eql "Param"
|
|
404
|
+
tf.unlink
|
|
405
|
+
|
|
406
|
+
tf = Tempfile.new('unittest')
|
|
407
|
+
tf.puts 'SELECT_COMMAND TGT PKT'
|
|
408
|
+
tf.puts ' SELECT_PARAMETER PARAMX'
|
|
409
|
+
tf.puts ' DESCRIPTION "New description"'
|
|
410
|
+
tf.close
|
|
411
|
+
expect { @pc.process_file(tf.path, "TGT") }.to raise_error(ConfigParser::Error, "PARAMX not found in command packet TGT PKT")
|
|
412
|
+
end
|
|
413
|
+
end
|
|
414
|
+
|
|
415
|
+
context "with SELECT_ITEM" do
|
|
416
|
+
it "should complain if used with SELECT_COMMAND" do
|
|
417
|
+
tf = Tempfile.new('unittest')
|
|
418
|
+
tf.puts 'COMMAND TGT PKT LITTLE_ENDIAN "Packet"'
|
|
419
|
+
tf.puts ' APPEND_PARAMETER PARAM 16 UINT 0 0 0 "Param"'
|
|
420
|
+
tf.puts 'SELECT_COMMAND TGT PKT'
|
|
421
|
+
tf.puts ' SELECT_ITEM PARAM'
|
|
422
|
+
tf.close
|
|
423
|
+
expect { @pc.process_file(tf.path, "TGT") }.to raise_error(ConfigParser::Error, "SELECT_ITEM only applies to telemetry packets")
|
|
424
|
+
end
|
|
425
|
+
|
|
426
|
+
it "should complain if the item is not found" do
|
|
427
|
+
tf = Tempfile.new('unittest')
|
|
428
|
+
tf.puts 'TELEMETRY TGT PKT LITTLE_ENDIAN "Packet"'
|
|
429
|
+
tf.puts ' APPEND_ITEM ITEM 16 UINT "Item"'
|
|
430
|
+
tf.close
|
|
431
|
+
@pc.process_file(tf.path, "TGT")
|
|
432
|
+
pkt = @pc.telemetry["TGT"]["PKT"]
|
|
433
|
+
pkt.get_item("ITEM").description.should eql "Item"
|
|
434
|
+
tf.unlink
|
|
435
|
+
|
|
436
|
+
tf = Tempfile.new('unittest')
|
|
437
|
+
tf.puts 'SELECT_TELEMETRY TGT PKT'
|
|
438
|
+
tf.puts ' SELECT_ITEM ITEMX'
|
|
439
|
+
tf.puts ' DESCRIPTION "New description"'
|
|
440
|
+
tf.close
|
|
441
|
+
expect { @pc.process_file(tf.path, "TGT") }.to raise_error(ConfigParser::Error, "ITEMX not found in telemetry packet TGT PKT")
|
|
442
|
+
end
|
|
443
|
+
end
|
|
444
|
+
|
|
445
|
+
context "with keywords including ITEM" do
|
|
446
|
+
it "should only allow DERIVED items with offset 0 and size 0" do
|
|
447
|
+
tf = Tempfile.new('unittest')
|
|
448
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
449
|
+
tf.puts ' ITEM ITEM1 8 0 DERIVED'
|
|
450
|
+
tf.close
|
|
451
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /DERIVED items must have bit_offset of zero/)
|
|
452
|
+
tf.unlink
|
|
453
|
+
|
|
454
|
+
tf = Tempfile.new('unittest')
|
|
455
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
456
|
+
tf.puts ' ITEM ITEM1 0 8 DERIVED'
|
|
457
|
+
tf.close
|
|
458
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /DERIVED items must have bit_size of zero/)
|
|
459
|
+
tf.unlink
|
|
460
|
+
|
|
461
|
+
tf = Tempfile.new('unittest')
|
|
462
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
463
|
+
tf.puts ' ITEM ITEM1 0 0 DERIVED'
|
|
464
|
+
tf.close
|
|
465
|
+
@pc.process_file(tf.path, "TGT1")
|
|
466
|
+
@pc.telemetry["TGT1"]["PKT1"].items.keys.should include('ITEM1')
|
|
467
|
+
tf.unlink
|
|
468
|
+
end
|
|
469
|
+
|
|
470
|
+
it "should accept types INT UINT FLOAT STRING BLOCK" do
|
|
471
|
+
tf = Tempfile.new('unittest')
|
|
472
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
473
|
+
tf.puts ' ID_ITEM ITEM1 0 32 INT 0'
|
|
474
|
+
tf.puts ' ITEM ITEM2 0 32 UINT'
|
|
475
|
+
tf.puts ' ARRAY_ITEM ITEM3 0 32 FLOAT 64'
|
|
476
|
+
tf.puts ' APPEND_ID_ITEM ITEM4 32 STRING "ABCD"'
|
|
477
|
+
tf.puts ' APPEND_ITEM ITEM5 32 BLOCK'
|
|
478
|
+
tf.puts ' APPEND_ARRAY_ITEM ITEM6 32 BLOCK 64'
|
|
479
|
+
tf.close
|
|
480
|
+
@pc.process_file(tf.path, "TGT1")
|
|
481
|
+
@pc.telemetry["TGT1"]["PKT1"].items.keys.should include('ITEM1','ITEM2','ITEM3','ITEM4','ITEM5','ITEM6')
|
|
482
|
+
id_items = []
|
|
483
|
+
id_items << @pc.telemetry["TGT1"]["PKT1"].items["ITEM1"]
|
|
484
|
+
id_items << @pc.telemetry["TGT1"]["PKT1"].items["ITEM4"]
|
|
485
|
+
@pc.telemetry["TGT1"]["PKT1"].id_items.should eql id_items
|
|
486
|
+
tf.unlink
|
|
487
|
+
end
|
|
488
|
+
|
|
489
|
+
it "should support arbitrary endianness per item" do
|
|
490
|
+
tf = Tempfile.new('unittest')
|
|
491
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
492
|
+
tf.puts ' ID_ITEM ITEM1 0 32 UINT 0 "" LITTLE_ENDIAN'
|
|
493
|
+
tf.puts ' ITEM ITEM2 0 32 UINT "" LITTLE_ENDIAN'
|
|
494
|
+
tf.puts ' ARRAY_ITEM ITEM3 0 32 UINT 64 "" LITTLE_ENDIAN'
|
|
495
|
+
tf.puts ' APPEND_ID_ITEM ITEM4 32 UINT 1 "" LITTLE_ENDIAN'
|
|
496
|
+
tf.puts ' APPEND_ITEM ITEM5 32 UINT "" LITTLE_ENDIAN'
|
|
497
|
+
tf.puts ' APPEND_ARRAY_ITEM ITEM6 32 UINT 64 "" LITTLE_ENDIAN'
|
|
498
|
+
tf.puts ' ID_ITEM ITEM10 224 32 UINT 0 "" BIG_ENDIAN'
|
|
499
|
+
tf.puts ' ITEM ITEM20 256 32 UINT "" BIG_ENDIAN'
|
|
500
|
+
tf.puts ' ARRAY_ITEM ITEM30 0 32 UINT 64 "" BIG_ENDIAN'
|
|
501
|
+
tf.puts ' APPEND_ID_ITEM ITEM40 32 UINT 1 "" BIG_ENDIAN'
|
|
502
|
+
tf.puts ' APPEND_ITEM ITEM50 32 UINT "" BIG_ENDIAN'
|
|
503
|
+
tf.puts ' APPEND_ARRAY_ITEM ITEM60 32 UINT 64 "" BIG_ENDIAN'
|
|
504
|
+
tf.close
|
|
505
|
+
@pc.process_file(tf.path, "TGT1")
|
|
506
|
+
packet = @pc.telemetry["TGT1"]["PKT1"]
|
|
507
|
+
packet.buffer = "\x00\x00\x00\x01" * 16
|
|
508
|
+
packet.read("ITEM1").should eql 0x01000000
|
|
509
|
+
packet.read("ITEM2").should eql 0x01000000
|
|
510
|
+
packet.read("ITEM3").should eql [0x01000000, 0x01000000]
|
|
511
|
+
packet.read("ITEM4").should eql 0x01000000
|
|
512
|
+
packet.read("ITEM5").should eql 0x01000000
|
|
513
|
+
packet.read("ITEM6").should eql [0x01000000, 0x01000000]
|
|
514
|
+
packet.read("ITEM10").should eql 0x00000001
|
|
515
|
+
packet.read("ITEM20").should eql 0x00000001
|
|
516
|
+
packet.read("ITEM30").should eql [0x00000001, 0x00000001]
|
|
517
|
+
packet.read("ITEM40").should eql 0x00000001
|
|
518
|
+
packet.read("ITEM50").should eql 0x00000001
|
|
519
|
+
packet.read("ITEM60").should eql [0x00000001, 0x00000001]
|
|
520
|
+
tf.unlink
|
|
521
|
+
end
|
|
522
|
+
end
|
|
523
|
+
|
|
524
|
+
context "with keywords including PARAMETER" do
|
|
525
|
+
it "should only allow DERIVED items with offset 0 and size 0" do
|
|
526
|
+
tf = Tempfile.new('unittest')
|
|
527
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
528
|
+
tf.puts ' PARAMETER ITEM1 8 0 DERIVED 0 0 0'
|
|
529
|
+
tf.close
|
|
530
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /DERIVED items must have bit_offset of zero/)
|
|
531
|
+
tf.unlink
|
|
532
|
+
|
|
533
|
+
tf = Tempfile.new('unittest')
|
|
534
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
535
|
+
tf.puts ' PARAMETER ITEM1 0 8 DERIVED 0 0 0'
|
|
536
|
+
tf.close
|
|
537
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /DERIVED items must have bit_size of zero/)
|
|
538
|
+
tf.unlink
|
|
539
|
+
|
|
540
|
+
tf = Tempfile.new('unittest')
|
|
541
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
542
|
+
tf.puts ' PARAMETER ITEM1 0 0 DERIVED 0 0 0'
|
|
543
|
+
tf.close
|
|
544
|
+
@pc.process_file(tf.path, "TGT1")
|
|
545
|
+
@pc.commands["TGT1"]["PKT1"].items.keys.should include('ITEM1')
|
|
546
|
+
tf.unlink
|
|
547
|
+
end
|
|
548
|
+
|
|
549
|
+
it "should not allow ID_PARAMETER with DERIVED type" do
|
|
550
|
+
tf = Tempfile.new('unittest')
|
|
551
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
552
|
+
tf.puts ' ID_PARAMETER ITEM1 0 0 DERIVED 0 0 0'
|
|
553
|
+
tf.close
|
|
554
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /DERIVED data type not allowed/)
|
|
555
|
+
tf.unlink
|
|
556
|
+
end
|
|
557
|
+
|
|
558
|
+
it "should not allow APPEND_ID_PARAMETER with DERIVED type" do
|
|
559
|
+
tf = Tempfile.new('unittest')
|
|
560
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
561
|
+
tf.puts ' APPEND_ID_PARAMETER ITEM1 0 DERIVED 0 0 0'
|
|
562
|
+
tf.close
|
|
563
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /DERIVED data type not allowed/)
|
|
564
|
+
tf.unlink
|
|
565
|
+
end
|
|
566
|
+
|
|
567
|
+
it "should accept types INT UINT FLOAT STRING BLOCK" do
|
|
568
|
+
tf = Tempfile.new('unittest')
|
|
569
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
570
|
+
tf.puts ' ID_PARAMETER ITEM1 0 32 INT 0 0 0'
|
|
571
|
+
tf.puts ' ID_PARAMETER ITEM2 32 32 STRING "ABCD"'
|
|
572
|
+
tf.puts ' PARAMETER ITEM3 64 32 UINT 0 0 0'
|
|
573
|
+
tf.puts ' ARRAY_PARAMETER ITEM4 96 32 FLOAT 64'
|
|
574
|
+
tf.puts ' APPEND_ID_PARAMETER ITEM5 32 UINT 0 0 0'
|
|
575
|
+
tf.puts ' APPEND_ID_PARAMETER ITEM6 32 STRING "ABCD"'
|
|
576
|
+
tf.puts ' APPEND_PARAMETER ITEM7 32 BLOCK "1234"'
|
|
577
|
+
tf.puts ' APPEND_ARRAY_PARAMETER ITEM8 32 BLOCK 64'
|
|
578
|
+
tf.close
|
|
579
|
+
@pc.process_file(tf.path, "TGT1")
|
|
580
|
+
@pc.commands["TGT1"]["PKT1"].items.keys.should include('ITEM1','ITEM2','ITEM3','ITEM4','ITEM5','ITEM6','ITEM7','ITEM8')
|
|
581
|
+
tf.unlink
|
|
582
|
+
end
|
|
583
|
+
|
|
584
|
+
it "should support arbitrary endianness per item" do
|
|
585
|
+
tf = Tempfile.new('unittest')
|
|
586
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
587
|
+
tf.puts ' ID_PARAMETER ITEM1 0 32 UINT 0 0 0 "" LITTLE_ENDIAN'
|
|
588
|
+
tf.puts ' PARAMETER ITEM2 0 32 UINT 0 0 0 "" LITTLE_ENDIAN'
|
|
589
|
+
tf.puts ' ARRAY_PARAMETER ITEM3 0 32 UINT 64 "" LITTLE_ENDIAN'
|
|
590
|
+
tf.puts ' APPEND_ID_PARAMETER ITEM4 32 UINT 0 0 0 "" LITTLE_ENDIAN'
|
|
591
|
+
tf.puts ' APPEND_PARAMETER ITEM5 32 UINT 0 0 0 "" LITTLE_ENDIAN'
|
|
592
|
+
tf.puts ' APPEND_ARRAY_PARAMETER ITEM6 32 UINT 64 "" LITTLE_ENDIAN'
|
|
593
|
+
tf.puts ' ID_PARAMETER ITEM10 224 32 UINT 0 0 0 "" BIG_ENDIAN'
|
|
594
|
+
tf.puts ' PARAMETER ITEM20 256 32 UINT 0 0 0 "" BIG_ENDIAN'
|
|
595
|
+
tf.puts ' ARRAY_PARAMETER ITEM30 0 32 UINT 64 "" BIG_ENDIAN'
|
|
596
|
+
tf.puts ' APPEND_ID_PARAMETER ITEM40 32 UINT 0 0 0 "" BIG_ENDIAN'
|
|
597
|
+
tf.puts ' APPEND_PARAMETER ITEM50 32 UINT 0 0 0 "" BIG_ENDIAN'
|
|
598
|
+
tf.puts ' APPEND_ARRAY_PARAMETER ITEM60 32 UINT 64 "" BIG_ENDIAN'
|
|
599
|
+
tf.close
|
|
600
|
+
@pc.process_file(tf.path, "TGT1")
|
|
601
|
+
packet = @pc.commands["TGT1"]["PKT1"]
|
|
602
|
+
packet.buffer = "\x00\x00\x00\x01" * 16
|
|
603
|
+
packet.read("ITEM1").should eql 0x01000000
|
|
604
|
+
packet.read("ITEM2").should eql 0x01000000
|
|
605
|
+
packet.read("ITEM3").should eql [0x01000000, 0x01000000]
|
|
606
|
+
packet.read("ITEM4").should eql 0x01000000
|
|
607
|
+
packet.read("ITEM5").should eql 0x01000000
|
|
608
|
+
packet.read("ITEM6").should eql [0x01000000, 0x01000000]
|
|
609
|
+
packet.read("ITEM10").should eql 0x00000001
|
|
610
|
+
packet.read("ITEM20").should eql 0x00000001
|
|
611
|
+
packet.read("ITEM30").should eql [0x00000001, 0x00000001]
|
|
612
|
+
packet.read("ITEM40").should eql 0x00000001
|
|
613
|
+
packet.read("ITEM50").should eql 0x00000001
|
|
614
|
+
packet.read("ITEM60").should eql [0x00000001, 0x00000001]
|
|
615
|
+
tf.unlink
|
|
616
|
+
end
|
|
617
|
+
end
|
|
618
|
+
|
|
619
|
+
context "with LIMITS_GROUP" do
|
|
620
|
+
it "should create a new limits group" do
|
|
621
|
+
tf = Tempfile.new('unittest')
|
|
622
|
+
tf.puts 'LIMITS_GROUP TVAC'
|
|
623
|
+
tf.puts 'LIMITS_GROUP VIBE'
|
|
624
|
+
tf.close
|
|
625
|
+
@pc.limits_groups.should be_empty
|
|
626
|
+
@pc.process_file(tf.path, "TGT1")
|
|
627
|
+
@pc.limits_groups.should include('TVAC','VIBE')
|
|
628
|
+
tf.unlink
|
|
629
|
+
end
|
|
630
|
+
end
|
|
631
|
+
|
|
632
|
+
context "with LIMITS_ITEM" do
|
|
633
|
+
it "should add a new limits item to the group" do
|
|
634
|
+
tf = Tempfile.new('unittest')
|
|
635
|
+
tf.puts 'LIMITS_GROUP TVAC'
|
|
636
|
+
tf.puts 'LIMITS_GROUP_ITEM TGT1 PKT1 ITEM1'
|
|
637
|
+
tf.close
|
|
638
|
+
@pc.limits_groups.should be_empty
|
|
639
|
+
@pc.process_file(tf.path, "TGT1")
|
|
640
|
+
@pc.limits_groups["TVAC"].should eql [%w(TGT1 PKT1 ITEM1)]
|
|
641
|
+
tf.unlink
|
|
642
|
+
|
|
643
|
+
# Show we can 're-open' the group and add items
|
|
644
|
+
tf = Tempfile.new('unittest')
|
|
645
|
+
tf.puts 'LIMITS_GROUP TVAC'
|
|
646
|
+
tf.puts 'LIMITS_GROUP_ITEM TGT1 PKT1 ITEM2'
|
|
647
|
+
tf.close
|
|
648
|
+
@pc.process_file(tf.path, "TGT1")
|
|
649
|
+
@pc.limits_groups["TVAC"].should eql [%w(TGT1 PKT1 ITEM1), %w(TGT1 PKT1 ITEM2)]
|
|
650
|
+
tf.unlink
|
|
651
|
+
end
|
|
652
|
+
end
|
|
653
|
+
|
|
654
|
+
context "with MACRO_APPEND_START" do
|
|
655
|
+
it "should add items to the packet" do
|
|
656
|
+
tf = Tempfile.new('unittest')
|
|
657
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
658
|
+
tf.puts 'MACRO_APPEND_START 1 5'
|
|
659
|
+
tf.puts 'APPEND_ITEM BIT 16 UINT "Setting #x"'
|
|
660
|
+
tf.puts ' STATE BAD 0 RED'
|
|
661
|
+
tf.puts ' STATE GOOD 1 GREEN'
|
|
662
|
+
tf.puts 'MACRO_APPEND_END'
|
|
663
|
+
tf.close
|
|
664
|
+
@pc.process_file(tf.path, "TGT1")
|
|
665
|
+
pkt = @pc.telemetry["TGT1"]["PKT1"]
|
|
666
|
+
pkt.items.keys.should include('BIT1','BIT2','BIT3','BIT4','BIT5')
|
|
667
|
+
limits_items = []
|
|
668
|
+
pkt.items.each do |name, item|
|
|
669
|
+
limits_items << item if name =~ /BIT/
|
|
670
|
+
end
|
|
671
|
+
pkt.limits_items.should eql limits_items
|
|
672
|
+
tf.unlink
|
|
673
|
+
end
|
|
674
|
+
|
|
675
|
+
it "should array items to the packet" do
|
|
676
|
+
tf = Tempfile.new('unittest')
|
|
677
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
678
|
+
tf.puts 'MACRO_APPEND_START 1 5'
|
|
679
|
+
tf.puts 'APPEND_ARRAY_ITEM BIT 16 INT 64 "Int Array Parameter"'
|
|
680
|
+
tf.puts 'MACRO_APPEND_END'
|
|
681
|
+
tf.close
|
|
682
|
+
@pc.process_file(tf.path, "TGT1")
|
|
683
|
+
pkt = @pc.telemetry["TGT1"]["PKT1"]
|
|
684
|
+
pkt.items.keys.should include('BIT1','BIT2','BIT3','BIT4','BIT5')
|
|
685
|
+
pkt.limits_items.should be_empty
|
|
686
|
+
tf.unlink
|
|
687
|
+
end
|
|
688
|
+
|
|
689
|
+
it "should work with printf format strings" do
|
|
690
|
+
tf = Tempfile.new('unittest')
|
|
691
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
692
|
+
tf.puts 'MACRO_APPEND_START 1 5 "%d%s"'
|
|
693
|
+
tf.puts 'APPEND_ID_ITEM BIT 16 UINT 0 "Setting #x"'
|
|
694
|
+
tf.puts 'MACRO_APPEND_END'
|
|
695
|
+
tf.close
|
|
696
|
+
@pc.process_file(tf.path, "TGT1")
|
|
697
|
+
pkt = @pc.telemetry["TGT1"]["PKT1"]
|
|
698
|
+
pkt.items.keys.should include('1BIT','2BIT','3BIT','4BIT','5BIT')
|
|
699
|
+
pkt.limits_items.should be_empty
|
|
700
|
+
tf.unlink
|
|
701
|
+
end
|
|
702
|
+
end
|
|
703
|
+
|
|
704
|
+
context "with ALLOW_SHORT" do
|
|
705
|
+
it "should mark the packet as allowing short buffers" do
|
|
706
|
+
tf = Tempfile.new('unittest')
|
|
707
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
708
|
+
tf.puts 'ALLOW_SHORT'
|
|
709
|
+
tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "Description"'
|
|
710
|
+
tf.close
|
|
711
|
+
@pc.process_file(tf.path, "TGT1")
|
|
712
|
+
@pc.telemetry["TGT1"]["PKT1"].short_buffer_allowed.should be_truthy
|
|
713
|
+
@pc.telemetry["TGT1"]["PKT2"].short_buffer_allowed.should be_falsey
|
|
714
|
+
tf.unlink
|
|
715
|
+
end
|
|
716
|
+
end
|
|
717
|
+
|
|
718
|
+
context "with META" do
|
|
719
|
+
it "should save metadata" do
|
|
720
|
+
tf = Tempfile.new('unittest')
|
|
721
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
722
|
+
tf.puts 'META TYPE "struct packet"'
|
|
723
|
+
tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "Description"'
|
|
724
|
+
tf.puts 'META TYPE "struct packet2"'
|
|
725
|
+
tf.close
|
|
726
|
+
@pc.process_file(tf.path, "TGT1")
|
|
727
|
+
@pc.telemetry["TGT1"]["PKT1"].meta['TYPE'].should eql ["struct packet"]
|
|
728
|
+
@pc.telemetry["TGT1"]["PKT2"].meta['TYPE'].should eql ["struct packet2"]
|
|
729
|
+
tf.unlink
|
|
730
|
+
end
|
|
731
|
+
end
|
|
732
|
+
|
|
733
|
+
context "with DISABLE_MESSAGES" do
|
|
734
|
+
it "should mark the packet as messages disabled" do
|
|
735
|
+
tf = Tempfile.new('unittest')
|
|
736
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
737
|
+
tf.puts 'DISABLE_MESSAGES'
|
|
738
|
+
tf.puts 'COMMAND tgt1 pkt2 LITTLE_ENDIAN "Description"'
|
|
739
|
+
tf.close
|
|
740
|
+
@pc.process_file(tf.path, "TGT1")
|
|
741
|
+
@pc.commands["TGT1"]["PKT1"].messages_disabled.should be_truthy
|
|
742
|
+
@pc.commands["TGT1"]["PKT2"].messages_disabled.should be_falsey
|
|
743
|
+
tf.unlink
|
|
744
|
+
end
|
|
745
|
+
end
|
|
746
|
+
|
|
747
|
+
context "with HIDDEN" do
|
|
748
|
+
it "should mark the packet as hidden" do
|
|
749
|
+
tf = Tempfile.new('unittest')
|
|
750
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
751
|
+
tf.puts 'HIDDEN'
|
|
752
|
+
tf.puts 'COMMAND tgt1 pkt2 LITTLE_ENDIAN "Description"'
|
|
753
|
+
tf.close
|
|
754
|
+
@pc.process_file(tf.path, "TGT1")
|
|
755
|
+
@pc.commands["TGT1"]["PKT1"].hidden.should be_truthy
|
|
756
|
+
@pc.commands["TGT1"]["PKT1"].disabled.should be_falsey
|
|
757
|
+
@pc.commands["TGT1"]["PKT2"].hidden.should be_falsey
|
|
758
|
+
@pc.commands["TGT1"]["PKT2"].disabled.should be_falsey
|
|
759
|
+
tf.unlink
|
|
760
|
+
end
|
|
761
|
+
end
|
|
762
|
+
|
|
763
|
+
context "with DISABLED" do
|
|
764
|
+
it "should mark the packet as disabled" do
|
|
765
|
+
tf = Tempfile.new('unittest')
|
|
766
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
767
|
+
tf.puts 'DISABLED'
|
|
768
|
+
tf.puts 'COMMAND tgt1 pkt2 LITTLE_ENDIAN "Description"'
|
|
769
|
+
tf.close
|
|
770
|
+
@pc.process_file(tf.path, "TGT1")
|
|
771
|
+
@pc.commands["TGT1"]["PKT1"].hidden.should be_truthy
|
|
772
|
+
@pc.commands["TGT1"]["PKT1"].disabled.should be_truthy
|
|
773
|
+
@pc.commands["TGT1"]["PKT2"].hidden.should be_falsey
|
|
774
|
+
@pc.commands["TGT1"]["PKT2"].disabled.should be_falsey
|
|
775
|
+
tf.unlink
|
|
776
|
+
end
|
|
777
|
+
end
|
|
778
|
+
|
|
779
|
+
context "with HAZARDOUS" do
|
|
780
|
+
it "should mark the packet as hazardous" do
|
|
781
|
+
tf = Tempfile.new('unittest')
|
|
782
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
783
|
+
tf.puts 'HAZARDOUS'
|
|
784
|
+
tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "Description"'
|
|
785
|
+
tf.puts 'COMMAND tgt2 pkt1 LITTLE_ENDIAN "Description"'
|
|
786
|
+
tf.puts 'HAZARDOUS'
|
|
787
|
+
tf.puts 'COMMAND tgt2 pkt2 LITTLE_ENDIAN "Description"'
|
|
788
|
+
tf.close
|
|
789
|
+
@pc.process_file(tf.path, "SYSTEM")
|
|
790
|
+
@pc.telemetry["TGT1"]["PKT1"].hazardous.should be_truthy
|
|
791
|
+
@pc.telemetry["TGT1"]["PKT2"].hazardous.should be_falsey
|
|
792
|
+
@pc.commands["TGT2"]["PKT1"].hazardous.should be_truthy
|
|
793
|
+
@pc.commands["TGT2"]["PKT2"].hazardous.should be_falsey
|
|
794
|
+
tf.unlink
|
|
795
|
+
end
|
|
796
|
+
|
|
797
|
+
it "should take a description" do
|
|
798
|
+
tf = Tempfile.new('unittest')
|
|
799
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
800
|
+
tf.puts 'HAZARDOUS "Hazardous description"'
|
|
801
|
+
tf.close
|
|
802
|
+
@pc.process_file(tf.path, "TGT1")
|
|
803
|
+
@pc.commands["TGT1"]["PKT1"].hazardous.should be_truthy
|
|
804
|
+
@pc.commands["TGT1"]["PKT1"].hazardous_description.should eql "Hazardous description"
|
|
805
|
+
tf.unlink
|
|
806
|
+
end
|
|
807
|
+
end
|
|
808
|
+
|
|
809
|
+
context "with STATE" do
|
|
810
|
+
it "should support STRING items" do
|
|
811
|
+
tf = Tempfile.new('unittest')
|
|
812
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
813
|
+
tf.puts ' APPEND_ITEM item1 128 STRING "state item"'
|
|
814
|
+
tf.puts ' STATE FALSE "FALSE STRING"'
|
|
815
|
+
tf.puts ' STATE TRUE "TRUE STRING"'
|
|
816
|
+
tf.close
|
|
817
|
+
@pc.process_file(tf.path, "TGT1")
|
|
818
|
+
@pc.telemetry["TGT1"]["PKT1"].write("ITEM1", "TRUE STRING")
|
|
819
|
+
@pc.telemetry["TGT1"]["PKT1"].read("ITEM1").should eql "TRUE"
|
|
820
|
+
@pc.telemetry["TGT1"]["PKT1"].write("ITEM1", "FALSE STRING")
|
|
821
|
+
@pc.telemetry["TGT1"]["PKT1"].read("ITEM1").should eql "FALSE"
|
|
822
|
+
tf.unlink
|
|
823
|
+
end
|
|
824
|
+
|
|
825
|
+
it "should warn about duplicate states and replace the duplicate" do
|
|
826
|
+
tf = Tempfile.new('unittest')
|
|
827
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
828
|
+
tf.puts ' APPEND_PARAMETER item1 8 UINT 0 2 0 "state item"'
|
|
829
|
+
tf.puts ' STATE FALSE 0'
|
|
830
|
+
tf.puts ' STATE TRUE 1'
|
|
831
|
+
tf.puts ' STATE FALSE 2'
|
|
832
|
+
tf.close
|
|
833
|
+
@pc.process_file(tf.path, "TGT1")
|
|
834
|
+
@pc.warnings.should include("Duplicate state defined on line 5: STATE FALSE 2")
|
|
835
|
+
@pc.commands["TGT1"]["PKT1"].buffer = "\x00"
|
|
836
|
+
@pc.commands["TGT1"]["PKT1"].read("ITEM1").should eql 0
|
|
837
|
+
@pc.commands["TGT1"]["PKT1"].buffer = "\x02"
|
|
838
|
+
@pc.commands["TGT1"]["PKT1"].read("ITEM1").should eql "FALSE"
|
|
839
|
+
tf.unlink
|
|
840
|
+
end
|
|
841
|
+
|
|
842
|
+
context "with telemetry" do
|
|
843
|
+
it "should only allow GREEN YELLOW or RED" do
|
|
844
|
+
tf = Tempfile.new('unittest')
|
|
845
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
846
|
+
tf.puts ' APPEND_ITEM item1 8 UINT "state item"'
|
|
847
|
+
tf.puts ' STATE WORST 1 ORANGE'
|
|
848
|
+
tf.close
|
|
849
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Invalid state color ORANGE/)
|
|
850
|
+
tf.unlink
|
|
851
|
+
end
|
|
852
|
+
|
|
853
|
+
it "should record the state values and colors" do
|
|
854
|
+
tf = Tempfile.new('unittest')
|
|
855
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
856
|
+
tf.puts ' APPEND_ITEM item1 8 UINT "state item"'
|
|
857
|
+
tf.puts ' STATE STATE1 1 RED'
|
|
858
|
+
tf.puts ' STATE STATE2 2 YELLOW'
|
|
859
|
+
tf.puts ' STATE STATE3 3 GREEN'
|
|
860
|
+
tf.puts ' STATE STATE4 4'
|
|
861
|
+
tf.close
|
|
862
|
+
@pc.process_file(tf.path, "TGT1")
|
|
863
|
+
index = 1
|
|
864
|
+
colors = [:RED, :YELLOW, :GREEN]
|
|
865
|
+
@pc.telemetry["TGT1"]["PKT1"].items["ITEM1"].states.each do |name,val|
|
|
866
|
+
name.should eql "STATE#{index}"
|
|
867
|
+
val.should eql index
|
|
868
|
+
@pc.telemetry["TGT1"]["PKT1"].items["ITEM1"].state_colors[name].should eql colors[index - 1]
|
|
869
|
+
|
|
870
|
+
index += 1
|
|
871
|
+
end
|
|
872
|
+
@pc.telemetry["TGT1"]["PKT1"].limits_items.should eql [@pc.telemetry["TGT1"]["PKT1"].items["ITEM1"]]
|
|
873
|
+
tf.unlink
|
|
874
|
+
end
|
|
875
|
+
end
|
|
876
|
+
|
|
877
|
+
context "with command" do
|
|
878
|
+
it "should only allow HAZARDOUS as the third param" do
|
|
879
|
+
tf = Tempfile.new('unittest')
|
|
880
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
881
|
+
tf.puts ' APPEND_PARAMETER item1 8 UINT 0 0 0'
|
|
882
|
+
tf.puts ' STATE WORST 0 RED'
|
|
883
|
+
tf.close
|
|
884
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /HAZARDOUS expected as third parameter/)
|
|
885
|
+
tf.unlink
|
|
886
|
+
end
|
|
887
|
+
|
|
888
|
+
it "should take HAZARDOUS and an optional description" do
|
|
889
|
+
tf = Tempfile.new('unittest')
|
|
890
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
|
|
891
|
+
tf.puts ' APPEND_PARAMETER item1 8 UINT 1 3 1'
|
|
892
|
+
tf.puts ' STATE GOOD 1'
|
|
893
|
+
tf.puts ' STATE BAD 2 HAZARDOUS'
|
|
894
|
+
tf.puts ' STATE WORST 3 HAZARDOUS "Hazardous description"'
|
|
895
|
+
tf.close
|
|
896
|
+
@pc.process_file(tf.path, "TGT1")
|
|
897
|
+
@pc.commands["TGT1"]["PKT1"].buffer = "\x01"
|
|
898
|
+
@pc.commands["TGT1"]["PKT1"].check_limits
|
|
899
|
+
@pc.commands["TGT1"]["PKT1"].items["ITEM1"].hazardous["GOOD"].should be_nil
|
|
900
|
+
@pc.commands["TGT1"]["PKT1"].items["ITEM1"].hazardous["BAD"].should_not be_nil
|
|
901
|
+
@pc.commands["TGT1"]["PKT1"].items["ITEM1"].hazardous["WORST"].should_not be_nil
|
|
902
|
+
@pc.commands["TGT1"]["PKT1"].items["ITEM1"].hazardous["WORST"].should eql "Hazardous description"
|
|
903
|
+
@pc.commands["TGT1"]["PKT1"].limits_items.should be_empty
|
|
904
|
+
tf.unlink
|
|
905
|
+
end
|
|
906
|
+
end
|
|
907
|
+
end
|
|
908
|
+
|
|
909
|
+
context "with READ_CONVERSION and WRITE_CONVERSION" do
|
|
910
|
+
it "should complain about missing conversion file" do
|
|
911
|
+
filename = File.join(File.dirname(__FILE__), "../test_only.rb")
|
|
912
|
+
File.delete(filename) if File.exist?(filename)
|
|
913
|
+
@pc = PacketConfig.new
|
|
914
|
+
|
|
915
|
+
tf = Tempfile.new('unittest')
|
|
916
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
917
|
+
tf.puts ' ITEM item1 0 16 INT "Integer Item"'
|
|
918
|
+
tf.puts ' READ_CONVERSION test_only.rb'
|
|
919
|
+
tf.close
|
|
920
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /TestOnly class not found/)
|
|
921
|
+
tf.unlink
|
|
922
|
+
|
|
923
|
+
tf = Tempfile.new('unittest')
|
|
924
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
925
|
+
tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
|
|
926
|
+
tf.puts ' WRITE_CONVERSION test_only.rb'
|
|
927
|
+
tf.close
|
|
928
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /TestOnly class not found/)
|
|
929
|
+
tf.unlink
|
|
930
|
+
end
|
|
931
|
+
|
|
932
|
+
it "should complain about a non Cosmos::Conversion class" do
|
|
933
|
+
filename = File.join(File.dirname(__FILE__), "../conversion1.rb")
|
|
934
|
+
File.open(filename, 'w') do |file|
|
|
935
|
+
file.puts "class Conversion1"
|
|
936
|
+
file.puts " def call(value,packet,buffer)"
|
|
937
|
+
file.puts " end"
|
|
938
|
+
file.puts "end"
|
|
939
|
+
end
|
|
940
|
+
load 'conversion1.rb'
|
|
941
|
+
File.delete(filename) if File.exist?(filename)
|
|
942
|
+
|
|
943
|
+
tf = Tempfile.new('unittest')
|
|
944
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
945
|
+
tf.puts ' ITEM item1 0 16 INT "Integer Item"'
|
|
946
|
+
tf.puts ' READ_CONVERSION conversion1.rb'
|
|
947
|
+
tf.close
|
|
948
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /read_conversion must be a Cosmos::Conversion but is a Conversion1/)
|
|
949
|
+
tf.unlink
|
|
950
|
+
|
|
951
|
+
tf = Tempfile.new('unittest')
|
|
952
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
953
|
+
tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
|
|
954
|
+
tf.puts ' WRITE_CONVERSION conversion1.rb'
|
|
955
|
+
tf.close
|
|
956
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /write_conversion must be a Cosmos::Conversion but is a Conversion1/)
|
|
957
|
+
tf.unlink
|
|
958
|
+
end
|
|
959
|
+
|
|
960
|
+
it "should parse the conversion" do
|
|
961
|
+
filename = File.join(File.dirname(__FILE__), "../conversion2.rb")
|
|
962
|
+
File.open(filename, 'w') do |file|
|
|
963
|
+
file.puts "require 'cosmos/conversions/conversion'"
|
|
964
|
+
file.puts "class Conversion2 < Cosmos::Conversion"
|
|
965
|
+
file.puts " def call(value,packet,buffer)"
|
|
966
|
+
file.puts " value * 2"
|
|
967
|
+
file.puts " end"
|
|
968
|
+
file.puts "end"
|
|
969
|
+
end
|
|
970
|
+
load 'conversion2.rb'
|
|
971
|
+
|
|
972
|
+
tf = Tempfile.new('unittest')
|
|
973
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
974
|
+
tf.puts ' ITEM item1 0 16 INT "Integer Item"'
|
|
975
|
+
tf.puts ' READ_CONVERSION conversion2.rb'
|
|
976
|
+
tf.close
|
|
977
|
+
@pc.process_file(tf.path, "TGT1")
|
|
978
|
+
@pc.telemetry["TGT1"]["PKT1"].buffer = "\x01"
|
|
979
|
+
@pc.telemetry["TGT1"]["PKT1"].read("ITEM1").should eql 2
|
|
980
|
+
tf.unlink
|
|
981
|
+
|
|
982
|
+
tf = Tempfile.new('unittest')
|
|
983
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
984
|
+
tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
|
|
985
|
+
tf.puts ' WRITE_CONVERSION conversion2.rb'
|
|
986
|
+
tf.close
|
|
987
|
+
@pc.process_file(tf.path, "TGT1")
|
|
988
|
+
@pc.commands["TGT1"]["PKT1"].write("ITEM1", 3)
|
|
989
|
+
@pc.commands["TGT1"]["PKT1"].read("ITEM1").should eql 6
|
|
990
|
+
tf.unlink
|
|
991
|
+
|
|
992
|
+
File.delete(filename) if File.exist?(filename)
|
|
993
|
+
end
|
|
994
|
+
end
|
|
995
|
+
|
|
996
|
+
context "with PROCESSOR" do
|
|
997
|
+
it "should complain about missing processor file" do
|
|
998
|
+
filename = File.join(File.dirname(__FILE__), "../test_only.rb")
|
|
999
|
+
File.delete(filename) if File.exist?(filename)
|
|
1000
|
+
@pc = PacketConfig.new
|
|
1001
|
+
|
|
1002
|
+
tf = Tempfile.new('unittest')
|
|
1003
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1004
|
+
tf.puts ' PROCESSOR TEST test_only.rb'
|
|
1005
|
+
tf.close
|
|
1006
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /TestOnly class not found/)
|
|
1007
|
+
tf.unlink
|
|
1008
|
+
end
|
|
1009
|
+
|
|
1010
|
+
it "should complain about a non Cosmos::Processor class" do
|
|
1011
|
+
filename = File.join(File.dirname(__FILE__), "../processor1.rb")
|
|
1012
|
+
File.open(filename, 'w') do |file|
|
|
1013
|
+
file.puts "class Processor1"
|
|
1014
|
+
file.puts " def call(packet,buffer)"
|
|
1015
|
+
file.puts " end"
|
|
1016
|
+
file.puts "end"
|
|
1017
|
+
end
|
|
1018
|
+
load 'processor1.rb'
|
|
1019
|
+
File.delete(filename) if File.exist?(filename)
|
|
1020
|
+
|
|
1021
|
+
tf = Tempfile.new('unittest')
|
|
1022
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1023
|
+
tf.puts ' PROCESSOR P1 processor1.rb'
|
|
1024
|
+
tf.close
|
|
1025
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /processor must be a Cosmos::Processor but is a Processor1/)
|
|
1026
|
+
tf.unlink
|
|
1027
|
+
end
|
|
1028
|
+
|
|
1029
|
+
it "should parse the processor" do
|
|
1030
|
+
filename = File.join(File.dirname(__FILE__), "../processor2.rb")
|
|
1031
|
+
File.open(filename, 'w') do |file|
|
|
1032
|
+
file.puts "require 'cosmos/processors/processor'"
|
|
1033
|
+
file.puts "class Processor2 < Cosmos::Processor"
|
|
1034
|
+
file.puts " def call(packet,buffer)"
|
|
1035
|
+
file.puts " @results[:TEST] = 5"
|
|
1036
|
+
file.puts " end"
|
|
1037
|
+
file.puts "end"
|
|
1038
|
+
end
|
|
1039
|
+
load 'processor2.rb'
|
|
1040
|
+
|
|
1041
|
+
tf = Tempfile.new('unittest')
|
|
1042
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1043
|
+
tf.puts ' ITEM item1 0 16 INT "Integer Item"'
|
|
1044
|
+
tf.puts ' READ_CONVERSION processor_conversion.rb P2 TEST'
|
|
1045
|
+
tf.puts ' PROCESSOR P2 processor2.rb'
|
|
1046
|
+
tf.puts ' PROCESSOR P3 processor2.rb RAW'
|
|
1047
|
+
tf.close
|
|
1048
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1049
|
+
@pc.telemetry["TGT1"]["PKT1"].buffer = "\x01\x01"
|
|
1050
|
+
@pc.telemetry["TGT1"]["PKT1"].read("ITEM1").should eql 5
|
|
1051
|
+
tf.unlink
|
|
1052
|
+
|
|
1053
|
+
File.delete(filename) if File.exist?(filename)
|
|
1054
|
+
end
|
|
1055
|
+
|
|
1056
|
+
it "should complain if applied to a command packet" do
|
|
1057
|
+
tf = Tempfile.new('unittest')
|
|
1058
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1059
|
+
tf.puts ' PROCESSOR P1 processor1.rb'
|
|
1060
|
+
tf.close
|
|
1061
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "PROCESSOR only applies to telemetry packets")
|
|
1062
|
+
tf.unlink
|
|
1063
|
+
end
|
|
1064
|
+
end
|
|
1065
|
+
|
|
1066
|
+
context "with POLY_READ_CONVERSION and POLY_WRITE_CONVERSION" do
|
|
1067
|
+
it "should perform a polynomial conversion" do
|
|
1068
|
+
tf = Tempfile.new('unittest')
|
|
1069
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1070
|
+
tf.puts ' ITEM item1 0 16 INT "Integer Item"'
|
|
1071
|
+
tf.puts ' POLY_READ_CONVERSION 5 2'
|
|
1072
|
+
tf.close
|
|
1073
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1074
|
+
@pc.telemetry["TGT1"]["PKT1"].buffer = "\x01"
|
|
1075
|
+
@pc.telemetry["TGT1"]["PKT1"].read("ITEM1").should eql 7.0
|
|
1076
|
+
tf.unlink
|
|
1077
|
+
|
|
1078
|
+
tf = Tempfile.new('unittest')
|
|
1079
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1080
|
+
tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
|
|
1081
|
+
tf.puts ' POLY_WRITE_CONVERSION 5 2'
|
|
1082
|
+
tf.close
|
|
1083
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1084
|
+
@pc.commands["TGT1"]["PKT1"].write("ITEM1", 3)
|
|
1085
|
+
@pc.commands["TGT1"]["PKT1"].read("ITEM1").should eql 11
|
|
1086
|
+
tf.unlink
|
|
1087
|
+
end
|
|
1088
|
+
end
|
|
1089
|
+
|
|
1090
|
+
context "with SEG_POLY_READ_CONVERSION and SEG_POLY_WRITE_CONVERSION" do
|
|
1091
|
+
it "should perform a segmented polynomial conversion" do
|
|
1092
|
+
tf = Tempfile.new('unittest')
|
|
1093
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1094
|
+
tf.puts ' ITEM item1 0 16 INT "Integer Item"'
|
|
1095
|
+
tf.puts ' SEG_POLY_READ_CONVERSION 0 1 2'
|
|
1096
|
+
tf.puts ' SEG_POLY_READ_CONVERSION 5 2 3'
|
|
1097
|
+
tf.close
|
|
1098
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1099
|
+
@pc.telemetry["TGT1"]["PKT1"].buffer = "\x01"
|
|
1100
|
+
@pc.telemetry["TGT1"]["PKT1"].read("ITEM1").should eql 3.0
|
|
1101
|
+
@pc.telemetry["TGT1"]["PKT1"].buffer = "\x05"
|
|
1102
|
+
@pc.telemetry["TGT1"]["PKT1"].read("ITEM1").should eql 17.0
|
|
1103
|
+
tf.unlink
|
|
1104
|
+
|
|
1105
|
+
tf = Tempfile.new('unittest')
|
|
1106
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1107
|
+
tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
|
|
1108
|
+
tf.puts ' SEG_POLY_WRITE_CONVERSION 0 1 2'
|
|
1109
|
+
tf.puts ' SEG_POLY_WRITE_CONVERSION 5 2 3'
|
|
1110
|
+
tf.close
|
|
1111
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1112
|
+
@pc.commands["TGT1"]["PKT1"].write("ITEM1", 1)
|
|
1113
|
+
@pc.commands["TGT1"]["PKT1"].read("ITEM1").should eql 3
|
|
1114
|
+
@pc.commands["TGT1"]["PKT1"].write("ITEM1", 5)
|
|
1115
|
+
@pc.commands["TGT1"]["PKT1"].read("ITEM1").should eql 17
|
|
1116
|
+
tf.unlink
|
|
1117
|
+
end
|
|
1118
|
+
end
|
|
1119
|
+
|
|
1120
|
+
context "with GENERIC_READ_CONVERSION and GENERIC_WRITE_CONVERSION" do
|
|
1121
|
+
it "should process a generic conversion" do
|
|
1122
|
+
tf = Tempfile.new('unittest')
|
|
1123
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1124
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1125
|
+
tf.puts ' GENERIC_WRITE_CONVERSION_START'
|
|
1126
|
+
tf.puts ' 2.0 * value'
|
|
1127
|
+
tf.puts ' GENERIC_WRITE_CONVERSION_END'
|
|
1128
|
+
tf.puts ' APPEND_ITEM item2 8 UINT "Item"'
|
|
1129
|
+
tf.puts ' GENERIC_READ_CONVERSION_START'
|
|
1130
|
+
tf.puts ' "Number #{value}"'
|
|
1131
|
+
tf.puts ' GENERIC_READ_CONVERSION_END'
|
|
1132
|
+
tf.close
|
|
1133
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1134
|
+
pkt = @pc.telemetry["TGT1"]["PKT1"]
|
|
1135
|
+
pkt.enable_method_missing
|
|
1136
|
+
pkt.item1 = 2
|
|
1137
|
+
pkt.item1.should eql 4
|
|
1138
|
+
pkt.item2.should eql "Number 0"
|
|
1139
|
+
tf.unlink
|
|
1140
|
+
end
|
|
1141
|
+
|
|
1142
|
+
it "should process a generic conversion with a defined type" do
|
|
1143
|
+
tf = Tempfile.new('unittest')
|
|
1144
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1145
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1146
|
+
tf.puts ' GENERIC_WRITE_CONVERSION_START UINT 8'
|
|
1147
|
+
tf.puts ' 2.0 * value'
|
|
1148
|
+
tf.puts ' GENERIC_WRITE_CONVERSION_END'
|
|
1149
|
+
tf.puts ' APPEND_ITEM item2 64 FLOAT "Item"'
|
|
1150
|
+
tf.puts ' GENERIC_READ_CONVERSION_START FLOAT 32'
|
|
1151
|
+
tf.puts ' 2.0 * value'
|
|
1152
|
+
tf.puts ' GENERIC_READ_CONVERSION_END'
|
|
1153
|
+
tf.close
|
|
1154
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1155
|
+
pkt = @pc.telemetry["TGT1"]["PKT1"]
|
|
1156
|
+
pkt.enable_method_missing
|
|
1157
|
+
pkt.item1 = 400
|
|
1158
|
+
pkt.item1.should eql 800
|
|
1159
|
+
pkt.item2 = 400
|
|
1160
|
+
pkt.item2.should eql 800.0
|
|
1161
|
+
tf.unlink
|
|
1162
|
+
end
|
|
1163
|
+
end
|
|
1164
|
+
|
|
1165
|
+
context "with LIMITS" do
|
|
1166
|
+
it "should complain if applied to a command PARAMETER" do
|
|
1167
|
+
tf = Tempfile.new('unittest')
|
|
1168
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1169
|
+
tf.puts ' APPEND_PARAMETER item1 16 UINT 0 0 0 "Item"'
|
|
1170
|
+
tf.puts ' LIMITS DEFAULT 3 ENABLED 1 2 6 7 3 5'
|
|
1171
|
+
tf.close
|
|
1172
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "LIMITS only applies to telemetry items")
|
|
1173
|
+
tf.unlink
|
|
1174
|
+
end
|
|
1175
|
+
|
|
1176
|
+
it "should complain if the second parameter isn't a number" do
|
|
1177
|
+
tf = Tempfile.new('unittest')
|
|
1178
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1179
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1180
|
+
tf.puts ' LIMITS DEFAULT TRUE ENABLED 1 2 6 7 3 5'
|
|
1181
|
+
tf.close
|
|
1182
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Ensure persistence is an integer/)
|
|
1183
|
+
tf.unlink
|
|
1184
|
+
end
|
|
1185
|
+
|
|
1186
|
+
it "should complain if the third parameter isn't ENABLED or DISABLED" do
|
|
1187
|
+
tf = Tempfile.new('unittest')
|
|
1188
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1189
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1190
|
+
tf.puts ' LIMITS DEFAULT 3 TRUE 1 2 6 7 3 5'
|
|
1191
|
+
tf.close
|
|
1192
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Initial state must be ENABLED or DISABLED/)
|
|
1193
|
+
tf.unlink
|
|
1194
|
+
end
|
|
1195
|
+
|
|
1196
|
+
it "should complain if the 4 limits are out of order" do
|
|
1197
|
+
tf = Tempfile.new('unittest')
|
|
1198
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1199
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1200
|
+
tf.puts ' LIMITS DEFAULT 3 ENABLED 2 1 3 4'
|
|
1201
|
+
tf.close
|
|
1202
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "Invalid limits specified. Ensure yellow limits are within red limits.")
|
|
1203
|
+
tf.unlink
|
|
1204
|
+
|
|
1205
|
+
tf = Tempfile.new('unittest')
|
|
1206
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1207
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1208
|
+
tf.puts ' LIMITS DEFAULT 3 ENABLED 1 5 3 7'
|
|
1209
|
+
tf.close
|
|
1210
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "Invalid limits specified. Ensure yellow limits are within red limits.")
|
|
1211
|
+
tf.unlink
|
|
1212
|
+
|
|
1213
|
+
tf = Tempfile.new('unittest')
|
|
1214
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1215
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1216
|
+
tf.puts ' LIMITS DEFAULT 3 ENABLED 1 2 5 4'
|
|
1217
|
+
tf.close
|
|
1218
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "Invalid limits specified. Ensure yellow limits are within red limits.")
|
|
1219
|
+
tf.unlink
|
|
1220
|
+
|
|
1221
|
+
tf = Tempfile.new('unittest')
|
|
1222
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1223
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1224
|
+
tf.puts ' LIMITS DEFAULT 3 ENABLED 1 2 3 0'
|
|
1225
|
+
tf.close
|
|
1226
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "Invalid limits specified. Ensure yellow limits are within red limits.")
|
|
1227
|
+
tf.unlink
|
|
1228
|
+
end
|
|
1229
|
+
|
|
1230
|
+
it "should complain if the 6 limits are out of order" do
|
|
1231
|
+
tf = Tempfile.new('unittest')
|
|
1232
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1233
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1234
|
+
tf.puts ' LIMITS DEFAULT 3 ENABLED 1 2 6 7 0 5'
|
|
1235
|
+
tf.close
|
|
1236
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "Invalid limits specified. Ensure green limits are within yellow limits.")
|
|
1237
|
+
tf.unlink
|
|
1238
|
+
|
|
1239
|
+
tf = Tempfile.new('unittest')
|
|
1240
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1241
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1242
|
+
tf.puts ' LIMITS DEFAULT 3 ENABLED 1 3 6 7 2 5'
|
|
1243
|
+
tf.close
|
|
1244
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "Invalid limits specified. Ensure green limits are within yellow limits.")
|
|
1245
|
+
tf.unlink
|
|
1246
|
+
|
|
1247
|
+
tf = Tempfile.new('unittest')
|
|
1248
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1249
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1250
|
+
tf.puts ' LIMITS DEFAULT 3 ENABLED 1 2 6 8 3 7'
|
|
1251
|
+
tf.close
|
|
1252
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "Invalid limits specified. Ensure green limits are within yellow limits.")
|
|
1253
|
+
tf.unlink
|
|
1254
|
+
|
|
1255
|
+
tf = Tempfile.new('unittest')
|
|
1256
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1257
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1258
|
+
tf.puts ' LIMITS DEFAULT 3 ENABLED 1 2 6 8 3 9'
|
|
1259
|
+
tf.close
|
|
1260
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "Invalid limits specified. Ensure green limits are within yellow limits.")
|
|
1261
|
+
tf.unlink
|
|
1262
|
+
|
|
1263
|
+
tf = Tempfile.new('unittest')
|
|
1264
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1265
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1266
|
+
tf.puts ' LIMITS DEFAULT 3 ENABLED 1 2 6 8 4 3'
|
|
1267
|
+
tf.close
|
|
1268
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "Invalid limits specified. Ensure green limits are within yellow limits.")
|
|
1269
|
+
tf.unlink
|
|
1270
|
+
end
|
|
1271
|
+
|
|
1272
|
+
it "should take 4 limits values" do
|
|
1273
|
+
tf = Tempfile.new('unittest')
|
|
1274
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1275
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1276
|
+
tf.puts ' LIMITS DEFAULT 3 ENABLED 1 2 6 7'
|
|
1277
|
+
tf.close
|
|
1278
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1279
|
+
item = @pc.telemetry["TGT1"]["PKT1"].items["ITEM1"]
|
|
1280
|
+
item.limits.values[:DEFAULT].should_not be_nil
|
|
1281
|
+
@pc.telemetry["TGT1"]["PKT1"].buffer = "\x04"
|
|
1282
|
+
@pc.telemetry["TGT1"]["PKT1"].enable_limits("ITEM1")
|
|
1283
|
+
@pc.telemetry["TGT1"]["PKT1"].check_limits
|
|
1284
|
+
item.limits.state.should eql :GREEN
|
|
1285
|
+
@pc.telemetry["TGT1"]["PKT1"].limits_items.should eql [item]
|
|
1286
|
+
tf.unlink
|
|
1287
|
+
end
|
|
1288
|
+
|
|
1289
|
+
it "should take 6 limits values" do
|
|
1290
|
+
tf = Tempfile.new('unittest')
|
|
1291
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1292
|
+
tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
|
|
1293
|
+
tf.puts ' LIMITS DEFAULT 3 ENABLED 1 2 6 7 3 5'
|
|
1294
|
+
tf.close
|
|
1295
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1296
|
+
item = @pc.telemetry["TGT1"]["PKT1"].items["ITEM1"]
|
|
1297
|
+
item.limits.values[:DEFAULT].should_not be_nil
|
|
1298
|
+
@pc.telemetry["TGT1"]["PKT1"].buffer = "\x04"
|
|
1299
|
+
@pc.telemetry["TGT1"]["PKT1"].enable_limits("ITEM1")
|
|
1300
|
+
@pc.telemetry["TGT1"]["PKT1"].check_limits
|
|
1301
|
+
item.limits.state.should eql :BLUE
|
|
1302
|
+
@pc.telemetry["TGT1"]["PKT1"].limits_items.should eql [item]
|
|
1303
|
+
tf.unlink
|
|
1304
|
+
end
|
|
1305
|
+
end
|
|
1306
|
+
|
|
1307
|
+
context "with LIMITS_RESPONSE" do
|
|
1308
|
+
it "should complain if applied to a command PARAMETER" do
|
|
1309
|
+
tf = Tempfile.new('unittest')
|
|
1310
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1311
|
+
tf.puts ' APPEND_PARAMETER item1 16 UINT 0 0 0 "Item"'
|
|
1312
|
+
tf.puts ' LIMITS_RESPONSE test.rb'
|
|
1313
|
+
tf.close
|
|
1314
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "LIMITS_RESPONSE only applies to telemetry items")
|
|
1315
|
+
tf.unlink
|
|
1316
|
+
end
|
|
1317
|
+
|
|
1318
|
+
it "should complain about missing response file" do
|
|
1319
|
+
filename = File.join(File.dirname(__FILE__), "../test_only.rb")
|
|
1320
|
+
File.delete(filename) if File.exist?(filename)
|
|
1321
|
+
@pc = PacketConfig.new
|
|
1322
|
+
|
|
1323
|
+
tf = Tempfile.new('unittest')
|
|
1324
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1325
|
+
tf.puts ' ITEM item1 0 16 INT "Integer Item"'
|
|
1326
|
+
tf.puts ' LIMITS DEFAULT 3 ENABLED 1 2 6 7 3 5'
|
|
1327
|
+
tf.puts ' LIMITS_RESPONSE test_only.rb'
|
|
1328
|
+
tf.close
|
|
1329
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /TestOnly class not found/)
|
|
1330
|
+
tf.unlink
|
|
1331
|
+
end
|
|
1332
|
+
|
|
1333
|
+
it "should complain about a non Cosmos::LimitsResponse class" do
|
|
1334
|
+
filename = File.join(File.dirname(__FILE__), "../limits_response1.rb")
|
|
1335
|
+
File.open(filename, 'w') do |file|
|
|
1336
|
+
file.puts "class LimitsResponse1"
|
|
1337
|
+
file.puts " def call(target_name, packet_name, item, old_limits_state, new_limits_state)"
|
|
1338
|
+
file.puts " end"
|
|
1339
|
+
file.puts "end"
|
|
1340
|
+
end
|
|
1341
|
+
load 'limits_response1.rb'
|
|
1342
|
+
File.delete(filename) if File.exist?(filename)
|
|
1343
|
+
|
|
1344
|
+
tf = Tempfile.new('unittest')
|
|
1345
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1346
|
+
tf.puts ' ITEM item1 0 16 INT "Integer Item"'
|
|
1347
|
+
tf.puts ' LIMITS DEFAULT 3 ENABLED 1 2 6 7 3 5'
|
|
1348
|
+
tf.puts ' LIMITS_RESPONSE limits_response1.rb'
|
|
1349
|
+
tf.close
|
|
1350
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /response must be a Cosmos::LimitsResponse but is a LimitsResponse1/)
|
|
1351
|
+
tf.unlink
|
|
1352
|
+
end
|
|
1353
|
+
|
|
1354
|
+
it "should set the response" do
|
|
1355
|
+
filename = File.join(File.dirname(__FILE__), "../limits_response2.rb")
|
|
1356
|
+
File.open(filename, 'w') do |file|
|
|
1357
|
+
file.puts "require 'cosmos/packets/limits_response'"
|
|
1358
|
+
file.puts "class LimitsResponse2 < Cosmos::LimitsResponse"
|
|
1359
|
+
file.puts " def call(target_name, packet_name, item, old_limits_state, new_limits_state)"
|
|
1360
|
+
file.puts " puts \"\#{target_name} \#{packet_name} \#{item.name} \#{old_limits_state} \#{new_limits_state}\""
|
|
1361
|
+
file.puts " end"
|
|
1362
|
+
file.puts "end"
|
|
1363
|
+
end
|
|
1364
|
+
load 'limits_response2.rb'
|
|
1365
|
+
|
|
1366
|
+
tf = Tempfile.new('unittest')
|
|
1367
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1368
|
+
tf.puts ' ITEM item1 0 16 INT "Integer Item"'
|
|
1369
|
+
tf.puts ' LIMITS DEFAULT 1 ENABLED 1 2 6 7 3 5'
|
|
1370
|
+
tf.puts ' LIMITS_RESPONSE limits_response2.rb'
|
|
1371
|
+
tf.close
|
|
1372
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1373
|
+
pkt = @pc.telemetry["TGT1"]["PKT1"]
|
|
1374
|
+
pkt.get_item("ITEM1").limits.response.class.should eql LimitsResponse2
|
|
1375
|
+
|
|
1376
|
+
File.delete(filename) if File.exist?(filename)
|
|
1377
|
+
tf.unlink
|
|
1378
|
+
end
|
|
1379
|
+
|
|
1380
|
+
it "should call the response with parameters" do
|
|
1381
|
+
filename = File.join(File.dirname(__FILE__), "../limits_response2.rb")
|
|
1382
|
+
File.open(filename, 'w') do |file|
|
|
1383
|
+
file.puts "require 'cosmos/packets/limits_response'"
|
|
1384
|
+
file.puts "class LimitsResponse2 < Cosmos::LimitsResponse"
|
|
1385
|
+
file.puts " def initialize(val)"
|
|
1386
|
+
file.puts " puts \"initialize: \#{val}\""
|
|
1387
|
+
file.puts " end"
|
|
1388
|
+
file.puts " def call(target_name, packet_name, item, old_limits_state, new_limits_state)"
|
|
1389
|
+
file.puts " puts \"\#{target_name} \#{packet_name} \#{item.name} \#{old_limits_state} \#{new_limits_state}\""
|
|
1390
|
+
file.puts " end"
|
|
1391
|
+
file.puts "end"
|
|
1392
|
+
end
|
|
1393
|
+
load 'limits_response2.rb'
|
|
1394
|
+
|
|
1395
|
+
tf = Tempfile.new('unittest')
|
|
1396
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1397
|
+
tf.puts ' ITEM item1 0 16 INT "Integer Item"'
|
|
1398
|
+
tf.puts ' LIMITS DEFAULT 1 ENABLED 1 2 6 7 3 5'
|
|
1399
|
+
tf.puts ' LIMITS_RESPONSE limits_response2.rb 2'
|
|
1400
|
+
tf.close
|
|
1401
|
+
capture_io do |stdout|
|
|
1402
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1403
|
+
stdout.string.should eql "initialize: 2\n"
|
|
1404
|
+
end
|
|
1405
|
+
|
|
1406
|
+
File.delete(filename) if File.exist?(filename)
|
|
1407
|
+
tf.unlink
|
|
1408
|
+
end
|
|
1409
|
+
end
|
|
1410
|
+
|
|
1411
|
+
context "with FORMAT_STRING" do
|
|
1412
|
+
it "should complain about invalid format strings" do
|
|
1413
|
+
tf = Tempfile.new('unittest')
|
|
1414
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1415
|
+
tf.puts ' ITEM item1 0 8 INT'
|
|
1416
|
+
tf.puts ' FORMAT_STRING "%*s"'
|
|
1417
|
+
tf.close
|
|
1418
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "Invalid FORMAT_STRING specified for type INT: %*s")
|
|
1419
|
+
tf.unlink
|
|
1420
|
+
|
|
1421
|
+
tf = Tempfile.new('unittest')
|
|
1422
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1423
|
+
tf.puts ' ITEM item1 0 8 STRING'
|
|
1424
|
+
tf.puts ' FORMAT_STRING "%d"'
|
|
1425
|
+
tf.close
|
|
1426
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "Invalid FORMAT_STRING specified for type STRING: %d")
|
|
1427
|
+
tf.unlink
|
|
1428
|
+
end
|
|
1429
|
+
|
|
1430
|
+
it "should format integers" do
|
|
1431
|
+
tf = Tempfile.new('unittest')
|
|
1432
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1433
|
+
tf.puts ' ITEM item1 0 8 INT'
|
|
1434
|
+
tf.puts ' FORMAT_STRING "d%d"'
|
|
1435
|
+
tf.puts ' ITEM item2 0 8 UINT'
|
|
1436
|
+
tf.puts ' FORMAT_STRING "u%u"'
|
|
1437
|
+
tf.puts ' ITEM item3 0 8 UINT'
|
|
1438
|
+
tf.puts ' FORMAT_STRING "0x%x"'
|
|
1439
|
+
tf.close
|
|
1440
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1441
|
+
@pc.telemetry["TGT1"]["PKT1"].buffer = "\x0a\x0b\x0c"
|
|
1442
|
+
@pc.telemetry["TGT1"]["PKT1"].read("ITEM1",:FORMATTED).should eql "d10"
|
|
1443
|
+
@pc.telemetry["TGT1"]["PKT1"].read("ITEM2",:FORMATTED).should eql "u10"
|
|
1444
|
+
@pc.telemetry["TGT1"]["PKT1"].read("ITEM3",:FORMATTED).should eql "0xa"
|
|
1445
|
+
tf.unlink
|
|
1446
|
+
end
|
|
1447
|
+
|
|
1448
|
+
it "should format floats" do
|
|
1449
|
+
tf = Tempfile.new('unittest')
|
|
1450
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1451
|
+
tf.puts ' ITEM item1 0 32 FLOAT'
|
|
1452
|
+
tf.puts ' FORMAT_STRING "%3.3f"'
|
|
1453
|
+
tf.close
|
|
1454
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1455
|
+
@pc.telemetry["TGT1"]["PKT1"].write("ITEM1",12345.12345)
|
|
1456
|
+
@pc.telemetry["TGT1"]["PKT1"].read("ITEM1",:FORMATTED).should eql "12345.123"
|
|
1457
|
+
tf.unlink
|
|
1458
|
+
end
|
|
1459
|
+
|
|
1460
|
+
it "should format strings and blocks" do
|
|
1461
|
+
tf = Tempfile.new('unittest')
|
|
1462
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1463
|
+
tf.puts ' ITEM item1 0 32 STRING'
|
|
1464
|
+
tf.puts ' FORMAT_STRING "String: %s"'
|
|
1465
|
+
tf.puts ' ITEM item2 0 32 BLOCK'
|
|
1466
|
+
tf.puts ' FORMAT_STRING "Block: %s"'
|
|
1467
|
+
tf.close
|
|
1468
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1469
|
+
@pc.telemetry["TGT1"]["PKT1"].write("ITEM1","HI")
|
|
1470
|
+
@pc.telemetry["TGT1"]["PKT1"].read("ITEM1",:FORMATTED).should eql "String: HI"
|
|
1471
|
+
@pc.telemetry["TGT1"]["PKT1"].write("ITEM2","\x00\x01\x02\x03")
|
|
1472
|
+
@pc.telemetry["TGT1"]["PKT1"].read("ITEM2",:FORMATTED).should eql "Block: \x00\x01\x02\x03"
|
|
1473
|
+
tf.unlink
|
|
1474
|
+
end
|
|
1475
|
+
end
|
|
1476
|
+
|
|
1477
|
+
context "with UNITS" do
|
|
1478
|
+
it "apply units when read :WITH_UNITS" do
|
|
1479
|
+
tf = Tempfile.new('unittest')
|
|
1480
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1481
|
+
tf.puts ' ITEM item1 0 8 UINT'
|
|
1482
|
+
tf.puts ' UNITS Volts V'
|
|
1483
|
+
tf.close
|
|
1484
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1485
|
+
@pc.telemetry["TGT1"]["PKT1"].read("ITEM1",:WITH_UNITS).should eql "0 V"
|
|
1486
|
+
tf.unlink
|
|
1487
|
+
end
|
|
1488
|
+
end
|
|
1489
|
+
|
|
1490
|
+
context "with META" do
|
|
1491
|
+
it "should save metadata for items" do
|
|
1492
|
+
tf = Tempfile.new('unittest')
|
|
1493
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1494
|
+
tf.puts ' ITEM item1 0 8 UINT'
|
|
1495
|
+
tf.puts ' META TYPE "unsigned int"'
|
|
1496
|
+
tf.puts ' META OTHER'
|
|
1497
|
+
tf.close
|
|
1498
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1499
|
+
@pc.telemetry["TGT1"]["PKT1"].get_item('item1').meta['TYPE'].should eql ['unsigned int']
|
|
1500
|
+
@pc.telemetry["TGT1"]["PKT1"].get_item('item1').meta['OTHER'].should eql []
|
|
1501
|
+
tf.unlink
|
|
1502
|
+
end
|
|
1503
|
+
end
|
|
1504
|
+
|
|
1505
|
+
context "with OVERFLOW" do
|
|
1506
|
+
it "should set the overflow type for items" do
|
|
1507
|
+
tf = Tempfile.new('unittest')
|
|
1508
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1509
|
+
tf.puts ' ITEM item1 0 8 UINT'
|
|
1510
|
+
tf.puts ' OVERFLOW TRUNCATE'
|
|
1511
|
+
tf.puts ' ITEM item2 8 8 UINT'
|
|
1512
|
+
tf.puts ' OVERFLOW SATURATE'
|
|
1513
|
+
tf.puts ' ITEM item3 16 8 UINT'
|
|
1514
|
+
tf.puts ' OVERFLOW ERROR'
|
|
1515
|
+
tf.puts ' ITEM item4 24 8 INT'
|
|
1516
|
+
tf.puts ' OVERFLOW ERROR_ALLOW_HEX'
|
|
1517
|
+
tf.close
|
|
1518
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1519
|
+
@pc.telemetry["TGT1"]["PKT1"].get_item('item1').overflow.should eql :TRUNCATE
|
|
1520
|
+
@pc.telemetry["TGT1"]["PKT1"].get_item('item2').overflow.should eql :SATURATE
|
|
1521
|
+
@pc.telemetry["TGT1"]["PKT1"].get_item('item3').overflow.should eql :ERROR
|
|
1522
|
+
@pc.telemetry["TGT1"]["PKT1"].get_item('item4').overflow.should eql :ERROR_ALLOW_HEX
|
|
1523
|
+
tf.unlink
|
|
1524
|
+
end
|
|
1525
|
+
end
|
|
1526
|
+
|
|
1527
|
+
context "with REQUIRED" do
|
|
1528
|
+
it "should only apply to a command parameter" do
|
|
1529
|
+
tf = Tempfile.new('unittest')
|
|
1530
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1531
|
+
tf.puts ' ITEM item1 0 8 UINT'
|
|
1532
|
+
tf.puts ' REQUIRED'
|
|
1533
|
+
tf.close
|
|
1534
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "REQUIRED only applies to command parameters")
|
|
1535
|
+
tf.unlink
|
|
1536
|
+
|
|
1537
|
+
tf = Tempfile.new('unittest')
|
|
1538
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1539
|
+
tf.puts ' REQUIRED'
|
|
1540
|
+
tf.close
|
|
1541
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "No current item for REQUIRED")
|
|
1542
|
+
tf.unlink
|
|
1543
|
+
end
|
|
1544
|
+
|
|
1545
|
+
it "should mark a command parameter as required" do
|
|
1546
|
+
tf = Tempfile.new('unittest')
|
|
1547
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1548
|
+
tf.puts ' PARAMETER item1 0 8 UINT 0 1 1'
|
|
1549
|
+
tf.puts ' REQUIRED'
|
|
1550
|
+
tf.puts ' PARAMETER item2 0 8 UINT 0 1 1'
|
|
1551
|
+
tf.close
|
|
1552
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1553
|
+
@pc.commands["TGT1"]["PKT1"].items["ITEM1"].required.should be_truthy
|
|
1554
|
+
@pc.commands["TGT1"]["PKT1"].items["ITEM2"].required.should be_falsey
|
|
1555
|
+
tf.unlink
|
|
1556
|
+
end
|
|
1557
|
+
end
|
|
1558
|
+
|
|
1559
|
+
context "with MINIMUM_VALUE, MAXIMUM_VALUE, DEFAULT_VALUE" do
|
|
1560
|
+
it "should complain if used on telemetry items" do
|
|
1561
|
+
tf = Tempfile.new('unittest')
|
|
1562
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1563
|
+
tf.puts ' APPEND_ITEM item1 16 UINT'
|
|
1564
|
+
tf.puts ' MINIMUM_VALUE 1'
|
|
1565
|
+
tf.close
|
|
1566
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "MINIMUM_VALUE only applies to command parameters")
|
|
1567
|
+
tf.unlink
|
|
1568
|
+
|
|
1569
|
+
tf = Tempfile.new('unittest')
|
|
1570
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1571
|
+
tf.puts ' APPEND_ITEM item1 16 UINT'
|
|
1572
|
+
tf.puts ' MAXIMUM_VALUE 3'
|
|
1573
|
+
tf.close
|
|
1574
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "MAXIMUM_VALUE only applies to command parameters")
|
|
1575
|
+
tf.unlink
|
|
1576
|
+
|
|
1577
|
+
tf = Tempfile.new('unittest')
|
|
1578
|
+
tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1579
|
+
tf.puts ' APPEND_ITEM item1 16 UINT'
|
|
1580
|
+
tf.puts ' DEFAULT_VALUE 2'
|
|
1581
|
+
tf.close
|
|
1582
|
+
expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "DEFAULT_VALUE only applies to command parameters")
|
|
1583
|
+
tf.unlink
|
|
1584
|
+
end
|
|
1585
|
+
|
|
1586
|
+
it "should allow overriding the defined value" do
|
|
1587
|
+
tf = Tempfile.new('unittest')
|
|
1588
|
+
tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
|
|
1589
|
+
tf.puts ' APPEND_PARAMETER item1 16 UINT 0 1 1'
|
|
1590
|
+
tf.puts ' APPEND_PARAMETER item2 16 STRING "HI"'
|
|
1591
|
+
tf.close
|
|
1592
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1593
|
+
@pc.commands["TGT1"]["PKT1"].restore_defaults
|
|
1594
|
+
@pc.commands["TGT1"]["PKT1"].read("ITEM1").should eql 1
|
|
1595
|
+
@pc.commands["TGT1"]["PKT1"].items["ITEM1"].range.should eql (0..1)
|
|
1596
|
+
@pc.commands["TGT1"]["PKT1"].read("ITEM2").should eql "HI"
|
|
1597
|
+
tf.unlink
|
|
1598
|
+
|
|
1599
|
+
# Now override the values from above
|
|
1600
|
+
tf = Tempfile.new('unittest')
|
|
1601
|
+
tf.puts 'SELECT_COMMAND tgt1 pkt1'
|
|
1602
|
+
tf.puts 'SELECT_PARAMETER item1'
|
|
1603
|
+
tf.puts ' MINIMUM_VALUE 1'
|
|
1604
|
+
tf.puts ' MAXIMUM_VALUE 3'
|
|
1605
|
+
tf.puts ' DEFAULT_VALUE 2'
|
|
1606
|
+
tf.puts 'SELECT_PARAMETER item2'
|
|
1607
|
+
tf.puts ' DEFAULT_VALUE "NO"'
|
|
1608
|
+
tf.close
|
|
1609
|
+
@pc.process_file(tf.path, "TGT1")
|
|
1610
|
+
@pc.commands["TGT1"]["PKT1"].restore_defaults
|
|
1611
|
+
@pc.commands["TGT1"]["PKT1"].read("ITEM1").should eql 2
|
|
1612
|
+
@pc.commands["TGT1"]["PKT1"].items["ITEM1"].range.should eql (1..3)
|
|
1613
|
+
@pc.commands["TGT1"]["PKT1"].read("ITEM2").should eql "NO"
|
|
1614
|
+
tf.unlink
|
|
1615
|
+
end
|
|
1616
|
+
end
|
|
1617
|
+
|
|
1618
|
+
end # describe "process_file"
|
|
1619
|
+
end
|
|
1620
|
+
end
|