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
data/lib/cosmos/packet_logs.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# encoding: ascii-8bit
|
|
2
|
-
|
|
3
|
-
require 'cosmos/packet_logs/packet_log_writer'
|
|
4
|
-
require 'cosmos/packet_logs/meta_packet_log_writer'
|
|
5
|
-
require 'cosmos/packet_logs/packet_log_writer_pair'
|
|
6
|
-
require 'cosmos/packet_logs/packet_log_reader'
|
|
7
|
-
require 'cosmos/packet_logs/ccsds_log_reader'
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
require 'cosmos/packet_logs/packet_log_writer'
|
|
4
|
+
require 'cosmos/packet_logs/meta_packet_log_writer'
|
|
5
|
+
require 'cosmos/packet_logs/packet_log_writer_pair'
|
|
6
|
+
require 'cosmos/packet_logs/packet_log_reader'
|
|
7
|
+
require 'cosmos/packet_logs/ccsds_log_reader'
|
|
@@ -1,104 +1,104 @@
|
|
|
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/packet_logs/packet_log_reader'
|
|
12
|
-
require 'cosmos/ccsds/ccsds_packet'
|
|
13
|
-
|
|
14
|
-
module Cosmos
|
|
15
|
-
|
|
16
|
-
# Reads a CCSDS packet log of either commands or telemetry.
|
|
17
|
-
class CcsdsLogReader < PacketLogReader
|
|
18
|
-
|
|
19
|
-
# Length of the header on a CCSDS source packet
|
|
20
|
-
CCSDS_HEADER_LENGTH = 6
|
|
21
|
-
|
|
22
|
-
# Create a new log file reader
|
|
23
|
-
def initialize
|
|
24
|
-
super()
|
|
25
|
-
@ccsds_header = CcsdsPacket.new(nil, nil, false)
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# Read a packet from the log file
|
|
29
|
-
#
|
|
30
|
-
# @param identify_and_define (see #each)
|
|
31
|
-
# @return [Packet]
|
|
32
|
-
def read(identify_and_define = true)
|
|
33
|
-
# Read the CCSDS packet header
|
|
34
|
-
header = @file.read(CCSDS_HEADER_LENGTH)
|
|
35
|
-
return nil unless header and header.length == CCSDS_HEADER_LENGTH
|
|
36
|
-
@ccsds_header.buffer = header
|
|
37
|
-
|
|
38
|
-
# Extract the length field
|
|
39
|
-
length = @ccsds_header.read('CcsdsLength') + 1
|
|
40
|
-
|
|
41
|
-
# Read the remainder of the packet data
|
|
42
|
-
data = @file.read(length)
|
|
43
|
-
return nil unless data and data.length == length
|
|
44
|
-
|
|
45
|
-
# Combine into the full packet data
|
|
46
|
-
packet_data = header << data
|
|
47
|
-
|
|
48
|
-
# Determine packet time and set it as received time
|
|
49
|
-
received_time = determine_received_time(packet_data)
|
|
50
|
-
|
|
51
|
-
# Build the actual Packet object
|
|
52
|
-
if identify_and_define
|
|
53
|
-
packet = identify_and_define_packet_data(nil, nil, received_time, packet_data)
|
|
54
|
-
else
|
|
55
|
-
# Build Packet
|
|
56
|
-
packet = Packet.new(nil, nil, :BIG_ENDIAN, nil, packet_data)
|
|
57
|
-
packet.set_received_time_fast(received_time)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
# Return the packet
|
|
61
|
-
packet
|
|
62
|
-
rescue => err
|
|
63
|
-
close()
|
|
64
|
-
raise err
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
protected
|
|
68
|
-
|
|
69
|
-
# TODO : Add code here or in subclass to derive received time from the packet timestamp
|
|
70
|
-
# CCSDS timestamp formats and even the presence of a timestamp vary
|
|
71
|
-
def determine_received_time(packet_data)
|
|
72
|
-
nil
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def read_file_header
|
|
76
|
-
# Read the first CCSDS packet header
|
|
77
|
-
header = @file.read(CCSDS_HEADER_LENGTH)
|
|
78
|
-
|
|
79
|
-
if header and header.length == CCSDS_HEADER_LENGTH
|
|
80
|
-
@ccsds_header.buffer = header
|
|
81
|
-
packet_type = @ccsds_header.read('CcsdsType')
|
|
82
|
-
if packet_type == CcsdsPacket::TELEMETRY
|
|
83
|
-
@log_type = :TLM
|
|
84
|
-
else
|
|
85
|
-
@log_type = :CMD
|
|
86
|
-
end
|
|
87
|
-
@configuration_name = nil
|
|
88
|
-
@hostname = nil
|
|
89
|
-
@file_header_length = 0
|
|
90
|
-
@file.seek(0, IO::SEEK_SET)
|
|
91
|
-
System.load_configuration(nil)
|
|
92
|
-
return true, nil # No configuration name supported so always return success
|
|
93
|
-
else
|
|
94
|
-
raise "Failed to read at least #{CCSDS_HEADER_LENGTH} bytes from packet log"
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def seek_to_time(time)
|
|
99
|
-
# Not supported
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
end # class CcsdsLogReader
|
|
103
|
-
|
|
104
|
-
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/packet_logs/packet_log_reader'
|
|
12
|
+
require 'cosmos/ccsds/ccsds_packet'
|
|
13
|
+
|
|
14
|
+
module Cosmos
|
|
15
|
+
|
|
16
|
+
# Reads a CCSDS packet log of either commands or telemetry.
|
|
17
|
+
class CcsdsLogReader < PacketLogReader
|
|
18
|
+
|
|
19
|
+
# Length of the header on a CCSDS source packet
|
|
20
|
+
CCSDS_HEADER_LENGTH = 6
|
|
21
|
+
|
|
22
|
+
# Create a new log file reader
|
|
23
|
+
def initialize
|
|
24
|
+
super()
|
|
25
|
+
@ccsds_header = CcsdsPacket.new(nil, nil, false)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Read a packet from the log file
|
|
29
|
+
#
|
|
30
|
+
# @param identify_and_define (see #each)
|
|
31
|
+
# @return [Packet]
|
|
32
|
+
def read(identify_and_define = true)
|
|
33
|
+
# Read the CCSDS packet header
|
|
34
|
+
header = @file.read(CCSDS_HEADER_LENGTH)
|
|
35
|
+
return nil unless header and header.length == CCSDS_HEADER_LENGTH
|
|
36
|
+
@ccsds_header.buffer = header
|
|
37
|
+
|
|
38
|
+
# Extract the length field
|
|
39
|
+
length = @ccsds_header.read('CcsdsLength') + 1
|
|
40
|
+
|
|
41
|
+
# Read the remainder of the packet data
|
|
42
|
+
data = @file.read(length)
|
|
43
|
+
return nil unless data and data.length == length
|
|
44
|
+
|
|
45
|
+
# Combine into the full packet data
|
|
46
|
+
packet_data = header << data
|
|
47
|
+
|
|
48
|
+
# Determine packet time and set it as received time
|
|
49
|
+
received_time = determine_received_time(packet_data)
|
|
50
|
+
|
|
51
|
+
# Build the actual Packet object
|
|
52
|
+
if identify_and_define
|
|
53
|
+
packet = identify_and_define_packet_data(nil, nil, received_time, packet_data)
|
|
54
|
+
else
|
|
55
|
+
# Build Packet
|
|
56
|
+
packet = Packet.new(nil, nil, :BIG_ENDIAN, nil, packet_data)
|
|
57
|
+
packet.set_received_time_fast(received_time)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Return the packet
|
|
61
|
+
packet
|
|
62
|
+
rescue => err
|
|
63
|
+
close()
|
|
64
|
+
raise err
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
protected
|
|
68
|
+
|
|
69
|
+
# TODO : Add code here or in subclass to derive received time from the packet timestamp
|
|
70
|
+
# CCSDS timestamp formats and even the presence of a timestamp vary
|
|
71
|
+
def determine_received_time(packet_data)
|
|
72
|
+
nil
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def read_file_header
|
|
76
|
+
# Read the first CCSDS packet header
|
|
77
|
+
header = @file.read(CCSDS_HEADER_LENGTH)
|
|
78
|
+
|
|
79
|
+
if header and header.length == CCSDS_HEADER_LENGTH
|
|
80
|
+
@ccsds_header.buffer = header
|
|
81
|
+
packet_type = @ccsds_header.read('CcsdsType')
|
|
82
|
+
if packet_type == CcsdsPacket::TELEMETRY
|
|
83
|
+
@log_type = :TLM
|
|
84
|
+
else
|
|
85
|
+
@log_type = :CMD
|
|
86
|
+
end
|
|
87
|
+
@configuration_name = nil
|
|
88
|
+
@hostname = nil
|
|
89
|
+
@file_header_length = 0
|
|
90
|
+
@file.seek(0, IO::SEEK_SET)
|
|
91
|
+
System.load_configuration(nil)
|
|
92
|
+
return true, nil # No configuration name supported so always return success
|
|
93
|
+
else
|
|
94
|
+
raise "Failed to read at least #{CCSDS_HEADER_LENGTH} bytes from packet log"
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def seek_to_time(time)
|
|
99
|
+
# Not supported
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
end # class CcsdsLogReader
|
|
103
|
+
|
|
104
|
+
end # module Cosmos
|
|
@@ -1,107 +1,107 @@
|
|
|
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
|
-
# Usage Notes:
|
|
12
|
-
# The metadata packet must exist with exactly the same fields as both a command and as a telemetry packet
|
|
13
|
-
# The new_packet_log_conversion.rb WRITE_CONVERSION should be placed on at least one item in the meta packets
|
|
14
|
-
|
|
15
|
-
require 'cosmos/packet_logs/packet_log_writer'
|
|
16
|
-
|
|
17
|
-
module Cosmos
|
|
18
|
-
|
|
19
|
-
# Writes a given packet at the beginning of each telemetry packet log file
|
|
20
|
-
class MetaPacketLogWriter < PacketLogWriter
|
|
21
|
-
|
|
22
|
-
# See PacketLogWriter#initialize
|
|
23
|
-
# @param target_name [String] Target name of the metadata packet
|
|
24
|
-
# @param packet_name [String] Packet name of the metadata packet
|
|
25
|
-
# @param meta_default_filename [String] Filename containing key/value pairs for default meta packet values
|
|
26
|
-
# @param log_meta_packet [Boolean] true to log the metadata packet if received during logging. false to only
|
|
27
|
-
# log metadata packets at the beginning of the log.
|
|
28
|
-
# @param use_tlm_packet [Boolean] true to put the data from the telemetry packet into
|
|
29
|
-
# each log. false to put the data from the command packet.
|
|
30
|
-
def initialize(
|
|
31
|
-
log_type,
|
|
32
|
-
target_name = nil,
|
|
33
|
-
packet_name = nil,
|
|
34
|
-
meta_default_filename = nil,
|
|
35
|
-
log_meta_packet = false,
|
|
36
|
-
use_tlm_packet = true,
|
|
37
|
-
log_name = nil,
|
|
38
|
-
logging_enabled = true,
|
|
39
|
-
cycle_time = nil,
|
|
40
|
-
cycle_size = 2000000000,
|
|
41
|
-
log_directory = nil,
|
|
42
|
-
asynchronous = false
|
|
43
|
-
)
|
|
44
|
-
@target_name = ConfigParser.handle_nil(target_name)
|
|
45
|
-
@packet_name = ConfigParser.handle_nil(packet_name)
|
|
46
|
-
@packet = nil
|
|
47
|
-
@log_meta_packet = ConfigParser.handle_true_false(log_meta_packet)
|
|
48
|
-
@meta_default_filename = ConfigParser.handle_nil(meta_default_filename)
|
|
49
|
-
@use_tlm_packet = ConfigParser.handle_true_false(use_tlm_packet)
|
|
50
|
-
|
|
51
|
-
# Make sure the packet exists in both commands and telemetry (if given)
|
|
52
|
-
if @target_name and @packet_name
|
|
53
|
-
packet = System.telemetry.packet(@target_name, @packet_name)
|
|
54
|
-
@packet = packet if @use_tlm_packet
|
|
55
|
-
packet = System.commands.packet(@target_name, @packet_name)
|
|
56
|
-
@packet = packet if !@use_tlm_packet
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
# Initialize the meta packet (if given)
|
|
60
|
-
if @meta_default_filename and @packet
|
|
61
|
-
parser = ConfigParser.new
|
|
62
|
-
Cosmos.set_working_dir do
|
|
63
|
-
parser.parse_file(@meta_default_filename) do |keyword, params|
|
|
64
|
-
begin
|
|
65
|
-
item = @packet.get_item(keyword)
|
|
66
|
-
if item.data_type == :STRING or item.data_type == :BLOCK
|
|
67
|
-
value = params[0]
|
|
68
|
-
else
|
|
69
|
-
value = params[0].convert_to_value
|
|
70
|
-
end
|
|
71
|
-
@packet.write(keyword, value)
|
|
72
|
-
rescue => err
|
|
73
|
-
raise parser.error(err, "ITEM_NAME VALUE")
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
super(log_type, log_name, logging_enabled, cycle_time, cycle_size, log_directory, asynchronous)
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
# Optionally doesn't write the meta packet
|
|
83
|
-
def write(packet)
|
|
84
|
-
if @log_meta_packet or !(packet.target_name == @target_name and packet.packet_name == @packet_name)
|
|
85
|
-
super(packet)
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
protected
|
|
90
|
-
|
|
91
|
-
# Adds the meta packet at the beginning of telemetry packet logs
|
|
92
|
-
# Mutex is held during this hook
|
|
93
|
-
def start_new_file_hook
|
|
94
|
-
if @target_name and @packet_name
|
|
95
|
-
if @use_tlm_packet
|
|
96
|
-
packet = System.telemetry.packet(@target_name, @packet_name)
|
|
97
|
-
else
|
|
98
|
-
packet = System.commands.packet(@target_name, @packet_name)
|
|
99
|
-
end
|
|
100
|
-
# Don't take the mutex because it is already held
|
|
101
|
-
write_packet(packet, false)
|
|
102
|
-
end
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
end # class MetaPacketLogWriter
|
|
106
|
-
|
|
107
|
-
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
|
+
# Usage Notes:
|
|
12
|
+
# The metadata packet must exist with exactly the same fields as both a command and as a telemetry packet
|
|
13
|
+
# The new_packet_log_conversion.rb WRITE_CONVERSION should be placed on at least one item in the meta packets
|
|
14
|
+
|
|
15
|
+
require 'cosmos/packet_logs/packet_log_writer'
|
|
16
|
+
|
|
17
|
+
module Cosmos
|
|
18
|
+
|
|
19
|
+
# Writes a given packet at the beginning of each telemetry packet log file
|
|
20
|
+
class MetaPacketLogWriter < PacketLogWriter
|
|
21
|
+
|
|
22
|
+
# See PacketLogWriter#initialize
|
|
23
|
+
# @param target_name [String] Target name of the metadata packet
|
|
24
|
+
# @param packet_name [String] Packet name of the metadata packet
|
|
25
|
+
# @param meta_default_filename [String] Filename containing key/value pairs for default meta packet values
|
|
26
|
+
# @param log_meta_packet [Boolean] true to log the metadata packet if received during logging. false to only
|
|
27
|
+
# log metadata packets at the beginning of the log.
|
|
28
|
+
# @param use_tlm_packet [Boolean] true to put the data from the telemetry packet into
|
|
29
|
+
# each log. false to put the data from the command packet.
|
|
30
|
+
def initialize(
|
|
31
|
+
log_type,
|
|
32
|
+
target_name = nil,
|
|
33
|
+
packet_name = nil,
|
|
34
|
+
meta_default_filename = nil,
|
|
35
|
+
log_meta_packet = false,
|
|
36
|
+
use_tlm_packet = true,
|
|
37
|
+
log_name = nil,
|
|
38
|
+
logging_enabled = true,
|
|
39
|
+
cycle_time = nil,
|
|
40
|
+
cycle_size = 2000000000,
|
|
41
|
+
log_directory = nil,
|
|
42
|
+
asynchronous = false
|
|
43
|
+
)
|
|
44
|
+
@target_name = ConfigParser.handle_nil(target_name)
|
|
45
|
+
@packet_name = ConfigParser.handle_nil(packet_name)
|
|
46
|
+
@packet = nil
|
|
47
|
+
@log_meta_packet = ConfigParser.handle_true_false(log_meta_packet)
|
|
48
|
+
@meta_default_filename = ConfigParser.handle_nil(meta_default_filename)
|
|
49
|
+
@use_tlm_packet = ConfigParser.handle_true_false(use_tlm_packet)
|
|
50
|
+
|
|
51
|
+
# Make sure the packet exists in both commands and telemetry (if given)
|
|
52
|
+
if @target_name and @packet_name
|
|
53
|
+
packet = System.telemetry.packet(@target_name, @packet_name)
|
|
54
|
+
@packet = packet if @use_tlm_packet
|
|
55
|
+
packet = System.commands.packet(@target_name, @packet_name)
|
|
56
|
+
@packet = packet if !@use_tlm_packet
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Initialize the meta packet (if given)
|
|
60
|
+
if @meta_default_filename and @packet
|
|
61
|
+
parser = ConfigParser.new
|
|
62
|
+
Cosmos.set_working_dir do
|
|
63
|
+
parser.parse_file(@meta_default_filename) do |keyword, params|
|
|
64
|
+
begin
|
|
65
|
+
item = @packet.get_item(keyword)
|
|
66
|
+
if item.data_type == :STRING or item.data_type == :BLOCK
|
|
67
|
+
value = params[0]
|
|
68
|
+
else
|
|
69
|
+
value = params[0].convert_to_value
|
|
70
|
+
end
|
|
71
|
+
@packet.write(keyword, value)
|
|
72
|
+
rescue => err
|
|
73
|
+
raise parser.error(err, "ITEM_NAME VALUE")
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
super(log_type, log_name, logging_enabled, cycle_time, cycle_size, log_directory, asynchronous)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Optionally doesn't write the meta packet
|
|
83
|
+
def write(packet)
|
|
84
|
+
if @log_meta_packet or !(packet.target_name == @target_name and packet.packet_name == @packet_name)
|
|
85
|
+
super(packet)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
protected
|
|
90
|
+
|
|
91
|
+
# Adds the meta packet at the beginning of telemetry packet logs
|
|
92
|
+
# Mutex is held during this hook
|
|
93
|
+
def start_new_file_hook
|
|
94
|
+
if @target_name and @packet_name
|
|
95
|
+
if @use_tlm_packet
|
|
96
|
+
packet = System.telemetry.packet(@target_name, @packet_name)
|
|
97
|
+
else
|
|
98
|
+
packet = System.commands.packet(@target_name, @packet_name)
|
|
99
|
+
end
|
|
100
|
+
# Don't take the mutex because it is already held
|
|
101
|
+
write_packet(packet, false)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end # class MetaPacketLogWriter
|
|
106
|
+
|
|
107
|
+
end # module Cosmos
|
|
@@ -1,450 +1,450 @@
|
|
|
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/core_ext/io'
|
|
12
|
-
require 'cosmos/packets/packet'
|
|
13
|
-
require 'cosmos/io/buffered_file'
|
|
14
|
-
|
|
15
|
-
module Cosmos
|
|
16
|
-
|
|
17
|
-
# Reads a packet log of either commands or telemetry.
|
|
18
|
-
class PacketLogReader
|
|
19
|
-
attr_reader :log_type
|
|
20
|
-
attr_reader :configuration_name
|
|
21
|
-
attr_reader :hostname
|
|
22
|
-
|
|
23
|
-
# COSMOS 2.0 log file header definition
|
|
24
|
-
COSMOS2_MARKER = 'COSMOS2_'
|
|
25
|
-
COSMOS2_HEADER_LENGTH = 128
|
|
26
|
-
COSMOS2_MARKER_RANGE = 0..7
|
|
27
|
-
COSMOS2_LOG_TYPE_RANGE = 8..10
|
|
28
|
-
COSMOS2_CONFIGURATION_NAME_RANGE = 12..43
|
|
29
|
-
COSMOS2_HOSTNAME_RANGE = 45..127
|
|
30
|
-
|
|
31
|
-
# COSMOS 1.0 log file header definition
|
|
32
|
-
COSMOS1_MARKER = 'COSMOS'
|
|
33
|
-
COSMOS1_HEADER_LENGTH = 42
|
|
34
|
-
COSMOS1_MARKER_RANGE = 0..5
|
|
35
|
-
COSMOS1_LOG_TYPE_RANGE = 6..8
|
|
36
|
-
COSMOS1_CONFIGURATION_NAME_RANGE = 10..41
|
|
37
|
-
|
|
38
|
-
# Create a new log file reader
|
|
39
|
-
def initialize
|
|
40
|
-
reset()
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Yields back each packet as it is found in the log file.
|
|
44
|
-
#
|
|
45
|
-
# @param filename [String] The log file to read
|
|
46
|
-
# @param identify_and_define [Boolean] Once the packet has been read from
|
|
47
|
-
# the log file, whether to both identify the packet by setting the target
|
|
48
|
-
# and packet name, and define the packet by populating all the items.
|
|
49
|
-
# @param start_time [Time|nil] Time at which to start returning packets.
|
|
50
|
-
# Packets found with a timestamp before this time are ignored. Pass nil
|
|
51
|
-
# to return all packets.
|
|
52
|
-
# @param end_time [Time|nil] Time at which to stop returning packets.
|
|
53
|
-
# Packets found with a timestamp after this time are ignored. Pass nil
|
|
54
|
-
# to return all packets.
|
|
55
|
-
# @yieldparam packet [Packet]
|
|
56
|
-
def each(filename, identify_and_define = true, start_time = nil, end_time = nil)
|
|
57
|
-
open(filename)
|
|
58
|
-
|
|
59
|
-
seek_to_time(start_time) if start_time
|
|
60
|
-
|
|
61
|
-
while true
|
|
62
|
-
packet = read(identify_and_define)
|
|
63
|
-
break unless packet
|
|
64
|
-
|
|
65
|
-
received_time = packet.received_time
|
|
66
|
-
if received_time
|
|
67
|
-
next if start_time and received_time < start_time
|
|
68
|
-
break if end_time and received_time > end_time
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
yield packet
|
|
72
|
-
end
|
|
73
|
-
ensure
|
|
74
|
-
close()
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
# Returns an analysis of the log file by reading all the packets and
|
|
78
|
-
# returning information about each packet. This information maps directly
|
|
79
|
-
# to the parameters need by the {#read_at_offset} method and thus should be
|
|
80
|
-
# called before using {#read_at_offset}.
|
|
81
|
-
#
|
|
82
|
-
# @param filename [String] The filename to analyze
|
|
83
|
-
# @param progress_callback [Proc] Callback that should receive a single
|
|
84
|
-
# floating point parameter which is the percentage done
|
|
85
|
-
# @return [Array<Array<Integer, Integer, String, String, Time, Time>] Array
|
|
86
|
-
# of arrays for each packet found in the log file consisting of:
|
|
87
|
-
# [File position, length, target name, packet name, time formatted,
|
|
88
|
-
# received time].
|
|
89
|
-
def packet_offsets(filename, progress_callback = nil)
|
|
90
|
-
open(filename)
|
|
91
|
-
offsets = []
|
|
92
|
-
filesize = size().to_f
|
|
93
|
-
|
|
94
|
-
while true
|
|
95
|
-
current_pos = @file.pos
|
|
96
|
-
packet = read(false)
|
|
97
|
-
break unless packet
|
|
98
|
-
offsets << current_pos
|
|
99
|
-
if progress_callback
|
|
100
|
-
break if progress_callback.call(current_pos / filesize)
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
return offsets
|
|
105
|
-
ensure
|
|
106
|
-
close()
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
# @param filename [String] The log filename to open
|
|
110
|
-
# @return [Boolean, Exception] Returns true if successfully changed to configuration specified in log,
|
|
111
|
-
# otherwise returns false and potentially an Exception class if an error occurred. If no error occurred
|
|
112
|
-
# false indicates that the requested configuration was simply not found
|
|
113
|
-
def open(filename)
|
|
114
|
-
close()
|
|
115
|
-
reset()
|
|
116
|
-
@filename = filename
|
|
117
|
-
@file = BufferedFile.open(@filename, 'rb')
|
|
118
|
-
@bytes_read = 0
|
|
119
|
-
return read_file_header()
|
|
120
|
-
rescue => err
|
|
121
|
-
close()
|
|
122
|
-
raise err
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
# Closes the current log file
|
|
126
|
-
def close
|
|
127
|
-
@file.close if @file and !@file.closed?
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
# Read a packet from the log file
|
|
131
|
-
#
|
|
132
|
-
# @param identify_and_define (see #each)
|
|
133
|
-
# @return [Packet]
|
|
134
|
-
def read(identify_and_define = true)
|
|
135
|
-
# Read the Packet Header
|
|
136
|
-
success, target_name, packet_name, received_time = read_entry_header()
|
|
137
|
-
return nil unless success
|
|
138
|
-
|
|
139
|
-
# Read Packet Data
|
|
140
|
-
packet_data = @file.read_length_bytes(4)
|
|
141
|
-
return nil unless packet_data and packet_data.length > 0
|
|
142
|
-
|
|
143
|
-
if identify_and_define
|
|
144
|
-
packet = identify_and_define_packet_data(target_name, packet_name, received_time, packet_data)
|
|
145
|
-
else
|
|
146
|
-
# Build Packet
|
|
147
|
-
packet = Packet.new(target_name, packet_name, :BIG_ENDIAN, nil, packet_data)
|
|
148
|
-
packet.set_received_time_fast(received_time)
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
packet
|
|
152
|
-
rescue => err
|
|
153
|
-
close()
|
|
154
|
-
raise err
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
# Reads a packet from the opened log file. Should only be used in
|
|
158
|
-
# conjunction with {#packet_offsets}.
|
|
159
|
-
#
|
|
160
|
-
# @param file_offset [Integer] Byte offset into the log file to start
|
|
161
|
-
# reading
|
|
162
|
-
# @param identify_and_define (see #each)
|
|
163
|
-
# @return [Packet]
|
|
164
|
-
def read_at_offset(file_offset, identify_and_define = true)
|
|
165
|
-
@file.seek(file_offset, IO::SEEK_SET)
|
|
166
|
-
return read(identify_and_define)
|
|
167
|
-
rescue => err
|
|
168
|
-
close()
|
|
169
|
-
raise err
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
# Read the first packet from the log file and reset the file position back
|
|
173
|
-
# to the current position. This allows the client to call read multiple
|
|
174
|
-
# times to return packets, call first, and continue calling read which will
|
|
175
|
-
# return the next packet in the file.
|
|
176
|
-
#
|
|
177
|
-
# @return [Packet]
|
|
178
|
-
def first
|
|
179
|
-
original_position = @file.pos
|
|
180
|
-
@file.seek(0, IO::SEEK_SET)
|
|
181
|
-
read_file_header()
|
|
182
|
-
packet = read()
|
|
183
|
-
raise "No first packet found" unless packet
|
|
184
|
-
@file.seek(original_position, IO::SEEK_SET)
|
|
185
|
-
packet.clone
|
|
186
|
-
rescue => err
|
|
187
|
-
close()
|
|
188
|
-
raise err
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
# Read the last packet from the log file and reset the file position back
|
|
192
|
-
# to the current position. This allows the client to call read multiple
|
|
193
|
-
# times to return packets, call last, and continue calling read which will
|
|
194
|
-
# return the next packet in the file.
|
|
195
|
-
#
|
|
196
|
-
# @return [Packet]
|
|
197
|
-
def last
|
|
198
|
-
original_position = @file.pos
|
|
199
|
-
@file.seek(-1, IO::SEEK_END)
|
|
200
|
-
packet = search(-1)
|
|
201
|
-
raise "No last packet found" unless packet
|
|
202
|
-
@file.seek(original_position, IO::SEEK_SET)
|
|
203
|
-
packet.clone
|
|
204
|
-
rescue => err
|
|
205
|
-
close()
|
|
206
|
-
raise err
|
|
207
|
-
end
|
|
208
|
-
|
|
209
|
-
# @return [Integer] The size of the log file being processed
|
|
210
|
-
def size
|
|
211
|
-
@file.stat.size
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
# @return [Integer] The current file position in the log file
|
|
215
|
-
def bytes_read
|
|
216
|
-
@file.pos
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
protected
|
|
220
|
-
|
|
221
|
-
def reset
|
|
222
|
-
@file = nil
|
|
223
|
-
@filename = nil
|
|
224
|
-
@log_type = :TLM
|
|
225
|
-
@configuration_name = nil
|
|
226
|
-
@hostname = nil
|
|
227
|
-
@file_header_length = COSMOS2_HEADER_LENGTH
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
# This is best effort. May return unidentified/undefined packets
|
|
231
|
-
def identify_and_define_packet_data(target_name, packet_name, received_time, packet_data)
|
|
232
|
-
packet = nil
|
|
233
|
-
unless (target_name and packet_name)
|
|
234
|
-
if @log_type == :TLM
|
|
235
|
-
packet = System.telemetry.identify!(packet_data)
|
|
236
|
-
else
|
|
237
|
-
packet = System.commands.identify(packet_data)
|
|
238
|
-
end
|
|
239
|
-
packet.set_received_time_fast(received_time) if packet
|
|
240
|
-
else
|
|
241
|
-
begin
|
|
242
|
-
if @log_type == :TLM
|
|
243
|
-
packet = System.telemetry.packet(target_name, packet_name)
|
|
244
|
-
else
|
|
245
|
-
packet = System.commands.packet(target_name, packet_name)
|
|
246
|
-
end
|
|
247
|
-
packet.buffer = packet_data
|
|
248
|
-
packet.set_received_time_fast(received_time)
|
|
249
|
-
rescue
|
|
250
|
-
# Could not find a definition for this packet
|
|
251
|
-
Logger.instance.error "Unknown packet #{target_name} #{packet_name}"
|
|
252
|
-
packet = Packet.new(target_name, packet_name, :BIG_ENDIAN, nil, packet_data)
|
|
253
|
-
packet.set_received_time_fast(received_time)
|
|
254
|
-
end
|
|
255
|
-
end
|
|
256
|
-
packet
|
|
257
|
-
end
|
|
258
|
-
|
|
259
|
-
# Should return if successfully switched to requested configuration
|
|
260
|
-
def read_file_header
|
|
261
|
-
header = @file.read(COSMOS2_HEADER_LENGTH)
|
|
262
|
-
if header and header.length == COSMOS2_HEADER_LENGTH
|
|
263
|
-
if header[COSMOS2_MARKER_RANGE] == COSMOS2_MARKER
|
|
264
|
-
# Found COSMOS 2 File Header
|
|
265
|
-
@log_type = header[COSMOS2_LOG_TYPE_RANGE].intern
|
|
266
|
-
raise "Unknown log type #{@log_type}" unless [:CMD, :TLM].include? @log_type
|
|
267
|
-
@configuration_name = header[COSMOS2_CONFIGURATION_NAME_RANGE]
|
|
268
|
-
@hostname = header[COSMOS2_HOSTNAME_RANGE].strip
|
|
269
|
-
@file_header_length = COSMOS2_HEADER_LENGTH
|
|
270
|
-
new_config_name, error = System.load_configuration(@configuration_name)
|
|
271
|
-
return true, error if new_config_name == @configuration_name
|
|
272
|
-
return false, error # Did not successfully change to requested configuration name
|
|
273
|
-
elsif header[COSMOS1_MARKER_RANGE] == COSMOS1_MARKER
|
|
274
|
-
# Found COSMOS 1 File Header
|
|
275
|
-
@log_type = header[COSMOS1_LOG_TYPE_RANGE].upcase.intern
|
|
276
|
-
raise "Unknown log type #{@log_type}" unless [:CMD, :TLM].include? @log_type
|
|
277
|
-
@configuration_name = header[COSMOS1_CONFIGURATION_NAME_RANGE]
|
|
278
|
-
@hostname = nil
|
|
279
|
-
@file_header_length = COSMOS1_HEADER_LENGTH
|
|
280
|
-
# Move back to beginning of first packet
|
|
281
|
-
@file.seek(COSMOS1_HEADER_LENGTH, IO::SEEK_SET)
|
|
282
|
-
new_config_name, error = System.load_configuration(@configuration_name)
|
|
283
|
-
return true, error if new_config_name == @configuration_name
|
|
284
|
-
return false, error # Did not successfully change to requested configuration name
|
|
285
|
-
else
|
|
286
|
-
raise "COSMOS file header not found on packet log"
|
|
287
|
-
end
|
|
288
|
-
else
|
|
289
|
-
raise "Failed to read at least #{COSMOS2_HEADER_LENGTH} bytes from packet log"
|
|
290
|
-
end
|
|
291
|
-
end
|
|
292
|
-
|
|
293
|
-
def read_entry_header
|
|
294
|
-
# Read Received Time
|
|
295
|
-
time_seconds = @file.read(4)
|
|
296
|
-
return [nil, nil, nil, nil] if time_seconds.nil? or time_seconds.length != 4
|
|
297
|
-
time_seconds = time_seconds.unpack('N')[0]
|
|
298
|
-
time_microseconds = @file.read(4)
|
|
299
|
-
return [nil, nil, nil, nil] if time_microseconds.nil? or time_microseconds.length != 4
|
|
300
|
-
time_microseconds = time_microseconds.unpack('N')[0]
|
|
301
|
-
received_time = Time.at(time_seconds, time_microseconds)
|
|
302
|
-
|
|
303
|
-
# Read Target Name
|
|
304
|
-
target_name = @file.read_length_bytes(1)
|
|
305
|
-
return [nil, nil, nil, nil] unless target_name and target_name.length > 0
|
|
306
|
-
|
|
307
|
-
# Read Packet Name
|
|
308
|
-
packet_name = @file.read_length_bytes(1)
|
|
309
|
-
return [nil, nil, nil, nil] unless packet_name and packet_name.length > 0
|
|
310
|
-
|
|
311
|
-
return [true, target_name, packet_name, received_time]
|
|
312
|
-
end
|
|
313
|
-
|
|
314
|
-
def test
|
|
315
|
-
found = false
|
|
316
|
-
|
|
317
|
-
# Save original position
|
|
318
|
-
original_position = @file.pos
|
|
319
|
-
|
|
320
|
-
begin
|
|
321
|
-
# Try to read the packet header
|
|
322
|
-
# This will fail with file read errors and invalid timestamps
|
|
323
|
-
success, target_name, packet_name, _ = read_entry_header()
|
|
324
|
-
if success
|
|
325
|
-
if target_name !~ File::NON_ASCII_PRINTABLE and packet_name !~ File::NON_ASCII_PRINTABLE
|
|
326
|
-
packet_data_length = @file.read(4)
|
|
327
|
-
if packet_data_length.length == 4 and packet_data_length.unpack('N')[0] > 0
|
|
328
|
-
if @log_type == :TLM
|
|
329
|
-
if System.telemetry.packet(target_name, packet_name)
|
|
330
|
-
found = true
|
|
331
|
-
end
|
|
332
|
-
else
|
|
333
|
-
if System.commands.packet(target_name, packet_name)
|
|
334
|
-
found = true
|
|
335
|
-
end
|
|
336
|
-
end
|
|
337
|
-
end
|
|
338
|
-
end
|
|
339
|
-
end
|
|
340
|
-
rescue
|
|
341
|
-
# Packet not found
|
|
342
|
-
end
|
|
343
|
-
|
|
344
|
-
# Return to the original position
|
|
345
|
-
@file.seek(original_position, IO::SEEK_SET)
|
|
346
|
-
|
|
347
|
-
# Indicate if a packet was found
|
|
348
|
-
found
|
|
349
|
-
end
|
|
350
|
-
|
|
351
|
-
# Searchs for the nearest packet to the current io position
|
|
352
|
-
# Returns the packet if found, and leaves the io position
|
|
353
|
-
# either before or after the packet found
|
|
354
|
-
def search(offset_increment, leave_position = :AFTER)
|
|
355
|
-
position = @file.pos
|
|
356
|
-
@file.seek(0, IO::SEEK_END)
|
|
357
|
-
size = @file.pos
|
|
358
|
-
@file.seek(position, IO::SEEK_SET)
|
|
359
|
-
|
|
360
|
-
while (@file.pos > 0 and @file.pos < size)
|
|
361
|
-
if test()
|
|
362
|
-
# Save position
|
|
363
|
-
position = @file.pos
|
|
364
|
-
|
|
365
|
-
packet = read()
|
|
366
|
-
|
|
367
|
-
if packet
|
|
368
|
-
if leave_position != :AFTER
|
|
369
|
-
# Restore position
|
|
370
|
-
@file.seek(position, IO::SEEK_SET)
|
|
371
|
-
end
|
|
372
|
-
|
|
373
|
-
return packet
|
|
374
|
-
end
|
|
375
|
-
|
|
376
|
-
# Restore position
|
|
377
|
-
@file.seek(position, IO::SEEK_SET)
|
|
378
|
-
end
|
|
379
|
-
@file.seek(offset_increment, IO::SEEK_CUR)
|
|
380
|
-
end
|
|
381
|
-
|
|
382
|
-
# Return nil if we search beyond the size of the file
|
|
383
|
-
nil
|
|
384
|
-
end
|
|
385
|
-
|
|
386
|
-
def seek_to_time(time)
|
|
387
|
-
if time
|
|
388
|
-
position = @file.pos
|
|
389
|
-
|
|
390
|
-
begin
|
|
391
|
-
# Read the first packet in the log
|
|
392
|
-
first_packet = first()
|
|
393
|
-
raise "Error reading first packet" unless first
|
|
394
|
-
raise "First Packet does not contain a packet received time" unless first_packet.received_time
|
|
395
|
-
|
|
396
|
-
# Read the last packet in the log
|
|
397
|
-
file_size = size()
|
|
398
|
-
last_packet = last()
|
|
399
|
-
raise "Search failed looking for last packet" unless last_packet
|
|
400
|
-
raise "Last Packet does not contain a packet received time" unless last_packet.received_time
|
|
401
|
-
|
|
402
|
-
if time >= first_packet.received_time and time <= last_packet.received_time
|
|
403
|
-
# Guess at where to start looking for time in log
|
|
404
|
-
percentage = (time - first_packet.received_time) / (last_packet.received_time - first_packet.received_time)
|
|
405
|
-
offset = (percentage * file_size.to_f).to_i
|
|
406
|
-
offset = @file_header_length if offset < @file_header_length
|
|
407
|
-
@file.seek(offset, IO::SEEK_SET)
|
|
408
|
-
|
|
409
|
-
# Move backwards until a packet before the time is found
|
|
410
|
-
while true
|
|
411
|
-
packet = search(-1, :BEFORE)
|
|
412
|
-
break if !packet or packet.received_time <= time
|
|
413
|
-
|
|
414
|
-
# Guess again
|
|
415
|
-
percentage = 1.0 - ((packet.received_time - time) / (packet.received_time - first_packet.received_time))
|
|
416
|
-
offset = (percentage * @file.pos.to_f).to_i
|
|
417
|
-
offset = @file_header_length if offset < @file_header_length
|
|
418
|
-
@file.seek(offset, IO::SEEK_SET)
|
|
419
|
-
end
|
|
420
|
-
|
|
421
|
-
# Move forwards until a packet equal to or after the time is found
|
|
422
|
-
while true
|
|
423
|
-
position = @file.pos
|
|
424
|
-
packet = read(false)
|
|
425
|
-
raise "Search failed looking for packet after time" unless packet
|
|
426
|
-
if packet.received_time >= time
|
|
427
|
-
# Back up this packet so the read can get it because we want it
|
|
428
|
-
@file.seek(position, IO::SEEK_SET)
|
|
429
|
-
break
|
|
430
|
-
end
|
|
431
|
-
end
|
|
432
|
-
|
|
433
|
-
else
|
|
434
|
-
if time > last_packet.received_time
|
|
435
|
-
# File is entirely before time, so jump to the end
|
|
436
|
-
@file.seek(0, IO::SEEK_END)
|
|
437
|
-
else
|
|
438
|
-
raise "File does not include time"
|
|
439
|
-
end
|
|
440
|
-
end
|
|
441
|
-
rescue # Optimized search failed or not supported
|
|
442
|
-
# Restore position
|
|
443
|
-
@file.seek(position, IO::SEEK_SET)
|
|
444
|
-
end
|
|
445
|
-
end
|
|
446
|
-
end
|
|
447
|
-
|
|
448
|
-
end # class PacketLogReader
|
|
449
|
-
|
|
450
|
-
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/core_ext/io'
|
|
12
|
+
require 'cosmos/packets/packet'
|
|
13
|
+
require 'cosmos/io/buffered_file'
|
|
14
|
+
|
|
15
|
+
module Cosmos
|
|
16
|
+
|
|
17
|
+
# Reads a packet log of either commands or telemetry.
|
|
18
|
+
class PacketLogReader
|
|
19
|
+
attr_reader :log_type
|
|
20
|
+
attr_reader :configuration_name
|
|
21
|
+
attr_reader :hostname
|
|
22
|
+
|
|
23
|
+
# COSMOS 2.0 log file header definition
|
|
24
|
+
COSMOS2_MARKER = 'COSMOS2_'
|
|
25
|
+
COSMOS2_HEADER_LENGTH = 128
|
|
26
|
+
COSMOS2_MARKER_RANGE = 0..7
|
|
27
|
+
COSMOS2_LOG_TYPE_RANGE = 8..10
|
|
28
|
+
COSMOS2_CONFIGURATION_NAME_RANGE = 12..43
|
|
29
|
+
COSMOS2_HOSTNAME_RANGE = 45..127
|
|
30
|
+
|
|
31
|
+
# COSMOS 1.0 log file header definition
|
|
32
|
+
COSMOS1_MARKER = 'COSMOS'
|
|
33
|
+
COSMOS1_HEADER_LENGTH = 42
|
|
34
|
+
COSMOS1_MARKER_RANGE = 0..5
|
|
35
|
+
COSMOS1_LOG_TYPE_RANGE = 6..8
|
|
36
|
+
COSMOS1_CONFIGURATION_NAME_RANGE = 10..41
|
|
37
|
+
|
|
38
|
+
# Create a new log file reader
|
|
39
|
+
def initialize
|
|
40
|
+
reset()
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Yields back each packet as it is found in the log file.
|
|
44
|
+
#
|
|
45
|
+
# @param filename [String] The log file to read
|
|
46
|
+
# @param identify_and_define [Boolean] Once the packet has been read from
|
|
47
|
+
# the log file, whether to both identify the packet by setting the target
|
|
48
|
+
# and packet name, and define the packet by populating all the items.
|
|
49
|
+
# @param start_time [Time|nil] Time at which to start returning packets.
|
|
50
|
+
# Packets found with a timestamp before this time are ignored. Pass nil
|
|
51
|
+
# to return all packets.
|
|
52
|
+
# @param end_time [Time|nil] Time at which to stop returning packets.
|
|
53
|
+
# Packets found with a timestamp after this time are ignored. Pass nil
|
|
54
|
+
# to return all packets.
|
|
55
|
+
# @yieldparam packet [Packet]
|
|
56
|
+
def each(filename, identify_and_define = true, start_time = nil, end_time = nil)
|
|
57
|
+
open(filename)
|
|
58
|
+
|
|
59
|
+
seek_to_time(start_time) if start_time
|
|
60
|
+
|
|
61
|
+
while true
|
|
62
|
+
packet = read(identify_and_define)
|
|
63
|
+
break unless packet
|
|
64
|
+
|
|
65
|
+
received_time = packet.received_time
|
|
66
|
+
if received_time
|
|
67
|
+
next if start_time and received_time < start_time
|
|
68
|
+
break if end_time and received_time > end_time
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
yield packet
|
|
72
|
+
end
|
|
73
|
+
ensure
|
|
74
|
+
close()
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Returns an analysis of the log file by reading all the packets and
|
|
78
|
+
# returning information about each packet. This information maps directly
|
|
79
|
+
# to the parameters need by the {#read_at_offset} method and thus should be
|
|
80
|
+
# called before using {#read_at_offset}.
|
|
81
|
+
#
|
|
82
|
+
# @param filename [String] The filename to analyze
|
|
83
|
+
# @param progress_callback [Proc] Callback that should receive a single
|
|
84
|
+
# floating point parameter which is the percentage done
|
|
85
|
+
# @return [Array<Array<Integer, Integer, String, String, Time, Time>] Array
|
|
86
|
+
# of arrays for each packet found in the log file consisting of:
|
|
87
|
+
# [File position, length, target name, packet name, time formatted,
|
|
88
|
+
# received time].
|
|
89
|
+
def packet_offsets(filename, progress_callback = nil)
|
|
90
|
+
open(filename)
|
|
91
|
+
offsets = []
|
|
92
|
+
filesize = size().to_f
|
|
93
|
+
|
|
94
|
+
while true
|
|
95
|
+
current_pos = @file.pos
|
|
96
|
+
packet = read(false)
|
|
97
|
+
break unless packet
|
|
98
|
+
offsets << current_pos
|
|
99
|
+
if progress_callback
|
|
100
|
+
break if progress_callback.call(current_pos / filesize)
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
return offsets
|
|
105
|
+
ensure
|
|
106
|
+
close()
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# @param filename [String] The log filename to open
|
|
110
|
+
# @return [Boolean, Exception] Returns true if successfully changed to configuration specified in log,
|
|
111
|
+
# otherwise returns false and potentially an Exception class if an error occurred. If no error occurred
|
|
112
|
+
# false indicates that the requested configuration was simply not found
|
|
113
|
+
def open(filename)
|
|
114
|
+
close()
|
|
115
|
+
reset()
|
|
116
|
+
@filename = filename
|
|
117
|
+
@file = BufferedFile.open(@filename, 'rb')
|
|
118
|
+
@bytes_read = 0
|
|
119
|
+
return read_file_header()
|
|
120
|
+
rescue => err
|
|
121
|
+
close()
|
|
122
|
+
raise err
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Closes the current log file
|
|
126
|
+
def close
|
|
127
|
+
@file.close if @file and !@file.closed?
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Read a packet from the log file
|
|
131
|
+
#
|
|
132
|
+
# @param identify_and_define (see #each)
|
|
133
|
+
# @return [Packet]
|
|
134
|
+
def read(identify_and_define = true)
|
|
135
|
+
# Read the Packet Header
|
|
136
|
+
success, target_name, packet_name, received_time = read_entry_header()
|
|
137
|
+
return nil unless success
|
|
138
|
+
|
|
139
|
+
# Read Packet Data
|
|
140
|
+
packet_data = @file.read_length_bytes(4)
|
|
141
|
+
return nil unless packet_data and packet_data.length > 0
|
|
142
|
+
|
|
143
|
+
if identify_and_define
|
|
144
|
+
packet = identify_and_define_packet_data(target_name, packet_name, received_time, packet_data)
|
|
145
|
+
else
|
|
146
|
+
# Build Packet
|
|
147
|
+
packet = Packet.new(target_name, packet_name, :BIG_ENDIAN, nil, packet_data)
|
|
148
|
+
packet.set_received_time_fast(received_time)
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
packet
|
|
152
|
+
rescue => err
|
|
153
|
+
close()
|
|
154
|
+
raise err
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Reads a packet from the opened log file. Should only be used in
|
|
158
|
+
# conjunction with {#packet_offsets}.
|
|
159
|
+
#
|
|
160
|
+
# @param file_offset [Integer] Byte offset into the log file to start
|
|
161
|
+
# reading
|
|
162
|
+
# @param identify_and_define (see #each)
|
|
163
|
+
# @return [Packet]
|
|
164
|
+
def read_at_offset(file_offset, identify_and_define = true)
|
|
165
|
+
@file.seek(file_offset, IO::SEEK_SET)
|
|
166
|
+
return read(identify_and_define)
|
|
167
|
+
rescue => err
|
|
168
|
+
close()
|
|
169
|
+
raise err
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# Read the first packet from the log file and reset the file position back
|
|
173
|
+
# to the current position. This allows the client to call read multiple
|
|
174
|
+
# times to return packets, call first, and continue calling read which will
|
|
175
|
+
# return the next packet in the file.
|
|
176
|
+
#
|
|
177
|
+
# @return [Packet]
|
|
178
|
+
def first
|
|
179
|
+
original_position = @file.pos
|
|
180
|
+
@file.seek(0, IO::SEEK_SET)
|
|
181
|
+
read_file_header()
|
|
182
|
+
packet = read()
|
|
183
|
+
raise "No first packet found" unless packet
|
|
184
|
+
@file.seek(original_position, IO::SEEK_SET)
|
|
185
|
+
packet.clone
|
|
186
|
+
rescue => err
|
|
187
|
+
close()
|
|
188
|
+
raise err
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# Read the last packet from the log file and reset the file position back
|
|
192
|
+
# to the current position. This allows the client to call read multiple
|
|
193
|
+
# times to return packets, call last, and continue calling read which will
|
|
194
|
+
# return the next packet in the file.
|
|
195
|
+
#
|
|
196
|
+
# @return [Packet]
|
|
197
|
+
def last
|
|
198
|
+
original_position = @file.pos
|
|
199
|
+
@file.seek(-1, IO::SEEK_END)
|
|
200
|
+
packet = search(-1)
|
|
201
|
+
raise "No last packet found" unless packet
|
|
202
|
+
@file.seek(original_position, IO::SEEK_SET)
|
|
203
|
+
packet.clone
|
|
204
|
+
rescue => err
|
|
205
|
+
close()
|
|
206
|
+
raise err
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
# @return [Integer] The size of the log file being processed
|
|
210
|
+
def size
|
|
211
|
+
@file.stat.size
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# @return [Integer] The current file position in the log file
|
|
215
|
+
def bytes_read
|
|
216
|
+
@file.pos
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
protected
|
|
220
|
+
|
|
221
|
+
def reset
|
|
222
|
+
@file = nil
|
|
223
|
+
@filename = nil
|
|
224
|
+
@log_type = :TLM
|
|
225
|
+
@configuration_name = nil
|
|
226
|
+
@hostname = nil
|
|
227
|
+
@file_header_length = COSMOS2_HEADER_LENGTH
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
# This is best effort. May return unidentified/undefined packets
|
|
231
|
+
def identify_and_define_packet_data(target_name, packet_name, received_time, packet_data)
|
|
232
|
+
packet = nil
|
|
233
|
+
unless (target_name and packet_name)
|
|
234
|
+
if @log_type == :TLM
|
|
235
|
+
packet = System.telemetry.identify!(packet_data)
|
|
236
|
+
else
|
|
237
|
+
packet = System.commands.identify(packet_data)
|
|
238
|
+
end
|
|
239
|
+
packet.set_received_time_fast(received_time) if packet
|
|
240
|
+
else
|
|
241
|
+
begin
|
|
242
|
+
if @log_type == :TLM
|
|
243
|
+
packet = System.telemetry.packet(target_name, packet_name)
|
|
244
|
+
else
|
|
245
|
+
packet = System.commands.packet(target_name, packet_name)
|
|
246
|
+
end
|
|
247
|
+
packet.buffer = packet_data
|
|
248
|
+
packet.set_received_time_fast(received_time)
|
|
249
|
+
rescue
|
|
250
|
+
# Could not find a definition for this packet
|
|
251
|
+
Logger.instance.error "Unknown packet #{target_name} #{packet_name}"
|
|
252
|
+
packet = Packet.new(target_name, packet_name, :BIG_ENDIAN, nil, packet_data)
|
|
253
|
+
packet.set_received_time_fast(received_time)
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
packet
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
# Should return if successfully switched to requested configuration
|
|
260
|
+
def read_file_header
|
|
261
|
+
header = @file.read(COSMOS2_HEADER_LENGTH)
|
|
262
|
+
if header and header.length == COSMOS2_HEADER_LENGTH
|
|
263
|
+
if header[COSMOS2_MARKER_RANGE] == COSMOS2_MARKER
|
|
264
|
+
# Found COSMOS 2 File Header
|
|
265
|
+
@log_type = header[COSMOS2_LOG_TYPE_RANGE].intern
|
|
266
|
+
raise "Unknown log type #{@log_type}" unless [:CMD, :TLM].include? @log_type
|
|
267
|
+
@configuration_name = header[COSMOS2_CONFIGURATION_NAME_RANGE]
|
|
268
|
+
@hostname = header[COSMOS2_HOSTNAME_RANGE].strip
|
|
269
|
+
@file_header_length = COSMOS2_HEADER_LENGTH
|
|
270
|
+
new_config_name, error = System.load_configuration(@configuration_name)
|
|
271
|
+
return true, error if new_config_name == @configuration_name
|
|
272
|
+
return false, error # Did not successfully change to requested configuration name
|
|
273
|
+
elsif header[COSMOS1_MARKER_RANGE] == COSMOS1_MARKER
|
|
274
|
+
# Found COSMOS 1 File Header
|
|
275
|
+
@log_type = header[COSMOS1_LOG_TYPE_RANGE].upcase.intern
|
|
276
|
+
raise "Unknown log type #{@log_type}" unless [:CMD, :TLM].include? @log_type
|
|
277
|
+
@configuration_name = header[COSMOS1_CONFIGURATION_NAME_RANGE]
|
|
278
|
+
@hostname = nil
|
|
279
|
+
@file_header_length = COSMOS1_HEADER_LENGTH
|
|
280
|
+
# Move back to beginning of first packet
|
|
281
|
+
@file.seek(COSMOS1_HEADER_LENGTH, IO::SEEK_SET)
|
|
282
|
+
new_config_name, error = System.load_configuration(@configuration_name)
|
|
283
|
+
return true, error if new_config_name == @configuration_name
|
|
284
|
+
return false, error # Did not successfully change to requested configuration name
|
|
285
|
+
else
|
|
286
|
+
raise "COSMOS file header not found on packet log"
|
|
287
|
+
end
|
|
288
|
+
else
|
|
289
|
+
raise "Failed to read at least #{COSMOS2_HEADER_LENGTH} bytes from packet log"
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
def read_entry_header
|
|
294
|
+
# Read Received Time
|
|
295
|
+
time_seconds = @file.read(4)
|
|
296
|
+
return [nil, nil, nil, nil] if time_seconds.nil? or time_seconds.length != 4
|
|
297
|
+
time_seconds = time_seconds.unpack('N')[0]
|
|
298
|
+
time_microseconds = @file.read(4)
|
|
299
|
+
return [nil, nil, nil, nil] if time_microseconds.nil? or time_microseconds.length != 4
|
|
300
|
+
time_microseconds = time_microseconds.unpack('N')[0]
|
|
301
|
+
received_time = Time.at(time_seconds, time_microseconds)
|
|
302
|
+
|
|
303
|
+
# Read Target Name
|
|
304
|
+
target_name = @file.read_length_bytes(1)
|
|
305
|
+
return [nil, nil, nil, nil] unless target_name and target_name.length > 0
|
|
306
|
+
|
|
307
|
+
# Read Packet Name
|
|
308
|
+
packet_name = @file.read_length_bytes(1)
|
|
309
|
+
return [nil, nil, nil, nil] unless packet_name and packet_name.length > 0
|
|
310
|
+
|
|
311
|
+
return [true, target_name, packet_name, received_time]
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
def test
|
|
315
|
+
found = false
|
|
316
|
+
|
|
317
|
+
# Save original position
|
|
318
|
+
original_position = @file.pos
|
|
319
|
+
|
|
320
|
+
begin
|
|
321
|
+
# Try to read the packet header
|
|
322
|
+
# This will fail with file read errors and invalid timestamps
|
|
323
|
+
success, target_name, packet_name, _ = read_entry_header()
|
|
324
|
+
if success
|
|
325
|
+
if target_name !~ File::NON_ASCII_PRINTABLE and packet_name !~ File::NON_ASCII_PRINTABLE
|
|
326
|
+
packet_data_length = @file.read(4)
|
|
327
|
+
if packet_data_length.length == 4 and packet_data_length.unpack('N')[0] > 0
|
|
328
|
+
if @log_type == :TLM
|
|
329
|
+
if System.telemetry.packet(target_name, packet_name)
|
|
330
|
+
found = true
|
|
331
|
+
end
|
|
332
|
+
else
|
|
333
|
+
if System.commands.packet(target_name, packet_name)
|
|
334
|
+
found = true
|
|
335
|
+
end
|
|
336
|
+
end
|
|
337
|
+
end
|
|
338
|
+
end
|
|
339
|
+
end
|
|
340
|
+
rescue
|
|
341
|
+
# Packet not found
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
# Return to the original position
|
|
345
|
+
@file.seek(original_position, IO::SEEK_SET)
|
|
346
|
+
|
|
347
|
+
# Indicate if a packet was found
|
|
348
|
+
found
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
# Searchs for the nearest packet to the current io position
|
|
352
|
+
# Returns the packet if found, and leaves the io position
|
|
353
|
+
# either before or after the packet found
|
|
354
|
+
def search(offset_increment, leave_position = :AFTER)
|
|
355
|
+
position = @file.pos
|
|
356
|
+
@file.seek(0, IO::SEEK_END)
|
|
357
|
+
size = @file.pos
|
|
358
|
+
@file.seek(position, IO::SEEK_SET)
|
|
359
|
+
|
|
360
|
+
while (@file.pos > 0 and @file.pos < size)
|
|
361
|
+
if test()
|
|
362
|
+
# Save position
|
|
363
|
+
position = @file.pos
|
|
364
|
+
|
|
365
|
+
packet = read()
|
|
366
|
+
|
|
367
|
+
if packet
|
|
368
|
+
if leave_position != :AFTER
|
|
369
|
+
# Restore position
|
|
370
|
+
@file.seek(position, IO::SEEK_SET)
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
return packet
|
|
374
|
+
end
|
|
375
|
+
|
|
376
|
+
# Restore position
|
|
377
|
+
@file.seek(position, IO::SEEK_SET)
|
|
378
|
+
end
|
|
379
|
+
@file.seek(offset_increment, IO::SEEK_CUR)
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
# Return nil if we search beyond the size of the file
|
|
383
|
+
nil
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
def seek_to_time(time)
|
|
387
|
+
if time
|
|
388
|
+
position = @file.pos
|
|
389
|
+
|
|
390
|
+
begin
|
|
391
|
+
# Read the first packet in the log
|
|
392
|
+
first_packet = first()
|
|
393
|
+
raise "Error reading first packet" unless first
|
|
394
|
+
raise "First Packet does not contain a packet received time" unless first_packet.received_time
|
|
395
|
+
|
|
396
|
+
# Read the last packet in the log
|
|
397
|
+
file_size = size()
|
|
398
|
+
last_packet = last()
|
|
399
|
+
raise "Search failed looking for last packet" unless last_packet
|
|
400
|
+
raise "Last Packet does not contain a packet received time" unless last_packet.received_time
|
|
401
|
+
|
|
402
|
+
if time >= first_packet.received_time and time <= last_packet.received_time
|
|
403
|
+
# Guess at where to start looking for time in log
|
|
404
|
+
percentage = (time - first_packet.received_time) / (last_packet.received_time - first_packet.received_time)
|
|
405
|
+
offset = (percentage * file_size.to_f).to_i
|
|
406
|
+
offset = @file_header_length if offset < @file_header_length
|
|
407
|
+
@file.seek(offset, IO::SEEK_SET)
|
|
408
|
+
|
|
409
|
+
# Move backwards until a packet before the time is found
|
|
410
|
+
while true
|
|
411
|
+
packet = search(-1, :BEFORE)
|
|
412
|
+
break if !packet or packet.received_time <= time
|
|
413
|
+
|
|
414
|
+
# Guess again
|
|
415
|
+
percentage = 1.0 - ((packet.received_time - time) / (packet.received_time - first_packet.received_time))
|
|
416
|
+
offset = (percentage * @file.pos.to_f).to_i
|
|
417
|
+
offset = @file_header_length if offset < @file_header_length
|
|
418
|
+
@file.seek(offset, IO::SEEK_SET)
|
|
419
|
+
end
|
|
420
|
+
|
|
421
|
+
# Move forwards until a packet equal to or after the time is found
|
|
422
|
+
while true
|
|
423
|
+
position = @file.pos
|
|
424
|
+
packet = read(false)
|
|
425
|
+
raise "Search failed looking for packet after time" unless packet
|
|
426
|
+
if packet.received_time >= time
|
|
427
|
+
# Back up this packet so the read can get it because we want it
|
|
428
|
+
@file.seek(position, IO::SEEK_SET)
|
|
429
|
+
break
|
|
430
|
+
end
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
else
|
|
434
|
+
if time > last_packet.received_time
|
|
435
|
+
# File is entirely before time, so jump to the end
|
|
436
|
+
@file.seek(0, IO::SEEK_END)
|
|
437
|
+
else
|
|
438
|
+
raise "File does not include time"
|
|
439
|
+
end
|
|
440
|
+
end
|
|
441
|
+
rescue # Optimized search failed or not supported
|
|
442
|
+
# Restore position
|
|
443
|
+
@file.seek(position, IO::SEEK_SET)
|
|
444
|
+
end
|
|
445
|
+
end
|
|
446
|
+
end
|
|
447
|
+
|
|
448
|
+
end # class PacketLogReader
|
|
449
|
+
|
|
450
|
+
end # module Cosmos
|