cosmos 3.5.1 → 3.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1158) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -1
  3. data/.gitattributes +3 -3
  4. data/.gitignore +48 -48
  5. data/.travis.yml +8 -8
  6. data/CONTRIBUTING.txt +50 -50
  7. data/Gemfile +10 -10
  8. data/Guardfile +27 -27
  9. data/LICENSE.txt +879 -879
  10. data/Manifest.txt +1414 -1414
  11. data/README.md +111 -111
  12. data/Rakefile +218 -214
  13. data/autohotkey/config/data/diamond.STL +57 -57
  14. data/autohotkey/config/system/system.txt +34 -34
  15. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  16. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  17. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  18. data/autohotkey/config/targets/COSMOS/target.txt +5 -5
  19. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  20. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -270
  21. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
  22. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
  23. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -305
  24. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
  25. data/autohotkey/config/targets/INST/screens/array.txt +7 -7
  26. data/autohotkey/config/targets/INST/screens/block.txt +8 -8
  27. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
  28. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
  29. data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
  30. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
  31. data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
  32. data/autohotkey/config/targets/INST/screens/image.txt +21 -21
  33. data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
  34. data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
  35. data/autohotkey/config/targets/INST/screens/other.txt +25 -25
  36. data/autohotkey/config/targets/INST/screens/params.txt +25 -25
  37. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
  38. data/autohotkey/config/targets/INST/target.txt +26 -26
  39. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  40. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
  41. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  42. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
  43. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
  44. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
  45. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
  46. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  47. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  48. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  49. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
  50. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  51. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  52. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  53. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  54. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  55. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  56. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  57. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  58. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
  59. data/autohotkey/config/tools/launcher/launcher.txt +38 -38
  60. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
  61. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
  62. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
  63. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
  64. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
  65. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
  66. data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
  67. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  68. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  69. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
  70. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
  71. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
  72. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
  73. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
  74. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
  75. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
  76. data/autohotkey/lib/example_background_task.rb +42 -42
  77. data/autohotkey/lib/user_version.rb +3 -3
  78. data/autohotkey/procedures/clear_util.rb +7 -7
  79. data/autohotkey/procedures/collect_util.rb +14 -14
  80. data/autohotkey/procedures/example_test.rb +67 -67
  81. data/autohotkey/procedures/example_test2.rb +74 -74
  82. data/autohotkey/procedures/script_test.rb +17 -17
  83. data/autohotkey/procedures/syntax_error.rb +18 -18
  84. data/autohotkey/tools/CmdExtractorAHK +16 -16
  85. data/autohotkey/tools/CmdSender +14 -14
  86. data/autohotkey/tools/CmdSenderAHK +18 -18
  87. data/autohotkey/tools/CmdTlmServer +14 -14
  88. data/autohotkey/tools/CmdTlmServerAHK +28 -28
  89. data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
  90. data/autohotkey/tools/DataViewer +14 -14
  91. data/autohotkey/tools/DataViewerAHK +17 -17
  92. data/autohotkey/tools/HandbookCreatorAHK +20 -20
  93. data/autohotkey/tools/LauncherAHK +17 -17
  94. data/autohotkey/tools/LimitsMonitorAHK +20 -20
  95. data/autohotkey/tools/OpenGLBuilderAHK +24 -24
  96. data/autohotkey/tools/PacketViewer +14 -14
  97. data/autohotkey/tools/PacketViewerAHK +18 -18
  98. data/autohotkey/tools/PacketViewerAHK2 +17 -17
  99. data/autohotkey/tools/Replay +14 -14
  100. data/autohotkey/tools/ReplayAHK +17 -17
  101. data/autohotkey/tools/ScriptRunner +14 -14
  102. data/autohotkey/tools/ScriptRunnerAHK +20 -20
  103. data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
  104. data/autohotkey/tools/TableManager +14 -14
  105. data/autohotkey/tools/TableManagerAHK +30 -30
  106. data/autohotkey/tools/TestRunner +15 -15
  107. data/autohotkey/tools/TestRunnerAHK +17 -17
  108. data/autohotkey/tools/TestRunnerAHK2 +17 -17
  109. data/autohotkey/tools/TestRunnerAHK3 +17 -17
  110. data/autohotkey/tools/TestRunnerAHK4 +17 -17
  111. data/autohotkey/tools/TestRunnerAHK5 +17 -17
  112. data/autohotkey/tools/TestRunnerAHK6 +17 -17
  113. data/autohotkey/tools/TlmExtractor +15 -15
  114. data/autohotkey/tools/TlmExtractorAHK +19 -19
  115. data/autohotkey/tools/TlmExtractorAHK2 +16 -16
  116. data/autohotkey/tools/TlmExtractorAHK3 +16 -16
  117. data/autohotkey/tools/TlmGrapher +14 -14
  118. data/autohotkey/tools/TlmGrapherAHK +19 -19
  119. data/autohotkey/tools/TlmGrapherAHK2 +23 -23
  120. data/autohotkey/tools/TlmGrapherAHK3 +17 -17
  121. data/autohotkey/tools/TlmGrapherAHK4 +17 -17
  122. data/autohotkey/tools/TlmViewer +14 -14
  123. data/autohotkey/tools/TlmViewerAHK +28 -28
  124. data/autohotkey/tools/TlmViewerAHK2 +22 -22
  125. data/autohotkey/tools/TlmViewerAHK3 +23 -23
  126. data/autohotkey/tools/TlmViewerAHK4 +22 -22
  127. data/autohotkey/tools/TlmViewerAHK5 +18 -18
  128. data/autohotkey/tools/autohotkey.rb +37 -37
  129. data/autohotkey/tools/cmd_extractor.ahk +33 -33
  130. data/autohotkey/tools/cmd_sender.ahk +182 -182
  131. data/autohotkey/tools/cmd_tlm_server.ahk +90 -90
  132. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
  133. data/autohotkey/tools/data_viewer.ahk +141 -141
  134. data/autohotkey/tools/handbook_creator.ahk +32 -32
  135. data/autohotkey/tools/launcher.ahk +41 -41
  136. data/autohotkey/tools/limits_monitor.ahk +123 -123
  137. data/autohotkey/tools/open_gl_builder.ahk +134 -134
  138. data/autohotkey/tools/packet_viewer.ahk +196 -196
  139. data/autohotkey/tools/packet_viewer2.ahk +9 -9
  140. data/autohotkey/tools/replay.ahk +104 -104
  141. data/autohotkey/tools/script_runner.ahk +589 -589
  142. data/autohotkey/tools/script_runner2.ahk +38 -38
  143. data/autohotkey/tools/table_manager.ahk +220 -220
  144. data/autohotkey/tools/test_runner.ahk +262 -262
  145. data/autohotkey/tools/test_runner2.ahk +53 -53
  146. data/autohotkey/tools/test_runner3.ahk +13 -13
  147. data/autohotkey/tools/test_runner5.ahk +8 -8
  148. data/autohotkey/tools/test_runner6.ahk +5 -5
  149. data/autohotkey/tools/tlm_extractor.ahk +296 -296
  150. data/autohotkey/tools/tlm_grapher.ahk +660 -660
  151. data/autohotkey/tools/tlm_grapher2.ahk +115 -115
  152. data/autohotkey/tools/tlm_grapher3.ahk +24 -24
  153. data/autohotkey/tools/tlm_viewer.ahk +133 -133
  154. data/autohotkey/tools/tlm_viewer2.ahk +50 -50
  155. data/autohotkey/tools/tlm_viewer4.ahk +4 -4
  156. data/autohotkey/tools/tlm_viewer5.ahk +20 -20
  157. data/bin/cosmos +96 -96
  158. data/bin/cstol_converter +1166 -1166
  159. data/bin/rubysloc +85 -85
  160. data/cosmos.gemspec +99 -99
  161. data/data/about.txt +4 -4
  162. data/data/crc.txt +326 -326
  163. data/data/diamond.STL +57 -57
  164. data/data/legal.txt +9 -9
  165. data/demo/Gemfile +10 -10
  166. data/demo/Launcher +16 -16
  167. data/demo/Launcher.bat +0 -0
  168. data/demo/Rakefile +77 -77
  169. data/demo/config/data/crc.txt +224 -226
  170. data/demo/config/data/diamond.STL +57 -57
  171. data/demo/config/data/meta_init.txt +4 -4
  172. data/demo/config/system/system.txt +35 -35
  173. data/demo/config/system/system2.txt +33 -33
  174. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  175. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  176. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  177. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
  178. data/demo/config/targets/COSMOS/screens/version.txt +19 -19
  179. data/demo/config/targets/COSMOS/target.txt +11 -11
  180. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
  181. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -5
  182. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
  183. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
  184. data/demo/config/targets/EXAMPLE/target.txt +6 -6
  185. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  186. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  187. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
  188. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
  189. data/demo/config/targets/INST/lib/sim_inst.rb +305 -305
  190. data/demo/config/targets/INST/screens/adcs.txt +46 -46
  191. data/demo/config/targets/INST/screens/array.txt +15 -15
  192. data/demo/config/targets/INST/screens/block.txt +8 -8
  193. data/demo/config/targets/INST/screens/commanding.txt +30 -30
  194. data/demo/config/targets/INST/screens/graphs.txt +14 -14
  195. data/demo/config/targets/INST/screens/ground.txt +25 -25
  196. data/demo/config/targets/INST/screens/hs.txt +44 -44
  197. data/demo/config/targets/INST/screens/latest.txt +23 -23
  198. data/demo/config/targets/INST/screens/other.txt +29 -29
  199. data/demo/config/targets/INST/screens/tabs.txt +70 -70
  200. data/demo/config/targets/INST/target.txt +33 -33
  201. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  202. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
  203. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  204. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
  205. data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
  206. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -13
  207. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
  208. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
  209. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +56 -56
  210. data/demo/config/targets/TEMPLATED/target.txt +6 -6
  211. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +39 -39
  212. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +34 -34
  213. data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
  214. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
  215. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -88
  216. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  217. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  218. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
  219. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  220. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  221. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  222. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  223. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  224. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  225. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -82
  226. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  227. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
  228. data/demo/config/tools/launcher/launcher.txt +45 -45
  229. data/demo/config/tools/launcher/launcher2.txt +45 -45
  230. data/demo/config/tools/script_runner/script_runner.txt +3 -3
  231. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
  232. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  233. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  234. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  235. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  236. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  237. data/demo/config/tools/test_runner/test_runner.txt +17 -17
  238. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  239. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  240. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  241. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  242. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
  243. data/demo/lib/example_background_task.rb +57 -57
  244. data/demo/lib/example_target.rb +113 -113
  245. data/demo/lib/scpi_target.rb +74 -74
  246. data/demo/lib/user_version.rb +3 -3
  247. data/demo/procedures/checks.rb +11 -11
  248. data/demo/procedures/clear_util.rb +7 -7
  249. data/demo/procedures/collect.rb +18 -18
  250. data/demo/procedures/collect_util.rb +14 -14
  251. data/demo/procedures/cosmos_api_test.rb +293 -293
  252. data/demo/procedures/disconnect.rb +29 -29
  253. data/demo/procedures/example_test.rb +183 -183
  254. data/demo/procedures/plot_test.rb +8 -8
  255. data/demo/procedures/run_example_test.rb +3 -3
  256. data/demo/procedures/test.rb +51 -51
  257. data/demo/tools/CmdExtractor +16 -16
  258. data/demo/tools/CmdExtractor.bat +0 -0
  259. data/demo/tools/CmdSender +16 -16
  260. data/demo/tools/CmdSender.bat +0 -0
  261. data/demo/tools/CmdTlmServer +16 -16
  262. data/demo/tools/CmdTlmServer.bat +0 -0
  263. data/demo/tools/DataViewer +16 -16
  264. data/demo/tools/DataViewer.bat +0 -0
  265. data/demo/tools/ExampleTarget +16 -16
  266. data/demo/tools/ExampleTarget.bat +0 -0
  267. data/demo/tools/HandbookCreator +16 -16
  268. data/demo/tools/HandbookCreator.bat +0 -0
  269. data/demo/tools/Launcher +16 -16
  270. data/demo/tools/Launcher.bat +0 -0
  271. data/demo/tools/LimitsMonitor +16 -16
  272. data/demo/tools/LimitsMonitor.bat +0 -0
  273. data/demo/tools/OpenGLBuilder +16 -16
  274. data/demo/tools/OpenGLBuilder.bat +0 -0
  275. data/demo/tools/PacketViewer +16 -16
  276. data/demo/tools/PacketViewer.bat +0 -0
  277. data/demo/tools/Replay +16 -16
  278. data/demo/tools/Replay.bat +0 -0
  279. data/demo/tools/ScpiTarget +16 -16
  280. data/demo/tools/ScpiTarget.bat +0 -0
  281. data/demo/tools/ScriptRunner +16 -16
  282. data/demo/tools/ScriptRunner.bat +0 -0
  283. data/demo/tools/TableManager +16 -16
  284. data/demo/tools/TableManager.bat +0 -0
  285. data/demo/tools/TestRunner +16 -16
  286. data/demo/tools/TestRunner.bat +0 -0
  287. data/demo/tools/TlmExtractor +16 -16
  288. data/demo/tools/TlmExtractor.bat +0 -0
  289. data/demo/tools/TlmGrapher +16 -16
  290. data/demo/tools/TlmGrapher.bat +0 -0
  291. data/demo/tools/TlmViewer +16 -16
  292. data/demo/tools/TlmViewer.bat +0 -0
  293. data/demo/tools/ToolLaunch.bat +14 -5
  294. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  295. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  296. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  297. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  298. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  299. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  300. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  301. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  302. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  303. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  304. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  305. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  306. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  307. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  308. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  309. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  310. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  311. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  312. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  313. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  314. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  315. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  316. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  317. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  318. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  319. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  320. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  321. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  322. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  323. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  324. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  325. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  326. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  327. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  328. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  329. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  330. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
  331. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  332. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  333. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  334. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  335. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  336. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  337. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  338. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  339. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  340. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  341. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  342. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  343. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  344. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  345. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  346. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  347. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  348. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  349. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  350. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  351. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  352. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  353. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  354. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  355. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  356. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  357. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  358. data/demo/tools/tool_launch.rb +38 -38
  359. data/ext/cosmos/ext/array/array.c +111 -111
  360. data/ext/cosmos/ext/array/extconf.rb +13 -13
  361. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
  362. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
  363. data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
  364. data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
  365. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
  366. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
  367. data/ext/cosmos/ext/crc/crc.c +341 -341
  368. data/ext/cosmos/ext/crc/extconf.rb +12 -12
  369. data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
  370. data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
  371. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
  372. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -265
  373. data/ext/cosmos/ext/packet/extconf.rb +13 -13
  374. data/ext/cosmos/ext/packet/packet.c +339 -339
  375. data/ext/cosmos/ext/platform/extconf.rb +13 -13
  376. data/ext/cosmos/ext/platform/platform.c +101 -101
  377. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
  378. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
  379. data/ext/cosmos/ext/string/extconf.rb +13 -13
  380. data/ext/cosmos/ext/string/string.c +49 -49
  381. data/ext/cosmos/ext/structure/structure.c +1428 -1428
  382. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
  383. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
  384. data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
  385. data/ext/cosmos/ext/telemetry/telemetry.c +307 -307
  386. data/ext/mkrf_conf.rb +40 -40
  387. data/install/Gemfile +10 -10
  388. data/install/Launcher +16 -16
  389. data/install/Launcher.bat +0 -0
  390. data/install/Rakefile +77 -77
  391. data/install/config/data/crc.txt +151 -151
  392. data/install/config/system/system.txt +29 -29
  393. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  394. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  395. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  396. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  397. data/install/config/targets/COSMOS/screens/version.txt +19 -19
  398. data/install/config/targets/COSMOS/target.txt +8 -8
  399. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  400. data/install/config/tools/data_viewer/data_viewer.txt +3 -3
  401. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
  402. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  403. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  404. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  405. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
  406. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  407. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  408. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  409. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  410. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  411. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  412. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  413. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  414. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
  415. data/install/config/tools/launcher/launcher.txt +40 -40
  416. data/install/config/tools/script_runner/script_runner.txt +3 -3
  417. data/install/config/tools/test_runner/test_runner.txt +8 -8
  418. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  419. data/install/lib/user_version.rb +3 -3
  420. data/install/tools/CmdExtractor +16 -16
  421. data/install/tools/CmdExtractor.bat +0 -0
  422. data/install/tools/CmdSender +16 -16
  423. data/install/tools/CmdSender.bat +0 -0
  424. data/install/tools/CmdTlmServer +16 -16
  425. data/install/tools/CmdTlmServer.bat +0 -0
  426. data/install/tools/DataViewer +16 -16
  427. data/install/tools/DataViewer.bat +0 -0
  428. data/install/tools/HandbookCreator +16 -16
  429. data/install/tools/HandbookCreator.bat +0 -0
  430. data/install/tools/Launcher +16 -16
  431. data/install/tools/Launcher.bat +0 -0
  432. data/install/tools/LimitsMonitor +16 -16
  433. data/install/tools/LimitsMonitor.bat +0 -0
  434. data/install/tools/OpenGLBuilder +16 -16
  435. data/install/tools/OpenGLBuilder.bat +0 -0
  436. data/install/tools/PacketViewer +16 -16
  437. data/install/tools/PacketViewer.bat +0 -0
  438. data/install/tools/Replay +16 -16
  439. data/install/tools/Replay.bat +0 -0
  440. data/install/tools/ScriptRunner +16 -16
  441. data/install/tools/ScriptRunner.bat +0 -0
  442. data/install/tools/TableManager +16 -16
  443. data/install/tools/TableManager.bat +0 -0
  444. data/install/tools/TestRunner +16 -16
  445. data/install/tools/TestRunner.bat +0 -0
  446. data/install/tools/TlmExtractor +16 -16
  447. data/install/tools/TlmExtractor.bat +0 -0
  448. data/install/tools/TlmGrapher +16 -16
  449. data/install/tools/TlmGrapher.bat +0 -0
  450. data/install/tools/TlmViewer +16 -16
  451. data/install/tools/TlmViewer.bat +0 -0
  452. data/install/tools/ToolLaunch.bat +14 -5
  453. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  454. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  455. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  456. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  457. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  458. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  459. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  460. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  461. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  462. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  463. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  464. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  465. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  466. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  467. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  468. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  469. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  470. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  471. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  472. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  473. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  474. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  475. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  476. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  477. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  478. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  479. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  480. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  481. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  482. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  483. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  484. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  485. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  486. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  487. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  488. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  489. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
  490. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  491. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  492. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  493. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  494. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  495. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  496. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  497. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  498. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  499. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  500. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  501. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  502. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  503. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  504. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  505. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  506. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  507. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  508. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  509. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  510. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  511. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  512. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  513. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  514. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  515. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  516. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  517. data/install/tools/tool_launch.rb +38 -38
  518. data/lib/cosmos.rb +63 -63
  519. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
  520. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
  521. data/lib/cosmos/config/config_parser.rb +324 -324
  522. data/lib/cosmos/conversions.rb +13 -13
  523. data/lib/cosmos/conversions/conversion.rb +47 -47
  524. data/lib/cosmos/conversions/generic_conversion.rb +55 -55
  525. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
  526. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
  527. data/lib/cosmos/conversions/processor_conversion.rb +46 -46
  528. data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
  529. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
  530. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
  531. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
  532. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
  533. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
  534. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
  535. data/lib/cosmos/core_ext.rb +18 -18
  536. data/lib/cosmos/core_ext/array.rb +354 -354
  537. data/lib/cosmos/core_ext/class.rb +51 -51
  538. data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
  539. data/lib/cosmos/core_ext/exception.rb +52 -52
  540. data/lib/cosmos/core_ext/file.rb +75 -75
  541. data/lib/cosmos/core_ext/hash.rb +28 -28
  542. data/lib/cosmos/core_ext/io.rb +75 -75
  543. data/lib/cosmos/core_ext/kernel.rb +38 -38
  544. data/lib/cosmos/core_ext/math.rb +119 -119
  545. data/lib/cosmos/core_ext/matrix.rb +146 -146
  546. data/lib/cosmos/core_ext/objectspace.rb +29 -29
  547. data/lib/cosmos/core_ext/range.rb +22 -22
  548. data/lib/cosmos/core_ext/socket.rb +32 -32
  549. data/lib/cosmos/core_ext/string.rb +311 -311
  550. data/lib/cosmos/core_ext/stringio.rb +24 -24
  551. data/lib/cosmos/core_ext/time.rb +448 -448
  552. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
  553. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
  554. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
  555. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
  556. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
  557. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -326
  558. data/lib/cosmos/gui/dialogs/about_dialog.rb +137 -137
  559. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
  560. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
  561. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
  562. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
  563. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
  564. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
  565. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +260 -260
  566. data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -169
  567. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
  568. data/lib/cosmos/gui/dialogs/progress_dialog.rb +276 -276
  569. data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -165
  570. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
  571. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
  572. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
  573. data/lib/cosmos/gui/dialogs/splash.rb +135 -135
  574. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
  575. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
  576. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
  577. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
  578. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +473 -473
  579. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
  580. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +451 -451
  581. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
  582. data/lib/cosmos/gui/line_graph/lines.rb +290 -290
  583. data/lib/cosmos/gui/line_graph/overview_graph.rb +469 -469
  584. data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
  585. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
  586. data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
  587. data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
  588. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
  589. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
  590. data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -724
  591. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
  592. data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
  593. data/lib/cosmos/gui/opengl/opengl.rb +8 -8
  594. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
  595. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
  596. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
  597. data/lib/cosmos/gui/qt.rb +860 -860
  598. data/lib/cosmos/gui/qt_tool.rb +380 -380
  599. data/lib/cosmos/gui/text/completion.rb +381 -381
  600. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
  601. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
  602. data/lib/cosmos/gui/text/ruby_editor.rb +415 -415
  603. data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
  604. data/lib/cosmos/gui/utilities/script_module_gui.rb +330 -330
  605. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
  606. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
  607. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
  608. data/lib/cosmos/interfaces.rb +11 -11
  609. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -153
  610. data/lib/cosmos/interfaces/interface.rb +225 -225
  611. data/lib/cosmos/interfaces/linc_interface.rb +360 -360
  612. data/lib/cosmos/interfaces/serial_interface.rb +76 -76
  613. data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -129
  614. data/lib/cosmos/interfaces/stream_interface.rb +136 -136
  615. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
  616. data/lib/cosmos/interfaces/tcpip_server_interface.rb +164 -164
  617. data/lib/cosmos/interfaces/udp_interface.rb +161 -161
  618. data/lib/cosmos/io/buffered_file.rb +11 -11
  619. data/lib/cosmos/io/cosmos_snmp.rb +50 -50
  620. data/lib/cosmos/io/io_multiplexer.rb +89 -89
  621. data/lib/cosmos/io/json_drb.rb +376 -376
  622. data/lib/cosmos/io/json_drb_object.rb +198 -198
  623. data/lib/cosmos/io/json_rpc.rb +365 -365
  624. data/lib/cosmos/io/posix_serial_driver.rb +145 -145
  625. data/lib/cosmos/io/raw_logger.rb +174 -174
  626. data/lib/cosmos/io/raw_logger_pair.rb +71 -71
  627. data/lib/cosmos/io/serial_driver.rb +85 -85
  628. data/lib/cosmos/io/stderr.rb +36 -36
  629. data/lib/cosmos/io/stdout.rb +36 -36
  630. data/lib/cosmos/io/tcpip_server.rb +571 -571
  631. data/lib/cosmos/io/udp_sockets.rb +152 -152
  632. data/lib/cosmos/io/win32_serial_driver.rb +145 -145
  633. data/lib/cosmos/packet_logs.rb +7 -7
  634. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -104
  635. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
  636. data/lib/cosmos/packet_logs/packet_log_reader.rb +450 -450
  637. data/lib/cosmos/packet_logs/packet_log_writer.rb +323 -323
  638. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
  639. data/lib/cosmos/packets/binary_accessor.rb +634 -634
  640. data/lib/cosmos/packets/commands.rb +293 -293
  641. data/lib/cosmos/packets/limits.rb +267 -267
  642. data/lib/cosmos/packets/limits_response.rb +38 -38
  643. data/lib/cosmos/packets/packet.rb +786 -786
  644. data/lib/cosmos/packets/packet_config.rb +482 -482
  645. data/lib/cosmos/packets/packet_item.rb +317 -317
  646. data/lib/cosmos/packets/packet_item_limits.rb +128 -128
  647. data/lib/cosmos/packets/parsers/format_string_parser.rb +58 -58
  648. data/lib/cosmos/packets/parsers/limits_parser.rb +146 -146
  649. data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -52
  650. data/lib/cosmos/packets/parsers/macro_parser.rb +116 -116
  651. data/lib/cosmos/packets/parsers/packet_item_parser.rb +215 -215
  652. data/lib/cosmos/packets/parsers/packet_parser.rb +123 -123
  653. data/lib/cosmos/packets/parsers/processor_parser.rb +63 -63
  654. data/lib/cosmos/packets/parsers/state_parser.rb +116 -116
  655. data/lib/cosmos/packets/structure.rb +458 -458
  656. data/lib/cosmos/packets/structure_item.rb +233 -233
  657. data/lib/cosmos/packets/telemetry.rb +350 -350
  658. data/lib/cosmos/processors.rb +6 -6
  659. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
  660. data/lib/cosmos/processors/processor.rb +71 -71
  661. data/lib/cosmos/processors/statistics_processor.rb +65 -65
  662. data/lib/cosmos/processors/watermark_processor.rb +44 -44
  663. data/lib/cosmos/script.rb +9 -9
  664. data/lib/cosmos/script/cmd_tlm_server.rb +110 -110
  665. data/lib/cosmos/script/commands.rb +184 -184
  666. data/lib/cosmos/script/extract.rb +123 -123
  667. data/lib/cosmos/script/limits.rb +114 -114
  668. data/lib/cosmos/script/script.rb +76 -76
  669. data/lib/cosmos/script/scripting.rb +897 -897
  670. data/lib/cosmos/script/telemetry.rb +174 -174
  671. data/lib/cosmos/script/tools.rb +138 -138
  672. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
  673. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
  674. data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
  675. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
  676. data/lib/cosmos/streams/serial_stream.rb +157 -157
  677. data/lib/cosmos/streams/stream.rb +63 -63
  678. data/lib/cosmos/streams/stream_protocol.rb +373 -373
  679. data/lib/cosmos/streams/tcpip_client_stream.rb +113 -113
  680. data/lib/cosmos/streams/tcpip_socket_stream.rb +143 -143
  681. data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
  682. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
  683. data/lib/cosmos/system.rb +4 -4
  684. data/lib/cosmos/system/system.rb +618 -618
  685. data/lib/cosmos/system/target.rb +197 -197
  686. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +255 -255
  687. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +717 -717
  688. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
  689. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
  690. data/lib/cosmos/tools/cmd_tlm_server/api.rb +1034 -1034
  691. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
  692. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -67
  693. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +515 -515
  694. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +253 -253
  695. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +408 -408
  696. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
  697. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -175
  698. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +200 -200
  699. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -176
  700. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +150 -150
  701. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +244 -244
  702. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +90 -90
  703. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +266 -266
  704. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
  705. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
  706. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
  707. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
  708. data/lib/cosmos/tools/data_viewer/data_viewer.rb +621 -621
  709. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +134 -134
  710. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
  711. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -156
  712. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -382
  713. data/lib/cosmos/tools/launcher/launcher.rb +188 -188
  714. data/lib/cosmos/tools/launcher/launcher_config.rb +256 -256
  715. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -40
  716. data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -116
  717. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +837 -837
  718. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
  719. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
  720. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +542 -542
  721. data/lib/cosmos/tools/replay/replay.rb +501 -501
  722. data/lib/cosmos/tools/replay/replay_server.rb +91 -91
  723. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -147
  724. data/lib/cosmos/tools/script_runner/script_runner.rb +922 -922
  725. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
  726. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1798 -1798
  727. data/lib/cosmos/tools/table_manager/table.rb +70 -70
  728. data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
  729. data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
  730. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
  731. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
  732. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
  733. data/lib/cosmos/tools/test_runner/test.rb +539 -539
  734. data/lib/cosmos/tools/test_runner/test_runner.rb +1189 -1189
  735. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -341
  736. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
  737. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1016 -1016
  738. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
  739. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
  740. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
  741. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
  742. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -95
  743. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
  744. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +181 -181
  745. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
  746. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
  747. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -174
  748. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -193
  749. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +407 -407
  750. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
  751. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
  752. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -323
  753. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
  754. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
  755. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
  756. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
  757. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
  758. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
  759. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
  760. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
  761. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
  762. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
  763. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
  764. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -1291
  765. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
  766. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
  767. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -114
  768. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
  769. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -78
  770. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
  771. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
  772. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
  773. data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -486
  774. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +561 -561
  775. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +290 -290
  776. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
  777. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
  778. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -66
  779. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -57
  780. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
  781. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
  782. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
  783. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
  784. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
  785. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
  786. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
  787. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
  788. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
  789. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
  790. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
  791. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
  792. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
  793. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
  794. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
  795. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
  796. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
  797. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
  798. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
  799. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
  800. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
  801. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
  802. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
  803. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
  804. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
  805. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
  806. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
  807. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
  808. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
  809. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
  810. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
  811. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
  812. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
  813. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
  814. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
  815. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
  816. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
  817. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
  818. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
  819. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
  820. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
  821. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
  822. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
  823. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
  824. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
  825. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
  826. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
  827. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
  828. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
  829. data/lib/cosmos/top_level.rb +759 -759
  830. data/lib/cosmos/utilities.rb +11 -11
  831. data/lib/cosmos/utilities/crc.rb +166 -166
  832. data/lib/cosmos/utilities/csv.rb +83 -83
  833. data/lib/cosmos/utilities/logger.rb +137 -137
  834. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
  835. data/lib/cosmos/utilities/message_log.rb +79 -79
  836. data/lib/cosmos/utilities/quaternion.rb +258 -258
  837. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
  838. data/lib/cosmos/utilities/simulated_target.rb +99 -99
  839. data/lib/cosmos/utilities/sleeper.rb +44 -44
  840. data/lib/cosmos/version.rb +12 -12
  841. data/lib/cosmos/win32/excel.rb +66 -66
  842. data/lib/cosmos/win32/win32.rb +387 -387
  843. data/lib/cosmos/win32/win32_main.rb +321 -321
  844. data/roodi.yml +24 -24
  845. data/run_gui_tests.bat +0 -0
  846. data/spec/ccsds/ccsds_packet_spec.rb +67 -67
  847. data/spec/ccsds/ccsds_parser_spec.rb +148 -148
  848. data/spec/config/config_parser_spec.rb +322 -322
  849. data/spec/conversions/conversion_spec.rb +31 -31
  850. data/spec/conversions/generic_conversion_spec.rb +45 -45
  851. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
  852. data/spec/conversions/polynomial_conversion_spec.rb +40 -40
  853. data/spec/conversions/processor_conversion_spec.rb +45 -45
  854. data/spec/conversions/received_count_conversion_spec.rb +43 -43
  855. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
  856. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
  857. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
  858. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
  859. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
  860. data/spec/core_ext/array_spec.rb +186 -186
  861. data/spec/core_ext/class_spec.rb +36 -36
  862. data/spec/core_ext/cosmos_io_spec.rb +77 -77
  863. data/spec/core_ext/exception_spec.rb +91 -91
  864. data/spec/core_ext/file_spec.rb +72 -72
  865. data/spec/core_ext/hash_spec.rb +24 -24
  866. data/spec/core_ext/io_spec.rb +46 -46
  867. data/spec/core_ext/kernel_spec.rb +54 -54
  868. data/spec/core_ext/math_spec.rb +116 -116
  869. data/spec/core_ext/matrix_spec.rb +66 -66
  870. data/spec/core_ext/objectspace_spec.rb +29 -29
  871. data/spec/core_ext/range_spec.rb +21 -21
  872. data/spec/core_ext/socket_spec.rb +32 -32
  873. data/spec/core_ext/string_spec.rb +223 -223
  874. data/spec/core_ext/stringio_spec.rb +21 -21
  875. data/spec/core_ext/time_spec.rb +202 -202
  876. data/spec/gui/line_graph/line_clip_spec.rb +322 -322
  877. data/spec/gui/qt_spec.rb +102 -102
  878. data/spec/install/config/system/system.txt +33 -33
  879. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  880. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  881. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  882. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  883. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
  884. data/spec/install/config/targets/COSMOS/target.txt +5 -5
  885. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
  886. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
  887. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
  888. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
  889. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
  890. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -305
  891. data/spec/install/config/targets/INST/target.txt +10 -10
  892. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
  893. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
  894. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  895. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
  896. data/spec/interfaces/interface_spec.rb +130 -130
  897. data/spec/interfaces/linc_interface_spec.rb +259 -259
  898. data/spec/interfaces/serial_interface_spec.rb +56 -56
  899. data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
  900. data/spec/interfaces/stream_interface_spec.rb +157 -157
  901. data/spec/interfaces/tcpip_client_interface_spec.rb +55 -55
  902. data/spec/interfaces/tcpip_server_interface_spec.rb +160 -160
  903. data/spec/interfaces/udp_interface_spec.rb +175 -175
  904. data/spec/io/buffered_file_spec.rb +113 -113
  905. data/spec/io/io_multiplexer_spec.rb +94 -94
  906. data/spec/io/json_drb_object_spec.rb +119 -119
  907. data/spec/io/json_drb_spec.rb +311 -311
  908. data/spec/io/json_rpc_spec.rb +264 -264
  909. data/spec/io/raw_logger_pair_spec.rb +76 -76
  910. data/spec/io/raw_logger_spec.rb +133 -133
  911. data/spec/io/serial_driver_spec.rb +60 -60
  912. data/spec/io/stderr_spec.rb +32 -32
  913. data/spec/io/stdout_spec.rb +32 -32
  914. data/spec/io/tcpip_server_spec.rb +338 -338
  915. data/spec/io/udp_sockets_spec.rb +94 -94
  916. data/spec/io/win32_serial_driver_spec.rb +88 -88
  917. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
  918. data/spec/packet_logs/packet_log_reader_spec.rb +468 -468
  919. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
  920. data/spec/packet_logs/packet_log_writer_spec.rb +225 -225
  921. data/spec/packets/binary_accessor_spec.rb +2326 -2326
  922. data/spec/packets/commands_spec.rb +369 -369
  923. data/spec/packets/limits_response_spec.rb +25 -25
  924. data/spec/packets/limits_spec.rb +344 -344
  925. data/spec/packets/packet_config_spec.rb +805 -805
  926. data/spec/packets/packet_item_limits_spec.rb +161 -161
  927. data/spec/packets/packet_item_spec.rb +386 -386
  928. data/spec/packets/packet_spec.rb +1317 -1317
  929. data/spec/packets/parsers/format_string_parser_spec.rb +122 -122
  930. data/spec/packets/parsers/limits_parser_spec.rb +282 -282
  931. data/spec/packets/parsers/limits_response_parser_spec.rb +149 -149
  932. data/spec/packets/parsers/macro_parser_spec.rb +212 -212
  933. data/spec/packets/parsers/packet_item_parser_spec.rb +306 -306
  934. data/spec/packets/parsers/packet_parser_spec.rb +99 -99
  935. data/spec/packets/parsers/processor_parser_spec.rb +114 -114
  936. data/spec/packets/parsers/state_parser_spec.rb +156 -156
  937. data/spec/packets/structure_item_spec.rb +195 -195
  938. data/spec/packets/structure_spec.rb +565 -565
  939. data/spec/packets/telemetry_spec.rb +578 -578
  940. data/spec/processors/new_packet_log_processor_spec.rb +39 -39
  941. data/spec/processors/processor_spec.rb +55 -55
  942. data/spec/processors/statistics_processor_spec.rb +60 -60
  943. data/spec/processors/watermark_processor_spec.rb +51 -51
  944. data/spec/script/cmd_tlm_server_spec.rb +110 -110
  945. data/spec/script/commands_disconnect_spec.rb +270 -270
  946. data/spec/script/commands_spec.rb +302 -302
  947. data/spec/script/limits_spec.rb +153 -153
  948. data/spec/script/script_spec.rb +86 -86
  949. data/spec/script/scripting_spec.rb +440 -440
  950. data/spec/script/telemetry_spec.rb +165 -165
  951. data/spec/script/tools_spec.rb +117 -117
  952. data/spec/spec_helper.rb +190 -190
  953. data/spec/streams/burst_stream_protocol_spec.rb +32 -32
  954. data/spec/streams/fixed_stream_protocol_spec.rb +113 -113
  955. data/spec/streams/length_stream_protocol_spec.rb +300 -300
  956. data/spec/streams/preidentified_stream_protocol_spec.rb +121 -121
  957. data/spec/streams/serial_stream_spec.rb +117 -117
  958. data/spec/streams/stream_protocol_spec.rb +346 -346
  959. data/spec/streams/stream_spec.rb +30 -30
  960. data/spec/streams/tcpip_client_stream_spec.rb +57 -57
  961. data/spec/streams/tcpip_socket_stream_spec.rb +193 -193
  962. data/spec/streams/template_stream_protocol_spec.rb +156 -156
  963. data/spec/streams/terminated_stream_protocol_spec.rb +127 -127
  964. data/spec/system/system_spec.rb +665 -665
  965. data/spec/system/target_spec.rb +250 -250
  966. data/spec/tools/cmd_tlm_server/api_spec.rb +1117 -1117
  967. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
  968. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
  969. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +453 -453
  970. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
  971. data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -151
  972. data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -235
  973. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
  974. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -252
  975. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
  976. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +151 -151
  977. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -223
  978. data/spec/tools/launcher/launcher_config_spec.rb +464 -464
  979. data/spec/top_level/top_level_spec.rb +334 -334
  980. data/spec/utilities/crc_spec.rb +45 -45
  981. data/spec/utilities/csv_spec.rb +97 -97
  982. data/spec/utilities/logger_spec.rb +102 -102
  983. data/spec/utilities/message_log_spec.rb +89 -89
  984. data/spec/utilities/quaternion_spec.rb +107 -107
  985. data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
  986. data/tasks/manifest.rake +22 -22
  987. data/tasks/spec.rake +23 -23
  988. data/test/benchmarks/binary_accessor_benchmark.rb +14 -14
  989. data/test/benchmarks/gsub_benchmark.rb +152 -152
  990. data/test/benchmarks/is_a_benchmark.rb +34 -34
  991. data/test/performance/PACKETS.bat +0 -0
  992. data/test/performance/Rakefile +77 -77
  993. data/test/performance/THREADS.bat +0 -0
  994. data/test/performance/config/data/crc.txt +196 -196
  995. data/test/performance/config/data/diamond.STL +57 -57
  996. data/test/performance/config/data/meta_init.txt +4 -4
  997. data/test/performance/config/system/system_packets.txt +39 -39
  998. data/test/performance/config/system/system_threads.txt +59 -59
  999. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -46
  1000. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  1001. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  1002. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -20
  1003. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -19
  1004. data/test/performance/config/targets/COSMOS/target.txt +11 -11
  1005. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -20
  1006. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -98
  1007. data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -6
  1008. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -22
  1009. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -24
  1010. data/test/performance/config/targets/PACKET/screens/status.txt +25 -25
  1011. data/test/performance/config/targets/PACKET/target.txt +28 -28
  1012. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -12
  1013. data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -17
  1014. data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -18
  1015. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -6
  1016. data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -22
  1017. data/test/performance/config/targets/THREAD/screens/status.txt +25 -25
  1018. data/test/performance/config/targets/THREAD/target.txt +6 -6
  1019. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -28
  1020. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -68
  1021. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -11
  1022. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -66
  1023. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  1024. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  1025. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  1026. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -25
  1027. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  1028. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  1029. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  1030. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  1031. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  1032. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  1033. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  1034. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  1035. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -1
  1036. data/test/performance/config/tools/launcher/launcher_packets.txt +34 -34
  1037. data/test/performance/config/tools/launcher/launcher_threads.txt +83 -83
  1038. data/test/performance/config/tools/script_runner/script_runner.txt +3 -3
  1039. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -8
  1040. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  1041. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  1042. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  1043. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  1044. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  1045. data/test/performance/config/tools/test_runner/test_runner.txt +17 -17
  1046. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  1047. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  1048. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  1049. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  1050. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -204
  1051. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -13
  1052. data/test/performance/lib/packet_target.rb +126 -126
  1053. data/test/performance/lib/thread_target.rb +120 -120
  1054. data/test/performance/lib/user_version.rb +3 -3
  1055. data/test/performance/procedures/checks.rb +11 -11
  1056. data/test/performance/procedures/clear_util.rb +7 -7
  1057. data/test/performance/procedures/collect.rb +18 -18
  1058. data/test/performance/procedures/collect_util.rb +14 -14
  1059. data/test/performance/procedures/cosmos_api_test.rb +293 -293
  1060. data/test/performance/procedures/disconnect.rb +29 -29
  1061. data/test/performance/procedures/example_test.rb +182 -182
  1062. data/test/performance/procedures/plot_test.rb +8 -8
  1063. data/test/performance/procedures/procedure.rb +2 -2
  1064. data/test/performance/procedures/run_example_test.rb +3 -3
  1065. data/test/performance/procedures/test.rb +51 -51
  1066. data/test/performance/tools/CmdExtractor +14 -14
  1067. data/test/performance/tools/CmdExtractor.bat +0 -0
  1068. data/test/performance/tools/CmdSender +14 -14
  1069. data/test/performance/tools/CmdSender.bat +0 -0
  1070. data/test/performance/tools/CmdTlmServer +16 -16
  1071. data/test/performance/tools/CmdTlmServer.bat +0 -0
  1072. data/test/performance/tools/CmdTlmServerMemProf +20 -20
  1073. data/test/performance/tools/CmdTlmServerMemProf.bat +0 -0
  1074. data/test/performance/tools/DataViewer +14 -14
  1075. data/test/performance/tools/DataViewer.bat +0 -0
  1076. data/test/performance/tools/HandbookCreator +14 -14
  1077. data/test/performance/tools/HandbookCreator.bat +0 -0
  1078. data/test/performance/tools/Launcher +14 -14
  1079. data/test/performance/tools/Launcher.bat +0 -0
  1080. data/test/performance/tools/LimitsMonitor +14 -14
  1081. data/test/performance/tools/LimitsMonitor.bat +0 -0
  1082. data/test/performance/tools/OpenGLBuilder +14 -14
  1083. data/test/performance/tools/OpenGLBuilder.bat +0 -0
  1084. data/test/performance/tools/PacketTarget +14 -14
  1085. data/test/performance/tools/PacketTarget.bat +0 -0
  1086. data/test/performance/tools/PacketViewer +14 -14
  1087. data/test/performance/tools/PacketViewer.bat +0 -0
  1088. data/test/performance/tools/Replay +14 -14
  1089. data/test/performance/tools/Replay.bat +0 -0
  1090. data/test/performance/tools/ScpiTarget +14 -14
  1091. data/test/performance/tools/ScpiTarget.bat +0 -0
  1092. data/test/performance/tools/ScriptRunner +14 -14
  1093. data/test/performance/tools/ScriptRunner.bat +0 -0
  1094. data/test/performance/tools/TableManager +14 -14
  1095. data/test/performance/tools/TableManager.bat +0 -0
  1096. data/test/performance/tools/TestRunner +14 -14
  1097. data/test/performance/tools/TestRunner.bat +0 -0
  1098. data/test/performance/tools/ThreadTarget +14 -14
  1099. data/test/performance/tools/ThreadTarget.bat +0 -0
  1100. data/test/performance/tools/TlmExtractor +14 -14
  1101. data/test/performance/tools/TlmExtractor.bat +0 -0
  1102. data/test/performance/tools/TlmGrapher +14 -14
  1103. data/test/performance/tools/TlmGrapher.bat +0 -0
  1104. data/test/performance/tools/TlmGrapherMemProf +19 -19
  1105. data/test/performance/tools/TlmGrapherMemProf.bat +0 -0
  1106. data/test/performance/tools/TlmViewer +14 -14
  1107. data/test/performance/tools/TlmViewer.bat +0 -0
  1108. data/test/performance/tools/TlmViewerMemProf +19 -19
  1109. data/test/performance/tools/TlmViewerMemProf.bat +0 -0
  1110. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  1111. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  1112. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  1113. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  1114. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  1115. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  1116. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  1117. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  1118. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  1119. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  1120. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  1121. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  1122. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  1123. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  1124. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  1125. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  1126. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  1127. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  1128. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  1129. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  1130. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  1131. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  1132. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  1133. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  1134. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  1135. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  1136. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  1137. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -38
  1138. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  1139. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  1140. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  1141. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  1142. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  1143. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  1144. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  1145. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  1146. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  1147. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  1148. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  1149. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  1150. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  1151. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  1152. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  1153. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  1154. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  1155. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  1156. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  1157. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  1158. metadata +3 -3
