cosmos 3.5.1 → 3.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -1
- data/.gitattributes +3 -3
- data/.gitignore +48 -48
- data/.travis.yml +8 -8
- data/CONTRIBUTING.txt +50 -50
- data/Gemfile +10 -10
- data/Guardfile +27 -27
- data/LICENSE.txt +879 -879
- data/Manifest.txt +1414 -1414
- data/README.md +111 -111
- data/Rakefile +218 -214
- data/autohotkey/config/data/diamond.STL +57 -57
- data/autohotkey/config/system/system.txt +34 -34
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/autohotkey/config/targets/COSMOS/target.txt +5 -5
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -270
- data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
- data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -305
- data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
- data/autohotkey/config/targets/INST/screens/array.txt +7 -7
- data/autohotkey/config/targets/INST/screens/block.txt +8 -8
- data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
- data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
- data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
- data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
- data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
- data/autohotkey/config/targets/INST/screens/image.txt +21 -21
- data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
- data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
- data/autohotkey/config/targets/INST/screens/other.txt +25 -25
- data/autohotkey/config/targets/INST/screens/params.txt +25 -25
- data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
- data/autohotkey/config/targets/INST/target.txt +26 -26
- data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
- data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
- data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
- data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
- data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
- data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
- data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/autohotkey/config/tools/launcher/launcher.txt +38 -38
- data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
- data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
- data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
- data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
- data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
- data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
- data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
- data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
- data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
- data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
- data/autohotkey/lib/example_background_task.rb +42 -42
- data/autohotkey/lib/user_version.rb +3 -3
- data/autohotkey/procedures/clear_util.rb +7 -7
- data/autohotkey/procedures/collect_util.rb +14 -14
- data/autohotkey/procedures/example_test.rb +67 -67
- data/autohotkey/procedures/example_test2.rb +74 -74
- data/autohotkey/procedures/script_test.rb +17 -17
- data/autohotkey/procedures/syntax_error.rb +18 -18
- data/autohotkey/tools/CmdExtractorAHK +16 -16
- data/autohotkey/tools/CmdSender +14 -14
- data/autohotkey/tools/CmdSenderAHK +18 -18
- data/autohotkey/tools/CmdTlmServer +14 -14
- data/autohotkey/tools/CmdTlmServerAHK +28 -28
- data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
- data/autohotkey/tools/DataViewer +14 -14
- data/autohotkey/tools/DataViewerAHK +17 -17
- data/autohotkey/tools/HandbookCreatorAHK +20 -20
- data/autohotkey/tools/LauncherAHK +17 -17
- data/autohotkey/tools/LimitsMonitorAHK +20 -20
- data/autohotkey/tools/OpenGLBuilderAHK +24 -24
- data/autohotkey/tools/PacketViewer +14 -14
- data/autohotkey/tools/PacketViewerAHK +18 -18
- data/autohotkey/tools/PacketViewerAHK2 +17 -17
- data/autohotkey/tools/Replay +14 -14
- data/autohotkey/tools/ReplayAHK +17 -17
- data/autohotkey/tools/ScriptRunner +14 -14
- data/autohotkey/tools/ScriptRunnerAHK +20 -20
- data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
- data/autohotkey/tools/TableManager +14 -14
- data/autohotkey/tools/TableManagerAHK +30 -30
- data/autohotkey/tools/TestRunner +15 -15
- data/autohotkey/tools/TestRunnerAHK +17 -17
- data/autohotkey/tools/TestRunnerAHK2 +17 -17
- data/autohotkey/tools/TestRunnerAHK3 +17 -17
- data/autohotkey/tools/TestRunnerAHK4 +17 -17
- data/autohotkey/tools/TestRunnerAHK5 +17 -17
- data/autohotkey/tools/TestRunnerAHK6 +17 -17
- data/autohotkey/tools/TlmExtractor +15 -15
- data/autohotkey/tools/TlmExtractorAHK +19 -19
- data/autohotkey/tools/TlmExtractorAHK2 +16 -16
- data/autohotkey/tools/TlmExtractorAHK3 +16 -16
- data/autohotkey/tools/TlmGrapher +14 -14
- data/autohotkey/tools/TlmGrapherAHK +19 -19
- data/autohotkey/tools/TlmGrapherAHK2 +23 -23
- data/autohotkey/tools/TlmGrapherAHK3 +17 -17
- data/autohotkey/tools/TlmGrapherAHK4 +17 -17
- data/autohotkey/tools/TlmViewer +14 -14
- data/autohotkey/tools/TlmViewerAHK +28 -28
- data/autohotkey/tools/TlmViewerAHK2 +22 -22
- data/autohotkey/tools/TlmViewerAHK3 +23 -23
- data/autohotkey/tools/TlmViewerAHK4 +22 -22
- data/autohotkey/tools/TlmViewerAHK5 +18 -18
- data/autohotkey/tools/autohotkey.rb +37 -37
- data/autohotkey/tools/cmd_extractor.ahk +33 -33
- data/autohotkey/tools/cmd_sender.ahk +182 -182
- data/autohotkey/tools/cmd_tlm_server.ahk +90 -90
- data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
- data/autohotkey/tools/data_viewer.ahk +141 -141
- data/autohotkey/tools/handbook_creator.ahk +32 -32
- data/autohotkey/tools/launcher.ahk +41 -41
- data/autohotkey/tools/limits_monitor.ahk +123 -123
- data/autohotkey/tools/open_gl_builder.ahk +134 -134
- data/autohotkey/tools/packet_viewer.ahk +196 -196
- data/autohotkey/tools/packet_viewer2.ahk +9 -9
- data/autohotkey/tools/replay.ahk +104 -104
- data/autohotkey/tools/script_runner.ahk +589 -589
- data/autohotkey/tools/script_runner2.ahk +38 -38
- data/autohotkey/tools/table_manager.ahk +220 -220
- data/autohotkey/tools/test_runner.ahk +262 -262
- data/autohotkey/tools/test_runner2.ahk +53 -53
- data/autohotkey/tools/test_runner3.ahk +13 -13
- data/autohotkey/tools/test_runner5.ahk +8 -8
- data/autohotkey/tools/test_runner6.ahk +5 -5
- data/autohotkey/tools/tlm_extractor.ahk +296 -296
- data/autohotkey/tools/tlm_grapher.ahk +660 -660
- data/autohotkey/tools/tlm_grapher2.ahk +115 -115
- data/autohotkey/tools/tlm_grapher3.ahk +24 -24
- data/autohotkey/tools/tlm_viewer.ahk +133 -133
- data/autohotkey/tools/tlm_viewer2.ahk +50 -50
- data/autohotkey/tools/tlm_viewer4.ahk +4 -4
- data/autohotkey/tools/tlm_viewer5.ahk +20 -20
- data/bin/cosmos +96 -96
- data/bin/cstol_converter +1166 -1166
- data/bin/rubysloc +85 -85
- data/cosmos.gemspec +99 -99
- data/data/about.txt +4 -4
- data/data/crc.txt +326 -326
- data/data/diamond.STL +57 -57
- data/data/legal.txt +9 -9
- data/demo/Gemfile +10 -10
- data/demo/Launcher +16 -16
- data/demo/Launcher.bat +0 -0
- data/demo/Rakefile +77 -77
- data/demo/config/data/crc.txt +224 -226
- data/demo/config/data/diamond.STL +57 -57
- data/demo/config/data/meta_init.txt +4 -4
- data/demo/config/system/system.txt +35 -35
- data/demo/config/system/system2.txt +33 -33
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/demo/config/targets/COSMOS/screens/version.txt +19 -19
- data/demo/config/targets/COSMOS/target.txt +11 -11
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -5
- data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
- data/demo/config/targets/EXAMPLE/target.txt +6 -6
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
- data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
- data/demo/config/targets/INST/lib/sim_inst.rb +305 -305
- data/demo/config/targets/INST/screens/adcs.txt +46 -46
- data/demo/config/targets/INST/screens/array.txt +15 -15
- data/demo/config/targets/INST/screens/block.txt +8 -8
- data/demo/config/targets/INST/screens/commanding.txt +30 -30
- data/demo/config/targets/INST/screens/graphs.txt +14 -14
- data/demo/config/targets/INST/screens/ground.txt +25 -25
- data/demo/config/targets/INST/screens/hs.txt +44 -44
- data/demo/config/targets/INST/screens/latest.txt +23 -23
- data/demo/config/targets/INST/screens/other.txt +29 -29
- data/demo/config/targets/INST/screens/tabs.txt +70 -70
- data/demo/config/targets/INST/target.txt +33 -33
- data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
- data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
- data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
- data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -13
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
- data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +56 -56
- data/demo/config/targets/TEMPLATED/target.txt +6 -6
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +39 -39
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +34 -34
- data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
- data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
- data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -88
- data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -82
- data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/demo/config/tools/launcher/launcher.txt +45 -45
- data/demo/config/tools/launcher/launcher2.txt +45 -45
- data/demo/config/tools/script_runner/script_runner.txt +3 -3
- data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
- data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
- data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
- data/demo/config/tools/test_runner/test_runner.txt +17 -17
- data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
- data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
- data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
- data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
- data/demo/lib/example_background_task.rb +57 -57
- data/demo/lib/example_target.rb +113 -113
- data/demo/lib/scpi_target.rb +74 -74
- data/demo/lib/user_version.rb +3 -3
- data/demo/procedures/checks.rb +11 -11
- data/demo/procedures/clear_util.rb +7 -7
- data/demo/procedures/collect.rb +18 -18
- data/demo/procedures/collect_util.rb +14 -14
- data/demo/procedures/cosmos_api_test.rb +293 -293
- data/demo/procedures/disconnect.rb +29 -29
- data/demo/procedures/example_test.rb +183 -183
- data/demo/procedures/plot_test.rb +8 -8
- data/demo/procedures/run_example_test.rb +3 -3
- data/demo/procedures/test.rb +51 -51
- data/demo/tools/CmdExtractor +16 -16
- data/demo/tools/CmdExtractor.bat +0 -0
- data/demo/tools/CmdSender +16 -16
- data/demo/tools/CmdSender.bat +0 -0
- data/demo/tools/CmdTlmServer +16 -16
- data/demo/tools/CmdTlmServer.bat +0 -0
- data/demo/tools/DataViewer +16 -16
- data/demo/tools/DataViewer.bat +0 -0
- data/demo/tools/ExampleTarget +16 -16
- data/demo/tools/ExampleTarget.bat +0 -0
- data/demo/tools/HandbookCreator +16 -16
- data/demo/tools/HandbookCreator.bat +0 -0
- data/demo/tools/Launcher +16 -16
- data/demo/tools/Launcher.bat +0 -0
- data/demo/tools/LimitsMonitor +16 -16
- data/demo/tools/LimitsMonitor.bat +0 -0
- data/demo/tools/OpenGLBuilder +16 -16
- data/demo/tools/OpenGLBuilder.bat +0 -0
- data/demo/tools/PacketViewer +16 -16
- data/demo/tools/PacketViewer.bat +0 -0
- data/demo/tools/Replay +16 -16
- data/demo/tools/Replay.bat +0 -0
- data/demo/tools/ScpiTarget +16 -16
- data/demo/tools/ScpiTarget.bat +0 -0
- data/demo/tools/ScriptRunner +16 -16
- data/demo/tools/ScriptRunner.bat +0 -0
- data/demo/tools/TableManager +16 -16
- data/demo/tools/TableManager.bat +0 -0
- data/demo/tools/TestRunner +16 -16
- data/demo/tools/TestRunner.bat +0 -0
- data/demo/tools/TlmExtractor +16 -16
- data/demo/tools/TlmExtractor.bat +0 -0
- data/demo/tools/TlmGrapher +16 -16
- data/demo/tools/TlmGrapher.bat +0 -0
- data/demo/tools/TlmViewer +16 -16
- data/demo/tools/TlmViewer.bat +0 -0
- data/demo/tools/ToolLaunch.bat +14 -5
- data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
- data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
- data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
- data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/demo/tools/tool_launch.rb +38 -38
- data/ext/cosmos/ext/array/array.c +111 -111
- data/ext/cosmos/ext/array/extconf.rb +13 -13
- data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
- data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
- data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
- data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
- data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
- data/ext/cosmos/ext/crc/crc.c +341 -341
- data/ext/cosmos/ext/crc/extconf.rb +12 -12
- data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
- data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
- data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
- data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -265
- data/ext/cosmos/ext/packet/extconf.rb +13 -13
- data/ext/cosmos/ext/packet/packet.c +339 -339
- data/ext/cosmos/ext/platform/extconf.rb +13 -13
- data/ext/cosmos/ext/platform/platform.c +101 -101
- data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
- data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
- data/ext/cosmos/ext/string/extconf.rb +13 -13
- data/ext/cosmos/ext/string/string.c +49 -49
- data/ext/cosmos/ext/structure/structure.c +1428 -1428
- data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
- data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
- data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
- data/ext/cosmos/ext/telemetry/telemetry.c +307 -307
- data/ext/mkrf_conf.rb +40 -40
- data/install/Gemfile +10 -10
- data/install/Launcher +16 -16
- data/install/Launcher.bat +0 -0
- data/install/Rakefile +77 -77
- data/install/config/data/crc.txt +151 -151
- data/install/config/system/system.txt +29 -29
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/install/config/targets/COSMOS/screens/version.txt +19 -19
- data/install/config/targets/COSMOS/target.txt +8 -8
- data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
- data/install/config/tools/data_viewer/data_viewer.txt +3 -3
- data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
- data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/install/config/tools/launcher/launcher.txt +40 -40
- data/install/config/tools/script_runner/script_runner.txt +3 -3
- data/install/config/tools/test_runner/test_runner.txt +8 -8
- data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
- data/install/lib/user_version.rb +3 -3
- data/install/tools/CmdExtractor +16 -16
- data/install/tools/CmdExtractor.bat +0 -0
- data/install/tools/CmdSender +16 -16
- data/install/tools/CmdSender.bat +0 -0
- data/install/tools/CmdTlmServer +16 -16
- data/install/tools/CmdTlmServer.bat +0 -0
- data/install/tools/DataViewer +16 -16
- data/install/tools/DataViewer.bat +0 -0
- data/install/tools/HandbookCreator +16 -16
- data/install/tools/HandbookCreator.bat +0 -0
- data/install/tools/Launcher +16 -16
- data/install/tools/Launcher.bat +0 -0
- data/install/tools/LimitsMonitor +16 -16
- data/install/tools/LimitsMonitor.bat +0 -0
- data/install/tools/OpenGLBuilder +16 -16
- data/install/tools/OpenGLBuilder.bat +0 -0
- data/install/tools/PacketViewer +16 -16
- data/install/tools/PacketViewer.bat +0 -0
- data/install/tools/Replay +16 -16
- data/install/tools/Replay.bat +0 -0
- data/install/tools/ScriptRunner +16 -16
- data/install/tools/ScriptRunner.bat +0 -0
- data/install/tools/TableManager +16 -16
- data/install/tools/TableManager.bat +0 -0
- data/install/tools/TestRunner +16 -16
- data/install/tools/TestRunner.bat +0 -0
- data/install/tools/TlmExtractor +16 -16
- data/install/tools/TlmExtractor.bat +0 -0
- data/install/tools/TlmGrapher +16 -16
- data/install/tools/TlmGrapher.bat +0 -0
- data/install/tools/TlmViewer +16 -16
- data/install/tools/TlmViewer.bat +0 -0
- data/install/tools/ToolLaunch.bat +14 -5
- data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
- data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
- data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
- data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
- data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
- data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
- data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
- data/install/tools/tool_launch.rb +38 -38
- data/lib/cosmos.rb +63 -63
- data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
- data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
- data/lib/cosmos/config/config_parser.rb +324 -324
- data/lib/cosmos/conversions.rb +13 -13
- data/lib/cosmos/conversions/conversion.rb +47 -47
- data/lib/cosmos/conversions/generic_conversion.rb +55 -55
- data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
- data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
- data/lib/cosmos/conversions/processor_conversion.rb +46 -46
- data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
- data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
- data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
- data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
- data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
- data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
- data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
- data/lib/cosmos/core_ext.rb +18 -18
- data/lib/cosmos/core_ext/array.rb +354 -354
- data/lib/cosmos/core_ext/class.rb +51 -51
- data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
- data/lib/cosmos/core_ext/exception.rb +52 -52
- data/lib/cosmos/core_ext/file.rb +75 -75
- data/lib/cosmos/core_ext/hash.rb +28 -28
- data/lib/cosmos/core_ext/io.rb +75 -75
- data/lib/cosmos/core_ext/kernel.rb +38 -38
- data/lib/cosmos/core_ext/math.rb +119 -119
- data/lib/cosmos/core_ext/matrix.rb +146 -146
- data/lib/cosmos/core_ext/objectspace.rb +29 -29
- data/lib/cosmos/core_ext/range.rb +22 -22
- data/lib/cosmos/core_ext/socket.rb +32 -32
- data/lib/cosmos/core_ext/string.rb +311 -311
- data/lib/cosmos/core_ext/stringio.rb +24 -24
- data/lib/cosmos/core_ext/time.rb +448 -448
- data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
- data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
- data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
- data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
- data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
- data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -326
- data/lib/cosmos/gui/dialogs/about_dialog.rb +137 -137
- data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
- data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
- data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
- data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
- data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +260 -260
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -169
- data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
- data/lib/cosmos/gui/dialogs/progress_dialog.rb +276 -276
- data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -165
- data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
- data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
- data/lib/cosmos/gui/dialogs/splash.rb +135 -135
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
- data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
- data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
- data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
- data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +473 -473
- data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
- data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +451 -451
- data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
- data/lib/cosmos/gui/line_graph/lines.rb +290 -290
- data/lib/cosmos/gui/line_graph/overview_graph.rb +469 -469
- data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
- data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
- data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
- data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
- data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
- data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
- data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -724
- data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
- data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
- data/lib/cosmos/gui/opengl/opengl.rb +8 -8
- data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
- data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
- data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
- data/lib/cosmos/gui/qt.rb +860 -860
- data/lib/cosmos/gui/qt_tool.rb +380 -380
- data/lib/cosmos/gui/text/completion.rb +381 -381
- data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
- data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
- data/lib/cosmos/gui/text/ruby_editor.rb +415 -415
- data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
- data/lib/cosmos/gui/utilities/script_module_gui.rb +330 -330
- data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
- data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
- data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
- data/lib/cosmos/interfaces.rb +11 -11
- data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -153
- data/lib/cosmos/interfaces/interface.rb +225 -225
- data/lib/cosmos/interfaces/linc_interface.rb +360 -360
- data/lib/cosmos/interfaces/serial_interface.rb +76 -76
- data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -129
- data/lib/cosmos/interfaces/stream_interface.rb +136 -136
- data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +164 -164
- data/lib/cosmos/interfaces/udp_interface.rb +161 -161
- data/lib/cosmos/io/buffered_file.rb +11 -11
- data/lib/cosmos/io/cosmos_snmp.rb +50 -50
- data/lib/cosmos/io/io_multiplexer.rb +89 -89
- data/lib/cosmos/io/json_drb.rb +376 -376
- data/lib/cosmos/io/json_drb_object.rb +198 -198
- data/lib/cosmos/io/json_rpc.rb +365 -365
- data/lib/cosmos/io/posix_serial_driver.rb +145 -145
- data/lib/cosmos/io/raw_logger.rb +174 -174
- data/lib/cosmos/io/raw_logger_pair.rb +71 -71
- data/lib/cosmos/io/serial_driver.rb +85 -85
- data/lib/cosmos/io/stderr.rb +36 -36
- data/lib/cosmos/io/stdout.rb +36 -36
- data/lib/cosmos/io/tcpip_server.rb +571 -571
- data/lib/cosmos/io/udp_sockets.rb +152 -152
- data/lib/cosmos/io/win32_serial_driver.rb +145 -145
- data/lib/cosmos/packet_logs.rb +7 -7
- data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -104
- data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
- data/lib/cosmos/packet_logs/packet_log_reader.rb +450 -450
- data/lib/cosmos/packet_logs/packet_log_writer.rb +323 -323
- data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
- data/lib/cosmos/packets/binary_accessor.rb +634 -634
- data/lib/cosmos/packets/commands.rb +293 -293
- data/lib/cosmos/packets/limits.rb +267 -267
- data/lib/cosmos/packets/limits_response.rb +38 -38
- data/lib/cosmos/packets/packet.rb +786 -786
- data/lib/cosmos/packets/packet_config.rb +482 -482
- data/lib/cosmos/packets/packet_item.rb +317 -317
- data/lib/cosmos/packets/packet_item_limits.rb +128 -128
- data/lib/cosmos/packets/parsers/format_string_parser.rb +58 -58
- data/lib/cosmos/packets/parsers/limits_parser.rb +146 -146
- data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -52
- data/lib/cosmos/packets/parsers/macro_parser.rb +116 -116
- data/lib/cosmos/packets/parsers/packet_item_parser.rb +215 -215
- data/lib/cosmos/packets/parsers/packet_parser.rb +123 -123
- data/lib/cosmos/packets/parsers/processor_parser.rb +63 -63
- data/lib/cosmos/packets/parsers/state_parser.rb +116 -116
- data/lib/cosmos/packets/structure.rb +458 -458
- data/lib/cosmos/packets/structure_item.rb +233 -233
- data/lib/cosmos/packets/telemetry.rb +350 -350
- data/lib/cosmos/processors.rb +6 -6
- data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
- data/lib/cosmos/processors/processor.rb +71 -71
- data/lib/cosmos/processors/statistics_processor.rb +65 -65
- data/lib/cosmos/processors/watermark_processor.rb +44 -44
- data/lib/cosmos/script.rb +9 -9
- data/lib/cosmos/script/cmd_tlm_server.rb +110 -110
- data/lib/cosmos/script/commands.rb +184 -184
- data/lib/cosmos/script/extract.rb +123 -123
- data/lib/cosmos/script/limits.rb +114 -114
- data/lib/cosmos/script/script.rb +76 -76
- data/lib/cosmos/script/scripting.rb +897 -897
- data/lib/cosmos/script/telemetry.rb +174 -174
- data/lib/cosmos/script/tools.rb +138 -138
- data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
- data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
- data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
- data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
- data/lib/cosmos/streams/serial_stream.rb +157 -157
- data/lib/cosmos/streams/stream.rb +63 -63
- data/lib/cosmos/streams/stream_protocol.rb +373 -373
- data/lib/cosmos/streams/tcpip_client_stream.rb +113 -113
- data/lib/cosmos/streams/tcpip_socket_stream.rb +143 -143
- data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
- data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
- data/lib/cosmos/system.rb +4 -4
- data/lib/cosmos/system/system.rb +618 -618
- data/lib/cosmos/system/target.rb +197 -197
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +255 -255
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +717 -717
- data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
- data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +1034 -1034
- data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -67
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +515 -515
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +253 -253
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +408 -408
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
- data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -175
- data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +200 -200
- data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -176
- data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +150 -150
- data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +244 -244
- data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +90 -90
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +266 -266
- data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
- data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
- data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +621 -621
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +134 -134
- data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -156
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -382
- data/lib/cosmos/tools/launcher/launcher.rb +188 -188
- data/lib/cosmos/tools/launcher/launcher_config.rb +256 -256
- data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -40
- data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -116
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +837 -837
- data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
- data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +542 -542
- data/lib/cosmos/tools/replay/replay.rb +501 -501
- data/lib/cosmos/tools/replay/replay_server.rb +91 -91
- data/lib/cosmos/tools/script_runner/script_audit.rb +147 -147
- data/lib/cosmos/tools/script_runner/script_runner.rb +922 -922
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1798 -1798
- data/lib/cosmos/tools/table_manager/table.rb +70 -70
- data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
- data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
- data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
- data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
- data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
- data/lib/cosmos/tools/test_runner/test.rb +539 -539
- data/lib/cosmos/tools/test_runner/test_runner.rb +1189 -1189
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -341
- data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1016 -1016
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -95
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +181 -181
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -174
- data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -193
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +407 -407
- data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
- data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -323
- data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
- data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
- data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
- data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
- data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
- data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
- data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
- data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -1291
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -114
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -78
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
- data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -486
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +561 -561
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +290 -290
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
- data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -66
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
- data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
- data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
- data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
- data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
- data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
- data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
- data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
- data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
- data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
- data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
- data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
- data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
- data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
- data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
- data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
- data/lib/cosmos/top_level.rb +759 -759
- data/lib/cosmos/utilities.rb +11 -11
- data/lib/cosmos/utilities/crc.rb +166 -166
- data/lib/cosmos/utilities/csv.rb +83 -83
- data/lib/cosmos/utilities/logger.rb +137 -137
- data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
- data/lib/cosmos/utilities/message_log.rb +79 -79
- data/lib/cosmos/utilities/quaternion.rb +258 -258
- data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
- data/lib/cosmos/utilities/simulated_target.rb +99 -99
- data/lib/cosmos/utilities/sleeper.rb +44 -44
- data/lib/cosmos/version.rb +12 -12
- data/lib/cosmos/win32/excel.rb +66 -66
- data/lib/cosmos/win32/win32.rb +387 -387
- data/lib/cosmos/win32/win32_main.rb +321 -321
- data/roodi.yml +24 -24
- data/run_gui_tests.bat +0 -0
- data/spec/ccsds/ccsds_packet_spec.rb +67 -67
- data/spec/ccsds/ccsds_parser_spec.rb +148 -148
- data/spec/config/config_parser_spec.rb +322 -322
- data/spec/conversions/conversion_spec.rb +31 -31
- data/spec/conversions/generic_conversion_spec.rb +45 -45
- data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
- data/spec/conversions/polynomial_conversion_spec.rb +40 -40
- data/spec/conversions/processor_conversion_spec.rb +45 -45
- data/spec/conversions/received_count_conversion_spec.rb +43 -43
- data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
- data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
- data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
- data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
- data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
- data/spec/core_ext/array_spec.rb +186 -186
- data/spec/core_ext/class_spec.rb +36 -36
- data/spec/core_ext/cosmos_io_spec.rb +77 -77
- data/spec/core_ext/exception_spec.rb +91 -91
- data/spec/core_ext/file_spec.rb +72 -72
- data/spec/core_ext/hash_spec.rb +24 -24
- data/spec/core_ext/io_spec.rb +46 -46
- data/spec/core_ext/kernel_spec.rb +54 -54
- data/spec/core_ext/math_spec.rb +116 -116
- data/spec/core_ext/matrix_spec.rb +66 -66
- data/spec/core_ext/objectspace_spec.rb +29 -29
- data/spec/core_ext/range_spec.rb +21 -21
- data/spec/core_ext/socket_spec.rb +32 -32
- data/spec/core_ext/string_spec.rb +223 -223
- data/spec/core_ext/stringio_spec.rb +21 -21
- data/spec/core_ext/time_spec.rb +202 -202
- data/spec/gui/line_graph/line_clip_spec.rb +322 -322
- data/spec/gui/qt_spec.rb +102 -102
- data/spec/install/config/system/system.txt +33 -33
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
- data/spec/install/config/targets/COSMOS/target.txt +5 -5
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
- data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -305
- data/spec/install/config/targets/INST/target.txt +10 -10
- data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
- data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
- data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
- data/spec/interfaces/interface_spec.rb +130 -130
- data/spec/interfaces/linc_interface_spec.rb +259 -259
- data/spec/interfaces/serial_interface_spec.rb +56 -56
- data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
- data/spec/interfaces/stream_interface_spec.rb +157 -157
- data/spec/interfaces/tcpip_client_interface_spec.rb +55 -55
- data/spec/interfaces/tcpip_server_interface_spec.rb +160 -160
- data/spec/interfaces/udp_interface_spec.rb +175 -175
- data/spec/io/buffered_file_spec.rb +113 -113
- data/spec/io/io_multiplexer_spec.rb +94 -94
- data/spec/io/json_drb_object_spec.rb +119 -119
- data/spec/io/json_drb_spec.rb +311 -311
- data/spec/io/json_rpc_spec.rb +264 -264
- data/spec/io/raw_logger_pair_spec.rb +76 -76
- data/spec/io/raw_logger_spec.rb +133 -133
- data/spec/io/serial_driver_spec.rb +60 -60
- data/spec/io/stderr_spec.rb +32 -32
- data/spec/io/stdout_spec.rb +32 -32
- data/spec/io/tcpip_server_spec.rb +338 -338
- data/spec/io/udp_sockets_spec.rb +94 -94
- data/spec/io/win32_serial_driver_spec.rb +88 -88
- data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
- data/spec/packet_logs/packet_log_reader_spec.rb +468 -468
- data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
- data/spec/packet_logs/packet_log_writer_spec.rb +225 -225
- data/spec/packets/binary_accessor_spec.rb +2326 -2326
- data/spec/packets/commands_spec.rb +369 -369
- data/spec/packets/limits_response_spec.rb +25 -25
- data/spec/packets/limits_spec.rb +344 -344
- data/spec/packets/packet_config_spec.rb +805 -805
- data/spec/packets/packet_item_limits_spec.rb +161 -161
- data/spec/packets/packet_item_spec.rb +386 -386
- data/spec/packets/packet_spec.rb +1317 -1317
- data/spec/packets/parsers/format_string_parser_spec.rb +122 -122
- data/spec/packets/parsers/limits_parser_spec.rb +282 -282
- data/spec/packets/parsers/limits_response_parser_spec.rb +149 -149
- data/spec/packets/parsers/macro_parser_spec.rb +212 -212
- data/spec/packets/parsers/packet_item_parser_spec.rb +306 -306
- data/spec/packets/parsers/packet_parser_spec.rb +99 -99
- data/spec/packets/parsers/processor_parser_spec.rb +114 -114
- data/spec/packets/parsers/state_parser_spec.rb +156 -156
- data/spec/packets/structure_item_spec.rb +195 -195
- data/spec/packets/structure_spec.rb +565 -565
- data/spec/packets/telemetry_spec.rb +578 -578
- data/spec/processors/new_packet_log_processor_spec.rb +39 -39
- data/spec/processors/processor_spec.rb +55 -55
- data/spec/processors/statistics_processor_spec.rb +60 -60
- data/spec/processors/watermark_processor_spec.rb +51 -51
- data/spec/script/cmd_tlm_server_spec.rb +110 -110
- data/spec/script/commands_disconnect_spec.rb +270 -270
- data/spec/script/commands_spec.rb +302 -302
- data/spec/script/limits_spec.rb +153 -153
- data/spec/script/script_spec.rb +86 -86
- data/spec/script/scripting_spec.rb +440 -440
- data/spec/script/telemetry_spec.rb +165 -165
- data/spec/script/tools_spec.rb +117 -117
- data/spec/spec_helper.rb +190 -190
- data/spec/streams/burst_stream_protocol_spec.rb +32 -32
- data/spec/streams/fixed_stream_protocol_spec.rb +113 -113
- data/spec/streams/length_stream_protocol_spec.rb +300 -300
- data/spec/streams/preidentified_stream_protocol_spec.rb +121 -121
- data/spec/streams/serial_stream_spec.rb +117 -117
- data/spec/streams/stream_protocol_spec.rb +346 -346
- data/spec/streams/stream_spec.rb +30 -30
- data/spec/streams/tcpip_client_stream_spec.rb +57 -57
- data/spec/streams/tcpip_socket_stream_spec.rb +193 -193
- data/spec/streams/template_stream_protocol_spec.rb +156 -156
- data/spec/streams/terminated_stream_protocol_spec.rb +127 -127
- data/spec/system/system_spec.rb +665 -665
- data/spec/system/target_spec.rb +250 -250
- data/spec/tools/cmd_tlm_server/api_spec.rb +1117 -1117
- data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +453 -453
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -151
- data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -235
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -252
- data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +151 -151
- data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -223
- data/spec/tools/launcher/launcher_config_spec.rb +464 -464
- data/spec/top_level/top_level_spec.rb +334 -334
- data/spec/utilities/crc_spec.rb +45 -45
- data/spec/utilities/csv_spec.rb +97 -97
- data/spec/utilities/logger_spec.rb +102 -102
- data/spec/utilities/message_log_spec.rb +89 -89
- data/spec/utilities/quaternion_spec.rb +107 -107
- data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
- data/tasks/manifest.rake +22 -22
- data/tasks/spec.rake +23 -23
- data/test/benchmarks/binary_accessor_benchmark.rb +14 -14
- data/test/benchmarks/gsub_benchmark.rb +152 -152
- data/test/benchmarks/is_a_benchmark.rb +34 -34
- data/test/performance/PACKETS.bat +0 -0
- data/test/performance/Rakefile +77 -77
- data/test/performance/THREADS.bat +0 -0
- data/test/performance/config/data/crc.txt +196 -196
- data/test/performance/config/data/diamond.STL +57 -57
- data/test/performance/config/data/meta_init.txt +4 -4
- data/test/performance/config/system/system_packets.txt +39 -39
- data/test/performance/config/system/system_threads.txt +59 -59
- data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -46
- data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/test/performance/config/targets/COSMOS/screens/version.txt +19 -19
- data/test/performance/config/targets/COSMOS/target.txt +11 -11
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -20
- data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -98
- data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -6
- data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -22
- data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -24
- data/test/performance/config/targets/PACKET/screens/status.txt +25 -25
- data/test/performance/config/targets/PACKET/target.txt +28 -28
- data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -12
- data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -17
- data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -18
- data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -6
- data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -22
- data/test/performance/config/targets/THREAD/screens/status.txt +25 -25
- data/test/performance/config/targets/THREAD/target.txt +6 -6
- data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -28
- data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -68
- data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -11
- data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -66
- data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/test/performance/config/tools/launcher/launcher_packets.txt +34 -34
- data/test/performance/config/tools/launcher/launcher_threads.txt +83 -83
- data/test/performance/config/tools/script_runner/script_runner.txt +3 -3
- data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
- data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
- data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
- data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
- data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
- data/test/performance/config/tools/test_runner/test_runner.txt +17 -17
- data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
- data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
- data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
- data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -204
- data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -13
- data/test/performance/lib/packet_target.rb +126 -126
- data/test/performance/lib/thread_target.rb +120 -120
- data/test/performance/lib/user_version.rb +3 -3
- data/test/performance/procedures/checks.rb +11 -11
- data/test/performance/procedures/clear_util.rb +7 -7
- data/test/performance/procedures/collect.rb +18 -18
- data/test/performance/procedures/collect_util.rb +14 -14
- data/test/performance/procedures/cosmos_api_test.rb +293 -293
- data/test/performance/procedures/disconnect.rb +29 -29
- data/test/performance/procedures/example_test.rb +182 -182
- data/test/performance/procedures/plot_test.rb +8 -8
- data/test/performance/procedures/procedure.rb +2 -2
- data/test/performance/procedures/run_example_test.rb +3 -3
- data/test/performance/procedures/test.rb +51 -51
- data/test/performance/tools/CmdExtractor +14 -14
- data/test/performance/tools/CmdExtractor.bat +0 -0
- data/test/performance/tools/CmdSender +14 -14
- data/test/performance/tools/CmdSender.bat +0 -0
- data/test/performance/tools/CmdTlmServer +16 -16
- data/test/performance/tools/CmdTlmServer.bat +0 -0
- data/test/performance/tools/CmdTlmServerMemProf +20 -20
- data/test/performance/tools/CmdTlmServerMemProf.bat +0 -0
- data/test/performance/tools/DataViewer +14 -14
- data/test/performance/tools/DataViewer.bat +0 -0
- data/test/performance/tools/HandbookCreator +14 -14
- data/test/performance/tools/HandbookCreator.bat +0 -0
- data/test/performance/tools/Launcher +14 -14
- data/test/performance/tools/Launcher.bat +0 -0
- data/test/performance/tools/LimitsMonitor +14 -14
- data/test/performance/tools/LimitsMonitor.bat +0 -0
- data/test/performance/tools/OpenGLBuilder +14 -14
- data/test/performance/tools/OpenGLBuilder.bat +0 -0
- data/test/performance/tools/PacketTarget +14 -14
- data/test/performance/tools/PacketTarget.bat +0 -0
- data/test/performance/tools/PacketViewer +14 -14
- data/test/performance/tools/PacketViewer.bat +0 -0
- data/test/performance/tools/Replay +14 -14
- data/test/performance/tools/Replay.bat +0 -0
- data/test/performance/tools/ScpiTarget +14 -14
- data/test/performance/tools/ScpiTarget.bat +0 -0
- data/test/performance/tools/ScriptRunner +14 -14
- data/test/performance/tools/ScriptRunner.bat +0 -0
- data/test/performance/tools/TableManager +14 -14
- data/test/performance/tools/TableManager.bat +0 -0
- data/test/performance/tools/TestRunner +14 -14
- data/test/performance/tools/TestRunner.bat +0 -0
- data/test/performance/tools/ThreadTarget +14 -14
- data/test/performance/tools/ThreadTarget.bat +0 -0
- data/test/performance/tools/TlmExtractor +14 -14
- data/test/performance/tools/TlmExtractor.bat +0 -0
- data/test/performance/tools/TlmGrapher +14 -14
- data/test/performance/tools/TlmGrapher.bat +0 -0
- data/test/performance/tools/TlmGrapherMemProf +19 -19
- data/test/performance/tools/TlmGrapherMemProf.bat +0 -0
- data/test/performance/tools/TlmViewer +14 -14
- data/test/performance/tools/TlmViewer.bat +0 -0
- data/test/performance/tools/TlmViewerMemProf +19 -19
- data/test/performance/tools/TlmViewerMemProf.bat +0 -0
- data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
- data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
- data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
- data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
- data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
- data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
- data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
- data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
- data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
- data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
- data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
- data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
- data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
- data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
- data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
- data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
- data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
- data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
- metadata +3 -3
|
@@ -1,193 +1,193 @@
|
|
|
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 'cosmos'
|
|
12
|
-
|
|
13
|
-
module Cosmos
|
|
14
|
-
|
|
15
|
-
# Represents a data object in a tabbed plots definition
|
|
16
|
-
# Designed for use as a base class for custom data objects
|
|
17
|
-
class DataObject
|
|
18
|
-
|
|
19
|
-
# List of colors to use
|
|
20
|
-
COLOR_LIST = %w(blue red green darkorange gold purple hotpink lime cornflowerblue brown coral crimson indigo tan lightblue cyan peru)
|
|
21
|
-
|
|
22
|
-
# Used to create large arrays to prevent memory thrashing with large objects
|
|
23
|
-
DEFAULT_ARRAY_SIZE = 100000
|
|
24
|
-
|
|
25
|
-
# Percent of max seconds saved to achieve hystersis on pruning to
|
|
26
|
-
# reduce memory thrashing
|
|
27
|
-
PRUNE_HYSTERISIS_PERCENTAGE = 0.10
|
|
28
|
-
|
|
29
|
-
# Plot holding this data object (subclass of Plot)
|
|
30
|
-
attr_accessor :plot
|
|
31
|
-
|
|
32
|
-
# Name of this data object (string or nil)
|
|
33
|
-
attr_writer :name
|
|
34
|
-
|
|
35
|
-
# Max number of data points saved (integer)
|
|
36
|
-
attr_reader :max_points_saved
|
|
37
|
-
|
|
38
|
-
# Type of data object (string)
|
|
39
|
-
attr_accessor :data_object_type
|
|
40
|
-
|
|
41
|
-
# Error associated with this data_object (Exception)
|
|
42
|
-
attr_accessor :error
|
|
43
|
-
|
|
44
|
-
# Color currently being used to draw the line (string)
|
|
45
|
-
attr_accessor :color
|
|
46
|
-
|
|
47
|
-
# Assigned Color of the line (string or nil for auto color choice)
|
|
48
|
-
attr_accessor :assigned_color
|
|
49
|
-
|
|
50
|
-
# This value is the first x value for this data object since reset() was called. It is stored here
|
|
51
|
-
# so it can be retrieved even after x values have been pruned.
|
|
52
|
-
attr_accessor :first_x_value
|
|
53
|
-
|
|
54
|
-
def initialize
|
|
55
|
-
@plot = nil
|
|
56
|
-
@max_points_saved = nil
|
|
57
|
-
@prune_hysterisis = nil
|
|
58
|
-
# Start this value at the max float so any x_value will be less than it
|
|
59
|
-
@first_x_value = Float::MAX
|
|
60
|
-
@error = nil
|
|
61
|
-
@assigned_color = nil
|
|
62
|
-
@color = COLOR_LIST[0]
|
|
63
|
-
|
|
64
|
-
# Type is classname without DataObject
|
|
65
|
-
@data_object_type = self.class.to_s[0..-11].upcase
|
|
66
|
-
@data_object_type = @data_object_type.split("::")[-1] # remove Cosmos:: if necessary
|
|
67
|
-
end # def initialize
|
|
68
|
-
|
|
69
|
-
# Returns the configuration lines used to create this data object
|
|
70
|
-
def configuration_string
|
|
71
|
-
string = " DATA_OBJECT #{@data_object_type}\n"
|
|
72
|
-
string << " COLOR #{@assigned_color}\n" if @assigned_color
|
|
73
|
-
string
|
|
74
|
-
end # def configuration_string
|
|
75
|
-
|
|
76
|
-
# Handles data object specific keywords
|
|
77
|
-
def handle_keyword(parser, keyword, parameters)
|
|
78
|
-
case keyword
|
|
79
|
-
when 'COLOR'
|
|
80
|
-
# Expect 1 parameter
|
|
81
|
-
parser.verify_num_parameters(1, 1, "COLOR <Color Name>")
|
|
82
|
-
@assigned_color = parameters[0].downcase
|
|
83
|
-
@color = @assigned_color
|
|
84
|
-
else
|
|
85
|
-
raise ArgumentError, "Unknown keyword received by #{self.class}: #{keyword}"
|
|
86
|
-
end
|
|
87
|
-
end # def handle_keyword
|
|
88
|
-
|
|
89
|
-
# Returns the packets processed by this data object as an array of
|
|
90
|
-
# [target_name, packet_name] pairs
|
|
91
|
-
def processed_packets
|
|
92
|
-
raise "processed_packets must be defined by class #{self.class}"
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
# Processes a packet associated with this data object
|
|
96
|
-
#
|
|
97
|
-
# @param packet [Packet] The packet to process
|
|
98
|
-
# @param count [Integer] Count which increments for each packet received by
|
|
99
|
-
# the higher level process
|
|
100
|
-
def process_packet(packet, count)
|
|
101
|
-
raise "process_packet must be defined by class #{self.class}"
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def handle_process_exception(error, telemetry_point)
|
|
105
|
-
raise error if error.class == NoMemoryError
|
|
106
|
-
reset()
|
|
107
|
-
@plot.redraw_needed = true
|
|
108
|
-
@error = error
|
|
109
|
-
if error.is_a? TypeError
|
|
110
|
-
@error = FatalError.new("Telemetry point #{telemetry_point} could not be displayed. This is most likely due to this telemetry point being a String which can't be represented on the graph. Remove the point from the list of telemetry items to cause this exception to go away.\n\n#{error}")
|
|
111
|
-
else
|
|
112
|
-
@exceptions_reported ||= []
|
|
113
|
-
unless @exceptions_reported.include?(error.message)
|
|
114
|
-
@exceptions_reported << error.message
|
|
115
|
-
Cosmos.write_exception_file(error)
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
# Resets the data object's data (everything that is not configuration)
|
|
121
|
-
def reset
|
|
122
|
-
@error = nil
|
|
123
|
-
# Reset this value at the max float so any x_value will be less than it
|
|
124
|
-
@first_x_value = Float::MAX
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
# Supplies text that should be appended to the popup string on mousing over the specified
|
|
128
|
-
# x value
|
|
129
|
-
def popup_modifier(x_value)
|
|
130
|
-
# The default class returns an empty value
|
|
131
|
-
return ""
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
# Exports the data object's data as an array of arrays. Each inner array
|
|
135
|
-
# is a column of the output.
|
|
136
|
-
def export
|
|
137
|
-
raise "export must be defined by class #{self.class}"
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
# Creates a copy of the data object with settings but without data
|
|
141
|
-
def copy
|
|
142
|
-
data_object = self.class.new
|
|
143
|
-
data_object.assigned_color = @assigned_color.clone if @assigned_color
|
|
144
|
-
data_object.color = @color.clone
|
|
145
|
-
data_object.max_points_saved = @max_points_saved
|
|
146
|
-
data_object
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
# Edits the data object by updating its settings from another data object
|
|
150
|
-
def edit(editted_data_object)
|
|
151
|
-
@assigned_color = editted_data_object.assigned_color
|
|
152
|
-
@color = editted_data_object.color
|
|
153
|
-
self.max_points_saved = editted_data_object.max_points_saved
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
# Indicates if the changes made to the data object are safe to perform without reseting
|
|
157
|
-
# its data
|
|
158
|
-
#
|
|
159
|
-
# @param edited_data_object [DataObject] The data object which was edited
|
|
160
|
-
def edit_safe?(edited_data_object)
|
|
161
|
-
true
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
# Returns the name of this data object
|
|
165
|
-
def name
|
|
166
|
-
'Unknown'
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
# Sets the maximum number of points saved
|
|
170
|
-
def max_points_saved=(new_max_points_saved)
|
|
171
|
-
@max_points_saved = new_max_points_saved
|
|
172
|
-
if @max_points_saved
|
|
173
|
-
@prune_hysterisis = (@max_points_saved.to_f * PRUNE_HYSTERISIS_PERCENTAGE).to_i
|
|
174
|
-
@prune_hysterisis = 0 if @prune_hysterisis < 0
|
|
175
|
-
prune_to_max_points_saved(true) # force prune
|
|
176
|
-
else
|
|
177
|
-
@prune_hysterisis = nil
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
# Prunes data to max_points_saved
|
|
182
|
-
#
|
|
183
|
-
# @param force_prune [Boolean] Whether to prune no matter if the
|
|
184
|
-
# PRUNE_HYSTERISIS_PERCENTAGE is met. Set to true if the max_points_saved
|
|
185
|
-
# is changed to ensure the total is within the new limit.
|
|
186
|
-
def prune_to_max_points_saved(force_prune = false)
|
|
187
|
-
# Must be implemented by subclasses
|
|
188
|
-
return nil
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
end # class DataObject
|
|
192
|
-
|
|
193
|
-
end # module Cosmos
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'cosmos'
|
|
12
|
+
|
|
13
|
+
module Cosmos
|
|
14
|
+
|
|
15
|
+
# Represents a data object in a tabbed plots definition
|
|
16
|
+
# Designed for use as a base class for custom data objects
|
|
17
|
+
class DataObject
|
|
18
|
+
|
|
19
|
+
# List of colors to use
|
|
20
|
+
COLOR_LIST = %w(blue red green darkorange gold purple hotpink lime cornflowerblue brown coral crimson indigo tan lightblue cyan peru)
|
|
21
|
+
|
|
22
|
+
# Used to create large arrays to prevent memory thrashing with large objects
|
|
23
|
+
DEFAULT_ARRAY_SIZE = 100000
|
|
24
|
+
|
|
25
|
+
# Percent of max seconds saved to achieve hystersis on pruning to
|
|
26
|
+
# reduce memory thrashing
|
|
27
|
+
PRUNE_HYSTERISIS_PERCENTAGE = 0.10
|
|
28
|
+
|
|
29
|
+
# Plot holding this data object (subclass of Plot)
|
|
30
|
+
attr_accessor :plot
|
|
31
|
+
|
|
32
|
+
# Name of this data object (string or nil)
|
|
33
|
+
attr_writer :name
|
|
34
|
+
|
|
35
|
+
# Max number of data points saved (integer)
|
|
36
|
+
attr_reader :max_points_saved
|
|
37
|
+
|
|
38
|
+
# Type of data object (string)
|
|
39
|
+
attr_accessor :data_object_type
|
|
40
|
+
|
|
41
|
+
# Error associated with this data_object (Exception)
|
|
42
|
+
attr_accessor :error
|
|
43
|
+
|
|
44
|
+
# Color currently being used to draw the line (string)
|
|
45
|
+
attr_accessor :color
|
|
46
|
+
|
|
47
|
+
# Assigned Color of the line (string or nil for auto color choice)
|
|
48
|
+
attr_accessor :assigned_color
|
|
49
|
+
|
|
50
|
+
# This value is the first x value for this data object since reset() was called. It is stored here
|
|
51
|
+
# so it can be retrieved even after x values have been pruned.
|
|
52
|
+
attr_accessor :first_x_value
|
|
53
|
+
|
|
54
|
+
def initialize
|
|
55
|
+
@plot = nil
|
|
56
|
+
@max_points_saved = nil
|
|
57
|
+
@prune_hysterisis = nil
|
|
58
|
+
# Start this value at the max float so any x_value will be less than it
|
|
59
|
+
@first_x_value = Float::MAX
|
|
60
|
+
@error = nil
|
|
61
|
+
@assigned_color = nil
|
|
62
|
+
@color = COLOR_LIST[0]
|
|
63
|
+
|
|
64
|
+
# Type is classname without DataObject
|
|
65
|
+
@data_object_type = self.class.to_s[0..-11].upcase
|
|
66
|
+
@data_object_type = @data_object_type.split("::")[-1] # remove Cosmos:: if necessary
|
|
67
|
+
end # def initialize
|
|
68
|
+
|
|
69
|
+
# Returns the configuration lines used to create this data object
|
|
70
|
+
def configuration_string
|
|
71
|
+
string = " DATA_OBJECT #{@data_object_type}\n"
|
|
72
|
+
string << " COLOR #{@assigned_color}\n" if @assigned_color
|
|
73
|
+
string
|
|
74
|
+
end # def configuration_string
|
|
75
|
+
|
|
76
|
+
# Handles data object specific keywords
|
|
77
|
+
def handle_keyword(parser, keyword, parameters)
|
|
78
|
+
case keyword
|
|
79
|
+
when 'COLOR'
|
|
80
|
+
# Expect 1 parameter
|
|
81
|
+
parser.verify_num_parameters(1, 1, "COLOR <Color Name>")
|
|
82
|
+
@assigned_color = parameters[0].downcase
|
|
83
|
+
@color = @assigned_color
|
|
84
|
+
else
|
|
85
|
+
raise ArgumentError, "Unknown keyword received by #{self.class}: #{keyword}"
|
|
86
|
+
end
|
|
87
|
+
end # def handle_keyword
|
|
88
|
+
|
|
89
|
+
# Returns the packets processed by this data object as an array of
|
|
90
|
+
# [target_name, packet_name] pairs
|
|
91
|
+
def processed_packets
|
|
92
|
+
raise "processed_packets must be defined by class #{self.class}"
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Processes a packet associated with this data object
|
|
96
|
+
#
|
|
97
|
+
# @param packet [Packet] The packet to process
|
|
98
|
+
# @param count [Integer] Count which increments for each packet received by
|
|
99
|
+
# the higher level process
|
|
100
|
+
def process_packet(packet, count)
|
|
101
|
+
raise "process_packet must be defined by class #{self.class}"
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def handle_process_exception(error, telemetry_point)
|
|
105
|
+
raise error if error.class == NoMemoryError
|
|
106
|
+
reset()
|
|
107
|
+
@plot.redraw_needed = true
|
|
108
|
+
@error = error
|
|
109
|
+
if error.is_a? TypeError
|
|
110
|
+
@error = FatalError.new("Telemetry point #{telemetry_point} could not be displayed. This is most likely due to this telemetry point being a String which can't be represented on the graph. Remove the point from the list of telemetry items to cause this exception to go away.\n\n#{error}")
|
|
111
|
+
else
|
|
112
|
+
@exceptions_reported ||= []
|
|
113
|
+
unless @exceptions_reported.include?(error.message)
|
|
114
|
+
@exceptions_reported << error.message
|
|
115
|
+
Cosmos.write_exception_file(error)
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# Resets the data object's data (everything that is not configuration)
|
|
121
|
+
def reset
|
|
122
|
+
@error = nil
|
|
123
|
+
# Reset this value at the max float so any x_value will be less than it
|
|
124
|
+
@first_x_value = Float::MAX
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# Supplies text that should be appended to the popup string on mousing over the specified
|
|
128
|
+
# x value
|
|
129
|
+
def popup_modifier(x_value)
|
|
130
|
+
# The default class returns an empty value
|
|
131
|
+
return ""
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# Exports the data object's data as an array of arrays. Each inner array
|
|
135
|
+
# is a column of the output.
|
|
136
|
+
def export
|
|
137
|
+
raise "export must be defined by class #{self.class}"
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# Creates a copy of the data object with settings but without data
|
|
141
|
+
def copy
|
|
142
|
+
data_object = self.class.new
|
|
143
|
+
data_object.assigned_color = @assigned_color.clone if @assigned_color
|
|
144
|
+
data_object.color = @color.clone
|
|
145
|
+
data_object.max_points_saved = @max_points_saved
|
|
146
|
+
data_object
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Edits the data object by updating its settings from another data object
|
|
150
|
+
def edit(editted_data_object)
|
|
151
|
+
@assigned_color = editted_data_object.assigned_color
|
|
152
|
+
@color = editted_data_object.color
|
|
153
|
+
self.max_points_saved = editted_data_object.max_points_saved
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# Indicates if the changes made to the data object are safe to perform without reseting
|
|
157
|
+
# its data
|
|
158
|
+
#
|
|
159
|
+
# @param edited_data_object [DataObject] The data object which was edited
|
|
160
|
+
def edit_safe?(edited_data_object)
|
|
161
|
+
true
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
# Returns the name of this data object
|
|
165
|
+
def name
|
|
166
|
+
'Unknown'
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Sets the maximum number of points saved
|
|
170
|
+
def max_points_saved=(new_max_points_saved)
|
|
171
|
+
@max_points_saved = new_max_points_saved
|
|
172
|
+
if @max_points_saved
|
|
173
|
+
@prune_hysterisis = (@max_points_saved.to_f * PRUNE_HYSTERISIS_PERCENTAGE).to_i
|
|
174
|
+
@prune_hysterisis = 0 if @prune_hysterisis < 0
|
|
175
|
+
prune_to_max_points_saved(true) # force prune
|
|
176
|
+
else
|
|
177
|
+
@prune_hysterisis = nil
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Prunes data to max_points_saved
|
|
182
|
+
#
|
|
183
|
+
# @param force_prune [Boolean] Whether to prune no matter if the
|
|
184
|
+
# PRUNE_HYSTERISIS_PERCENTAGE is met. Set to true if the max_points_saved
|
|
185
|
+
# is changed to ensure the total is within the new limit.
|
|
186
|
+
def prune_to_max_points_saved(force_prune = false)
|
|
187
|
+
# Must be implemented by subclasses
|
|
188
|
+
return nil
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
end # class DataObject
|
|
192
|
+
|
|
193
|
+
end # module Cosmos
|
|
@@ -1,407 +1,407 @@
|
|
|
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 'cosmos'
|
|
12
|
-
require 'cosmos/tools/tlm_grapher/data_objects/linegraph_data_object'
|
|
13
|
-
|
|
14
|
-
module Cosmos
|
|
15
|
-
|
|
16
|
-
# Represents a data object on a line graph for a housekeeping telemetry item
|
|
17
|
-
class HousekeepingDataObject < LinegraphDataObject
|
|
18
|
-
|
|
19
|
-
# Value Types
|
|
20
|
-
VALUE_TYPES = [:RAW, :CONVERTED]
|
|
21
|
-
|
|
22
|
-
# Analysis Types
|
|
23
|
-
ANALYSIS_TYPES = [:NONE, :DIFFERENCE, :WINDOWED_MEAN, :WINDOWED_MEAN_REMOVED, :STD_DEV, :ALLAN_DEV, :MAXIMUM, :MINIMUM, :PEAK_TO_PEAK]
|
|
24
|
-
|
|
25
|
-
# The housekeeping telemetry item's target name (string)
|
|
26
|
-
attr_reader :target_name
|
|
27
|
-
|
|
28
|
-
# The housekeeping telemetry item's packet name (string)
|
|
29
|
-
attr_reader :packet_name
|
|
30
|
-
|
|
31
|
-
# The housekeeping telemetry item's item name (string)
|
|
32
|
-
attr_reader :item_name
|
|
33
|
-
|
|
34
|
-
# The housekeeping telemetry item's time item name (string)
|
|
35
|
-
attr_accessor :time_item_name
|
|
36
|
-
|
|
37
|
-
# The housekeeping telemetry item's formatted time item name (string)
|
|
38
|
-
attr_accessor :formatted_time_item_name
|
|
39
|
-
|
|
40
|
-
# Type of data to collect - :RAW or :CONVERTED
|
|
41
|
-
attr_accessor :value_type
|
|
42
|
-
|
|
43
|
-
# The analysis to perform
|
|
44
|
-
attr_accessor :analysis
|
|
45
|
-
|
|
46
|
-
# The number of samples to use in the analysis (integer)
|
|
47
|
-
attr_reader :analysis_samples
|
|
48
|
-
|
|
49
|
-
# Automatically show limits line for telemetry item (true or false)
|
|
50
|
-
attr_reader :show_limits_lines
|
|
51
|
-
|
|
52
|
-
# Limits lines for telemetry item (array)
|
|
53
|
-
attr_accessor :limits_lines
|
|
54
|
-
|
|
55
|
-
# Create a new data object
|
|
56
|
-
def initialize
|
|
57
|
-
super()
|
|
58
|
-
@target_name = nil
|
|
59
|
-
@packet_name = nil
|
|
60
|
-
@item_name = nil
|
|
61
|
-
@time_item_name = nil
|
|
62
|
-
@formatted_time_item_name = nil
|
|
63
|
-
@value_type = :CONVERTED
|
|
64
|
-
@analysis = :NONE
|
|
65
|
-
@analysis_samples = 3
|
|
66
|
-
@show_limits_lines = false
|
|
67
|
-
@limits_lines = []
|
|
68
|
-
@num_samples_ahead = 1
|
|
69
|
-
@num_samples_behind = 1
|
|
70
|
-
@unprocessed_x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
|
|
71
|
-
@unprocessed_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
|
|
72
|
-
@differenced_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
|
|
73
|
-
end # def initialize
|
|
74
|
-
|
|
75
|
-
# Returns the configuration lines used to create this data object
|
|
76
|
-
def configuration_string
|
|
77
|
-
string = super()
|
|
78
|
-
string << " ITEM #{@target_name} #{@packet_name} #{@item_name}\n" if @target_name and @packet_name and @item_name
|
|
79
|
-
string << " TIME_ITEM #{@time_item_name}\n" if @time_item_name
|
|
80
|
-
string << " FORMATTED_TIME_ITEM #{@formatted_time_item_name}\n" if @formatted_time_item_name
|
|
81
|
-
string << " VALUE_TYPE #{@value_type}\n"
|
|
82
|
-
string << " ANALYSIS #{@analysis}\n"
|
|
83
|
-
string << " ANALYSIS_SAMPLES #{@analysis_samples}\n"
|
|
84
|
-
string << " SHOW_LIMITS_LINES #{@show_limits_lines.to_s.upcase}\n"
|
|
85
|
-
string
|
|
86
|
-
end # def configuration_string
|
|
87
|
-
|
|
88
|
-
# Handles data object specific keywords
|
|
89
|
-
def handle_keyword(parser, keyword, parameters)
|
|
90
|
-
case keyword
|
|
91
|
-
when 'ITEM'
|
|
92
|
-
# Expect 3 parameters
|
|
93
|
-
parser.verify_num_parameters(3, 3, "ITEM <Target Name> <Packet Name> <Item Name>")
|
|
94
|
-
set_item(parameters[0], parameters[1], parameters[2], true)
|
|
95
|
-
|
|
96
|
-
when 'TIME_ITEM'
|
|
97
|
-
# Expect 1 parameter
|
|
98
|
-
parser.verify_num_parameters(1, 1, "TIME_ITEM <Time Item Name>")
|
|
99
|
-
@time_item_name = parameters[0].upcase
|
|
100
|
-
|
|
101
|
-
when 'FORMATTED_TIME_ITEM'
|
|
102
|
-
# Expect 1 parameter
|
|
103
|
-
parser.verify_num_parameters(1, 1, "FORMATTED_TIME_ITEM <Formatted Time Item Name>")
|
|
104
|
-
@formatted_time_item_name = parameters[0].upcase
|
|
105
|
-
|
|
106
|
-
when 'VALUE_TYPE'
|
|
107
|
-
# Expect 1 parameter
|
|
108
|
-
parser.verify_num_parameters(1, 1, "VALUE_TYPE <RAW or CONVERTED>")
|
|
109
|
-
value_type = parameters[0].upcase.intern
|
|
110
|
-
if VALUE_TYPES.include?(value_type)
|
|
111
|
-
@value_type = value_type
|
|
112
|
-
else
|
|
113
|
-
raise ArgumentError, "Unknown VALUE_TYPE value: #{value_type}"
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
when 'ANALYSIS'
|
|
117
|
-
# Expect 1 parameter
|
|
118
|
-
parser.verify_num_parameters(1, 1, "ANALYSIS <Analysis Type>")
|
|
119
|
-
analysis = parameters[0].upcase.intern
|
|
120
|
-
if ANALYSIS_TYPES.include?(analysis)
|
|
121
|
-
@analysis = analysis
|
|
122
|
-
else
|
|
123
|
-
raise ArgumentError, "Unknown ANALYSIS value: #{analysis}"
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
when 'ANALYSIS_SAMPLES'
|
|
127
|
-
# Expect 1 parameter
|
|
128
|
-
parser.verify_num_parameters(1, 1, "ANALYSIS_SAMPLES <Number of Samples>")
|
|
129
|
-
self.analysis_samples = parameters[0].to_i
|
|
130
|
-
|
|
131
|
-
when 'SHOW_LIMITS_LINES'
|
|
132
|
-
# Expect 1 parameter
|
|
133
|
-
parser.verify_num_parameters(1, 1, "SHOW_LIMITS_LINES <TRUE or FALSE>")
|
|
134
|
-
self.show_limits_lines = ConfigParser.handle_true_false(parameters[0])
|
|
135
|
-
|
|
136
|
-
else
|
|
137
|
-
# Unknown keywords are passed to parent data object
|
|
138
|
-
super(parser, keyword, parameters)
|
|
139
|
-
|
|
140
|
-
end # case keyword
|
|
141
|
-
|
|
142
|
-
end # def handle_keyword
|
|
143
|
-
|
|
144
|
-
# Returns the packet processed by this data object
|
|
145
|
-
def processed_packets
|
|
146
|
-
if @target_name and @packet_name
|
|
147
|
-
[[@target_name, @packet_name]]
|
|
148
|
-
else
|
|
149
|
-
[]
|
|
150
|
-
end
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
# (see DataObject#process_packet)
|
|
154
|
-
def process_packet(packet, count)
|
|
155
|
-
begin
|
|
156
|
-
# Retrieve x and y values from packet
|
|
157
|
-
x_value = packet.read(@time_item_name)
|
|
158
|
-
if @value_type == :RAW
|
|
159
|
-
y_value = packet.read(@item_name, :RAW)
|
|
160
|
-
else
|
|
161
|
-
y_value = packet.read(@item_name)
|
|
162
|
-
end
|
|
163
|
-
# Bail on the values if they are NaN or nil as we can't graph them
|
|
164
|
-
return if x_value.nil? || y_value.nil? ||
|
|
165
|
-
(x_value.respond_to?(:nan?) && x_value.nan?) ||
|
|
166
|
-
(y_value.respond_to?(:nan?) && y_value.nan?)
|
|
167
|
-
@formatted_x_values << packet.read(@formatted_time_item_name) if @formatted_time_item_name
|
|
168
|
-
|
|
169
|
-
upper_index = nil
|
|
170
|
-
sample_index = nil
|
|
171
|
-
lower_index = nil
|
|
172
|
-
if @analysis != :NONE
|
|
173
|
-
# Add to unprocessed data
|
|
174
|
-
@unprocessed_x_values << x_value
|
|
175
|
-
@unprocessed_y_values << y_value
|
|
176
|
-
|
|
177
|
-
# Calculate indexes into arrays
|
|
178
|
-
upper_index = @unprocessed_y_values.length - 1
|
|
179
|
-
sample_index = upper_index - @num_samples_ahead
|
|
180
|
-
lower_index = sample_index - @num_samples_behind
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
case @analysis
|
|
184
|
-
when :NONE
|
|
185
|
-
@x_values << x_value
|
|
186
|
-
@y_values << (y_value + @y_offset)
|
|
187
|
-
@plot.redraw_needed = true
|
|
188
|
-
|
|
189
|
-
when :DIFFERENCE, :ALLAN_DEV
|
|
190
|
-
if @unprocessed_y_values.length > 1
|
|
191
|
-
differenced_y_value = y_value - @unprocessed_y_values[-2]
|
|
192
|
-
|
|
193
|
-
if @analysis == :DIFFERENCE
|
|
194
|
-
@x_values << x_value
|
|
195
|
-
@y_values << (differenced_y_value + @y_offset)
|
|
196
|
-
@plot.redraw_needed = true
|
|
197
|
-
else # @analysis == :ALLAN_DEV
|
|
198
|
-
@differenced_y_values[upper_index] = differenced_y_value
|
|
199
|
-
|
|
200
|
-
if lower_index >= 1
|
|
201
|
-
data = @differenced_y_values[lower_index..upper_index]
|
|
202
|
-
@x_values << @unprocessed_x_values[sample_index]
|
|
203
|
-
@y_values << (Math.sqrt(data.squared.sum / (@analysis_samples * 2)) + @y_offset)
|
|
204
|
-
@plot.redraw_needed = true
|
|
205
|
-
end
|
|
206
|
-
end
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
when :WINDOWED_MEAN, :WINDOWED_MEAN_REMOVED, :STD_DEV
|
|
210
|
-
if @unprocessed_y_values.length >= @analysis_samples
|
|
211
|
-
# Isolate window of data
|
|
212
|
-
data = @unprocessed_y_values[lower_index..upper_index]
|
|
213
|
-
|
|
214
|
-
# Calculate windowed mean
|
|
215
|
-
mean = data.mean
|
|
216
|
-
|
|
217
|
-
case @analysis
|
|
218
|
-
when :WINDOWED_MEAN
|
|
219
|
-
@y_values << (mean + @y_offset)
|
|
220
|
-
when :WINDOWED_MEAN_REMOVED
|
|
221
|
-
@y_values << (@unprocessed_y_values[sample_index] - mean + @y_offset)
|
|
222
|
-
when :STD_DEV
|
|
223
|
-
data.map! {|value| value - mean}
|
|
224
|
-
@y_values << (Math.sqrt(data.squared.sum / (@analysis_samples - 1)) + @y_offset)
|
|
225
|
-
end
|
|
226
|
-
@x_values << @unprocessed_x_values[sample_index]
|
|
227
|
-
@plot.redraw_needed = true
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
when :MAXIMUM, :MINIMUM, :PEAK_TO_PEAK
|
|
231
|
-
if @unprocessed_y_values.length >= @analysis_samples
|
|
232
|
-
case @analysis
|
|
233
|
-
when :MAXIMUM
|
|
234
|
-
@y_values << (@unprocessed_y_values[lower_index..upper_index].max + @y_offset)
|
|
235
|
-
when :MINIMUM
|
|
236
|
-
@y_values << (@unprocessed_y_values[lower_index..upper_index].min + @y_offset)
|
|
237
|
-
else # :PEAK_TO_PEAK
|
|
238
|
-
@y_values << ((@unprocessed_y_values[lower_index..upper_index].max - @unprocessed_y_values[lower_index..upper_index].min) + @y_offset)
|
|
239
|
-
end
|
|
240
|
-
@x_values << @unprocessed_x_values[sample_index]
|
|
241
|
-
@plot.redraw_needed = true
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
end # case @analysis
|
|
245
|
-
|
|
246
|
-
# Make sure the data object's first x value is the smallest x value encountered during packet processing.
|
|
247
|
-
# This is the smallest x_value seen since reset() was called, i.e. it doesn't get deleted during pruning.
|
|
248
|
-
# We make the assumption that @x_values is ordered, so just check against its first value.
|
|
249
|
-
if (@x_values.length > 0) and (@x_values[0] < @first_x_value)
|
|
250
|
-
@first_x_value = @x_values[0]
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
# Prune Data
|
|
254
|
-
prune_to_max_points_saved()
|
|
255
|
-
rescue Exception => error
|
|
256
|
-
handle_process_exception(error, "#{packet.target_name} #{packet.packet_name} #{@item_name}")
|
|
257
|
-
end
|
|
258
|
-
end # def process_packet
|
|
259
|
-
|
|
260
|
-
# Returns the name of this data object
|
|
261
|
-
def name
|
|
262
|
-
if @target_name and @packet_name and @item_name
|
|
263
|
-
if @analysis != :NONE
|
|
264
|
-
"#{@target_name} #{@packet_name} #{@item_name} (#{@analysis})"
|
|
265
|
-
else
|
|
266
|
-
"#{@target_name} #{@packet_name} #{@item_name}"
|
|
267
|
-
end
|
|
268
|
-
else
|
|
269
|
-
''
|
|
270
|
-
end
|
|
271
|
-
end
|
|
272
|
-
|
|
273
|
-
# Resets the data object
|
|
274
|
-
def reset
|
|
275
|
-
super()
|
|
276
|
-
@unprocessed_x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
|
|
277
|
-
@unprocessed_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
|
|
278
|
-
@differenced_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
|
|
279
|
-
end
|
|
280
|
-
|
|
281
|
-
# Creates a copy of the data object with settings but without data
|
|
282
|
-
def copy
|
|
283
|
-
data_object = super()
|
|
284
|
-
if @target_name and @packet_name and @item_name
|
|
285
|
-
data_object.set_item(@target_name.clone, @packet_name.clone, @item_name.clone)
|
|
286
|
-
end
|
|
287
|
-
data_object.time_item_name = @time_item_name.clone if @time_item_name
|
|
288
|
-
data_object.formatted_time_item_name = @formatted_time_item_name.clone if @formatted_time_item_name
|
|
289
|
-
data_object.value_type = @value_type
|
|
290
|
-
data_object.analysis = @analysis
|
|
291
|
-
data_object.analysis_samples = @analysis_samples
|
|
292
|
-
data_object.show_limits_lines = @show_limits_lines
|
|
293
|
-
if @target_name
|
|
294
|
-
limits_lines = []
|
|
295
|
-
get_limits_lines()
|
|
296
|
-
@limits_lines.each do |y_value, color|
|
|
297
|
-
limits_lines << [y_value, color.clone]
|
|
298
|
-
end
|
|
299
|
-
data_object.limits_lines = limits_lines
|
|
300
|
-
end
|
|
301
|
-
data_object
|
|
302
|
-
end
|
|
303
|
-
|
|
304
|
-
# Edits the data object - show_limits_lines is the only edit_safe? attribute
|
|
305
|
-
def edit(editted_data_object)
|
|
306
|
-
self.show_limits_lines = editted_data_object.show_limits_lines
|
|
307
|
-
super(editted_data_object)
|
|
308
|
-
end
|
|
309
|
-
|
|
310
|
-
# Determines if changes can be made to the data object without affecting data
|
|
311
|
-
#
|
|
312
|
-
# @param edited_data_object [DataObject] The data object which was edited
|
|
313
|
-
def edit_safe?(editted_data_object)
|
|
314
|
-
if @target_name != editted_data_object.target_name or
|
|
315
|
-
@packet_name != editted_data_object.packet_name or
|
|
316
|
-
@item_name != editted_data_object.item_name or
|
|
317
|
-
@time_item_name != editted_data_object.time_item_name or
|
|
318
|
-
@formatted_time_item_name != editted_data_object.formatted_time_item_name or
|
|
319
|
-
@value_type != editted_data_object.value_type or
|
|
320
|
-
@analysis != editted_data_object.analysis or
|
|
321
|
-
@analysis_samples != editted_data_object.analysis_samples
|
|
322
|
-
false
|
|
323
|
-
else
|
|
324
|
-
super(editted_data_object)
|
|
325
|
-
end
|
|
326
|
-
end
|
|
327
|
-
|
|
328
|
-
# Sets the housekeeping item
|
|
329
|
-
def set_item(target_name, packet_name, item_name, during_configuration = false)
|
|
330
|
-
@target_name = target_name
|
|
331
|
-
@packet_name = packet_name
|
|
332
|
-
@item_name = item_name
|
|
333
|
-
_, item = System.telemetry.packet_and_item(@target_name, @packet_name, @item_name)
|
|
334
|
-
@y_states = item.states
|
|
335
|
-
if @y_states
|
|
336
|
-
@value_type = :RAW
|
|
337
|
-
else
|
|
338
|
-
@value_type = :CONVERTED unless during_configuration
|
|
339
|
-
end
|
|
340
|
-
|
|
341
|
-
@time_item_name = 'RECEIVED_TIMESECONDS' unless @time_item_name
|
|
342
|
-
|
|
343
|
-
# Update limits lines
|
|
344
|
-
self.show_limits_lines = @show_limits_lines
|
|
345
|
-
end
|
|
346
|
-
|
|
347
|
-
# Sets the number of analysis samples
|
|
348
|
-
def analysis_samples=(new_analysis_samples)
|
|
349
|
-
# Value must be at least 2
|
|
350
|
-
if new_analysis_samples <= 1
|
|
351
|
-
raise ArgumentError, "Invalid ANALYSIS_SAMPLES value: #{new_analysis_samples}"
|
|
352
|
-
else
|
|
353
|
-
@analysis_samples = new_analysis_samples
|
|
354
|
-
if @analysis_samples % 2 == 0
|
|
355
|
-
# Even
|
|
356
|
-
@num_samples_ahead = @analysis_samples / 2
|
|
357
|
-
@num_samples_behind = @num_samples_ahead - 1
|
|
358
|
-
else
|
|
359
|
-
# Odd
|
|
360
|
-
@num_samples_ahead = (@analysis_samples - 1) / 2
|
|
361
|
-
@num_samples_behind = @num_samples_ahead
|
|
362
|
-
end
|
|
363
|
-
end
|
|
364
|
-
end
|
|
365
|
-
|
|
366
|
-
# Sets the show limits lines flag
|
|
367
|
-
def show_limits_lines=(new_show_limits_lines)
|
|
368
|
-
@show_limits_lines = new_show_limits_lines
|
|
369
|
-
get_limits_lines()
|
|
370
|
-
end
|
|
371
|
-
|
|
372
|
-
protected
|
|
373
|
-
|
|
374
|
-
def get_limits_lines
|
|
375
|
-
if @target_name
|
|
376
|
-
_, item = System.telemetry.packet_and_item(@target_name, @packet_name, @item_name)
|
|
377
|
-
if item.limits.values
|
|
378
|
-
@limits_lines = []
|
|
379
|
-
@limits_lines << [item.limits.values[:DEFAULT][0], 'red']
|
|
380
|
-
@limits_lines << [item.limits.values[:DEFAULT][1], 'yellow']
|
|
381
|
-
if item.limits.values[:DEFAULT].length == 6
|
|
382
|
-
@limits_lines << [item.limits.values[:DEFAULT][4], 'green']
|
|
383
|
-
@limits_lines << [item.limits.values[:DEFAULT][5], 'green']
|
|
384
|
-
end
|
|
385
|
-
@limits_lines << [item.limits.values[:DEFAULT][2], 'yellow']
|
|
386
|
-
@limits_lines << [item.limits.values[:DEFAULT][3], 'red']
|
|
387
|
-
end
|
|
388
|
-
end
|
|
389
|
-
end
|
|
390
|
-
|
|
391
|
-
# (see DataObject#prune_to_max_points_saved)
|
|
392
|
-
def prune_to_max_points_saved(force_prune = false)
|
|
393
|
-
prune_index = super(force_prune)
|
|
394
|
-
if prune_index
|
|
395
|
-
# Prune unprocessed
|
|
396
|
-
unless @unprocessed_x_values.empty?
|
|
397
|
-
@unprocessed_x_values.remove_before!(prune_index)
|
|
398
|
-
@unprocessed_y_values.remove_before!(prune_index)
|
|
399
|
-
@differenced_y_values.remove_before!(prune_index) if @analysis == :ALLAN_DEV
|
|
400
|
-
end
|
|
401
|
-
end
|
|
402
|
-
prune_index
|
|
403
|
-
end
|
|
404
|
-
|
|
405
|
-
end # class HousekeepingDataObject
|
|
406
|
-
|
|
407
|
-
end # module Cosmos
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'cosmos'
|
|
12
|
+
require 'cosmos/tools/tlm_grapher/data_objects/linegraph_data_object'
|
|
13
|
+
|
|
14
|
+
module Cosmos
|
|
15
|
+
|
|
16
|
+
# Represents a data object on a line graph for a housekeeping telemetry item
|
|
17
|
+
class HousekeepingDataObject < LinegraphDataObject
|
|
18
|
+
|
|
19
|
+
# Value Types
|
|
20
|
+
VALUE_TYPES = [:RAW, :CONVERTED]
|
|
21
|
+
|
|
22
|
+
# Analysis Types
|
|
23
|
+
ANALYSIS_TYPES = [:NONE, :DIFFERENCE, :WINDOWED_MEAN, :WINDOWED_MEAN_REMOVED, :STD_DEV, :ALLAN_DEV, :MAXIMUM, :MINIMUM, :PEAK_TO_PEAK]
|
|
24
|
+
|
|
25
|
+
# The housekeeping telemetry item's target name (string)
|
|
26
|
+
attr_reader :target_name
|
|
27
|
+
|
|
28
|
+
# The housekeeping telemetry item's packet name (string)
|
|
29
|
+
attr_reader :packet_name
|
|
30
|
+
|
|
31
|
+
# The housekeeping telemetry item's item name (string)
|
|
32
|
+
attr_reader :item_name
|
|
33
|
+
|
|
34
|
+
# The housekeeping telemetry item's time item name (string)
|
|
35
|
+
attr_accessor :time_item_name
|
|
36
|
+
|
|
37
|
+
# The housekeeping telemetry item's formatted time item name (string)
|
|
38
|
+
attr_accessor :formatted_time_item_name
|
|
39
|
+
|
|
40
|
+
# Type of data to collect - :RAW or :CONVERTED
|
|
41
|
+
attr_accessor :value_type
|
|
42
|
+
|
|
43
|
+
# The analysis to perform
|
|
44
|
+
attr_accessor :analysis
|
|
45
|
+
|
|
46
|
+
# The number of samples to use in the analysis (integer)
|
|
47
|
+
attr_reader :analysis_samples
|
|
48
|
+
|
|
49
|
+
# Automatically show limits line for telemetry item (true or false)
|
|
50
|
+
attr_reader :show_limits_lines
|
|
51
|
+
|
|
52
|
+
# Limits lines for telemetry item (array)
|
|
53
|
+
attr_accessor :limits_lines
|
|
54
|
+
|
|
55
|
+
# Create a new data object
|
|
56
|
+
def initialize
|
|
57
|
+
super()
|
|
58
|
+
@target_name = nil
|
|
59
|
+
@packet_name = nil
|
|
60
|
+
@item_name = nil
|
|
61
|
+
@time_item_name = nil
|
|
62
|
+
@formatted_time_item_name = nil
|
|
63
|
+
@value_type = :CONVERTED
|
|
64
|
+
@analysis = :NONE
|
|
65
|
+
@analysis_samples = 3
|
|
66
|
+
@show_limits_lines = false
|
|
67
|
+
@limits_lines = []
|
|
68
|
+
@num_samples_ahead = 1
|
|
69
|
+
@num_samples_behind = 1
|
|
70
|
+
@unprocessed_x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
|
|
71
|
+
@unprocessed_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
|
|
72
|
+
@differenced_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
|
|
73
|
+
end # def initialize
|
|
74
|
+
|
|
75
|
+
# Returns the configuration lines used to create this data object
|
|
76
|
+
def configuration_string
|
|
77
|
+
string = super()
|
|
78
|
+
string << " ITEM #{@target_name} #{@packet_name} #{@item_name}\n" if @target_name and @packet_name and @item_name
|
|
79
|
+
string << " TIME_ITEM #{@time_item_name}\n" if @time_item_name
|
|
80
|
+
string << " FORMATTED_TIME_ITEM #{@formatted_time_item_name}\n" if @formatted_time_item_name
|
|
81
|
+
string << " VALUE_TYPE #{@value_type}\n"
|
|
82
|
+
string << " ANALYSIS #{@analysis}\n"
|
|
83
|
+
string << " ANALYSIS_SAMPLES #{@analysis_samples}\n"
|
|
84
|
+
string << " SHOW_LIMITS_LINES #{@show_limits_lines.to_s.upcase}\n"
|
|
85
|
+
string
|
|
86
|
+
end # def configuration_string
|
|
87
|
+
|
|
88
|
+
# Handles data object specific keywords
|
|
89
|
+
def handle_keyword(parser, keyword, parameters)
|
|
90
|
+
case keyword
|
|
91
|
+
when 'ITEM'
|
|
92
|
+
# Expect 3 parameters
|
|
93
|
+
parser.verify_num_parameters(3, 3, "ITEM <Target Name> <Packet Name> <Item Name>")
|
|
94
|
+
set_item(parameters[0], parameters[1], parameters[2], true)
|
|
95
|
+
|
|
96
|
+
when 'TIME_ITEM'
|
|
97
|
+
# Expect 1 parameter
|
|
98
|
+
parser.verify_num_parameters(1, 1, "TIME_ITEM <Time Item Name>")
|
|
99
|
+
@time_item_name = parameters[0].upcase
|
|
100
|
+
|
|
101
|
+
when 'FORMATTED_TIME_ITEM'
|
|
102
|
+
# Expect 1 parameter
|
|
103
|
+
parser.verify_num_parameters(1, 1, "FORMATTED_TIME_ITEM <Formatted Time Item Name>")
|
|
104
|
+
@formatted_time_item_name = parameters[0].upcase
|
|
105
|
+
|
|
106
|
+
when 'VALUE_TYPE'
|
|
107
|
+
# Expect 1 parameter
|
|
108
|
+
parser.verify_num_parameters(1, 1, "VALUE_TYPE <RAW or CONVERTED>")
|
|
109
|
+
value_type = parameters[0].upcase.intern
|
|
110
|
+
if VALUE_TYPES.include?(value_type)
|
|
111
|
+
@value_type = value_type
|
|
112
|
+
else
|
|
113
|
+
raise ArgumentError, "Unknown VALUE_TYPE value: #{value_type}"
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
when 'ANALYSIS'
|
|
117
|
+
# Expect 1 parameter
|
|
118
|
+
parser.verify_num_parameters(1, 1, "ANALYSIS <Analysis Type>")
|
|
119
|
+
analysis = parameters[0].upcase.intern
|
|
120
|
+
if ANALYSIS_TYPES.include?(analysis)
|
|
121
|
+
@analysis = analysis
|
|
122
|
+
else
|
|
123
|
+
raise ArgumentError, "Unknown ANALYSIS value: #{analysis}"
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
when 'ANALYSIS_SAMPLES'
|
|
127
|
+
# Expect 1 parameter
|
|
128
|
+
parser.verify_num_parameters(1, 1, "ANALYSIS_SAMPLES <Number of Samples>")
|
|
129
|
+
self.analysis_samples = parameters[0].to_i
|
|
130
|
+
|
|
131
|
+
when 'SHOW_LIMITS_LINES'
|
|
132
|
+
# Expect 1 parameter
|
|
133
|
+
parser.verify_num_parameters(1, 1, "SHOW_LIMITS_LINES <TRUE or FALSE>")
|
|
134
|
+
self.show_limits_lines = ConfigParser.handle_true_false(parameters[0])
|
|
135
|
+
|
|
136
|
+
else
|
|
137
|
+
# Unknown keywords are passed to parent data object
|
|
138
|
+
super(parser, keyword, parameters)
|
|
139
|
+
|
|
140
|
+
end # case keyword
|
|
141
|
+
|
|
142
|
+
end # def handle_keyword
|
|
143
|
+
|
|
144
|
+
# Returns the packet processed by this data object
|
|
145
|
+
def processed_packets
|
|
146
|
+
if @target_name and @packet_name
|
|
147
|
+
[[@target_name, @packet_name]]
|
|
148
|
+
else
|
|
149
|
+
[]
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# (see DataObject#process_packet)
|
|
154
|
+
def process_packet(packet, count)
|
|
155
|
+
begin
|
|
156
|
+
# Retrieve x and y values from packet
|
|
157
|
+
x_value = packet.read(@time_item_name)
|
|
158
|
+
if @value_type == :RAW
|
|
159
|
+
y_value = packet.read(@item_name, :RAW)
|
|
160
|
+
else
|
|
161
|
+
y_value = packet.read(@item_name)
|
|
162
|
+
end
|
|
163
|
+
# Bail on the values if they are NaN or nil as we can't graph them
|
|
164
|
+
return if x_value.nil? || y_value.nil? ||
|
|
165
|
+
(x_value.respond_to?(:nan?) && x_value.nan?) ||
|
|
166
|
+
(y_value.respond_to?(:nan?) && y_value.nan?)
|
|
167
|
+
@formatted_x_values << packet.read(@formatted_time_item_name) if @formatted_time_item_name
|
|
168
|
+
|
|
169
|
+
upper_index = nil
|
|
170
|
+
sample_index = nil
|
|
171
|
+
lower_index = nil
|
|
172
|
+
if @analysis != :NONE
|
|
173
|
+
# Add to unprocessed data
|
|
174
|
+
@unprocessed_x_values << x_value
|
|
175
|
+
@unprocessed_y_values << y_value
|
|
176
|
+
|
|
177
|
+
# Calculate indexes into arrays
|
|
178
|
+
upper_index = @unprocessed_y_values.length - 1
|
|
179
|
+
sample_index = upper_index - @num_samples_ahead
|
|
180
|
+
lower_index = sample_index - @num_samples_behind
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
case @analysis
|
|
184
|
+
when :NONE
|
|
185
|
+
@x_values << x_value
|
|
186
|
+
@y_values << (y_value + @y_offset)
|
|
187
|
+
@plot.redraw_needed = true
|
|
188
|
+
|
|
189
|
+
when :DIFFERENCE, :ALLAN_DEV
|
|
190
|
+
if @unprocessed_y_values.length > 1
|
|
191
|
+
differenced_y_value = y_value - @unprocessed_y_values[-2]
|
|
192
|
+
|
|
193
|
+
if @analysis == :DIFFERENCE
|
|
194
|
+
@x_values << x_value
|
|
195
|
+
@y_values << (differenced_y_value + @y_offset)
|
|
196
|
+
@plot.redraw_needed = true
|
|
197
|
+
else # @analysis == :ALLAN_DEV
|
|
198
|
+
@differenced_y_values[upper_index] = differenced_y_value
|
|
199
|
+
|
|
200
|
+
if lower_index >= 1
|
|
201
|
+
data = @differenced_y_values[lower_index..upper_index]
|
|
202
|
+
@x_values << @unprocessed_x_values[sample_index]
|
|
203
|
+
@y_values << (Math.sqrt(data.squared.sum / (@analysis_samples * 2)) + @y_offset)
|
|
204
|
+
@plot.redraw_needed = true
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
when :WINDOWED_MEAN, :WINDOWED_MEAN_REMOVED, :STD_DEV
|
|
210
|
+
if @unprocessed_y_values.length >= @analysis_samples
|
|
211
|
+
# Isolate window of data
|
|
212
|
+
data = @unprocessed_y_values[lower_index..upper_index]
|
|
213
|
+
|
|
214
|
+
# Calculate windowed mean
|
|
215
|
+
mean = data.mean
|
|
216
|
+
|
|
217
|
+
case @analysis
|
|
218
|
+
when :WINDOWED_MEAN
|
|
219
|
+
@y_values << (mean + @y_offset)
|
|
220
|
+
when :WINDOWED_MEAN_REMOVED
|
|
221
|
+
@y_values << (@unprocessed_y_values[sample_index] - mean + @y_offset)
|
|
222
|
+
when :STD_DEV
|
|
223
|
+
data.map! {|value| value - mean}
|
|
224
|
+
@y_values << (Math.sqrt(data.squared.sum / (@analysis_samples - 1)) + @y_offset)
|
|
225
|
+
end
|
|
226
|
+
@x_values << @unprocessed_x_values[sample_index]
|
|
227
|
+
@plot.redraw_needed = true
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
when :MAXIMUM, :MINIMUM, :PEAK_TO_PEAK
|
|
231
|
+
if @unprocessed_y_values.length >= @analysis_samples
|
|
232
|
+
case @analysis
|
|
233
|
+
when :MAXIMUM
|
|
234
|
+
@y_values << (@unprocessed_y_values[lower_index..upper_index].max + @y_offset)
|
|
235
|
+
when :MINIMUM
|
|
236
|
+
@y_values << (@unprocessed_y_values[lower_index..upper_index].min + @y_offset)
|
|
237
|
+
else # :PEAK_TO_PEAK
|
|
238
|
+
@y_values << ((@unprocessed_y_values[lower_index..upper_index].max - @unprocessed_y_values[lower_index..upper_index].min) + @y_offset)
|
|
239
|
+
end
|
|
240
|
+
@x_values << @unprocessed_x_values[sample_index]
|
|
241
|
+
@plot.redraw_needed = true
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
end # case @analysis
|
|
245
|
+
|
|
246
|
+
# Make sure the data object's first x value is the smallest x value encountered during packet processing.
|
|
247
|
+
# This is the smallest x_value seen since reset() was called, i.e. it doesn't get deleted during pruning.
|
|
248
|
+
# We make the assumption that @x_values is ordered, so just check against its first value.
|
|
249
|
+
if (@x_values.length > 0) and (@x_values[0] < @first_x_value)
|
|
250
|
+
@first_x_value = @x_values[0]
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
# Prune Data
|
|
254
|
+
prune_to_max_points_saved()
|
|
255
|
+
rescue Exception => error
|
|
256
|
+
handle_process_exception(error, "#{packet.target_name} #{packet.packet_name} #{@item_name}")
|
|
257
|
+
end
|
|
258
|
+
end # def process_packet
|
|
259
|
+
|
|
260
|
+
# Returns the name of this data object
|
|
261
|
+
def name
|
|
262
|
+
if @target_name and @packet_name and @item_name
|
|
263
|
+
if @analysis != :NONE
|
|
264
|
+
"#{@target_name} #{@packet_name} #{@item_name} (#{@analysis})"
|
|
265
|
+
else
|
|
266
|
+
"#{@target_name} #{@packet_name} #{@item_name}"
|
|
267
|
+
end
|
|
268
|
+
else
|
|
269
|
+
''
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
# Resets the data object
|
|
274
|
+
def reset
|
|
275
|
+
super()
|
|
276
|
+
@unprocessed_x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
|
|
277
|
+
@unprocessed_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
|
|
278
|
+
@differenced_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
# Creates a copy of the data object with settings but without data
|
|
282
|
+
def copy
|
|
283
|
+
data_object = super()
|
|
284
|
+
if @target_name and @packet_name and @item_name
|
|
285
|
+
data_object.set_item(@target_name.clone, @packet_name.clone, @item_name.clone)
|
|
286
|
+
end
|
|
287
|
+
data_object.time_item_name = @time_item_name.clone if @time_item_name
|
|
288
|
+
data_object.formatted_time_item_name = @formatted_time_item_name.clone if @formatted_time_item_name
|
|
289
|
+
data_object.value_type = @value_type
|
|
290
|
+
data_object.analysis = @analysis
|
|
291
|
+
data_object.analysis_samples = @analysis_samples
|
|
292
|
+
data_object.show_limits_lines = @show_limits_lines
|
|
293
|
+
if @target_name
|
|
294
|
+
limits_lines = []
|
|
295
|
+
get_limits_lines()
|
|
296
|
+
@limits_lines.each do |y_value, color|
|
|
297
|
+
limits_lines << [y_value, color.clone]
|
|
298
|
+
end
|
|
299
|
+
data_object.limits_lines = limits_lines
|
|
300
|
+
end
|
|
301
|
+
data_object
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
# Edits the data object - show_limits_lines is the only edit_safe? attribute
|
|
305
|
+
def edit(editted_data_object)
|
|
306
|
+
self.show_limits_lines = editted_data_object.show_limits_lines
|
|
307
|
+
super(editted_data_object)
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
# Determines if changes can be made to the data object without affecting data
|
|
311
|
+
#
|
|
312
|
+
# @param edited_data_object [DataObject] The data object which was edited
|
|
313
|
+
def edit_safe?(editted_data_object)
|
|
314
|
+
if @target_name != editted_data_object.target_name or
|
|
315
|
+
@packet_name != editted_data_object.packet_name or
|
|
316
|
+
@item_name != editted_data_object.item_name or
|
|
317
|
+
@time_item_name != editted_data_object.time_item_name or
|
|
318
|
+
@formatted_time_item_name != editted_data_object.formatted_time_item_name or
|
|
319
|
+
@value_type != editted_data_object.value_type or
|
|
320
|
+
@analysis != editted_data_object.analysis or
|
|
321
|
+
@analysis_samples != editted_data_object.analysis_samples
|
|
322
|
+
false
|
|
323
|
+
else
|
|
324
|
+
super(editted_data_object)
|
|
325
|
+
end
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
# Sets the housekeeping item
|
|
329
|
+
def set_item(target_name, packet_name, item_name, during_configuration = false)
|
|
330
|
+
@target_name = target_name
|
|
331
|
+
@packet_name = packet_name
|
|
332
|
+
@item_name = item_name
|
|
333
|
+
_, item = System.telemetry.packet_and_item(@target_name, @packet_name, @item_name)
|
|
334
|
+
@y_states = item.states
|
|
335
|
+
if @y_states
|
|
336
|
+
@value_type = :RAW
|
|
337
|
+
else
|
|
338
|
+
@value_type = :CONVERTED unless during_configuration
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
@time_item_name = 'RECEIVED_TIMESECONDS' unless @time_item_name
|
|
342
|
+
|
|
343
|
+
# Update limits lines
|
|
344
|
+
self.show_limits_lines = @show_limits_lines
|
|
345
|
+
end
|
|
346
|
+
|
|
347
|
+
# Sets the number of analysis samples
|
|
348
|
+
def analysis_samples=(new_analysis_samples)
|
|
349
|
+
# Value must be at least 2
|
|
350
|
+
if new_analysis_samples <= 1
|
|
351
|
+
raise ArgumentError, "Invalid ANALYSIS_SAMPLES value: #{new_analysis_samples}"
|
|
352
|
+
else
|
|
353
|
+
@analysis_samples = new_analysis_samples
|
|
354
|
+
if @analysis_samples % 2 == 0
|
|
355
|
+
# Even
|
|
356
|
+
@num_samples_ahead = @analysis_samples / 2
|
|
357
|
+
@num_samples_behind = @num_samples_ahead - 1
|
|
358
|
+
else
|
|
359
|
+
# Odd
|
|
360
|
+
@num_samples_ahead = (@analysis_samples - 1) / 2
|
|
361
|
+
@num_samples_behind = @num_samples_ahead
|
|
362
|
+
end
|
|
363
|
+
end
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
# Sets the show limits lines flag
|
|
367
|
+
def show_limits_lines=(new_show_limits_lines)
|
|
368
|
+
@show_limits_lines = new_show_limits_lines
|
|
369
|
+
get_limits_lines()
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
protected
|
|
373
|
+
|
|
374
|
+
def get_limits_lines
|
|
375
|
+
if @target_name
|
|
376
|
+
_, item = System.telemetry.packet_and_item(@target_name, @packet_name, @item_name)
|
|
377
|
+
if item.limits.values
|
|
378
|
+
@limits_lines = []
|
|
379
|
+
@limits_lines << [item.limits.values[:DEFAULT][0], 'red']
|
|
380
|
+
@limits_lines << [item.limits.values[:DEFAULT][1], 'yellow']
|
|
381
|
+
if item.limits.values[:DEFAULT].length == 6
|
|
382
|
+
@limits_lines << [item.limits.values[:DEFAULT][4], 'green']
|
|
383
|
+
@limits_lines << [item.limits.values[:DEFAULT][5], 'green']
|
|
384
|
+
end
|
|
385
|
+
@limits_lines << [item.limits.values[:DEFAULT][2], 'yellow']
|
|
386
|
+
@limits_lines << [item.limits.values[:DEFAULT][3], 'red']
|
|
387
|
+
end
|
|
388
|
+
end
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
# (see DataObject#prune_to_max_points_saved)
|
|
392
|
+
def prune_to_max_points_saved(force_prune = false)
|
|
393
|
+
prune_index = super(force_prune)
|
|
394
|
+
if prune_index
|
|
395
|
+
# Prune unprocessed
|
|
396
|
+
unless @unprocessed_x_values.empty?
|
|
397
|
+
@unprocessed_x_values.remove_before!(prune_index)
|
|
398
|
+
@unprocessed_y_values.remove_before!(prune_index)
|
|
399
|
+
@differenced_y_values.remove_before!(prune_index) if @analysis == :ALLAN_DEV
|
|
400
|
+
end
|
|
401
|
+
end
|
|
402
|
+
prune_index
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
end # class HousekeepingDataObject
|
|
406
|
+
|
|
407
|
+
end # module Cosmos
|