cosmos 3.0.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.gitignore +48 -48
- data/.travis.yml +7 -7
- data/CONTRIBUTING.txt +50 -50
- data/Gemfile +6 -6
- data/Guardfile +27 -27
- data/LICENSE.txt +879 -879
- data/Manifest.txt +1116 -1114
- data/README.md +109 -107
- data/Rakefile +214 -214
- data/autohotkey/config/data/diamond.STL +57 -57
- data/autohotkey/config/system/system.txt +34 -34
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/autohotkey/config/targets/COSMOS/target.txt +5 -5
- data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
- data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
- data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
- data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -294
- data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
- data/autohotkey/config/targets/INST/screens/array.txt +7 -7
- data/autohotkey/config/targets/INST/screens/block.txt +8 -8
- data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
- data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
- data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
- data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
- data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
- data/autohotkey/config/targets/INST/screens/image.txt +21 -21
- data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
- data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
- data/autohotkey/config/targets/INST/screens/other.txt +25 -25
- data/autohotkey/config/targets/INST/screens/params.txt +25 -25
- data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
- data/autohotkey/config/targets/INST/target.txt +26 -26
- data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
- data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
- data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
- data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
- data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
- data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
- data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/autohotkey/config/tools/launcher/launcher.txt +38 -38
- data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
- data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
- data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
- data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
- data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
- data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
- data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
- data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
- data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
- data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
- data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
- data/autohotkey/lib/example_background_task.rb +42 -42
- data/autohotkey/lib/user_version.rb +3 -3
- data/autohotkey/procedures/clear_util.rb +7 -7
- data/autohotkey/procedures/collect.rb +18 -18
- data/autohotkey/procedures/collect_util.rb +14 -14
- data/autohotkey/procedures/example_test.rb +67 -67
- data/autohotkey/procedures/example_test2.rb +74 -74
- data/autohotkey/procedures/script_test.rb +17 -17
- data/autohotkey/procedures/syntax_error.rb +18 -18
- data/autohotkey/tools/CmdExtractorAHK +16 -16
- data/autohotkey/tools/CmdSender +14 -14
- data/autohotkey/tools/CmdSenderAHK +18 -18
- data/autohotkey/tools/CmdTlmServer +14 -14
- data/autohotkey/tools/CmdTlmServerAHK +28 -28
- data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
- data/autohotkey/tools/DataViewer +14 -14
- data/autohotkey/tools/DataViewerAHK +17 -17
- data/autohotkey/tools/HandbookCreatorAHK +20 -20
- data/autohotkey/tools/LauncherAHK +17 -17
- data/autohotkey/tools/LimitsMonitorAHK +20 -20
- data/autohotkey/tools/OpenGLBuilderAHK +20 -20
- data/autohotkey/tools/PacketViewer +14 -14
- data/autohotkey/tools/PacketViewerAHK +18 -18
- data/autohotkey/tools/PacketViewerAHK2 +17 -17
- data/autohotkey/tools/Replay +14 -14
- data/autohotkey/tools/Replay.bat +59 -59
- data/autohotkey/tools/ReplayAHK +17 -17
- data/autohotkey/tools/ScriptRunner +14 -14
- data/autohotkey/tools/ScriptRunnerAHK +20 -20
- data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
- data/autohotkey/tools/TableManager +14 -14
- data/autohotkey/tools/TableManagerAHK +30 -30
- data/autohotkey/tools/TestRunner +15 -15
- data/autohotkey/tools/TestRunnerAHK +17 -17
- data/autohotkey/tools/TestRunnerAHK2 +17 -17
- data/autohotkey/tools/TestRunnerAHK3 +17 -17
- data/autohotkey/tools/TestRunnerAHK4 +17 -17
- data/autohotkey/tools/TlmExtractor +15 -15
- data/autohotkey/tools/TlmExtractorAHK +19 -19
- data/autohotkey/tools/TlmExtractorAHK2 +16 -16
- data/autohotkey/tools/TlmExtractorAHK3 +16 -16
- data/autohotkey/tools/TlmGrapher +14 -14
- data/autohotkey/tools/TlmGrapherAHK +19 -19
- data/autohotkey/tools/TlmGrapherAHK2 +23 -23
- data/autohotkey/tools/TlmGrapherAHK3 +17 -17
- data/autohotkey/tools/TlmGrapherAHK4 +17 -17
- data/autohotkey/tools/TlmViewer +14 -14
- data/autohotkey/tools/TlmViewerAHK +28 -28
- data/autohotkey/tools/TlmViewerAHK2 +18 -18
- data/autohotkey/tools/TlmViewerAHK3 +18 -18
- data/autohotkey/tools/TlmViewerAHK4 +18 -18
- data/autohotkey/tools/TlmViewerAHK5 +18 -18
- data/autohotkey/tools/autohotkey.rb +37 -37
- data/autohotkey/tools/cmd_extractor.ahk +27 -27
- data/autohotkey/tools/cmd_sender.ahk +182 -162
- data/autohotkey/tools/cmd_tlm_server.ahk +89 -89
- data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
- data/autohotkey/tools/data_viewer.ahk +135 -135
- data/autohotkey/tools/handbook_creator.ahk +23 -23
- data/autohotkey/tools/launcher.ahk +41 -41
- data/autohotkey/tools/limits_monitor.ahk +70 -70
- data/autohotkey/tools/open_gl_builder.ahk +134 -134
- data/autohotkey/tools/packet_viewer.ahk +143 -143
- data/autohotkey/tools/packet_viewer2.ahk +9 -9
- data/autohotkey/tools/replay.ahk +98 -98
- data/autohotkey/tools/script_runner.ahk +589 -589
- data/autohotkey/tools/script_runner2.ahk +34 -31
- data/autohotkey/tools/table_manager.ahk +220 -220
- data/autohotkey/tools/test_runner.ahk +262 -259
- data/autohotkey/tools/test_runner2.ahk +52 -52
- data/autohotkey/tools/test_runner3.ahk +13 -13
- data/autohotkey/tools/tlm_extractor.ahk +272 -272
- data/autohotkey/tools/tlm_grapher.ahk +642 -642
- data/autohotkey/tools/tlm_grapher2.ahk +115 -115
- data/autohotkey/tools/tlm_grapher3.ahk +24 -24
- data/autohotkey/tools/tlm_viewer.ahk +133 -133
- data/autohotkey/tools/tlm_viewer2.ahk +50 -49
- data/autohotkey/tools/tlm_viewer4.ahk +4 -4
- data/autohotkey/tools/tlm_viewer5.ahk +20 -20
- data/bin/cosmos +96 -96
- data/bin/cstol_converter +1166 -1166
- data/bin/rubysloc +85 -85
- data/cosmos.gemspec +98 -97
- data/data/about.txt +4 -4
- data/data/crc.txt +306 -305
- data/data/diamond.STL +57 -57
- data/data/legal.txt +9 -9
- data/demo/Gemfile +6 -6
- data/demo/Launcher +15 -15
- data/demo/Launcher.bat +59 -59
- data/demo/Rakefile +61 -61
- data/demo/config/data/crc.txt +222 -206
- data/demo/config/data/diamond.STL +57 -57
- data/demo/config/data/meta_init.txt +4 -4
- data/demo/config/system/system.txt +34 -34
- data/demo/config/system/system2.txt +33 -33
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/demo/config/targets/COSMOS/screens/version.txt +19 -19
- data/demo/config/targets/COSMOS/target.txt +11 -11
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
- data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +3 -3
- data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
- data/demo/config/targets/EXAMPLE/target.txt +6 -6
- data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
- data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
- data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
- data/demo/config/targets/INST/lib/sim_inst.rb +305 -294
- data/demo/config/targets/INST/screens/adcs.txt +46 -46
- data/demo/config/targets/INST/screens/array.txt +15 -15
- data/demo/config/targets/INST/screens/block.txt +8 -8
- data/demo/config/targets/INST/screens/commanding.txt +30 -30
- data/demo/config/targets/INST/screens/graphs.txt +14 -14
- data/demo/config/targets/INST/screens/ground.txt +25 -25
- data/demo/config/targets/INST/screens/hs.txt +44 -44
- data/demo/config/targets/INST/screens/latest.txt +23 -23
- data/demo/config/targets/INST/screens/other.txt +29 -29
- data/demo/config/targets/INST/screens/tabs.txt +70 -70
- data/demo/config/targets/INST/target.txt +33 -33
- data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
- data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
- data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
- data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -12
- data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
- data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
- data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +54 -48
- data/demo/config/targets/TEMPLATED/target.txt +6 -6
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +33 -33
- data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +29 -29
- data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
- data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
- data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/demo/config/tools/launcher/launcher.txt +45 -45
- data/demo/config/tools/launcher/launcher2.txt +45 -45
- data/demo/config/tools/script_runner/script_runner.txt +3 -3
- data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
- data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
- data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
- data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
- data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
- data/demo/config/tools/test_runner/test_runner.txt +17 -17
- data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
- data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
- data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
- data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
- data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
- data/demo/lib/example_background_task.rb +57 -52
- data/demo/lib/example_target.rb +113 -108
- data/demo/lib/scpi_target.rb +74 -74
- data/demo/lib/user_version.rb +3 -3
- data/demo/procedures/checks.rb +11 -11
- data/demo/procedures/clear_util.rb +7 -7
- data/demo/procedures/collect.rb +18 -18
- data/demo/procedures/collect_util.rb +14 -14
- data/demo/procedures/cosmos_api_test.rb +293 -293
- data/demo/procedures/disconnect.rb +29 -29
- data/demo/procedures/example_test.rb +182 -182
- data/demo/procedures/plot_test.rb +8 -8
- data/demo/procedures/run_example_test.rb +3 -3
- data/demo/procedures/test.rb +51 -51
- data/demo/tools/CmdExtractor +15 -15
- data/demo/tools/CmdExtractor.bat +59 -59
- data/demo/tools/CmdSender +15 -15
- data/demo/tools/CmdSender.bat +59 -59
- data/demo/tools/CmdTlmServer +15 -15
- data/demo/tools/CmdTlmServer.bat +59 -59
- data/demo/tools/DataViewer +15 -15
- data/demo/tools/DataViewer.bat +59 -59
- data/demo/tools/ExampleTarget +15 -15
- data/demo/tools/ExampleTarget.bat +59 -59
- data/demo/tools/HandbookCreator +15 -15
- data/demo/tools/HandbookCreator.bat +61 -61
- data/demo/tools/Launcher +15 -15
- data/demo/tools/Launcher.bat +59 -59
- data/demo/tools/LimitsMonitor +15 -15
- data/demo/tools/LimitsMonitor.bat +59 -59
- data/demo/tools/OpenGLBuilder +15 -15
- data/demo/tools/OpenGLBuilder.bat +59 -59
- data/demo/tools/PacketViewer +15 -15
- data/demo/tools/PacketViewer.bat +59 -59
- data/demo/tools/Replay +15 -15
- data/demo/tools/Replay.bat +59 -59
- data/demo/tools/ScpiTarget +15 -15
- data/demo/tools/ScpiTarget.bat +59 -59
- data/demo/tools/ScriptRunner +15 -15
- data/demo/tools/ScriptRunner.bat +59 -59
- data/demo/tools/TableManager +15 -15
- data/demo/tools/TableManager.bat +59 -59
- data/demo/tools/TestRunner +15 -15
- data/demo/tools/TestRunner.bat +59 -59
- data/demo/tools/TlmExtractor +15 -15
- data/demo/tools/TlmExtractor.bat +59 -59
- data/demo/tools/TlmGrapher +15 -15
- data/demo/tools/TlmGrapher.bat +59 -59
- data/demo/tools/TlmViewer +15 -15
- data/demo/tools/TlmViewer.bat +59 -59
- data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
- data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
- data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
- data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
- data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
- data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
- data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
- data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
- data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
- data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
- data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
- data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
- data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
- data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
- data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
- data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
- data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
- data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
- data/ext/cosmos/ext/array/array.c +111 -111
- data/ext/cosmos/ext/array/extconf.rb +13 -13
- data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
- data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
- data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
- data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
- data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
- data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
- data/ext/cosmos/ext/crc/crc.c +341 -341
- data/ext/cosmos/ext/crc/extconf.rb +12 -12
- data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
- data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
- data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
- data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +261 -261
- data/ext/cosmos/ext/packet/extconf.rb +13 -13
- data/ext/cosmos/ext/packet/packet.c +339 -339
- data/ext/cosmos/ext/platform/extconf.rb +13 -13
- data/ext/cosmos/ext/platform/platform.c +81 -81
- data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
- data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
- data/ext/cosmos/ext/string/extconf.rb +13 -13
- data/ext/cosmos/ext/string/string.c +49 -49
- data/ext/cosmos/ext/structure/structure.c +894 -894
- data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
- data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
- data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
- data/ext/cosmos/ext/telemetry/telemetry.c +306 -306
- data/ext/mkrf_conf.rb +40 -40
- data/install/Gemfile +6 -6
- data/install/Launcher +14 -14
- data/install/Launcher.bat +59 -59
- data/install/Rakefile +61 -61
- data/install/config/data/crc.txt +134 -133
- data/install/config/system/system.txt +29 -29
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/install/config/targets/COSMOS/screens/version.txt +19 -19
- data/install/config/targets/COSMOS/target.txt +8 -8
- data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
- data/install/config/tools/data_viewer/data_viewer.txt +3 -3
- data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
- data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
- data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
- data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
- data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
- data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
- data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
- data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
- data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
- data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
- data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
- data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
- data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
- data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
- data/install/config/tools/launcher/launcher.txt +39 -39
- data/install/config/tools/script_runner/script_runner.txt +3 -3
- data/install/config/tools/test_runner/test_runner.txt +8 -8
- data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
- data/install/lib/user_version.rb +3 -3
- data/install/tools/CmdExtractor +15 -15
- data/install/tools/CmdExtractor.bat +59 -59
- data/install/tools/CmdSender +15 -15
- data/install/tools/CmdSender.bat +59 -59
- data/install/tools/CmdTlmServer +15 -15
- data/install/tools/CmdTlmServer.bat +59 -59
- data/install/tools/DataViewer +15 -15
- data/install/tools/DataViewer.bat +59 -59
- data/install/tools/HandbookCreator +15 -15
- data/install/tools/HandbookCreator.bat +61 -61
- data/install/tools/Launcher +15 -15
- data/install/tools/Launcher.bat +59 -59
- data/install/tools/LimitsMonitor +15 -15
- data/install/tools/LimitsMonitor.bat +59 -59
- data/install/tools/OpenGLBuilder +15 -15
- data/install/tools/OpenGLBuilder.bat +59 -59
- data/install/tools/PacketViewer +15 -15
- data/install/tools/PacketViewer.bat +59 -59
- data/install/tools/Replay +15 -15
- data/install/tools/Replay.bat +59 -59
- data/install/tools/ScriptRunner +15 -15
- data/install/tools/ScriptRunner.bat +59 -59
- data/install/tools/TableManager +15 -15
- data/install/tools/TableManager.bat +59 -59
- data/install/tools/TestRunner +15 -15
- data/install/tools/TestRunner.bat +59 -59
- data/install/tools/TlmExtractor +15 -15
- data/install/tools/TlmExtractor.bat +59 -59
- data/install/tools/TlmGrapher +15 -15
- data/install/tools/TlmGrapher.bat +59 -59
- data/install/tools/TlmViewer +15 -15
- data/install/tools/TlmViewer.bat +59 -59
- data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
- data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
- data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
- data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
- data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
- data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
- data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
- data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
- data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
- data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
- data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
- data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
- data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
- data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
- data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
- data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
- data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
- data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
- data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
- data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
- data/lib/cosmos.rb +63 -63
- data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
- data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
- data/lib/cosmos/config/config_parser.rb +324 -324
- data/lib/cosmos/conversions.rb +13 -13
- data/lib/cosmos/conversions/conversion.rb +47 -47
- data/lib/cosmos/conversions/generic_conversion.rb +55 -55
- data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
- data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
- data/lib/cosmos/conversions/processor_conversion.rb +46 -46
- data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
- data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
- data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
- data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
- data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
- data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
- data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
- data/lib/cosmos/core_ext.rb +18 -18
- data/lib/cosmos/core_ext/array.rb +354 -354
- data/lib/cosmos/core_ext/class.rb +51 -51
- data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
- data/lib/cosmos/core_ext/exception.rb +52 -52
- data/lib/cosmos/core_ext/file.rb +75 -75
- data/lib/cosmos/core_ext/hash.rb +28 -28
- data/lib/cosmos/core_ext/io.rb +75 -75
- data/lib/cosmos/core_ext/kernel.rb +38 -38
- data/lib/cosmos/core_ext/math.rb +119 -119
- data/lib/cosmos/core_ext/matrix.rb +146 -146
- data/lib/cosmos/core_ext/objectspace.rb +29 -29
- data/lib/cosmos/core_ext/range.rb +22 -22
- data/lib/cosmos/core_ext/socket.rb +32 -32
- data/lib/cosmos/core_ext/string.rb +310 -310
- data/lib/cosmos/core_ext/stringio.rb +24 -24
- data/lib/cosmos/core_ext/time.rb +446 -446
- data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
- data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
- data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
- data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
- data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
- data/lib/cosmos/gui/choosers/telemetry_chooser.rb +317 -317
- data/lib/cosmos/gui/dialogs/about_dialog.rb +128 -128
- data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
- data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
- data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
- data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
- data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
- data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
- data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +196 -196
- data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -168
- data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
- data/lib/cosmos/gui/dialogs/progress_dialog.rb +270 -262
- data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -161
- data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
- data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
- data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
- data/lib/cosmos/gui/dialogs/splash.rb +113 -113
- data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
- data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
- data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
- data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
- data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +494 -494
- data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
- data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +460 -460
- data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
- data/lib/cosmos/gui/line_graph/lines.rb +290 -290
- data/lib/cosmos/gui/line_graph/overview_graph.rb +459 -459
- data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
- data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
- data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
- data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
- data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
- data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
- data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -712
- data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
- data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
- data/lib/cosmos/gui/opengl/opengl.rb +8 -8
- data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
- data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
- data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
- data/lib/cosmos/gui/qt.rb +813 -786
- data/lib/cosmos/gui/qt_tool.rb +378 -373
- data/lib/cosmos/gui/text/completion.rb +381 -381
- data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
- data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
- data/lib/cosmos/gui/text/ruby_editor.rb +395 -395
- data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
- data/lib/cosmos/gui/utilities/script_module_gui.rb +203 -203
- data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
- data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
- data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
- data/lib/cosmos/interfaces.rb +11 -11
- data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -149
- data/lib/cosmos/interfaces/interface.rb +213 -213
- data/lib/cosmos/interfaces/linc_interface.rb +360 -360
- data/lib/cosmos/interfaces/serial_interface.rb +76 -76
- data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -128
- data/lib/cosmos/interfaces/stream_interface.rb +156 -156
- data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
- data/lib/cosmos/interfaces/tcpip_server_interface.rb +154 -154
- data/lib/cosmos/interfaces/udp_interface.rb +173 -173
- data/lib/cosmos/io/buffered_file.rb +11 -11
- data/lib/cosmos/io/cosmos_snmp.rb +50 -50
- data/lib/cosmos/io/io_multiplexer.rb +89 -89
- data/lib/cosmos/io/json_drb.rb +344 -320
- data/lib/cosmos/io/json_drb_object.rb +137 -137
- data/lib/cosmos/io/json_rpc.rb +365 -365
- data/lib/cosmos/io/posix_serial_driver.rb +145 -145
- data/lib/cosmos/io/raw_logger.rb +174 -174
- data/lib/cosmos/io/raw_logger_pair.rb +71 -71
- data/lib/cosmos/io/serial_driver.rb +85 -85
- data/lib/cosmos/io/stderr.rb +36 -36
- data/lib/cosmos/io/stdout.rb +36 -36
- data/lib/cosmos/io/tcpip_server.rb +583 -532
- data/lib/cosmos/io/udp_sockets.rb +152 -152
- data/lib/cosmos/io/win32_serial_driver.rb +147 -147
- data/lib/cosmos/packet_logs.rb +6 -6
- data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
- data/lib/cosmos/packet_logs/packet_log_reader.rb +441 -439
- data/lib/cosmos/packet_logs/packet_log_writer.rb +321 -309
- data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
- data/lib/cosmos/packets/binary_accessor.rb +921 -921
- data/lib/cosmos/packets/commands.rb +291 -291
- data/lib/cosmos/packets/limits.rb +263 -263
- data/lib/cosmos/packets/limits_response.rb +38 -38
- data/lib/cosmos/packets/packet.rb +714 -699
- data/lib/cosmos/packets/packet_config.rb +1034 -1034
- data/lib/cosmos/packets/packet_item.rb +317 -317
- data/lib/cosmos/packets/packet_item_limits.rb +128 -128
- data/lib/cosmos/packets/structure.rb +421 -386
- data/lib/cosmos/packets/structure_item.rb +233 -233
- data/lib/cosmos/packets/telemetry.rb +317 -317
- data/lib/cosmos/processors.rb +6 -6
- data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
- data/lib/cosmos/processors/processor.rb +71 -71
- data/lib/cosmos/processors/statistics_processor.rb +65 -65
- data/lib/cosmos/processors/watermark_processor.rb +44 -44
- data/lib/cosmos/script.rb +9 -9
- data/lib/cosmos/script/extract.rb +115 -115
- data/lib/cosmos/script/script.rb +1513 -1493
- data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
- data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
- data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
- data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
- data/lib/cosmos/streams/serial_stream.rb +152 -143
- data/lib/cosmos/streams/stream.rb +57 -57
- data/lib/cosmos/streams/stream_protocol.rb +369 -369
- data/lib/cosmos/streams/tcpip_client_stream.rb +77 -77
- data/lib/cosmos/streams/tcpip_socket_stream.rb +139 -139
- data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
- data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
- data/lib/cosmos/system.rb +4 -4
- data/lib/cosmos/system/system.rb +558 -558
- data/lib/cosmos/system/target.rb +178 -178
- data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +254 -253
- data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +716 -716
- data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
- data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
- data/lib/cosmos/tools/cmd_tlm_server/api.rb +936 -940
- data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
- data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -63
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +511 -497
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +241 -241
- data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1033 -1008
- data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
- data/lib/cosmos/tools/cmd_tlm_server/connections.rb +176 -176
- data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +241 -221
- data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
- data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
- data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
- data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
- data/lib/cosmos/tools/data_viewer/data_viewer.rb +628 -600
- data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +167 -167
- data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
- data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +149 -149
- data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +360 -360
- data/lib/cosmos/tools/launcher/launcher.rb +184 -184
- data/lib/cosmos/tools/launcher/launcher_config.rb +175 -167
- data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -41
- data/lib/cosmos/tools/launcher/launcher_tool.rb +104 -104
- data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +796 -768
- data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
- data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
- data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +525 -525
- data/lib/cosmos/tools/replay/replay.rb +495 -488
- data/lib/cosmos/tools/replay/replay_server.rb +91 -91
- data/lib/cosmos/tools/script_runner/script_audit.rb +147 -139
- data/lib/cosmos/tools/script_runner/script_runner.rb +914 -914
- data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
- data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1892 -1859
- data/lib/cosmos/tools/table_manager/table.rb +70 -70
- data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
- data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
- data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
- data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
- data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
- data/lib/cosmos/tools/test_runner/test.rb +480 -480
- data/lib/cosmos/tools/test_runner/test_runner.rb +1157 -1157
- data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +338 -338
- data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1008 -1008
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
- data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
- data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +94 -94
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +180 -180
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
- data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +173 -173
- data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +177 -177
- data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +412 -409
- data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
- data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
- data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -320
- data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
- data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
- data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
- data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
- data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
- data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
- data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
- data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
- data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1278 -1278
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +111 -95
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +72 -66
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
- data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
- data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
- data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -458
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +563 -544
- data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +287 -287
- data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
- data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
- data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +70 -70
- data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +61 -61
- data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
- data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
- data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
- data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
- data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
- data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
- data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
- data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
- data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
- data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
- data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
- data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
- data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
- data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
- data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
- data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
- data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
- data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
- data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
- data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
- data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
- data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
- data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
- data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
- data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
- data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
- data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
- data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
- data/lib/cosmos/top_level.rb +647 -596
- data/lib/cosmos/utilities.rb +11 -10
- data/lib/cosmos/utilities/crc.rb +166 -166
- data/lib/cosmos/utilities/csv.rb +83 -83
- data/lib/cosmos/utilities/logger.rb +137 -137
- data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
- data/lib/cosmos/utilities/message_log.rb +74 -74
- data/lib/cosmos/utilities/quaternion.rb +258 -258
- data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
- data/lib/cosmos/utilities/simulated_target.rb +99 -99
- data/lib/cosmos/utilities/sleeper.rb +44 -0
- data/lib/cosmos/version.rb +12 -12
- data/lib/cosmos/win32/excel.rb +66 -66
- data/lib/cosmos/win32/win32.rb +387 -387
- data/lib/cosmos/win32/win32_main.rb +311 -311
- data/roodi.yml +24 -24
- data/run_gui_tests.bat +32 -32
- data/spec/ccsds/ccsds_packet_spec.rb +67 -67
- data/spec/ccsds/ccsds_parser_spec.rb +148 -148
- data/spec/config/config_parser_spec.rb +322 -322
- data/spec/conversions/conversion_spec.rb +31 -31
- data/spec/conversions/generic_conversion_spec.rb +45 -45
- data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
- data/spec/conversions/polynomial_conversion_spec.rb +40 -40
- data/spec/conversions/processor_conversion_spec.rb +45 -45
- data/spec/conversions/received_count_conversion_spec.rb +43 -43
- data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
- data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
- data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
- data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
- data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
- data/spec/core_ext/array_spec.rb +186 -186
- data/spec/core_ext/class_spec.rb +36 -36
- data/spec/core_ext/cosmos_io_spec.rb +77 -77
- data/spec/core_ext/exception_spec.rb +91 -91
- data/spec/core_ext/file_spec.rb +72 -72
- data/spec/core_ext/hash_spec.rb +24 -24
- data/spec/core_ext/io_spec.rb +46 -46
- data/spec/core_ext/kernel_spec.rb +54 -54
- data/spec/core_ext/math_spec.rb +116 -116
- data/spec/core_ext/matrix_spec.rb +66 -66
- data/spec/core_ext/objectspace_spec.rb +29 -29
- data/spec/core_ext/range_spec.rb +21 -21
- data/spec/core_ext/socket_spec.rb +32 -32
- data/spec/core_ext/string_spec.rb +223 -223
- data/spec/core_ext/stringio_spec.rb +21 -21
- data/spec/core_ext/time_spec.rb +151 -151
- data/spec/gui/line_graph/line_clip_spec.rb +322 -322
- data/spec/install/config/system/system.txt +33 -33
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
- data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
- data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
- data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
- data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
- data/spec/install/config/targets/COSMOS/target.txt +5 -5
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
- data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
- data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
- data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
- data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -294
- data/spec/install/config/targets/INST/target.txt +10 -10
- data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
- data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
- data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
- data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
- data/spec/interfaces/interface_spec.rb +130 -131
- data/spec/interfaces/linc_interface_spec.rb +199 -199
- data/spec/interfaces/serial_interface_spec.rb +56 -56
- data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
- data/spec/interfaces/stream_interface_spec.rb +157 -157
- data/spec/interfaces/tcpip_client_interface_spec.rb +54 -54
- data/spec/interfaces/tcpip_server_interface_spec.rb +151 -151
- data/spec/interfaces/udp_interface_spec.rb +175 -177
- data/spec/io/buffered_file_spec.rb +113 -113
- data/spec/io/io_multiplexer_spec.rb +94 -94
- data/spec/io/json_drb_object_spec.rb +99 -99
- data/spec/io/json_drb_spec.rb +311 -311
- data/spec/io/json_rpc_spec.rb +264 -264
- data/spec/io/raw_logger_pair_spec.rb +76 -76
- data/spec/io/raw_logger_spec.rb +133 -133
- data/spec/io/serial_driver_spec.rb +61 -61
- data/spec/io/stderr_spec.rb +32 -32
- data/spec/io/stdout_spec.rb +32 -32
- data/spec/io/tcpip_server_spec.rb +338 -338
- data/spec/io/udp_sockets_spec.rb +94 -94
- data/spec/io/win32_serial_driver_spec.rb +88 -88
- data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
- data/spec/packet_logs/packet_log_reader_spec.rb +408 -408
- data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
- data/spec/packet_logs/packet_log_writer_spec.rb +223 -223
- data/spec/packets/binary_accessor_spec.rb +2073 -2073
- data/spec/packets/commands_spec.rb +369 -369
- data/spec/packets/limits_response_spec.rb +25 -25
- data/spec/packets/limits_spec.rb +326 -326
- data/spec/packets/packet_config_spec.rb +1620 -1620
- data/spec/packets/packet_item_limits_spec.rb +161 -161
- data/spec/packets/packet_item_spec.rb +386 -386
- data/spec/packets/packet_spec.rb +1057 -949
- data/spec/packets/structure_item_spec.rb +195 -195
- data/spec/packets/structure_spec.rb +419 -419
- data/spec/packets/telemetry_spec.rb +535 -535
- data/spec/processors/new_packet_log_processor_spec.rb +39 -39
- data/spec/processors/processor_spec.rb +55 -55
- data/spec/processors/statistics_processor_spec.rb +60 -60
- data/spec/processors/watermark_processor_spec.rb +51 -51
- data/spec/script/script_spec.rb +654 -654
- data/spec/spec_helper.rb +154 -148
- data/spec/streams/burst_stream_protocol_spec.rb +32 -32
- data/spec/streams/fixed_stream_protocol_spec.rb +110 -110
- data/spec/streams/length_stream_protocol_spec.rb +297 -297
- data/spec/streams/preidentified_stream_protocol_spec.rb +118 -118
- data/spec/streams/serial_stream_spec.rb +105 -105
- data/spec/streams/stream_protocol_spec.rb +332 -332
- data/spec/streams/stream_spec.rb +29 -29
- data/spec/streams/tcpip_client_stream_spec.rb +54 -54
- data/spec/streams/tcpip_socket_stream_spec.rb +146 -146
- data/spec/streams/template_stream_protocol_spec.rb +151 -151
- data/spec/streams/terminated_stream_protocol_spec.rb +123 -123
- data/spec/system/system_spec.rb +645 -645
- data/spec/system/target_spec.rb +248 -248
- data/spec/tools/cmd_tlm_server/api_spec.rb +1087 -1113
- data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
- data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +411 -411
- data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
- data/spec/tools/cmd_tlm_server/commanding_spec.rb +123 -123
- data/spec/tools/cmd_tlm_server/connections_spec.rb +147 -147
- data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
- data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -238
- data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
- data/spec/tools/cmd_tlm_server/router_thread_spec.rb +98 -101
- data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -208
- data/spec/top_level/top_level_spec.rb +334 -321
- data/spec/utilities/crc_spec.rb +45 -45
- data/spec/utilities/csv_spec.rb +97 -97
- data/spec/utilities/logger_spec.rb +102 -102
- data/spec/utilities/message_log_spec.rb +89 -89
- data/spec/utilities/quaternion_spec.rb +107 -107
- data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
- data/tasks/manifest.rake +22 -22
- data/tasks/spec.rake +23 -23
- metadata +18 -2
|
@@ -1,24 +1,24 @@
|
|
|
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 'stringio'
|
|
12
|
-
require 'cosmos/core_ext/cosmos_io'
|
|
13
|
-
|
|
14
|
-
# COSMOS specific additions to the Ruby IO class
|
|
15
|
-
class StringIO
|
|
16
|
-
include CosmosIO
|
|
17
|
-
|
|
18
|
-
if !(StringIO.method_defined?(:path))
|
|
19
|
-
# @return [nil]
|
|
20
|
-
def path
|
|
21
|
-
nil
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'stringio'
|
|
12
|
+
require 'cosmos/core_ext/cosmos_io'
|
|
13
|
+
|
|
14
|
+
# COSMOS specific additions to the Ruby IO class
|
|
15
|
+
class StringIO
|
|
16
|
+
include CosmosIO
|
|
17
|
+
|
|
18
|
+
if !(StringIO.method_defined?(:path))
|
|
19
|
+
# @return [nil]
|
|
20
|
+
def path
|
|
21
|
+
nil
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
data/lib/cosmos/core_ext/time.rb
CHANGED
|
@@ -1,446 +1,446 @@
|
|
|
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 'date'
|
|
12
|
-
|
|
13
|
-
# This file contains the COSMOS specific additions to the Ruby Time class
|
|
14
|
-
#
|
|
15
|
-
# Time is expressed in many different ways and with many different epochs.
|
|
16
|
-
# This file supports the following formats:
|
|
17
|
-
# Julian Date (jd or julian)
|
|
18
|
-
# Modified Julian Date (mjd)
|
|
19
|
-
# yds (year, day, and seconds of day)
|
|
20
|
-
# mdy (year, month, day, hour, minute, second, us of second)
|
|
21
|
-
# ccsds (day, ms, us from Jan 1, 1958 midnight)
|
|
22
|
-
# time (a ruby time object with unix epoch Jan 1, 1970 midnight)
|
|
23
|
-
# sec (seconds since an arbitrary epoch)
|
|
24
|
-
class Time
|
|
25
|
-
# There are 365.25 days per year because of leap years. In the Gregorian
|
|
26
|
-
# calendar some centuries have 36524 days because of the divide by 400 rule
|
|
27
|
-
# while others have 36525 days. The Julian century is DEFINED as having 36525
|
|
28
|
-
# days.
|
|
29
|
-
JULIAN_DAYS_PER_CENTURY = 36525.0
|
|
30
|
-
# -4713/01/01 Noon
|
|
31
|
-
JULIAN_DATE_OF_JULIAN_EPOCH = 0.0
|
|
32
|
-
# 1858/11/17 Midnight
|
|
33
|
-
JULIAN_DATE_OF_MJD_EPOCH = 2400000.5
|
|
34
|
-
# 1980/01/06 Midnight
|
|
35
|
-
JULIAN_DATE_OF_GPS_EPOCH = 2444244.5
|
|
36
|
-
# 2000/01/01 Noon
|
|
37
|
-
JULIAN_DATE_OF_J2000_EPOCH = 2451545.0
|
|
38
|
-
# 1958/01/01 Midnight
|
|
39
|
-
JULIAN_DATE_OF_CCSDS_EPOCH = 2436204.5
|
|
40
|
-
|
|
41
|
-
DATE_TIME_MJD_EPOCH = DateTime.new(1858, 11, 17)
|
|
42
|
-
|
|
43
|
-
USEC_PER_MSEC = 1000
|
|
44
|
-
MSEC_PER_SECOND = 1000
|
|
45
|
-
SEC_PER_MINUTE = 60
|
|
46
|
-
MINUTES_PER_HOUR = 60
|
|
47
|
-
HOURS_PER_DAY = 24
|
|
48
|
-
USEC_PER_SECOND = USEC_PER_MSEC * MSEC_PER_SECOND
|
|
49
|
-
MSEC_PER_MINUTE = 60 * MSEC_PER_SECOND
|
|
50
|
-
MSEC_PER_HOUR = 60 * MSEC_PER_MINUTE
|
|
51
|
-
MSEC_PER_DAY = HOURS_PER_DAY * MSEC_PER_HOUR
|
|
52
|
-
SEC_PER_HOUR = SEC_PER_MINUTE * MINUTES_PER_HOUR
|
|
53
|
-
SEC_PER_DAY = HOURS_PER_DAY * SEC_PER_HOUR
|
|
54
|
-
USEC_PER_DAY = USEC_PER_SECOND * SEC_PER_DAY
|
|
55
|
-
MINUTES_PER_DAY = MINUTES_PER_HOUR * HOURS_PER_DAY
|
|
56
|
-
|
|
57
|
-
USEC_PER_MSEC_FLOAT = USEC_PER_MSEC.to_f
|
|
58
|
-
MSEC_PER_SECOND_FLOAT = MSEC_PER_SECOND.to_f
|
|
59
|
-
SEC_PER_MINUTE_FLOAT = SEC_PER_MINUTE.to_f
|
|
60
|
-
MINUTES_PER_HOUR_FLOAT = MINUTES_PER_HOUR.to_f
|
|
61
|
-
HOURS_PER_DAY_FLOAT = HOURS_PER_DAY.to_f
|
|
62
|
-
USEC_PER_SECOND_FLOAT = USEC_PER_SECOND.to_f
|
|
63
|
-
MSEC_PER_MINUTE_FLOAT = MSEC_PER_MINUTE.to_f
|
|
64
|
-
MSEC_PER_HOUR_FLOAT = MSEC_PER_HOUR.to_f
|
|
65
|
-
MSEC_PER_DAY_FLOAT = MSEC_PER_DAY.to_f
|
|
66
|
-
SEC_PER_HOUR_FLOAT = SEC_PER_HOUR.to_f
|
|
67
|
-
SEC_PER_DAY_FLOAT = SEC_PER_DAY.to_f
|
|
68
|
-
USEC_PER_DAY_FLOAT = USEC_PER_DAY.to_f
|
|
69
|
-
MINUTES_PER_DAY_FLOAT = MINUTES_PER_DAY.to_f
|
|
70
|
-
|
|
71
|
-
# @param seconds [Numeric] Total number of seconds
|
|
72
|
-
# @return [String] Seconds formatted as a human readable string with days,
|
|
73
|
-
# hours, minutes, and seconds.
|
|
74
|
-
def self.format_seconds(seconds)
|
|
75
|
-
result = ""
|
|
76
|
-
mm, ss = seconds.divmod(60)
|
|
77
|
-
hh, mm = mm.divmod(60)
|
|
78
|
-
dd, hh = hh.divmod(24)
|
|
79
|
-
if dd != 0
|
|
80
|
-
if dd == 1
|
|
81
|
-
result += "%d day, " % dd
|
|
82
|
-
else
|
|
83
|
-
result += "%d days, " % dd
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
if hh != 0
|
|
87
|
-
if hh == 1
|
|
88
|
-
result += "%d hour, " % hh
|
|
89
|
-
else
|
|
90
|
-
result += "%d hours, " % hh
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
if mm != 0
|
|
94
|
-
if mm == 1
|
|
95
|
-
result += "%d minute, " % mm
|
|
96
|
-
else
|
|
97
|
-
result += "%d minutes, " % mm
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
if ss > 0
|
|
101
|
-
result += "%.2f seconds" % ss
|
|
102
|
-
else
|
|
103
|
-
result = result[0..-3]
|
|
104
|
-
end
|
|
105
|
-
result
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
if not defined?(LeapYearMonthDays)
|
|
109
|
-
# The number of days in each month during a leap year
|
|
110
|
-
LeapYearMonthDays = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
if not defined?(CommonYearMonthDays)
|
|
114
|
-
# The number of days in each month during a year (not a leap year)
|
|
115
|
-
CommonYearMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
# Convert the given year, month, day, hour, minute, second, and us
|
|
119
|
-
# into a Julian date. Julian dates are the number of days (plus fractional
|
|
120
|
-
# days) since Jan 1, 4713 BC at noon.
|
|
121
|
-
#
|
|
122
|
-
# @param year [Integer]
|
|
123
|
-
# @param month [Integer]
|
|
124
|
-
# @param day [Integer]
|
|
125
|
-
# @param hour [Integer]
|
|
126
|
-
# @param minute [Integer]
|
|
127
|
-
# @param second [Integer]
|
|
128
|
-
# @param us [Integer]
|
|
129
|
-
# @return [Float] The given time as a Julian date
|
|
130
|
-
def self.mdy2julian(year, month=1, day=1, hour=0, minute=0, second=0, us=0)
|
|
131
|
-
# Note DateTime does not support fractions of seconds
|
|
132
|
-
date_time = DateTime.new(year, month, day, hour, minute, second)
|
|
133
|
-
(date_time - DATE_TIME_MJD_EPOCH).to_f + JULIAN_DATE_OF_MJD_EPOCH + us / USEC_PER_DAY_FLOAT
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
# @return [Float] The Time converted to a julian date
|
|
137
|
-
def to_julian
|
|
138
|
-
return Time.mdy2julian(self.year, self.month, self.day, self.hour, self.min, self.sec, self.usec)
|
|
139
|
-
end
|
|
140
|
-
alias to_jd to_julian
|
|
141
|
-
|
|
142
|
-
# Convert the given year, month, day, hour, minute, second, and us
|
|
143
|
-
# into a Modified Julian date. Modified Julian dates have an Epoch of Nov 17,
|
|
144
|
-
# 1858 at midnight.
|
|
145
|
-
#
|
|
146
|
-
# @param year [Integer]
|
|
147
|
-
# @param month [Integer]
|
|
148
|
-
# @param day [Integer]
|
|
149
|
-
# @param hour [Integer]
|
|
150
|
-
# @param minute [Integer]
|
|
151
|
-
# @param second [Integer]
|
|
152
|
-
# @param us [Integer]
|
|
153
|
-
# @return [Time] The given time as a Julian date
|
|
154
|
-
def self.mdy2mjd(year, month=1, day=1, hour=0, minute=0, second=0, us=0)
|
|
155
|
-
return Time.mdy2julian(year, month, day, hour, minute, second, us) - JULIAN_DATE_OF_MJD_EPOCH
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
# Convert a time object to the modified julian date
|
|
159
|
-
def to_mjd
|
|
160
|
-
return Time.mdy2mjd(self.year, self.month, self.day, self.hour, self.min, self.sec, self.usec)
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
# Create a new time object given year, day of year (1-366), and seconds of day
|
|
164
|
-
#
|
|
165
|
-
# @param year [Integer]
|
|
166
|
-
# @param day_of_year [Integer] (1-366)
|
|
167
|
-
# @param sec_of_day [Integer]
|
|
168
|
-
def self.yds(year, day_of_year, sec_of_day)
|
|
169
|
-
return Time.utc(*yds2mdy(year, day_of_year, sec_of_day))
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
# @param year [Integer]
|
|
173
|
-
# @return [Boolean] Whether the year is a leap year
|
|
174
|
-
def self.leap_year? (year)
|
|
175
|
-
return_value = false
|
|
176
|
-
|
|
177
|
-
if (year % 4) == 0
|
|
178
|
-
return_value = true
|
|
179
|
-
|
|
180
|
-
if (year % 100) == 0
|
|
181
|
-
return_value = false
|
|
182
|
-
|
|
183
|
-
if (year % 400) == 0
|
|
184
|
-
return_value = true
|
|
185
|
-
end
|
|
186
|
-
end
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
return return_value
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
# @return [Boolean] Whether the year is a leap year
|
|
193
|
-
def leap_year?
|
|
194
|
-
Time.leap_year?(self.year)
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
# @param hour [Integer]
|
|
198
|
-
# @param minute [Integer]
|
|
199
|
-
# @param second [Integer]
|
|
200
|
-
# @param us [Integer]
|
|
201
|
-
# @return [Float] The number of seconds represented by the hours, minutes,
|
|
202
|
-
# seconds and microseconds
|
|
203
|
-
def self.total_seconds(hour, minute, second, us)
|
|
204
|
-
(hour * SEC_PER_HOUR_FLOAT) + (minute * SEC_PER_MINUTE_FLOAT) + second + (us / USEC_PER_SECOND_FLOAT)
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
# @return [Float] The number of seconds in the day (0-86399.99)
|
|
208
|
-
def seconds_of_day
|
|
209
|
-
Time.total_seconds(self.hour, self.min, self.sec, self.usec)
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
# @return [String] Date formatted as YYYY/MM/DD HH:MM:SS.US
|
|
213
|
-
def formatted(include_year = true, fractional_digits = 3)
|
|
214
|
-
if include_year
|
|
215
|
-
self.strftime("%Y/%m/%d %H:%M:%S.%#{fractional_digits}N")
|
|
216
|
-
else
|
|
217
|
-
self.strftime("%H:%M:%S.%#{fractional_digits}N")
|
|
218
|
-
end
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
# @param time [Time]
|
|
222
|
-
# @return [Float] Number of julian days since Jan 1, 2000 at noon
|
|
223
|
-
def self.days_from_j2000(time)
|
|
224
|
-
time.to_julian - JULIAN_DATE_OF_J2000_EPOCH
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
# @param time [Time]
|
|
228
|
-
# @return [Float] Number of julian centuries since Jan 1, 2000 at noon
|
|
229
|
-
def self.julian_centuries_since_j2000(time)
|
|
230
|
-
self.days_from_j2000(time) / JULIAN_DAYS_PER_CENTURY
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
# Convert a Julian Date to mdy format
|
|
234
|
-
# Note that an array is returned rather than a Time object because Time objects cannot represent
|
|
235
|
-
# all possible Julian dates
|
|
236
|
-
#
|
|
237
|
-
# @param jdate [Float] Julian date
|
|
238
|
-
# @return [Array<Year, Month, Day, Hour, Minute, Second, Microsecond>] Julian date converted to an array of values
|
|
239
|
-
def self.julian2mdy(jdate)
|
|
240
|
-
z = (jdate + 0.5).to_i
|
|
241
|
-
w = ((z - 1867216.25) / 36524.25).to_i
|
|
242
|
-
x = w / 4
|
|
243
|
-
a = z + 1 + w - x
|
|
244
|
-
b = a + 1524
|
|
245
|
-
c = ((b - 122.1) / 365.25).to_i
|
|
246
|
-
d = (365.25 * c).to_i
|
|
247
|
-
e = ((b - d) / 30.6001).to_i
|
|
248
|
-
f = (30.6001 * e).to_i
|
|
249
|
-
|
|
250
|
-
day = b - d - f
|
|
251
|
-
if e > 13
|
|
252
|
-
month = e - 13
|
|
253
|
-
else
|
|
254
|
-
month = e - 1
|
|
255
|
-
end
|
|
256
|
-
if month > 2
|
|
257
|
-
year = c - 4716
|
|
258
|
-
else
|
|
259
|
-
year = c - 4715
|
|
260
|
-
end
|
|
261
|
-
|
|
262
|
-
fraction = jdate - jdate.to_i
|
|
263
|
-
|
|
264
|
-
if fraction >= 0.5
|
|
265
|
-
hour = (fraction - 0.5) * 24.0
|
|
266
|
-
else
|
|
267
|
-
hour = (fraction * 24.0) + 12.0
|
|
268
|
-
end
|
|
269
|
-
|
|
270
|
-
fraction = hour - hour.to_i
|
|
271
|
-
hour = hour.to_i
|
|
272
|
-
|
|
273
|
-
minute = fraction * 60.0
|
|
274
|
-
|
|
275
|
-
fraction = minute - minute.to_i
|
|
276
|
-
minute = minute.to_i
|
|
277
|
-
|
|
278
|
-
second = fraction * 60.0
|
|
279
|
-
|
|
280
|
-
fraction = second - second.to_i
|
|
281
|
-
second = second.to_i
|
|
282
|
-
|
|
283
|
-
us = fraction * 1000000.0
|
|
284
|
-
us = us.to_i
|
|
285
|
-
|
|
286
|
-
return [year, month, day, hour, minute, second, us]
|
|
287
|
-
end
|
|
288
|
-
|
|
289
|
-
# Convert a CCSDS Date to mdy format
|
|
290
|
-
# Note that an array is returned rather than a Time object because Time objects cannot represent
|
|
291
|
-
# all possible CCSDS dates
|
|
292
|
-
#
|
|
293
|
-
# @param day [Float] CCSDS day
|
|
294
|
-
# @param ms [Integer] CCSDS milliseconds
|
|
295
|
-
# @param us [Integer] CCSDS microseconds
|
|
296
|
-
# @return [Array<Year, Month, Day, Hour, Minute, Second, Microsecond>] CCSDS date converted to an array of values
|
|
297
|
-
def self.ccsds2mdy(day, ms, us)
|
|
298
|
-
jdate = day + JULIAN_DATE_OF_CCSDS_EPOCH
|
|
299
|
-
year, month, day, hour, minute, second, _ = julian2mdy(jdate)
|
|
300
|
-
hour = (ms / MSEC_PER_HOUR).to_i
|
|
301
|
-
temp = ms - (hour * MSEC_PER_HOUR)
|
|
302
|
-
minute = (temp / MSEC_PER_MINUTE).to_i
|
|
303
|
-
temp -= minute * MSEC_PER_MINUTE
|
|
304
|
-
second = temp / MSEC_PER_SECOND
|
|
305
|
-
temp -= second * MSEC_PER_SECOND
|
|
306
|
-
us = us + (temp * USEC_PER_MSEC)
|
|
307
|
-
return [year, month, day, hour, minute, second, us]
|
|
308
|
-
end
|
|
309
|
-
|
|
310
|
-
# Convert from mdy format to CCSDS Date
|
|
311
|
-
# Note that an array is used rather than a Time object because Time objects cannot represent
|
|
312
|
-
# all possible CCSDS dates
|
|
313
|
-
#
|
|
314
|
-
# @param year [Integer]
|
|
315
|
-
# @param month [Integer]
|
|
316
|
-
# @param day [Integer]
|
|
317
|
-
# @param hour [Integer]
|
|
318
|
-
# @param minute [Integer]
|
|
319
|
-
# @param second [Integer]
|
|
320
|
-
# @param us [Integer]
|
|
321
|
-
# @return [Array<day, ms, us>] MDY converted to CCSDS
|
|
322
|
-
def self.mdy2ccsds(year, month, day, hour, minute, second, us)
|
|
323
|
-
ms = (hour * MSEC_PER_HOUR) + (minute * MSEC_PER_MINUTE) + (second * MSEC_PER_SECOND) + (us / USEC_PER_MSEC)
|
|
324
|
-
us = us % USEC_PER_MSEC
|
|
325
|
-
jd = Time.mdy2julian(year, month, day, 0, 0, 0, 0)
|
|
326
|
-
day = (jd - JULIAN_DATE_OF_CCSDS_EPOCH).round
|
|
327
|
-
return [day, ms, us]
|
|
328
|
-
end
|
|
329
|
-
|
|
330
|
-
# @param day [Float] CCSDS day
|
|
331
|
-
# @param ms [Integer] CCSDS milliseconds
|
|
332
|
-
# @param us [Integer] CCSDS microseconds
|
|
333
|
-
# @return [Float] The CCSDS date converted to a julian date
|
|
334
|
-
def self.ccsds2julian(day, ms, us)
|
|
335
|
-
(day + JULIAN_DATE_OF_CCSDS_EPOCH) + ((ms.to_f + (us / 1000.0)) / MSEC_PER_DAY_FLOAT)
|
|
336
|
-
end
|
|
337
|
-
|
|
338
|
-
# @param [Float] julian date
|
|
339
|
-
# @return [Array<day, ms, us>] Julian converted to CCSDS
|
|
340
|
-
def self.julian2ccsds(jdate)
|
|
341
|
-
day = jdate - JULIAN_DATE_OF_CCSDS_EPOCH
|
|
342
|
-
fraction = day % 1.0
|
|
343
|
-
day = day.to_i
|
|
344
|
-
ms = fraction * MSEC_PER_DAY_FLOAT
|
|
345
|
-
fraction = ms % 1.0
|
|
346
|
-
ms = ms.to_i
|
|
347
|
-
us = fraction * USEC_PER_MSEC
|
|
348
|
-
us = us.to_i
|
|
349
|
-
return [day, ms, us]
|
|
350
|
-
end
|
|
351
|
-
|
|
352
|
-
# @param day [Float] CCSDS day
|
|
353
|
-
# @param ms [Integer] CCSDS milliseconds
|
|
354
|
-
# @param us [Integer] CCSDS microseconds
|
|
355
|
-
# @param sec_epoch_jd [Float] Epoch to convert seconds from as a julian date
|
|
356
|
-
def self.ccsds2sec (day, ms, us, sec_epoch_jd = JULIAN_DATE_OF_CCSDS_EPOCH)
|
|
357
|
-
(self.ccsds2julian(day, ms, us) - sec_epoch_jd) * SEC_PER_DAY_FLOAT
|
|
358
|
-
end
|
|
359
|
-
|
|
360
|
-
# @param seconds [Float]
|
|
361
|
-
# @param sec_epoch_jd [Float] Epoch to of seconds value
|
|
362
|
-
# @return [Array<day, ms, us>] CCSDS date
|
|
363
|
-
def self.sec2ccsds (sec, sec_epoch_jd = JULIAN_DATE_OF_CCSDS_EPOCH)
|
|
364
|
-
self.julian2ccsds((sec / SEC_PER_DAY_FLOAT) + sec_epoch_jd)
|
|
365
|
-
end
|
|
366
|
-
|
|
367
|
-
# @param year [Integer] Year
|
|
368
|
-
# @param day [Integer] Day of the year
|
|
369
|
-
# @param sec [Float] Seconds in the day
|
|
370
|
-
# @return [Array] [year, month, day, hour, minute, second, usec]
|
|
371
|
-
def self.yds2mdy(year, day, sec)
|
|
372
|
-
# Convert day of year (1-366) to day of month (1-31)
|
|
373
|
-
if self.leap_year?(year)
|
|
374
|
-
array = Time::LeapYearMonthDays
|
|
375
|
-
else
|
|
376
|
-
array = Time::CommonYearMonthDays
|
|
377
|
-
end
|
|
378
|
-
|
|
379
|
-
month = 1
|
|
380
|
-
array.each do |days|
|
|
381
|
-
if (day - days) >= 1
|
|
382
|
-
day -= days
|
|
383
|
-
month += 1
|
|
384
|
-
else
|
|
385
|
-
break
|
|
386
|
-
end
|
|
387
|
-
end
|
|
388
|
-
|
|
389
|
-
# Calculate hour of day (0-23)
|
|
390
|
-
hour = (sec / SEC_PER_HOUR).to_i
|
|
391
|
-
sec -= (hour * SEC_PER_HOUR).to_f
|
|
392
|
-
|
|
393
|
-
# Calculate minute of hour (0-59)
|
|
394
|
-
min = (sec / SEC_PER_MINUTE).to_i
|
|
395
|
-
sec -= (min * SEC_PER_MINUTE).to_f
|
|
396
|
-
|
|
397
|
-
# Calculate second of minute (0-60)
|
|
398
|
-
seconds = sec.to_i
|
|
399
|
-
sec -= seconds.to_f
|
|
400
|
-
|
|
401
|
-
# Calculate useconds of second (0-999999)
|
|
402
|
-
usec = (sec * 1000000.0).to_i
|
|
403
|
-
|
|
404
|
-
return [year, month, day, hour, min, seconds, usec]
|
|
405
|
-
end
|
|
406
|
-
|
|
407
|
-
# @param year [Integer] Year
|
|
408
|
-
# @param day [Integer] Day of the year
|
|
409
|
-
# @param sec [Integer] Seconds in the day
|
|
410
|
-
# @return [Float] Year, day, seconds converted to the Julian date
|
|
411
|
-
def self.yds2julian(year, day, sec)
|
|
412
|
-
year, month, day, hour, min, seconds, usec = self.yds2mdy(year, day, sec)
|
|
413
|
-
Time.mdy2julian(year, month, day, hour, min, seconds, usec)
|
|
414
|
-
end
|
|
415
|
-
|
|
416
|
-
# Ruby time objects cannot handle times before the Unix Epoch. Calculate a delta (in seconds) to be used
|
|
417
|
-
# when real epochs are before the Unix Epoch. Each received timestamp will be adjusted by this delta
|
|
418
|
-
# so a ruby time object can be used to parse the time.
|
|
419
|
-
# @param epoch [String] epoch is a string in the following format: "yyyy/mm/dd hh:mm:ss"
|
|
420
|
-
# @return [Float] unix_epohc_delta
|
|
421
|
-
def self.init_epoch_delta (epoch)
|
|
422
|
-
# UnixEpoch - Jan 1, 1970 00:00:00
|
|
423
|
-
unix_epoch = DateTime.new(1970, 1, 1, 0, 0, 0)
|
|
424
|
-
|
|
425
|
-
split_epoch = epoch.split
|
|
426
|
-
epoch_date = split_epoch[0].split("/")
|
|
427
|
-
epoch_time = split_epoch[1].split(":")
|
|
428
|
-
|
|
429
|
-
if epoch_date[0].to_i < 1970 then
|
|
430
|
-
# Calculate delta between epoch and unix epoch
|
|
431
|
-
real_epoch = DateTime.new(epoch_date[0].to_i, epoch_date[1].to_i, epoch_date[2].to_i, epoch_time[0].to_i, epoch_time[1].to_i, epoch_time[2].to_i)
|
|
432
|
-
day_delta = (unix_epoch - real_epoch).to_i
|
|
433
|
-
unix_epoch_delta = day_delta * 86400
|
|
434
|
-
if real_epoch.hour != 0 or real_epoch.min != 0 or real_epoch.sec != 0
|
|
435
|
-
hour_delta = 23 - real_epoch.hour
|
|
436
|
-
min_delta = 59 - real_epoch.min
|
|
437
|
-
sec_delta = 60 - real_epoch.sec
|
|
438
|
-
unix_epoch_delta += ((hour_delta * 3600) + (min_delta * 60) + sec_delta)
|
|
439
|
-
end
|
|
440
|
-
else
|
|
441
|
-
unix_epoch_delta = 0
|
|
442
|
-
end
|
|
443
|
-
|
|
444
|
-
unix_epoch_delta
|
|
445
|
-
end
|
|
446
|
-
end
|
|
1
|
+
# encoding: ascii-8bit
|
|
2
|
+
|
|
3
|
+
# Copyright 2014 Ball Aerospace & Technologies Corp.
|
|
4
|
+
# All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# This program is free software; you can modify and/or redistribute it
|
|
7
|
+
# under the terms of the GNU General Public License
|
|
8
|
+
# as published by the Free Software Foundation; version 3 with
|
|
9
|
+
# attribution addendums as found in the LICENSE.txt
|
|
10
|
+
|
|
11
|
+
require 'date'
|
|
12
|
+
|
|
13
|
+
# This file contains the COSMOS specific additions to the Ruby Time class
|
|
14
|
+
#
|
|
15
|
+
# Time is expressed in many different ways and with many different epochs.
|
|
16
|
+
# This file supports the following formats:
|
|
17
|
+
# Julian Date (jd or julian)
|
|
18
|
+
# Modified Julian Date (mjd)
|
|
19
|
+
# yds (year, day, and seconds of day)
|
|
20
|
+
# mdy (year, month, day, hour, minute, second, us of second)
|
|
21
|
+
# ccsds (day, ms, us from Jan 1, 1958 midnight)
|
|
22
|
+
# time (a ruby time object with unix epoch Jan 1, 1970 midnight)
|
|
23
|
+
# sec (seconds since an arbitrary epoch)
|
|
24
|
+
class Time
|
|
25
|
+
# There are 365.25 days per year because of leap years. In the Gregorian
|
|
26
|
+
# calendar some centuries have 36524 days because of the divide by 400 rule
|
|
27
|
+
# while others have 36525 days. The Julian century is DEFINED as having 36525
|
|
28
|
+
# days.
|
|
29
|
+
JULIAN_DAYS_PER_CENTURY = 36525.0
|
|
30
|
+
# -4713/01/01 Noon
|
|
31
|
+
JULIAN_DATE_OF_JULIAN_EPOCH = 0.0
|
|
32
|
+
# 1858/11/17 Midnight
|
|
33
|
+
JULIAN_DATE_OF_MJD_EPOCH = 2400000.5
|
|
34
|
+
# 1980/01/06 Midnight
|
|
35
|
+
JULIAN_DATE_OF_GPS_EPOCH = 2444244.5
|
|
36
|
+
# 2000/01/01 Noon
|
|
37
|
+
JULIAN_DATE_OF_J2000_EPOCH = 2451545.0
|
|
38
|
+
# 1958/01/01 Midnight
|
|
39
|
+
JULIAN_DATE_OF_CCSDS_EPOCH = 2436204.5
|
|
40
|
+
|
|
41
|
+
DATE_TIME_MJD_EPOCH = DateTime.new(1858, 11, 17)
|
|
42
|
+
|
|
43
|
+
USEC_PER_MSEC = 1000
|
|
44
|
+
MSEC_PER_SECOND = 1000
|
|
45
|
+
SEC_PER_MINUTE = 60
|
|
46
|
+
MINUTES_PER_HOUR = 60
|
|
47
|
+
HOURS_PER_DAY = 24
|
|
48
|
+
USEC_PER_SECOND = USEC_PER_MSEC * MSEC_PER_SECOND
|
|
49
|
+
MSEC_PER_MINUTE = 60 * MSEC_PER_SECOND
|
|
50
|
+
MSEC_PER_HOUR = 60 * MSEC_PER_MINUTE
|
|
51
|
+
MSEC_PER_DAY = HOURS_PER_DAY * MSEC_PER_HOUR
|
|
52
|
+
SEC_PER_HOUR = SEC_PER_MINUTE * MINUTES_PER_HOUR
|
|
53
|
+
SEC_PER_DAY = HOURS_PER_DAY * SEC_PER_HOUR
|
|
54
|
+
USEC_PER_DAY = USEC_PER_SECOND * SEC_PER_DAY
|
|
55
|
+
MINUTES_PER_DAY = MINUTES_PER_HOUR * HOURS_PER_DAY
|
|
56
|
+
|
|
57
|
+
USEC_PER_MSEC_FLOAT = USEC_PER_MSEC.to_f
|
|
58
|
+
MSEC_PER_SECOND_FLOAT = MSEC_PER_SECOND.to_f
|
|
59
|
+
SEC_PER_MINUTE_FLOAT = SEC_PER_MINUTE.to_f
|
|
60
|
+
MINUTES_PER_HOUR_FLOAT = MINUTES_PER_HOUR.to_f
|
|
61
|
+
HOURS_PER_DAY_FLOAT = HOURS_PER_DAY.to_f
|
|
62
|
+
USEC_PER_SECOND_FLOAT = USEC_PER_SECOND.to_f
|
|
63
|
+
MSEC_PER_MINUTE_FLOAT = MSEC_PER_MINUTE.to_f
|
|
64
|
+
MSEC_PER_HOUR_FLOAT = MSEC_PER_HOUR.to_f
|
|
65
|
+
MSEC_PER_DAY_FLOAT = MSEC_PER_DAY.to_f
|
|
66
|
+
SEC_PER_HOUR_FLOAT = SEC_PER_HOUR.to_f
|
|
67
|
+
SEC_PER_DAY_FLOAT = SEC_PER_DAY.to_f
|
|
68
|
+
USEC_PER_DAY_FLOAT = USEC_PER_DAY.to_f
|
|
69
|
+
MINUTES_PER_DAY_FLOAT = MINUTES_PER_DAY.to_f
|
|
70
|
+
|
|
71
|
+
# @param seconds [Numeric] Total number of seconds
|
|
72
|
+
# @return [String] Seconds formatted as a human readable string with days,
|
|
73
|
+
# hours, minutes, and seconds.
|
|
74
|
+
def self.format_seconds(seconds)
|
|
75
|
+
result = ""
|
|
76
|
+
mm, ss = seconds.divmod(60)
|
|
77
|
+
hh, mm = mm.divmod(60)
|
|
78
|
+
dd, hh = hh.divmod(24)
|
|
79
|
+
if dd != 0
|
|
80
|
+
if dd == 1
|
|
81
|
+
result += "%d day, " % dd
|
|
82
|
+
else
|
|
83
|
+
result += "%d days, " % dd
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
if hh != 0
|
|
87
|
+
if hh == 1
|
|
88
|
+
result += "%d hour, " % hh
|
|
89
|
+
else
|
|
90
|
+
result += "%d hours, " % hh
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
if mm != 0
|
|
94
|
+
if mm == 1
|
|
95
|
+
result += "%d minute, " % mm
|
|
96
|
+
else
|
|
97
|
+
result += "%d minutes, " % mm
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
if ss > 0
|
|
101
|
+
result += "%.2f seconds" % ss
|
|
102
|
+
else
|
|
103
|
+
result = result[0..-3]
|
|
104
|
+
end
|
|
105
|
+
result
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
if not defined?(LeapYearMonthDays)
|
|
109
|
+
# The number of days in each month during a leap year
|
|
110
|
+
LeapYearMonthDays = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
if not defined?(CommonYearMonthDays)
|
|
114
|
+
# The number of days in each month during a year (not a leap year)
|
|
115
|
+
CommonYearMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Convert the given year, month, day, hour, minute, second, and us
|
|
119
|
+
# into a Julian date. Julian dates are the number of days (plus fractional
|
|
120
|
+
# days) since Jan 1, 4713 BC at noon.
|
|
121
|
+
#
|
|
122
|
+
# @param year [Integer]
|
|
123
|
+
# @param month [Integer]
|
|
124
|
+
# @param day [Integer]
|
|
125
|
+
# @param hour [Integer]
|
|
126
|
+
# @param minute [Integer]
|
|
127
|
+
# @param second [Integer]
|
|
128
|
+
# @param us [Integer]
|
|
129
|
+
# @return [Float] The given time as a Julian date
|
|
130
|
+
def self.mdy2julian(year, month=1, day=1, hour=0, minute=0, second=0, us=0)
|
|
131
|
+
# Note DateTime does not support fractions of seconds
|
|
132
|
+
date_time = DateTime.new(year, month, day, hour, minute, second)
|
|
133
|
+
(date_time - DATE_TIME_MJD_EPOCH).to_f + JULIAN_DATE_OF_MJD_EPOCH + us / USEC_PER_DAY_FLOAT
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# @return [Float] The Time converted to a julian date
|
|
137
|
+
def to_julian
|
|
138
|
+
return Time.mdy2julian(self.year, self.month, self.day, self.hour, self.min, self.sec, self.usec)
|
|
139
|
+
end
|
|
140
|
+
alias to_jd to_julian
|
|
141
|
+
|
|
142
|
+
# Convert the given year, month, day, hour, minute, second, and us
|
|
143
|
+
# into a Modified Julian date. Modified Julian dates have an Epoch of Nov 17,
|
|
144
|
+
# 1858 at midnight.
|
|
145
|
+
#
|
|
146
|
+
# @param year [Integer]
|
|
147
|
+
# @param month [Integer]
|
|
148
|
+
# @param day [Integer]
|
|
149
|
+
# @param hour [Integer]
|
|
150
|
+
# @param minute [Integer]
|
|
151
|
+
# @param second [Integer]
|
|
152
|
+
# @param us [Integer]
|
|
153
|
+
# @return [Time] The given time as a Julian date
|
|
154
|
+
def self.mdy2mjd(year, month=1, day=1, hour=0, minute=0, second=0, us=0)
|
|
155
|
+
return Time.mdy2julian(year, month, day, hour, minute, second, us) - JULIAN_DATE_OF_MJD_EPOCH
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
# Convert a time object to the modified julian date
|
|
159
|
+
def to_mjd
|
|
160
|
+
return Time.mdy2mjd(self.year, self.month, self.day, self.hour, self.min, self.sec, self.usec)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
# Create a new time object given year, day of year (1-366), and seconds of day
|
|
164
|
+
#
|
|
165
|
+
# @param year [Integer]
|
|
166
|
+
# @param day_of_year [Integer] (1-366)
|
|
167
|
+
# @param sec_of_day [Integer]
|
|
168
|
+
def self.yds(year, day_of_year, sec_of_day)
|
|
169
|
+
return Time.utc(*yds2mdy(year, day_of_year, sec_of_day))
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# @param year [Integer]
|
|
173
|
+
# @return [Boolean] Whether the year is a leap year
|
|
174
|
+
def self.leap_year? (year)
|
|
175
|
+
return_value = false
|
|
176
|
+
|
|
177
|
+
if (year % 4) == 0
|
|
178
|
+
return_value = true
|
|
179
|
+
|
|
180
|
+
if (year % 100) == 0
|
|
181
|
+
return_value = false
|
|
182
|
+
|
|
183
|
+
if (year % 400) == 0
|
|
184
|
+
return_value = true
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
return return_value
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# @return [Boolean] Whether the year is a leap year
|
|
193
|
+
def leap_year?
|
|
194
|
+
Time.leap_year?(self.year)
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
# @param hour [Integer]
|
|
198
|
+
# @param minute [Integer]
|
|
199
|
+
# @param second [Integer]
|
|
200
|
+
# @param us [Integer]
|
|
201
|
+
# @return [Float] The number of seconds represented by the hours, minutes,
|
|
202
|
+
# seconds and microseconds
|
|
203
|
+
def self.total_seconds(hour, minute, second, us)
|
|
204
|
+
(hour * SEC_PER_HOUR_FLOAT) + (minute * SEC_PER_MINUTE_FLOAT) + second + (us / USEC_PER_SECOND_FLOAT)
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# @return [Float] The number of seconds in the day (0-86399.99)
|
|
208
|
+
def seconds_of_day
|
|
209
|
+
Time.total_seconds(self.hour, self.min, self.sec, self.usec)
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
# @return [String] Date formatted as YYYY/MM/DD HH:MM:SS.US
|
|
213
|
+
def formatted(include_year = true, fractional_digits = 3)
|
|
214
|
+
if include_year
|
|
215
|
+
self.strftime("%Y/%m/%d %H:%M:%S.%#{fractional_digits}N")
|
|
216
|
+
else
|
|
217
|
+
self.strftime("%H:%M:%S.%#{fractional_digits}N")
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# @param time [Time]
|
|
222
|
+
# @return [Float] Number of julian days since Jan 1, 2000 at noon
|
|
223
|
+
def self.days_from_j2000(time)
|
|
224
|
+
time.to_julian - JULIAN_DATE_OF_J2000_EPOCH
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
# @param time [Time]
|
|
228
|
+
# @return [Float] Number of julian centuries since Jan 1, 2000 at noon
|
|
229
|
+
def self.julian_centuries_since_j2000(time)
|
|
230
|
+
self.days_from_j2000(time) / JULIAN_DAYS_PER_CENTURY
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
# Convert a Julian Date to mdy format
|
|
234
|
+
# Note that an array is returned rather than a Time object because Time objects cannot represent
|
|
235
|
+
# all possible Julian dates
|
|
236
|
+
#
|
|
237
|
+
# @param jdate [Float] Julian date
|
|
238
|
+
# @return [Array<Year, Month, Day, Hour, Minute, Second, Microsecond>] Julian date converted to an array of values
|
|
239
|
+
def self.julian2mdy(jdate)
|
|
240
|
+
z = (jdate + 0.5).to_i
|
|
241
|
+
w = ((z - 1867216.25) / 36524.25).to_i
|
|
242
|
+
x = w / 4
|
|
243
|
+
a = z + 1 + w - x
|
|
244
|
+
b = a + 1524
|
|
245
|
+
c = ((b - 122.1) / 365.25).to_i
|
|
246
|
+
d = (365.25 * c).to_i
|
|
247
|
+
e = ((b - d) / 30.6001).to_i
|
|
248
|
+
f = (30.6001 * e).to_i
|
|
249
|
+
|
|
250
|
+
day = b - d - f
|
|
251
|
+
if e > 13
|
|
252
|
+
month = e - 13
|
|
253
|
+
else
|
|
254
|
+
month = e - 1
|
|
255
|
+
end
|
|
256
|
+
if month > 2
|
|
257
|
+
year = c - 4716
|
|
258
|
+
else
|
|
259
|
+
year = c - 4715
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
fraction = jdate - jdate.to_i
|
|
263
|
+
|
|
264
|
+
if fraction >= 0.5
|
|
265
|
+
hour = (fraction - 0.5) * 24.0
|
|
266
|
+
else
|
|
267
|
+
hour = (fraction * 24.0) + 12.0
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
fraction = hour - hour.to_i
|
|
271
|
+
hour = hour.to_i
|
|
272
|
+
|
|
273
|
+
minute = fraction * 60.0
|
|
274
|
+
|
|
275
|
+
fraction = minute - minute.to_i
|
|
276
|
+
minute = minute.to_i
|
|
277
|
+
|
|
278
|
+
second = fraction * 60.0
|
|
279
|
+
|
|
280
|
+
fraction = second - second.to_i
|
|
281
|
+
second = second.to_i
|
|
282
|
+
|
|
283
|
+
us = fraction * 1000000.0
|
|
284
|
+
us = us.to_i
|
|
285
|
+
|
|
286
|
+
return [year, month, day, hour, minute, second, us]
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
# Convert a CCSDS Date to mdy format
|
|
290
|
+
# Note that an array is returned rather than a Time object because Time objects cannot represent
|
|
291
|
+
# all possible CCSDS dates
|
|
292
|
+
#
|
|
293
|
+
# @param day [Float] CCSDS day
|
|
294
|
+
# @param ms [Integer] CCSDS milliseconds
|
|
295
|
+
# @param us [Integer] CCSDS microseconds
|
|
296
|
+
# @return [Array<Year, Month, Day, Hour, Minute, Second, Microsecond>] CCSDS date converted to an array of values
|
|
297
|
+
def self.ccsds2mdy(day, ms, us)
|
|
298
|
+
jdate = day + JULIAN_DATE_OF_CCSDS_EPOCH
|
|
299
|
+
year, month, day, hour, minute, second, _ = julian2mdy(jdate)
|
|
300
|
+
hour = (ms / MSEC_PER_HOUR).to_i
|
|
301
|
+
temp = ms - (hour * MSEC_PER_HOUR)
|
|
302
|
+
minute = (temp / MSEC_PER_MINUTE).to_i
|
|
303
|
+
temp -= minute * MSEC_PER_MINUTE
|
|
304
|
+
second = temp / MSEC_PER_SECOND
|
|
305
|
+
temp -= second * MSEC_PER_SECOND
|
|
306
|
+
us = us + (temp * USEC_PER_MSEC)
|
|
307
|
+
return [year, month, day, hour, minute, second, us]
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
# Convert from mdy format to CCSDS Date
|
|
311
|
+
# Note that an array is used rather than a Time object because Time objects cannot represent
|
|
312
|
+
# all possible CCSDS dates
|
|
313
|
+
#
|
|
314
|
+
# @param year [Integer]
|
|
315
|
+
# @param month [Integer]
|
|
316
|
+
# @param day [Integer]
|
|
317
|
+
# @param hour [Integer]
|
|
318
|
+
# @param minute [Integer]
|
|
319
|
+
# @param second [Integer]
|
|
320
|
+
# @param us [Integer]
|
|
321
|
+
# @return [Array<day, ms, us>] MDY converted to CCSDS
|
|
322
|
+
def self.mdy2ccsds(year, month, day, hour, minute, second, us)
|
|
323
|
+
ms = (hour * MSEC_PER_HOUR) + (minute * MSEC_PER_MINUTE) + (second * MSEC_PER_SECOND) + (us / USEC_PER_MSEC)
|
|
324
|
+
us = us % USEC_PER_MSEC
|
|
325
|
+
jd = Time.mdy2julian(year, month, day, 0, 0, 0, 0)
|
|
326
|
+
day = (jd - JULIAN_DATE_OF_CCSDS_EPOCH).round
|
|
327
|
+
return [day, ms, us]
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
# @param day [Float] CCSDS day
|
|
331
|
+
# @param ms [Integer] CCSDS milliseconds
|
|
332
|
+
# @param us [Integer] CCSDS microseconds
|
|
333
|
+
# @return [Float] The CCSDS date converted to a julian date
|
|
334
|
+
def self.ccsds2julian(day, ms, us)
|
|
335
|
+
(day + JULIAN_DATE_OF_CCSDS_EPOCH) + ((ms.to_f + (us / 1000.0)) / MSEC_PER_DAY_FLOAT)
|
|
336
|
+
end
|
|
337
|
+
|
|
338
|
+
# @param [Float] julian date
|
|
339
|
+
# @return [Array<day, ms, us>] Julian converted to CCSDS
|
|
340
|
+
def self.julian2ccsds(jdate)
|
|
341
|
+
day = jdate - JULIAN_DATE_OF_CCSDS_EPOCH
|
|
342
|
+
fraction = day % 1.0
|
|
343
|
+
day = day.to_i
|
|
344
|
+
ms = fraction * MSEC_PER_DAY_FLOAT
|
|
345
|
+
fraction = ms % 1.0
|
|
346
|
+
ms = ms.to_i
|
|
347
|
+
us = fraction * USEC_PER_MSEC
|
|
348
|
+
us = us.to_i
|
|
349
|
+
return [day, ms, us]
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
# @param day [Float] CCSDS day
|
|
353
|
+
# @param ms [Integer] CCSDS milliseconds
|
|
354
|
+
# @param us [Integer] CCSDS microseconds
|
|
355
|
+
# @param sec_epoch_jd [Float] Epoch to convert seconds from as a julian date
|
|
356
|
+
def self.ccsds2sec (day, ms, us, sec_epoch_jd = JULIAN_DATE_OF_CCSDS_EPOCH)
|
|
357
|
+
(self.ccsds2julian(day, ms, us) - sec_epoch_jd) * SEC_PER_DAY_FLOAT
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
# @param seconds [Float]
|
|
361
|
+
# @param sec_epoch_jd [Float] Epoch to of seconds value
|
|
362
|
+
# @return [Array<day, ms, us>] CCSDS date
|
|
363
|
+
def self.sec2ccsds (sec, sec_epoch_jd = JULIAN_DATE_OF_CCSDS_EPOCH)
|
|
364
|
+
self.julian2ccsds((sec / SEC_PER_DAY_FLOAT) + sec_epoch_jd)
|
|
365
|
+
end
|
|
366
|
+
|
|
367
|
+
# @param year [Integer] Year
|
|
368
|
+
# @param day [Integer] Day of the year
|
|
369
|
+
# @param sec [Float] Seconds in the day
|
|
370
|
+
# @return [Array] [year, month, day, hour, minute, second, usec]
|
|
371
|
+
def self.yds2mdy(year, day, sec)
|
|
372
|
+
# Convert day of year (1-366) to day of month (1-31)
|
|
373
|
+
if self.leap_year?(year)
|
|
374
|
+
array = Time::LeapYearMonthDays
|
|
375
|
+
else
|
|
376
|
+
array = Time::CommonYearMonthDays
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
month = 1
|
|
380
|
+
array.each do |days|
|
|
381
|
+
if (day - days) >= 1
|
|
382
|
+
day -= days
|
|
383
|
+
month += 1
|
|
384
|
+
else
|
|
385
|
+
break
|
|
386
|
+
end
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
# Calculate hour of day (0-23)
|
|
390
|
+
hour = (sec / SEC_PER_HOUR).to_i
|
|
391
|
+
sec -= (hour * SEC_PER_HOUR).to_f
|
|
392
|
+
|
|
393
|
+
# Calculate minute of hour (0-59)
|
|
394
|
+
min = (sec / SEC_PER_MINUTE).to_i
|
|
395
|
+
sec -= (min * SEC_PER_MINUTE).to_f
|
|
396
|
+
|
|
397
|
+
# Calculate second of minute (0-60)
|
|
398
|
+
seconds = sec.to_i
|
|
399
|
+
sec -= seconds.to_f
|
|
400
|
+
|
|
401
|
+
# Calculate useconds of second (0-999999)
|
|
402
|
+
usec = (sec * 1000000.0).to_i
|
|
403
|
+
|
|
404
|
+
return [year, month, day, hour, min, seconds, usec]
|
|
405
|
+
end
|
|
406
|
+
|
|
407
|
+
# @param year [Integer] Year
|
|
408
|
+
# @param day [Integer] Day of the year
|
|
409
|
+
# @param sec [Integer] Seconds in the day
|
|
410
|
+
# @return [Float] Year, day, seconds converted to the Julian date
|
|
411
|
+
def self.yds2julian(year, day, sec)
|
|
412
|
+
year, month, day, hour, min, seconds, usec = self.yds2mdy(year, day, sec)
|
|
413
|
+
Time.mdy2julian(year, month, day, hour, min, seconds, usec)
|
|
414
|
+
end
|
|
415
|
+
|
|
416
|
+
# Ruby time objects cannot handle times before the Unix Epoch. Calculate a delta (in seconds) to be used
|
|
417
|
+
# when real epochs are before the Unix Epoch. Each received timestamp will be adjusted by this delta
|
|
418
|
+
# so a ruby time object can be used to parse the time.
|
|
419
|
+
# @param epoch [String] epoch is a string in the following format: "yyyy/mm/dd hh:mm:ss"
|
|
420
|
+
# @return [Float] unix_epohc_delta
|
|
421
|
+
def self.init_epoch_delta (epoch)
|
|
422
|
+
# UnixEpoch - Jan 1, 1970 00:00:00
|
|
423
|
+
unix_epoch = DateTime.new(1970, 1, 1, 0, 0, 0)
|
|
424
|
+
|
|
425
|
+
split_epoch = epoch.split
|
|
426
|
+
epoch_date = split_epoch[0].split("/")
|
|
427
|
+
epoch_time = split_epoch[1].split(":")
|
|
428
|
+
|
|
429
|
+
if epoch_date[0].to_i < 1970 then
|
|
430
|
+
# Calculate delta between epoch and unix epoch
|
|
431
|
+
real_epoch = DateTime.new(epoch_date[0].to_i, epoch_date[1].to_i, epoch_date[2].to_i, epoch_time[0].to_i, epoch_time[1].to_i, epoch_time[2].to_i)
|
|
432
|
+
day_delta = (unix_epoch - real_epoch).to_i
|
|
433
|
+
unix_epoch_delta = day_delta * 86400
|
|
434
|
+
if real_epoch.hour != 0 or real_epoch.min != 0 or real_epoch.sec != 0
|
|
435
|
+
hour_delta = 23 - real_epoch.hour
|
|
436
|
+
min_delta = 59 - real_epoch.min
|
|
437
|
+
sec_delta = 60 - real_epoch.sec
|
|
438
|
+
unix_epoch_delta += ((hour_delta * 3600) + (min_delta * 60) + sec_delta)
|
|
439
|
+
end
|
|
440
|
+
else
|
|
441
|
+
unix_epoch_delta = 0
|
|
442
|
+
end
|
|
443
|
+
|
|
444
|
+
unix_epoch_delta
|
|
445
|
+
end
|
|
446
|
+
end
|