@@ -1,7 +1,7 @@
1
- # encoding: ascii-8bit
2
-
3
- require 'cosmos/packet_logs/packet_log_writer'
4
- require 'cosmos/packet_logs/meta_packet_log_writer'
5
- require 'cosmos/packet_logs/packet_log_writer_pair'
6
- require 'cosmos/packet_logs/packet_log_reader'
7
- require 'cosmos/packet_logs/ccsds_log_reader'
1
+ # encoding: ascii-8bit
2
+
3
+ require 'cosmos/packet_logs/packet_log_writer'
4
+ require 'cosmos/packet_logs/meta_packet_log_writer'
5
+ require 'cosmos/packet_logs/packet_log_writer_pair'
6
+ require 'cosmos/packet_logs/packet_log_reader'
7
+ require 'cosmos/packet_logs/ccsds_log_reader'
@@ -1,104 +1,104 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'cosmos/packet_logs/packet_log_reader'
12
- require 'cosmos/ccsds/ccsds_packet'
13
-
14
- module Cosmos
15
-
16
- # Reads a CCSDS packet log of either commands or telemetry.
17
- class CcsdsLogReader < PacketLogReader
18
-
19
- # Length of the header on a CCSDS source packet
20
- CCSDS_HEADER_LENGTH = 6
21
-
22
- # Create a new log file reader
23
- def initialize
24
- super()
25
- @ccsds_header = CcsdsPacket.new(nil, nil, false)
26
- end
27
-
28
- # Read a packet from the log file
29
- #
30
- # @param identify_and_define (see #each)
31
- # @return [Packet]
32
- def read(identify_and_define = true)
33
- # Read the CCSDS packet header
34
- header = @file.read(CCSDS_HEADER_LENGTH)
35
- return nil unless header and header.length == CCSDS_HEADER_LENGTH
36
- @ccsds_header.buffer = header
37
-
38
- # Extract the length field
39
- length = @ccsds_header.read('CcsdsLength') + 1
40
-
41
- # Read the remainder of the packet data
42
- data = @file.read(length)
43
- return nil unless data and data.length == length
44
-
45
- # Combine into the full packet data
46
- packet_data = header << data
47
-
48
- # Determine packet time and set it as received time
49
- received_time = determine_received_time(packet_data)
50
-
51
- # Build the actual Packet object
52
- if identify_and_define
53
- packet = identify_and_define_packet_data(nil, nil, received_time, packet_data)
54
- else
55
- # Build Packet
56
- packet = Packet.new(nil, nil, :BIG_ENDIAN, nil, packet_data)
57
- packet.set_received_time_fast(received_time)
58
- end
59
-
60
- # Return the packet
61
- packet
62
- rescue => err
63
- close()
64
- raise err
65
- end
66
-
67
- protected
68
-
69
- # TODO : Add code here or in subclass to derive received time from the packet timestamp
70
- # CCSDS timestamp formats and even the presence of a timestamp vary
71
- def determine_received_time(packet_data)
72
- nil
73
- end
74
-
75
- def read_file_header
76
- # Read the first CCSDS packet header
77
- header = @file.read(CCSDS_HEADER_LENGTH)
78
-
79
- if header and header.length == CCSDS_HEADER_LENGTH
80
- @ccsds_header.buffer = header
81
- packet_type = @ccsds_header.read('CcsdsType')
82
- if packet_type == CcsdsPacket::TELEMETRY
83
- @log_type = :TLM
84
- else
85
- @log_type = :CMD
86
- end
87
- @configuration_name = nil
88
- @hostname = nil
89
- @file_header_length = 0
90
- @file.seek(0, IO::SEEK_SET)
91
- System.load_configuration(nil)
92
- return true, nil # No configuration name supported so always return success
93
- else
94
- raise "Failed to read at least #{CCSDS_HEADER_LENGTH} bytes from packet log"
95
- end
96
- end
97
-
98
- def seek_to_time(time)
99
- # Not supported
100
- end
101
-
102
- end # class CcsdsLogReader
103
-
104
- end # module Cosmos
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos/packet_logs/packet_log_reader'
12
+ require 'cosmos/ccsds/ccsds_packet'
13
+
14
+ module Cosmos
15
+
16
+ # Reads a CCSDS packet log of either commands or telemetry.
17
+ class CcsdsLogReader < PacketLogReader
18
+
19
+ # Length of the header on a CCSDS source packet
20
+ CCSDS_HEADER_LENGTH = 6
21
+
22
+ # Create a new log file reader
23
+ def initialize
24
+ super()
25
+ @ccsds_header = CcsdsPacket.new(nil, nil, false)
26
+ end
27
+
28
+ # Read a packet from the log file
29
+ #
30
+ # @param identify_and_define (see #each)
31
+ # @return [Packet]
32
+ def read(identify_and_define = true)
33
+ # Read the CCSDS packet header
34
+ header = @file.read(CCSDS_HEADER_LENGTH)
35
+ return nil unless header and header.length == CCSDS_HEADER_LENGTH
36
+ @ccsds_header.buffer = header
37
+
38
+ # Extract the length field
39
+ length = @ccsds_header.read('CcsdsLength') + 1
40
+
41
+ # Read the remainder of the packet data
42
+ data = @file.read(length)
43
+ return nil unless data and data.length == length
44
+
45
+ # Combine into the full packet data
46
+ packet_data = header << data
47
+
48
+ # Determine packet time and set it as received time
49
+ received_time = determine_received_time(packet_data)
50
+
51
+ # Build the actual Packet object
52
+ if identify_and_define
53
+ packet = identify_and_define_packet_data(nil, nil, received_time, packet_data)
54
+ else
55
+ # Build Packet
56
+ packet = Packet.new(nil, nil, :BIG_ENDIAN, nil, packet_data)
57
+ packet.set_received_time_fast(received_time)
58
+ end
59
+
60
+ # Return the packet
61
+ packet
62
+ rescue => err
63
+ close()
64
+ raise err
65
+ end
66
+
67
+ protected
68
+
69
+ # TODO : Add code here or in subclass to derive received time from the packet timestamp
70
+ # CCSDS timestamp formats and even the presence of a timestamp vary
71
+ def determine_received_time(packet_data)
72
+ nil
73
+ end
74
+
75
+ def read_file_header
76
+ # Read the first CCSDS packet header
77
+ header = @file.read(CCSDS_HEADER_LENGTH)
78
+
79
+ if header and header.length == CCSDS_HEADER_LENGTH
80
+ @ccsds_header.buffer = header
81
+ packet_type = @ccsds_header.read('CcsdsType')
82
+ if packet_type == CcsdsPacket::TELEMETRY
83
+ @log_type = :TLM
84
+ else
85
+ @log_type = :CMD
86
+ end
87
+ @configuration_name = nil
88
+ @hostname = nil
89
+ @file_header_length = 0
90
+ @file.seek(0, IO::SEEK_SET)
91
+ System.load_configuration(nil)
92
+ return true, nil # No configuration name supported so always return success
93
+ else
94
+ raise "Failed to read at least #{CCSDS_HEADER_LENGTH} bytes from packet log"
95
+ end
96
+ end
97
+
98
+ def seek_to_time(time)
99
+ # Not supported
100
+ end
101
+
102
+ end # class CcsdsLogReader
103
+
104
+ end # module Cosmos
@@ -1,107 +1,107 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- # Usage Notes:
12
- # The metadata packet must exist with exactly the same fields as both a command and as a telemetry packet
13
- # The new_packet_log_conversion.rb WRITE_CONVERSION should be placed on at least one item in the meta packets
14
-
15
- require 'cosmos/packet_logs/packet_log_writer'
16
-
17
- module Cosmos
18
-
19
- # Writes a given packet at the beginning of each telemetry packet log file
20
- class MetaPacketLogWriter < PacketLogWriter
21
-
22
- # See PacketLogWriter#initialize
23
- # @param target_name [String] Target name of the metadata packet
24
- # @param packet_name [String] Packet name of the metadata packet
25
- # @param meta_default_filename [String] Filename containing key/value pairs for default meta packet values
26
- # @param log_meta_packet [Boolean] true to log the metadata packet if received during logging. false to only
27
- # log metadata packets at the beginning of the log.
28
- # @param use_tlm_packet [Boolean] true to put the data from the telemetry packet into
29
- # each log. false to put the data from the command packet.
30
- def initialize(
31
- log_type,
32
- target_name = nil,
33
- packet_name = nil,
34
- meta_default_filename = nil,
35
- log_meta_packet = false,
36
- use_tlm_packet = true,
37
- log_name = nil,
38
- logging_enabled = true,
39
- cycle_time = nil,
40
- cycle_size = 2000000000,
41
- log_directory = nil,
42
- asynchronous = false
43
- )
44
- @target_name = ConfigParser.handle_nil(target_name)
45
- @packet_name = ConfigParser.handle_nil(packet_name)
46
- @packet = nil
47
- @log_meta_packet = ConfigParser.handle_true_false(log_meta_packet)
48
- @meta_default_filename = ConfigParser.handle_nil(meta_default_filename)
49
- @use_tlm_packet = ConfigParser.handle_true_false(use_tlm_packet)
50
-
51
- # Make sure the packet exists in both commands and telemetry (if given)
52
- if @target_name and @packet_name
53
- packet = System.telemetry.packet(@target_name, @packet_name)
54
- @packet = packet if @use_tlm_packet
55
- packet = System.commands.packet(@target_name, @packet_name)
56
- @packet = packet if !@use_tlm_packet
57
- end
58
-
59
- # Initialize the meta packet (if given)
60
- if @meta_default_filename and @packet
61
- parser = ConfigParser.new
62
- Cosmos.set_working_dir do
63
- parser.parse_file(@meta_default_filename) do |keyword, params|
64
- begin
65
- item = @packet.get_item(keyword)
66
- if item.data_type == :STRING or item.data_type == :BLOCK
67
- value = params[0]
68
- else
69
- value = params[0].convert_to_value
70
- end
71
- @packet.write(keyword, value)
72
- rescue => err
73
- raise parser.error(err, "ITEM_NAME VALUE")
74
- end
75
- end
76
- end
77
- end
78
-
79
- super(log_type, log_name, logging_enabled, cycle_time, cycle_size, log_directory, asynchronous)
80
- end
81
-
82
- # Optionally doesn't write the meta packet
83
- def write(packet)
84
- if @log_meta_packet or !(packet.target_name == @target_name and packet.packet_name == @packet_name)
85
- super(packet)
86
- end
87
- end
88
-
89
- protected
90
-
91
- # Adds the meta packet at the beginning of telemetry packet logs
92
- # Mutex is held during this hook
93
- def start_new_file_hook
94
- if @target_name and @packet_name
95
- if @use_tlm_packet
96
- packet = System.telemetry.packet(@target_name, @packet_name)
97
- else
98
- packet = System.commands.packet(@target_name, @packet_name)
99
- end
100
- # Don't take the mutex because it is already held
101
- write_packet(packet, false)
102
- end
103
- end
104
-
105
- end # class MetaPacketLogWriter
106
-
107
- end # module Cosmos
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ # Usage Notes:
12
+ # The metadata packet must exist with exactly the same fields as both a command and as a telemetry packet
13
+ # The new_packet_log_conversion.rb WRITE_CONVERSION should be placed on at least one item in the meta packets
14
+
15
+ require 'cosmos/packet_logs/packet_log_writer'
16
+
17
+ module Cosmos
18
+
19
+ # Writes a given packet at the beginning of each telemetry packet log file
20
+ class MetaPacketLogWriter < PacketLogWriter
21
+
22
+ # See PacketLogWriter#initialize
23
+ # @param target_name [String] Target name of the metadata packet
24
+ # @param packet_name [String] Packet name of the metadata packet
25
+ # @param meta_default_filename [String] Filename containing key/value pairs for default meta packet values
26
+ # @param log_meta_packet [Boolean] true to log the metadata packet if received during logging. false to only
27
+ # log metadata packets at the beginning of the log.
28
+ # @param use_tlm_packet [Boolean] true to put the data from the telemetry packet into
29
+ # each log. false to put the data from the command packet.
30
+ def initialize(
31
+ log_type,
32
+ target_name = nil,
33
+ packet_name = nil,
34
+ meta_default_filename = nil,
35
+ log_meta_packet = false,
36
+ use_tlm_packet = true,
37
+ log_name = nil,
38
+ logging_enabled = true,
39
+ cycle_time = nil,
40
+ cycle_size = 2000000000,
41
+ log_directory = nil,
42
+ asynchronous = false
43
+ )
44
+ @target_name = ConfigParser.handle_nil(target_name)
45
+ @packet_name = ConfigParser.handle_nil(packet_name)
46
+ @packet = nil
47
+ @log_meta_packet = ConfigParser.handle_true_false(log_meta_packet)
48
+ @meta_default_filename = ConfigParser.handle_nil(meta_default_filename)
49
+ @use_tlm_packet = ConfigParser.handle_true_false(use_tlm_packet)
50
+
51
+ # Make sure the packet exists in both commands and telemetry (if given)
52
+ if @target_name and @packet_name
53
+ packet = System.telemetry.packet(@target_name, @packet_name)
54
+ @packet = packet if @use_tlm_packet
55
+ packet = System.commands.packet(@target_name, @packet_name)
56
+ @packet = packet if !@use_tlm_packet
57
+ end
58
+
59
+ # Initialize the meta packet (if given)
60
+ if @meta_default_filename and @packet
61
+ parser = ConfigParser.new
62
+ Cosmos.set_working_dir do
63
+ parser.parse_file(@meta_default_filename) do |keyword, params|
64
+ begin
65
+ item = @packet.get_item(keyword)
66
+ if item.data_type == :STRING or item.data_type == :BLOCK
67
+ value = params[0]
68
+ else
69
+ value = params[0].convert_to_value
70
+ end
71
+ @packet.write(keyword, value)
72
+ rescue => err
73
+ raise parser.error(err, "ITEM_NAME VALUE")
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+ super(log_type, log_name, logging_enabled, cycle_time, cycle_size, log_directory, asynchronous)
80
+ end
81
+
82
+ # Optionally doesn't write the meta packet
83
+ def write(packet)
84
+ if @log_meta_packet or !(packet.target_name == @target_name and packet.packet_name == @packet_name)
85
+ super(packet)
86
+ end
87
+ end
88
+
89
+ protected
90
+
91
+ # Adds the meta packet at the beginning of telemetry packet logs
92
+ # Mutex is held during this hook
93
+ def start_new_file_hook
94
+ if @target_name and @packet_name
95
+ if @use_tlm_packet
96
+ packet = System.telemetry.packet(@target_name, @packet_name)
97
+ else
98
+ packet = System.commands.packet(@target_name, @packet_name)
99
+ end
100
+ # Don't take the mutex because it is already held
101
+ write_packet(packet, false)
102
+ end
103
+ end
104
+
105
+ end # class MetaPacketLogWriter
106
+
107
+ end # module Cosmos
@@ -1,450 +1,450 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'cosmos/core_ext/io'
12
- require 'cosmos/packets/packet'
13
- require 'cosmos/io/buffered_file'
14
-
15
- module Cosmos
16
-
17
- # Reads a packet log of either commands or telemetry.
18
- class PacketLogReader
19
- attr_reader :log_type
20
- attr_reader :configuration_name
21
- attr_reader :hostname
22
-
23
- # COSMOS 2.0 log file header definition
24
- COSMOS2_MARKER = 'COSMOS2_'
25
- COSMOS2_HEADER_LENGTH = 128
26
- COSMOS2_MARKER_RANGE = 0..7
27
- COSMOS2_LOG_TYPE_RANGE = 8..10
28
- COSMOS2_CONFIGURATION_NAME_RANGE = 12..43
29
- COSMOS2_HOSTNAME_RANGE = 45..127
30
-
31
- # COSMOS 1.0 log file header definition
32
- COSMOS1_MARKER = 'COSMOS'
33
- COSMOS1_HEADER_LENGTH = 42
34
- COSMOS1_MARKER_RANGE = 0..5
35
- COSMOS1_LOG_TYPE_RANGE = 6..8
36
- COSMOS1_CONFIGURATION_NAME_RANGE = 10..41
37
-
38
- # Create a new log file reader
39
- def initialize
40
- reset()
41
- end
42
-
43
- # Yields back each packet as it is found in the log file.
44
- #
45
- # @param filename [String] The log file to read
46
- # @param identify_and_define [Boolean] Once the packet has been read from
47
- # the log file, whether to both identify the packet by setting the target
48
- # and packet name, and define the packet by populating all the items.
49
- # @param start_time [Time|nil] Time at which to start returning packets.
50
- # Packets found with a timestamp before this time are ignored. Pass nil
51
- # to return all packets.
52
- # @param end_time [Time|nil] Time at which to stop returning packets.
53
- # Packets found with a timestamp after this time are ignored. Pass nil
54
- # to return all packets.
55
- # @yieldparam packet [Packet]
56
- def each(filename, identify_and_define = true, start_time = nil, end_time = nil)
57
- open(filename)
58
-
59
- seek_to_time(start_time) if start_time
60
-
61
- while true
62
- packet = read(identify_and_define)
63
- break unless packet
64
-
65
- received_time = packet.received_time
66
- if received_time
67
- next if start_time and received_time < start_time
68
- break if end_time and received_time > end_time
69
- end
70
-
71
- yield packet
72
- end
73
- ensure
74
- close()
75
- end
76
-
77
- # Returns an analysis of the log file by reading all the packets and
78
- # returning information about each packet. This information maps directly
79
- # to the parameters need by the {#read_at_offset} method and thus should be
80
- # called before using {#read_at_offset}.
81
- #
82
- # @param filename [String] The filename to analyze
83
- # @param progress_callback [Proc] Callback that should receive a single
84
- # floating point parameter which is the percentage done
85
- # @return [Array<Array<Integer, Integer, String, String, Time, Time>] Array
86
- # of arrays for each packet found in the log file consisting of:
87
- # [File position, length, target name, packet name, time formatted,
88
- # received time].
89
- def packet_offsets(filename, progress_callback = nil)
90
- open(filename)
91
- offsets = []
92
- filesize = size().to_f
93
-
94
- while true
95
- current_pos = @file.pos
96
- packet = read(false)
97
- break unless packet
98
- offsets << current_pos
99
- if progress_callback
100
- break if progress_callback.call(current_pos / filesize)
101
- end
102
- end
103
-
104
- return offsets
105
- ensure
106
- close()
107
- end
108
-
109
- # @param filename [String] The log filename to open
110
- # @return [Boolean, Exception] Returns true if successfully changed to configuration specified in log,
111
- # otherwise returns false and potentially an Exception class if an error occurred. If no error occurred
112
- # false indicates that the requested configuration was simply not found
113
- def open(filename)
114
- close()
115
- reset()
116
- @filename = filename
117
- @file = BufferedFile.open(@filename, 'rb')
118
- @bytes_read = 0
119
- return read_file_header()
120
- rescue => err
121
- close()
122
- raise err
123
- end
124
-
125
- # Closes the current log file
126
- def close
127
- @file.close if @file and !@file.closed?
128
- end
129
-
130
- # Read a packet from the log file
131
- #
132
- # @param identify_and_define (see #each)
133
- # @return [Packet]
134
- def read(identify_and_define = true)
135
- # Read the Packet Header
136
- success, target_name, packet_name, received_time = read_entry_header()
137
- return nil unless success
138
-
139
- # Read Packet Data
140
- packet_data = @file.read_length_bytes(4)
141
- return nil unless packet_data and packet_data.length > 0
142
-
143
- if identify_and_define
144
- packet = identify_and_define_packet_data(target_name, packet_name, received_time, packet_data)
145
- else
146
- # Build Packet
147
- packet = Packet.new(target_name, packet_name, :BIG_ENDIAN, nil, packet_data)
148
- packet.set_received_time_fast(received_time)
149
- end
150
-
151
- packet
152
- rescue => err
153
- close()
154
- raise err
155
- end
156
-
157
- # Reads a packet from the opened log file. Should only be used in
158
- # conjunction with {#packet_offsets}.
159
- #
160
- # @param file_offset [Integer] Byte offset into the log file to start
161
- # reading
162
- # @param identify_and_define (see #each)
163
- # @return [Packet]
164
- def read_at_offset(file_offset, identify_and_define = true)
165
- @file.seek(file_offset, IO::SEEK_SET)
166
- return read(identify_and_define)
167
- rescue => err
168
- close()
169
- raise err
170
- end
171
-
172
- # Read the first packet from the log file and reset the file position back
173
- # to the current position. This allows the client to call read multiple
174
- # times to return packets, call first, and continue calling read which will
175
- # return the next packet in the file.
176
- #
177
- # @return [Packet]
178
- def first
179
- original_position = @file.pos
180
- @file.seek(0, IO::SEEK_SET)
181
- read_file_header()
182
- packet = read()
183
- raise "No first packet found" unless packet
184
- @file.seek(original_position, IO::SEEK_SET)
185
- packet.clone
186
- rescue => err
187
- close()
188
- raise err
189
- end
190
-
191
- # Read the last packet from the log file and reset the file position back
192
- # to the current position. This allows the client to call read multiple
193
- # times to return packets, call last, and continue calling read which will
194
- # return the next packet in the file.
195
- #
196
- # @return [Packet]
197
- def last
198
- original_position = @file.pos
199
- @file.seek(-1, IO::SEEK_END)
200
- packet = search(-1)
201
- raise "No last packet found" unless packet
202
- @file.seek(original_position, IO::SEEK_SET)
203
- packet.clone
204
- rescue => err
205
- close()
206
- raise err
207
- end
208
-
209
- # @return [Integer] The size of the log file being processed
210
- def size
211
- @file.stat.size
212
- end
213
-
214
- # @return [Integer] The current file position in the log file
215
- def bytes_read
216
- @file.pos
217
- end
218
-
219
- protected
220
-
221
- def reset
222
- @file = nil
223
- @filename = nil
224
- @log_type = :TLM
225
- @configuration_name = nil
226
- @hostname = nil
227
- @file_header_length = COSMOS2_HEADER_LENGTH
228
- end
229
-
230
- # This is best effort. May return unidentified/undefined packets
231
- def identify_and_define_packet_data(target_name, packet_name, received_time, packet_data)
232
- packet = nil
233
- unless (target_name and packet_name)
234
- if @log_type == :TLM
235
- packet = System.telemetry.identify!(packet_data)
236
- else
237
- packet = System.commands.identify(packet_data)
238
- end
239
- packet.set_received_time_fast(received_time) if packet
240
- else
241
- begin
242
- if @log_type == :TLM
243
- packet = System.telemetry.packet(target_name, packet_name)
244
- else
245
- packet = System.commands.packet(target_name, packet_name)
246
- end
247
- packet.buffer = packet_data
248
- packet.set_received_time_fast(received_time)
249
- rescue
250
- # Could not find a definition for this packet
251
- Logger.instance.error "Unknown packet #{target_name} #{packet_name}"
252
- packet = Packet.new(target_name, packet_name, :BIG_ENDIAN, nil, packet_data)
253
- packet.set_received_time_fast(received_time)
254
- end
255
- end
256
- packet
257
- end
258
-
259
- # Should return if successfully switched to requested configuration
260
- def read_file_header
261
- header = @file.read(COSMOS2_HEADER_LENGTH)
262
- if header and header.length == COSMOS2_HEADER_LENGTH
263
- if header[COSMOS2_MARKER_RANGE] == COSMOS2_MARKER
264
- # Found COSMOS 2 File Header
265
- @log_type = header[COSMOS2_LOG_TYPE_RANGE].intern
266
- raise "Unknown log type #{@log_type}" unless [:CMD, :TLM].include? @log_type
267
- @configuration_name = header[COSMOS2_CONFIGURATION_NAME_RANGE]
268
- @hostname = header[COSMOS2_HOSTNAME_RANGE].strip
269
- @file_header_length = COSMOS2_HEADER_LENGTH
270
- new_config_name, error = System.load_configuration(@configuration_name)
271
- return true, error if new_config_name == @configuration_name
272
- return false, error # Did not successfully change to requested configuration name
273
- elsif header[COSMOS1_MARKER_RANGE] == COSMOS1_MARKER
274
- # Found COSMOS 1 File Header
275
- @log_type = header[COSMOS1_LOG_TYPE_RANGE].upcase.intern
276
- raise "Unknown log type #{@log_type}" unless [:CMD, :TLM].include? @log_type
277
- @configuration_name = header[COSMOS1_CONFIGURATION_NAME_RANGE]
278
- @hostname = nil
279
- @file_header_length = COSMOS1_HEADER_LENGTH
280
- # Move back to beginning of first packet
281
- @file.seek(COSMOS1_HEADER_LENGTH, IO::SEEK_SET)
282
- new_config_name, error = System.load_configuration(@configuration_name)
283
- return true, error if new_config_name == @configuration_name
284
- return false, error # Did not successfully change to requested configuration name
285
- else
286
- raise "COSMOS file header not found on packet log"
287
- end
288
- else
289
- raise "Failed to read at least #{COSMOS2_HEADER_LENGTH} bytes from packet log"
290
- end
291
- end
292
-
293
- def read_entry_header
294
- # Read Received Time
295
- time_seconds = @file.read(4)
296
- return [nil, nil, nil, nil] if time_seconds.nil? or time_seconds.length != 4
297
- time_seconds = time_seconds.unpack('N')[0]
298
- time_microseconds = @file.read(4)
299
- return [nil, nil, nil, nil] if time_microseconds.nil? or time_microseconds.length != 4
300
- time_microseconds = time_microseconds.unpack('N')[0]
301
- received_time = Time.at(time_seconds, time_microseconds)
302
-
303
- # Read Target Name
304
- target_name = @file.read_length_bytes(1)
305
- return [nil, nil, nil, nil] unless target_name and target_name.length > 0
306
-
307
- # Read Packet Name
308
- packet_name = @file.read_length_bytes(1)
309
- return [nil, nil, nil, nil] unless packet_name and packet_name.length > 0
310
-
311
- return [true, target_name, packet_name, received_time]
312
- end
313
-
314
- def test
315
- found = false
316
-
317
- # Save original position
318
- original_position = @file.pos
319
-
320
- begin
321
- # Try to read the packet header
322
- # This will fail with file read errors and invalid timestamps
323
- success, target_name, packet_name, _ = read_entry_header()
324
- if success
325
- if target_name !~ File::NON_ASCII_PRINTABLE and packet_name !~ File::NON_ASCII_PRINTABLE
326
- packet_data_length = @file.read(4)
327
- if packet_data_length.length == 4 and packet_data_length.unpack('N')[0] > 0
328
- if @log_type == :TLM
329
- if System.telemetry.packet(target_name, packet_name)
330
- found = true
331
- end
332
- else
333
- if System.commands.packet(target_name, packet_name)
334
- found = true
335
- end
336
- end
337
- end
338
- end
339
- end
340
- rescue
341
- # Packet not found
342
- end
343
-
344
- # Return to the original position
345
- @file.seek(original_position, IO::SEEK_SET)
346
-
347
- # Indicate if a packet was found
348
- found
349
- end
350
-
351
- # Searchs for the nearest packet to the current io position
352
- # Returns the packet if found, and leaves the io position
353
- # either before or after the packet found
354
- def search(offset_increment, leave_position = :AFTER)
355
- position = @file.pos
356
- @file.seek(0, IO::SEEK_END)
357
- size = @file.pos
358
- @file.seek(position, IO::SEEK_SET)
359
-
360
- while (@file.pos > 0 and @file.pos < size)
361
- if test()
362
- # Save position
363
- position = @file.pos
364
-
365
- packet = read()
366
-
367
- if packet
368
- if leave_position != :AFTER
369
- # Restore position
370
- @file.seek(position, IO::SEEK_SET)
371
- end
372
-
373
- return packet
374
- end
375
-
376
- # Restore position
377
- @file.seek(position, IO::SEEK_SET)
378
- end
379
- @file.seek(offset_increment, IO::SEEK_CUR)
380
- end
381
-
382
- # Return nil if we search beyond the size of the file
383
- nil
384
- end
385
-
386
- def seek_to_time(time)
387
- if time
388
- position = @file.pos
389
-
390
- begin
391
- # Read the first packet in the log
392
- first_packet = first()
393
- raise "Error reading first packet" unless first
394
- raise "First Packet does not contain a packet received time" unless first_packet.received_time
395
-
396
- # Read the last packet in the log
397
- file_size = size()
398
- last_packet = last()
399
- raise "Search failed looking for last packet" unless last_packet
400
- raise "Last Packet does not contain a packet received time" unless last_packet.received_time
401
-
402
- if time >= first_packet.received_time and time <= last_packet.received_time
403
- # Guess at where to start looking for time in log
404
- percentage = (time - first_packet.received_time) / (last_packet.received_time - first_packet.received_time)
405
- offset = (percentage * file_size.to_f).to_i
406
- offset = @file_header_length if offset < @file_header_length
407
- @file.seek(offset, IO::SEEK_SET)
408
-
409
- # Move backwards until a packet before the time is found
410
- while true
411
- packet = search(-1, :BEFORE)
412
- break if !packet or packet.received_time <= time
413
-
414
- # Guess again
415
- percentage = 1.0 - ((packet.received_time - time) / (packet.received_time - first_packet.received_time))
416
- offset = (percentage * @file.pos.to_f).to_i
417
- offset = @file_header_length if offset < @file_header_length
418
- @file.seek(offset, IO::SEEK_SET)
419
- end
420
-
421
- # Move forwards until a packet equal to or after the time is found
422
- while true
423
- position = @file.pos
424
- packet = read(false)
425
- raise "Search failed looking for packet after time" unless packet
426
- if packet.received_time >= time
427
- # Back up this packet so the read can get it because we want it
428
- @file.seek(position, IO::SEEK_SET)
429
- break
430
- end
431
- end
432
-
433
- else
434
- if time > last_packet.received_time
435
- # File is entirely before time, so jump to the end
436
- @file.seek(0, IO::SEEK_END)
437
- else
438
- raise "File does not include time"
439
- end
440
- end
441
- rescue # Optimized search failed or not supported
442
- # Restore position
443
- @file.seek(position, IO::SEEK_SET)
444
- end
445
- end
446
- end
447
-
448
- end # class PacketLogReader
449
-
450
- end # module Cosmos
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos/core_ext/io'
12
+ require 'cosmos/packets/packet'
13
+ require 'cosmos/io/buffered_file'
14
+
15
+ module Cosmos
16
+
17
+ # Reads a packet log of either commands or telemetry.
18
+ class PacketLogReader
19
+ attr_reader :log_type
20
+ attr_reader :configuration_name
21
+ attr_reader :hostname
22
+
23
+ # COSMOS 2.0 log file header definition
24
+ COSMOS2_MARKER = 'COSMOS2_'
25
+ COSMOS2_HEADER_LENGTH = 128
26
+ COSMOS2_MARKER_RANGE = 0..7
27
+ COSMOS2_LOG_TYPE_RANGE = 8..10
28
+ COSMOS2_CONFIGURATION_NAME_RANGE = 12..43
29
+ COSMOS2_HOSTNAME_RANGE = 45..127
30
+
31
+ # COSMOS 1.0 log file header definition
32
+ COSMOS1_MARKER = 'COSMOS'
33
+ COSMOS1_HEADER_LENGTH = 42
34
+ COSMOS1_MARKER_RANGE = 0..5
35
+ COSMOS1_LOG_TYPE_RANGE = 6..8
36
+ COSMOS1_CONFIGURATION_NAME_RANGE = 10..41
37
+
38
+ # Create a new log file reader
39
+ def initialize
40
+ reset()
41
+ end
42
+
43
+ # Yields back each packet as it is found in the log file.
44
+ #
45
+ # @param filename [String] The log file to read
46
+ # @param identify_and_define [Boolean] Once the packet has been read from
47
+ # the log file, whether to both identify the packet by setting the target
48
+ # and packet name, and define the packet by populating all the items.
49
+ # @param start_time [Time|nil] Time at which to start returning packets.
50
+ # Packets found with a timestamp before this time are ignored. Pass nil
51
+ # to return all packets.
52
+ # @param end_time [Time|nil] Time at which to stop returning packets.
53
+ # Packets found with a timestamp after this time are ignored. Pass nil
54
+ # to return all packets.
55
+ # @yieldparam packet [Packet]
56
+ def each(filename, identify_and_define = true, start_time = nil, end_time = nil)
57
+ open(filename)
58
+
59
+ seek_to_time(start_time) if start_time
60
+
61
+ while true
62
+ packet = read(identify_and_define)
63
+ break unless packet
64
+
65
+ received_time = packet.received_time
66
+ if received_time
67
+ next if start_time and received_time < start_time
68
+ break if end_time and received_time > end_time
69
+ end
70
+
71
+ yield packet
72
+ end
73
+ ensure
74
+ close()
75
+ end
76
+
77
+ # Returns an analysis of the log file by reading all the packets and
78
+ # returning information about each packet. This information maps directly
79
+ # to the parameters need by the {#read_at_offset} method and thus should be
80
+ # called before using {#read_at_offset}.
81
+ #
82
+ # @param filename [String] The filename to analyze
83
+ # @param progress_callback [Proc] Callback that should receive a single
84
+ # floating point parameter which is the percentage done
85
+ # @return [Array<Array<Integer, Integer, String, String, Time, Time>] Array
86
+ # of arrays for each packet found in the log file consisting of:
87
+ # [File position, length, target name, packet name, time formatted,
88
+ # received time].
89
+ def packet_offsets(filename, progress_callback = nil)
90
+ open(filename)
91
+ offsets = []
92
+ filesize = size().to_f
93
+
94
+ while true
95
+ current_pos = @file.pos
96
+ packet = read(false)
97
+ break unless packet
98
+ offsets << current_pos
99
+ if progress_callback
100
+ break if progress_callback.call(current_pos / filesize)
101
+ end
102
+ end
103
+
104
+ return offsets
105
+ ensure
106
+ close()
107
+ end
108
+
109
+ # @param filename [String] The log filename to open
110
+ # @return [Boolean, Exception] Returns true if successfully changed to configuration specified in log,
111
+ # otherwise returns false and potentially an Exception class if an error occurred. If no error occurred
112
+ # false indicates that the requested configuration was simply not found
113
+ def open(filename)
114
+ close()
115
+ reset()
116
+ @filename = filename
117
+ @file = BufferedFile.open(@filename, 'rb')
118
+ @bytes_read = 0
119
+ return read_file_header()
120
+ rescue => err
121
+ close()
122
+ raise err
123
+ end
124
+
125
+ # Closes the current log file
126
+ def close
127
+ @file.close if @file and !@file.closed?
128
+ end
129
+
130
+ # Read a packet from the log file
131
+ #
132
+ # @param identify_and_define (see #each)
133
+ # @return [Packet]
134
+ def read(identify_and_define = true)
135
+ # Read the Packet Header
136
+ success, target_name, packet_name, received_time = read_entry_header()
137
+ return nil unless success
138
+
139
+ # Read Packet Data
140
+ packet_data = @file.read_length_bytes(4)
141
+ return nil unless packet_data and packet_data.length > 0
142
+
143
+ if identify_and_define
144
+ packet = identify_and_define_packet_data(target_name, packet_name, received_time, packet_data)
145
+ else
146
+ # Build Packet
147
+ packet = Packet.new(target_name, packet_name, :BIG_ENDIAN, nil, packet_data)
148
+ packet.set_received_time_fast(received_time)
149
+ end
150
+
151
+ packet
152
+ rescue => err
153
+ close()
154
+ raise err
155
+ end
156
+
157
+ # Reads a packet from the opened log file. Should only be used in
158
+ # conjunction with {#packet_offsets}.
159
+ #
160
+ # @param file_offset [Integer] Byte offset into the log file to start
161
+ # reading
162
+ # @param identify_and_define (see #each)
163
+ # @return [Packet]
164
+ def read_at_offset(file_offset, identify_and_define = true)
165
+ @file.seek(file_offset, IO::SEEK_SET)
166
+ return read(identify_and_define)
167
+ rescue => err
168
+ close()
169
+ raise err
170
+ end
171
+
172
+ # Read the first packet from the log file and reset the file position back
173
+ # to the current position. This allows the client to call read multiple
174
+ # times to return packets, call first, and continue calling read which will
175
+ # return the next packet in the file.
176
+ #
177
+ # @return [Packet]
178
+ def first
179
+ original_position = @file.pos
180
+ @file.seek(0, IO::SEEK_SET)
181
+ read_file_header()
182
+ packet = read()
183
+ raise "No first packet found" unless packet
184
+ @file.seek(original_position, IO::SEEK_SET)
185
+ packet.clone
186
+ rescue => err
187
+ close()
188
+ raise err
189
+ end
190
+
191
+ # Read the last packet from the log file and reset the file position back
192
+ # to the current position. This allows the client to call read multiple
193
+ # times to return packets, call last, and continue calling read which will
194
+ # return the next packet in the file.
195
+ #
196
+ # @return [Packet]
197
+ def last
198
+ original_position = @file.pos
199
+ @file.seek(-1, IO::SEEK_END)
200
+ packet = search(-1)
201
+ raise "No last packet found" unless packet
202
+ @file.seek(original_position, IO::SEEK_SET)
203
+ packet.clone
204
+ rescue => err
205
+ close()
206
+ raise err
207
+ end
208
+
209
+ # @return [Integer] The size of the log file being processed
210
+ def size
211
+ @file.stat.size
212
+ end
213
+
214
+ # @return [Integer] The current file position in the log file
215
+ def bytes_read
216
+ @file.pos
217
+ end
218
+
219
+ protected
220
+
221
+ def reset
222
+ @file = nil
223
+ @filename = nil
224
+ @log_type = :TLM
225
+ @configuration_name = nil
226
+ @hostname = nil
227
+ @file_header_length = COSMOS2_HEADER_LENGTH
228
+ end
229
+
230
+ # This is best effort. May return unidentified/undefined packets
231
+ def identify_and_define_packet_data(target_name, packet_name, received_time, packet_data)
232
+ packet = nil
233
+ unless (target_name and packet_name)
234
+ if @log_type == :TLM
235
+ packet = System.telemetry.identify!(packet_data)
236
+ else
237
+ packet = System.commands.identify(packet_data)
238
+ end
239
+ packet.set_received_time_fast(received_time) if packet
240
+ else
241
+ begin
242
+ if @log_type == :TLM
243
+ packet = System.telemetry.packet(target_name, packet_name)
244
+ else
245
+ packet = System.commands.packet(target_name, packet_name)
246
+ end
247
+ packet.buffer = packet_data
248
+ packet.set_received_time_fast(received_time)
249
+ rescue
250
+ # Could not find a definition for this packet
251
+ Logger.instance.error "Unknown packet #{target_name} #{packet_name}"
252
+ packet = Packet.new(target_name, packet_name, :BIG_ENDIAN, nil, packet_data)
253
+ packet.set_received_time_fast(received_time)
254
+ end
255
+ end
256
+ packet
257
+ end
258
+
259
+ # Should return if successfully switched to requested configuration
260
+ def read_file_header
261
+ header = @file.read(COSMOS2_HEADER_LENGTH)
262
+ if header and header.length == COSMOS2_HEADER_LENGTH
263
+ if header[COSMOS2_MARKER_RANGE] == COSMOS2_MARKER
264
+ # Found COSMOS 2 File Header
265
+ @log_type = header[COSMOS2_LOG_TYPE_RANGE].intern
266
+ raise "Unknown log type #{@log_type}" unless [:CMD, :TLM].include? @log_type
267
+ @configuration_name = header[COSMOS2_CONFIGURATION_NAME_RANGE]
268
+ @hostname = header[COSMOS2_HOSTNAME_RANGE].strip
269
+ @file_header_length = COSMOS2_HEADER_LENGTH
270
+ new_config_name, error = System.load_configuration(@configuration_name)
271
+ return true, error if new_config_name == @configuration_name
272
+ return false, error # Did not successfully change to requested configuration name
273
+ elsif header[COSMOS1_MARKER_RANGE] == COSMOS1_MARKER
274
+ # Found COSMOS 1 File Header
275
+ @log_type = header[COSMOS1_LOG_TYPE_RANGE].upcase.intern
276
+ raise "Unknown log type #{@log_type}" unless [:CMD, :TLM].include? @log_type
277
+ @configuration_name = header[COSMOS1_CONFIGURATION_NAME_RANGE]
278
+ @hostname = nil
279
+ @file_header_length = COSMOS1_HEADER_LENGTH
280
+ # Move back to beginning of first packet
281
+ @file.seek(COSMOS1_HEADER_LENGTH, IO::SEEK_SET)
282
+ new_config_name, error = System.load_configuration(@configuration_name)
283
+ return true, error if new_config_name == @configuration_name
284
+ return false, error # Did not successfully change to requested configuration name
285
+ else
286
+ raise "COSMOS file header not found on packet log"
287
+ end
288
+ else
289
+ raise "Failed to read at least #{COSMOS2_HEADER_LENGTH} bytes from packet log"
290
+ end
291
+ end
292
+
293
+ def read_entry_header
294
+ # Read Received Time
295
+ time_seconds = @file.read(4)
296
+ return [nil, nil, nil, nil] if time_seconds.nil? or time_seconds.length != 4
297
+ time_seconds = time_seconds.unpack('N')[0]
298
+ time_microseconds = @file.read(4)
299
+ return [nil, nil, nil, nil] if time_microseconds.nil? or time_microseconds.length != 4
300
+ time_microseconds = time_microseconds.unpack('N')[0]
301
+ received_time = Time.at(time_seconds, time_microseconds)
302
+
303
+ # Read Target Name
304
+ target_name = @file.read_length_bytes(1)
305
+ return [nil, nil, nil, nil] unless target_name and target_name.length > 0
306
+
307
+ # Read Packet Name
308
+ packet_name = @file.read_length_bytes(1)
309
+ return [nil, nil, nil, nil] unless packet_name and packet_name.length > 0
310
+
311
+ return [true, target_name, packet_name, received_time]
312
+ end
313
+
314
+ def test
315
+ found = false
316
+
317
+ # Save original position
318
+ original_position = @file.pos
319
+
320
+ begin
321
+ # Try to read the packet header
322
+ # This will fail with file read errors and invalid timestamps
323
+ success, target_name, packet_name, _ = read_entry_header()
324
+ if success
325
+ if target_name !~ File::NON_ASCII_PRINTABLE and packet_name !~ File::NON_ASCII_PRINTABLE
326
+ packet_data_length = @file.read(4)
327
+ if packet_data_length.length == 4 and packet_data_length.unpack('N')[0] > 0
328
+ if @log_type == :TLM
329
+ if System.telemetry.packet(target_name, packet_name)
330
+ found = true
331
+ end
332
+ else
333
+ if System.commands.packet(target_name, packet_name)
334
+ found = true
335
+ end
336
+ end
337
+ end
338
+ end
339
+ end
340
+ rescue
341
+ # Packet not found
342
+ end
343
+
344
+ # Return to the original position
345
+ @file.seek(original_position, IO::SEEK_SET)
346
+
347
+ # Indicate if a packet was found
348
+ found
349
+ end
350
+
351
+ # Searchs for the nearest packet to the current io position
352
+ # Returns the packet if found, and leaves the io position
353
+ # either before or after the packet found
354
+ def search(offset_increment, leave_position = :AFTER)
355
+ position = @file.pos
356
+ @file.seek(0, IO::SEEK_END)
357
+ size = @file.pos
358
+ @file.seek(position, IO::SEEK_SET)
359
+
360
+ while (@file.pos > 0 and @file.pos < size)
361
+ if test()
362
+ # Save position
363
+ position = @file.pos
364
+
365
+ packet = read()
366
+
367
+ if packet
368
+ if leave_position != :AFTER
369
+ # Restore position
370
+ @file.seek(position, IO::SEEK_SET)
371
+ end
372
+
373
+ return packet
374
+ end
375
+
376
+ # Restore position
377
+ @file.seek(position, IO::SEEK_SET)
378
+ end
379
+ @file.seek(offset_increment, IO::SEEK_CUR)
380
+ end
381
+
382
+ # Return nil if we search beyond the size of the file
383
+ nil
384
+ end
385
+
386
+ def seek_to_time(time)
387
+ if time
388
+ position = @file.pos
389
+
390
+ begin
391
+ # Read the first packet in the log
392
+ first_packet = first()
393
+ raise "Error reading first packet" unless first
394
+ raise "First Packet does not contain a packet received time" unless first_packet.received_time
395
+
396
+ # Read the last packet in the log
397
+ file_size = size()
398
+ last_packet = last()
399
+ raise "Search failed looking for last packet" unless last_packet
400
+ raise "Last Packet does not contain a packet received time" unless last_packet.received_time
401
+
402
+ if time >= first_packet.received_time and time <= last_packet.received_time
403
+ # Guess at where to start looking for time in log
404
+ percentage = (time - first_packet.received_time) / (last_packet.received_time - first_packet.received_time)
405
+ offset = (percentage * file_size.to_f).to_i
406
+ offset = @file_header_length if offset < @file_header_length
407
+ @file.seek(offset, IO::SEEK_SET)
408
+
409
+ # Move backwards until a packet before the time is found
410
+ while true
411
+ packet = search(-1, :BEFORE)
412
+ break if !packet or packet.received_time <= time
413
+
414
+ # Guess again
415
+ percentage = 1.0 - ((packet.received_time - time) / (packet.received_time - first_packet.received_time))
416
+ offset = (percentage * @file.pos.to_f).to_i
417
+ offset = @file_header_length if offset < @file_header_length
418
+ @file.seek(offset, IO::SEEK_SET)
419
+ end
420
+
421
+ # Move forwards until a packet equal to or after the time is found
422
+ while true
423
+ position = @file.pos
424
+ packet = read(false)
425
+ raise "Search failed looking for packet after time" unless packet
426
+ if packet.received_time >= time
427
+ # Back up this packet so the read can get it because we want it
428
+ @file.seek(position, IO::SEEK_SET)
429
+ break
430
+ end
431
+ end
432
+
433
+ else
434
+ if time > last_packet.received_time
435
+ # File is entirely before time, so jump to the end
436
+ @file.seek(0, IO::SEEK_END)
437
+ else
438
+ raise "File does not include time"
439
+ end
440
+ end
441
+ rescue # Optimized search failed or not supported
442
+ # Restore position
443
+ @file.seek(position, IO::SEEK_SET)
444
+ end
445
+ end
446
+ end
447
+
448
+ end # class PacketLogReader
449
+
450
+ end # module Cosmos