cosmos 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (912) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +48 -48
  4. data/.travis.yml +7 -7
  5. data/CONTRIBUTING.txt +50 -50
  6. data/Gemfile +6 -6
  7. data/Guardfile +27 -27
  8. data/LICENSE.txt +879 -879
  9. data/Manifest.txt +1116 -1114
  10. data/README.md +109 -107
  11. data/Rakefile +214 -214
  12. data/autohotkey/config/data/diamond.STL +57 -57
  13. data/autohotkey/config/system/system.txt +34 -34
  14. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  15. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  16. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  17. data/autohotkey/config/targets/COSMOS/target.txt +5 -5
  18. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  19. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  20. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
  21. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
  22. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -294
  23. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
  24. data/autohotkey/config/targets/INST/screens/array.txt +7 -7
  25. data/autohotkey/config/targets/INST/screens/block.txt +8 -8
  26. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
  27. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
  28. data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
  29. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
  30. data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
  31. data/autohotkey/config/targets/INST/screens/image.txt +21 -21
  32. data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
  33. data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
  34. data/autohotkey/config/targets/INST/screens/other.txt +25 -25
  35. data/autohotkey/config/targets/INST/screens/params.txt +25 -25
  36. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
  37. data/autohotkey/config/targets/INST/target.txt +26 -26
  38. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  39. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
  40. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  41. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
  42. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
  43. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
  44. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
  45. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  46. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  47. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  48. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
  49. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  50. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  51. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  52. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  53. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  54. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  55. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  56. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  57. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
  58. data/autohotkey/config/tools/launcher/launcher.txt +38 -38
  59. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
  60. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
  61. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
  62. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
  63. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
  64. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
  65. data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
  66. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  67. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  68. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
  69. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
  70. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
  71. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
  72. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
  73. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
  74. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
  75. data/autohotkey/lib/example_background_task.rb +42 -42
  76. data/autohotkey/lib/user_version.rb +3 -3
  77. data/autohotkey/procedures/clear_util.rb +7 -7
  78. data/autohotkey/procedures/collect.rb +18 -18
  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 +20 -20
  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/Replay.bat +59 -59
  101. data/autohotkey/tools/ReplayAHK +17 -17
  102. data/autohotkey/tools/ScriptRunner +14 -14
  103. data/autohotkey/tools/ScriptRunnerAHK +20 -20
  104. data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
  105. data/autohotkey/tools/TableManager +14 -14
  106. data/autohotkey/tools/TableManagerAHK +30 -30
  107. data/autohotkey/tools/TestRunner +15 -15
  108. data/autohotkey/tools/TestRunnerAHK +17 -17
  109. data/autohotkey/tools/TestRunnerAHK2 +17 -17
  110. data/autohotkey/tools/TestRunnerAHK3 +17 -17
  111. data/autohotkey/tools/TestRunnerAHK4 +17 -17
  112. data/autohotkey/tools/TlmExtractor +15 -15
  113. data/autohotkey/tools/TlmExtractorAHK +19 -19
  114. data/autohotkey/tools/TlmExtractorAHK2 +16 -16
  115. data/autohotkey/tools/TlmExtractorAHK3 +16 -16
  116. data/autohotkey/tools/TlmGrapher +14 -14
  117. data/autohotkey/tools/TlmGrapherAHK +19 -19
  118. data/autohotkey/tools/TlmGrapherAHK2 +23 -23
  119. data/autohotkey/tools/TlmGrapherAHK3 +17 -17
  120. data/autohotkey/tools/TlmGrapherAHK4 +17 -17
  121. data/autohotkey/tools/TlmViewer +14 -14
  122. data/autohotkey/tools/TlmViewerAHK +28 -28
  123. data/autohotkey/tools/TlmViewerAHK2 +18 -18
  124. data/autohotkey/tools/TlmViewerAHK3 +18 -18
  125. data/autohotkey/tools/TlmViewerAHK4 +18 -18
  126. data/autohotkey/tools/TlmViewerAHK5 +18 -18
  127. data/autohotkey/tools/autohotkey.rb +37 -37
  128. data/autohotkey/tools/cmd_extractor.ahk +27 -27
  129. data/autohotkey/tools/cmd_sender.ahk +182 -162
  130. data/autohotkey/tools/cmd_tlm_server.ahk +89 -89
  131. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
  132. data/autohotkey/tools/data_viewer.ahk +135 -135
  133. data/autohotkey/tools/handbook_creator.ahk +23 -23
  134. data/autohotkey/tools/launcher.ahk +41 -41
  135. data/autohotkey/tools/limits_monitor.ahk +70 -70
  136. data/autohotkey/tools/open_gl_builder.ahk +134 -134
  137. data/autohotkey/tools/packet_viewer.ahk +143 -143
  138. data/autohotkey/tools/packet_viewer2.ahk +9 -9
  139. data/autohotkey/tools/replay.ahk +98 -98
  140. data/autohotkey/tools/script_runner.ahk +589 -589
  141. data/autohotkey/tools/script_runner2.ahk +34 -31
  142. data/autohotkey/tools/table_manager.ahk +220 -220
  143. data/autohotkey/tools/test_runner.ahk +262 -259
  144. data/autohotkey/tools/test_runner2.ahk +52 -52
  145. data/autohotkey/tools/test_runner3.ahk +13 -13
  146. data/autohotkey/tools/tlm_extractor.ahk +272 -272
  147. data/autohotkey/tools/tlm_grapher.ahk +642 -642
  148. data/autohotkey/tools/tlm_grapher2.ahk +115 -115
  149. data/autohotkey/tools/tlm_grapher3.ahk +24 -24
  150. data/autohotkey/tools/tlm_viewer.ahk +133 -133
  151. data/autohotkey/tools/tlm_viewer2.ahk +50 -49
  152. data/autohotkey/tools/tlm_viewer4.ahk +4 -4
  153. data/autohotkey/tools/tlm_viewer5.ahk +20 -20
  154. data/bin/cosmos +96 -96
  155. data/bin/cstol_converter +1166 -1166
  156. data/bin/rubysloc +85 -85
  157. data/cosmos.gemspec +98 -97
  158. data/data/about.txt +4 -4
  159. data/data/crc.txt +306 -305
  160. data/data/diamond.STL +57 -57
  161. data/data/legal.txt +9 -9
  162. data/demo/Gemfile +6 -6
  163. data/demo/Launcher +15 -15
  164. data/demo/Launcher.bat +59 -59
  165. data/demo/Rakefile +61 -61
  166. data/demo/config/data/crc.txt +222 -206
  167. data/demo/config/data/diamond.STL +57 -57
  168. data/demo/config/data/meta_init.txt +4 -4
  169. data/demo/config/system/system.txt +34 -34
  170. data/demo/config/system/system2.txt +33 -33
  171. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  172. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  173. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  174. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
  175. data/demo/config/targets/COSMOS/screens/version.txt +19 -19
  176. data/demo/config/targets/COSMOS/target.txt +11 -11
  177. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
  178. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +3 -3
  179. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
  180. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
  181. data/demo/config/targets/EXAMPLE/target.txt +6 -6
  182. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  183. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  184. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
  185. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
  186. data/demo/config/targets/INST/lib/sim_inst.rb +305 -294
  187. data/demo/config/targets/INST/screens/adcs.txt +46 -46
  188. data/demo/config/targets/INST/screens/array.txt +15 -15
  189. data/demo/config/targets/INST/screens/block.txt +8 -8
  190. data/demo/config/targets/INST/screens/commanding.txt +30 -30
  191. data/demo/config/targets/INST/screens/graphs.txt +14 -14
  192. data/demo/config/targets/INST/screens/ground.txt +25 -25
  193. data/demo/config/targets/INST/screens/hs.txt +44 -44
  194. data/demo/config/targets/INST/screens/latest.txt +23 -23
  195. data/demo/config/targets/INST/screens/other.txt +29 -29
  196. data/demo/config/targets/INST/screens/tabs.txt +70 -70
  197. data/demo/config/targets/INST/target.txt +33 -33
  198. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  199. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
  200. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  201. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
  202. data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
  203. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -12
  204. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
  205. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
  206. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +54 -48
  207. data/demo/config/targets/TEMPLATED/target.txt +6 -6
  208. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +33 -33
  209. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +29 -29
  210. data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
  211. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
  212. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  213. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  214. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  215. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
  216. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  217. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  218. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  219. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  220. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  221. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  222. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  223. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  224. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
  225. data/demo/config/tools/launcher/launcher.txt +45 -45
  226. data/demo/config/tools/launcher/launcher2.txt +45 -45
  227. data/demo/config/tools/script_runner/script_runner.txt +3 -3
  228. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
  229. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  230. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  231. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  232. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  233. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  234. data/demo/config/tools/test_runner/test_runner.txt +17 -17
  235. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  236. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  237. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  238. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  239. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
  240. data/demo/lib/example_background_task.rb +57 -52
  241. data/demo/lib/example_target.rb +113 -108
  242. data/demo/lib/scpi_target.rb +74 -74
  243. data/demo/lib/user_version.rb +3 -3
  244. data/demo/procedures/checks.rb +11 -11
  245. data/demo/procedures/clear_util.rb +7 -7
  246. data/demo/procedures/collect.rb +18 -18
  247. data/demo/procedures/collect_util.rb +14 -14
  248. data/demo/procedures/cosmos_api_test.rb +293 -293
  249. data/demo/procedures/disconnect.rb +29 -29
  250. data/demo/procedures/example_test.rb +182 -182
  251. data/demo/procedures/plot_test.rb +8 -8
  252. data/demo/procedures/run_example_test.rb +3 -3
  253. data/demo/procedures/test.rb +51 -51
  254. data/demo/tools/CmdExtractor +15 -15
  255. data/demo/tools/CmdExtractor.bat +59 -59
  256. data/demo/tools/CmdSender +15 -15
  257. data/demo/tools/CmdSender.bat +59 -59
  258. data/demo/tools/CmdTlmServer +15 -15
  259. data/demo/tools/CmdTlmServer.bat +59 -59
  260. data/demo/tools/DataViewer +15 -15
  261. data/demo/tools/DataViewer.bat +59 -59
  262. data/demo/tools/ExampleTarget +15 -15
  263. data/demo/tools/ExampleTarget.bat +59 -59
  264. data/demo/tools/HandbookCreator +15 -15
  265. data/demo/tools/HandbookCreator.bat +61 -61
  266. data/demo/tools/Launcher +15 -15
  267. data/demo/tools/Launcher.bat +59 -59
  268. data/demo/tools/LimitsMonitor +15 -15
  269. data/demo/tools/LimitsMonitor.bat +59 -59
  270. data/demo/tools/OpenGLBuilder +15 -15
  271. data/demo/tools/OpenGLBuilder.bat +59 -59
  272. data/demo/tools/PacketViewer +15 -15
  273. data/demo/tools/PacketViewer.bat +59 -59
  274. data/demo/tools/Replay +15 -15
  275. data/demo/tools/Replay.bat +59 -59
  276. data/demo/tools/ScpiTarget +15 -15
  277. data/demo/tools/ScpiTarget.bat +59 -59
  278. data/demo/tools/ScriptRunner +15 -15
  279. data/demo/tools/ScriptRunner.bat +59 -59
  280. data/demo/tools/TableManager +15 -15
  281. data/demo/tools/TableManager.bat +59 -59
  282. data/demo/tools/TestRunner +15 -15
  283. data/demo/tools/TestRunner.bat +59 -59
  284. data/demo/tools/TlmExtractor +15 -15
  285. data/demo/tools/TlmExtractor.bat +59 -59
  286. data/demo/tools/TlmGrapher +15 -15
  287. data/demo/tools/TlmGrapher.bat +59 -59
  288. data/demo/tools/TlmViewer +15 -15
  289. data/demo/tools/TlmViewer.bat +59 -59
  290. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  291. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  292. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  293. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  294. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  295. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  296. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  297. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  298. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  299. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  300. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  301. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  302. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  303. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  304. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  305. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  306. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  307. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  308. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  309. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  310. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  311. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  312. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  313. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  314. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  315. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  316. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  317. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
  318. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  319. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  320. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  321. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  322. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  323. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  324. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  325. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  326. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  327. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  328. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  329. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  330. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  331. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  332. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  333. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  334. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  335. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  336. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  337. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  338. data/ext/cosmos/ext/array/array.c +111 -111
  339. data/ext/cosmos/ext/array/extconf.rb +13 -13
  340. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
  341. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
  342. data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
  343. data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
  344. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
  345. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
  346. data/ext/cosmos/ext/crc/crc.c +341 -341
  347. data/ext/cosmos/ext/crc/extconf.rb +12 -12
  348. data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
  349. data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
  350. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
  351. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +261 -261
  352. data/ext/cosmos/ext/packet/extconf.rb +13 -13
  353. data/ext/cosmos/ext/packet/packet.c +339 -339
  354. data/ext/cosmos/ext/platform/extconf.rb +13 -13
  355. data/ext/cosmos/ext/platform/platform.c +81 -81
  356. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
  357. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
  358. data/ext/cosmos/ext/string/extconf.rb +13 -13
  359. data/ext/cosmos/ext/string/string.c +49 -49
  360. data/ext/cosmos/ext/structure/structure.c +894 -894
  361. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
  362. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
  363. data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
  364. data/ext/cosmos/ext/telemetry/telemetry.c +306 -306
  365. data/ext/mkrf_conf.rb +40 -40
  366. data/install/Gemfile +6 -6
  367. data/install/Launcher +14 -14
  368. data/install/Launcher.bat +59 -59
  369. data/install/Rakefile +61 -61
  370. data/install/config/data/crc.txt +134 -133
  371. data/install/config/system/system.txt +29 -29
  372. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  373. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  374. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  375. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  376. data/install/config/targets/COSMOS/screens/version.txt +19 -19
  377. data/install/config/targets/COSMOS/target.txt +8 -8
  378. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  379. data/install/config/tools/data_viewer/data_viewer.txt +3 -3
  380. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
  381. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  382. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  383. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  384. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
  385. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  386. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  387. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  388. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  389. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  390. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  391. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  392. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  393. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
  394. data/install/config/tools/launcher/launcher.txt +39 -39
  395. data/install/config/tools/script_runner/script_runner.txt +3 -3
  396. data/install/config/tools/test_runner/test_runner.txt +8 -8
  397. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  398. data/install/lib/user_version.rb +3 -3
  399. data/install/tools/CmdExtractor +15 -15
  400. data/install/tools/CmdExtractor.bat +59 -59
  401. data/install/tools/CmdSender +15 -15
  402. data/install/tools/CmdSender.bat +59 -59
  403. data/install/tools/CmdTlmServer +15 -15
  404. data/install/tools/CmdTlmServer.bat +59 -59
  405. data/install/tools/DataViewer +15 -15
  406. data/install/tools/DataViewer.bat +59 -59
  407. data/install/tools/HandbookCreator +15 -15
  408. data/install/tools/HandbookCreator.bat +61 -61
  409. data/install/tools/Launcher +15 -15
  410. data/install/tools/Launcher.bat +59 -59
  411. data/install/tools/LimitsMonitor +15 -15
  412. data/install/tools/LimitsMonitor.bat +59 -59
  413. data/install/tools/OpenGLBuilder +15 -15
  414. data/install/tools/OpenGLBuilder.bat +59 -59
  415. data/install/tools/PacketViewer +15 -15
  416. data/install/tools/PacketViewer.bat +59 -59
  417. data/install/tools/Replay +15 -15
  418. data/install/tools/Replay.bat +59 -59
  419. data/install/tools/ScriptRunner +15 -15
  420. data/install/tools/ScriptRunner.bat +59 -59
  421. data/install/tools/TableManager +15 -15
  422. data/install/tools/TableManager.bat +59 -59
  423. data/install/tools/TestRunner +15 -15
  424. data/install/tools/TestRunner.bat +59 -59
  425. data/install/tools/TlmExtractor +15 -15
  426. data/install/tools/TlmExtractor.bat +59 -59
  427. data/install/tools/TlmGrapher +15 -15
  428. data/install/tools/TlmGrapher.bat +59 -59
  429. data/install/tools/TlmViewer +15 -15
  430. data/install/tools/TlmViewer.bat +59 -59
  431. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  432. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  433. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  434. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  435. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  436. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  437. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  438. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  439. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  440. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  441. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  442. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  443. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  444. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  445. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  446. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  447. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  448. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  449. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  450. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  451. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  452. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  453. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  454. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  455. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  456. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  457. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  458. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
  459. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  460. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  461. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  462. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  463. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  464. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  465. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  466. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  467. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  468. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  469. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  470. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  471. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  472. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  473. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  474. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  475. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  476. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  477. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  478. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  479. data/lib/cosmos.rb +63 -63
  480. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
  481. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
  482. data/lib/cosmos/config/config_parser.rb +324 -324
  483. data/lib/cosmos/conversions.rb +13 -13
  484. data/lib/cosmos/conversions/conversion.rb +47 -47
  485. data/lib/cosmos/conversions/generic_conversion.rb +55 -55
  486. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
  487. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
  488. data/lib/cosmos/conversions/processor_conversion.rb +46 -46
  489. data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
  490. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
  491. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
  492. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
  493. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
  494. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
  495. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
  496. data/lib/cosmos/core_ext.rb +18 -18
  497. data/lib/cosmos/core_ext/array.rb +354 -354
  498. data/lib/cosmos/core_ext/class.rb +51 -51
  499. data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
  500. data/lib/cosmos/core_ext/exception.rb +52 -52
  501. data/lib/cosmos/core_ext/file.rb +75 -75
  502. data/lib/cosmos/core_ext/hash.rb +28 -28
  503. data/lib/cosmos/core_ext/io.rb +75 -75
  504. data/lib/cosmos/core_ext/kernel.rb +38 -38
  505. data/lib/cosmos/core_ext/math.rb +119 -119
  506. data/lib/cosmos/core_ext/matrix.rb +146 -146
  507. data/lib/cosmos/core_ext/objectspace.rb +29 -29
  508. data/lib/cosmos/core_ext/range.rb +22 -22
  509. data/lib/cosmos/core_ext/socket.rb +32 -32
  510. data/lib/cosmos/core_ext/string.rb +310 -310
  511. data/lib/cosmos/core_ext/stringio.rb +24 -24
  512. data/lib/cosmos/core_ext/time.rb +446 -446
  513. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
  514. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
  515. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
  516. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
  517. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
  518. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +317 -317
  519. data/lib/cosmos/gui/dialogs/about_dialog.rb +128 -128
  520. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
  521. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
  522. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
  523. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
  524. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
  525. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
  526. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +196 -196
  527. data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -168
  528. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
  529. data/lib/cosmos/gui/dialogs/progress_dialog.rb +270 -262
  530. data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -161
  531. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
  532. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
  533. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
  534. data/lib/cosmos/gui/dialogs/splash.rb +113 -113
  535. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
  536. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
  537. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
  538. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
  539. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +494 -494
  540. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
  541. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +460 -460
  542. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
  543. data/lib/cosmos/gui/line_graph/lines.rb +290 -290
  544. data/lib/cosmos/gui/line_graph/overview_graph.rb +459 -459
  545. data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
  546. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
  547. data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
  548. data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
  549. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
  550. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
  551. data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -712
  552. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
  553. data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
  554. data/lib/cosmos/gui/opengl/opengl.rb +8 -8
  555. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
  556. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
  557. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
  558. data/lib/cosmos/gui/qt.rb +813 -786
  559. data/lib/cosmos/gui/qt_tool.rb +378 -373
  560. data/lib/cosmos/gui/text/completion.rb +381 -381
  561. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
  562. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
  563. data/lib/cosmos/gui/text/ruby_editor.rb +395 -395
  564. data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
  565. data/lib/cosmos/gui/utilities/script_module_gui.rb +203 -203
  566. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
  567. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
  568. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
  569. data/lib/cosmos/interfaces.rb +11 -11
  570. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -149
  571. data/lib/cosmos/interfaces/interface.rb +213 -213
  572. data/lib/cosmos/interfaces/linc_interface.rb +360 -360
  573. data/lib/cosmos/interfaces/serial_interface.rb +76 -76
  574. data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -128
  575. data/lib/cosmos/interfaces/stream_interface.rb +156 -156
  576. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
  577. data/lib/cosmos/interfaces/tcpip_server_interface.rb +154 -154
  578. data/lib/cosmos/interfaces/udp_interface.rb +173 -173
  579. data/lib/cosmos/io/buffered_file.rb +11 -11
  580. data/lib/cosmos/io/cosmos_snmp.rb +50 -50
  581. data/lib/cosmos/io/io_multiplexer.rb +89 -89
  582. data/lib/cosmos/io/json_drb.rb +344 -320
  583. data/lib/cosmos/io/json_drb_object.rb +137 -137
  584. data/lib/cosmos/io/json_rpc.rb +365 -365
  585. data/lib/cosmos/io/posix_serial_driver.rb +145 -145
  586. data/lib/cosmos/io/raw_logger.rb +174 -174
  587. data/lib/cosmos/io/raw_logger_pair.rb +71 -71
  588. data/lib/cosmos/io/serial_driver.rb +85 -85
  589. data/lib/cosmos/io/stderr.rb +36 -36
  590. data/lib/cosmos/io/stdout.rb +36 -36
  591. data/lib/cosmos/io/tcpip_server.rb +583 -532
  592. data/lib/cosmos/io/udp_sockets.rb +152 -152
  593. data/lib/cosmos/io/win32_serial_driver.rb +147 -147
  594. data/lib/cosmos/packet_logs.rb +6 -6
  595. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
  596. data/lib/cosmos/packet_logs/packet_log_reader.rb +441 -439
  597. data/lib/cosmos/packet_logs/packet_log_writer.rb +321 -309
  598. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
  599. data/lib/cosmos/packets/binary_accessor.rb +921 -921
  600. data/lib/cosmos/packets/commands.rb +291 -291
  601. data/lib/cosmos/packets/limits.rb +263 -263
  602. data/lib/cosmos/packets/limits_response.rb +38 -38
  603. data/lib/cosmos/packets/packet.rb +714 -699
  604. data/lib/cosmos/packets/packet_config.rb +1034 -1034
  605. data/lib/cosmos/packets/packet_item.rb +317 -317
  606. data/lib/cosmos/packets/packet_item_limits.rb +128 -128
  607. data/lib/cosmos/packets/structure.rb +421 -386
  608. data/lib/cosmos/packets/structure_item.rb +233 -233
  609. data/lib/cosmos/packets/telemetry.rb +317 -317
  610. data/lib/cosmos/processors.rb +6 -6
  611. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
  612. data/lib/cosmos/processors/processor.rb +71 -71
  613. data/lib/cosmos/processors/statistics_processor.rb +65 -65
  614. data/lib/cosmos/processors/watermark_processor.rb +44 -44
  615. data/lib/cosmos/script.rb +9 -9
  616. data/lib/cosmos/script/extract.rb +115 -115
  617. data/lib/cosmos/script/script.rb +1513 -1493
  618. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
  619. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
  620. data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
  621. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
  622. data/lib/cosmos/streams/serial_stream.rb +152 -143
  623. data/lib/cosmos/streams/stream.rb +57 -57
  624. data/lib/cosmos/streams/stream_protocol.rb +369 -369
  625. data/lib/cosmos/streams/tcpip_client_stream.rb +77 -77
  626. data/lib/cosmos/streams/tcpip_socket_stream.rb +139 -139
  627. data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
  628. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
  629. data/lib/cosmos/system.rb +4 -4
  630. data/lib/cosmos/system/system.rb +558 -558
  631. data/lib/cosmos/system/target.rb +178 -178
  632. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +254 -253
  633. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +716 -716
  634. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
  635. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
  636. data/lib/cosmos/tools/cmd_tlm_server/api.rb +936 -940
  637. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
  638. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -63
  639. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +511 -497
  640. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +241 -241
  641. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1033 -1008
  642. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
  643. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +176 -176
  644. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +241 -221
  645. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
  646. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
  647. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
  648. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
  649. data/lib/cosmos/tools/data_viewer/data_viewer.rb +628 -600
  650. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +167 -167
  651. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
  652. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +149 -149
  653. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +360 -360
  654. data/lib/cosmos/tools/launcher/launcher.rb +184 -184
  655. data/lib/cosmos/tools/launcher/launcher_config.rb +175 -167
  656. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -41
  657. data/lib/cosmos/tools/launcher/launcher_tool.rb +104 -104
  658. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +796 -768
  659. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
  660. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
  661. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +525 -525
  662. data/lib/cosmos/tools/replay/replay.rb +495 -488
  663. data/lib/cosmos/tools/replay/replay_server.rb +91 -91
  664. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -139
  665. data/lib/cosmos/tools/script_runner/script_runner.rb +914 -914
  666. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
  667. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1892 -1859
  668. data/lib/cosmos/tools/table_manager/table.rb +70 -70
  669. data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
  670. data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
  671. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
  672. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
  673. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
  674. data/lib/cosmos/tools/test_runner/test.rb +480 -480
  675. data/lib/cosmos/tools/test_runner/test_runner.rb +1157 -1157
  676. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +338 -338
  677. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
  678. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1008 -1008
  679. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
  680. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
  681. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
  682. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
  683. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +94 -94
  684. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
  685. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +180 -180
  686. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
  687. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
  688. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +173 -173
  689. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +177 -177
  690. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +412 -409
  691. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
  692. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
  693. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -320
  694. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
  695. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
  696. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
  697. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
  698. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
  699. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
  700. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
  701. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
  702. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
  703. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
  704. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
  705. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1278 -1278
  706. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
  707. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
  708. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +111 -95
  709. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
  710. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +72 -66
  711. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
  712. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
  713. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
  714. data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -458
  715. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +563 -544
  716. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +287 -287
  717. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
  718. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
  719. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +70 -70
  720. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +61 -61
  721. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
  722. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
  723. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
  724. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
  725. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
  726. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
  727. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
  728. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
  729. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
  730. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
  731. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
  732. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
  733. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
  734. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
  735. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
  736. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
  737. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
  738. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
  739. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
  740. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
  741. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
  742. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
  743. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
  744. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
  745. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
  746. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
  747. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
  748. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
  749. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
  750. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
  751. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
  752. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
  753. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
  754. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
  755. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
  756. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
  757. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
  758. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
  759. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
  760. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
  761. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
  762. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
  763. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
  764. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
  765. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
  766. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
  767. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
  768. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
  769. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
  770. data/lib/cosmos/top_level.rb +647 -596
  771. data/lib/cosmos/utilities.rb +11 -10
  772. data/lib/cosmos/utilities/crc.rb +166 -166
  773. data/lib/cosmos/utilities/csv.rb +83 -83
  774. data/lib/cosmos/utilities/logger.rb +137 -137
  775. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
  776. data/lib/cosmos/utilities/message_log.rb +74 -74
  777. data/lib/cosmos/utilities/quaternion.rb +258 -258
  778. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
  779. data/lib/cosmos/utilities/simulated_target.rb +99 -99
  780. data/lib/cosmos/utilities/sleeper.rb +44 -0
  781. data/lib/cosmos/version.rb +12 -12
  782. data/lib/cosmos/win32/excel.rb +66 -66
  783. data/lib/cosmos/win32/win32.rb +387 -387
  784. data/lib/cosmos/win32/win32_main.rb +311 -311
  785. data/roodi.yml +24 -24
  786. data/run_gui_tests.bat +32 -32
  787. data/spec/ccsds/ccsds_packet_spec.rb +67 -67
  788. data/spec/ccsds/ccsds_parser_spec.rb +148 -148
  789. data/spec/config/config_parser_spec.rb +322 -322
  790. data/spec/conversions/conversion_spec.rb +31 -31
  791. data/spec/conversions/generic_conversion_spec.rb +45 -45
  792. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
  793. data/spec/conversions/polynomial_conversion_spec.rb +40 -40
  794. data/spec/conversions/processor_conversion_spec.rb +45 -45
  795. data/spec/conversions/received_count_conversion_spec.rb +43 -43
  796. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
  797. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
  798. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
  799. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
  800. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
  801. data/spec/core_ext/array_spec.rb +186 -186
  802. data/spec/core_ext/class_spec.rb +36 -36
  803. data/spec/core_ext/cosmos_io_spec.rb +77 -77
  804. data/spec/core_ext/exception_spec.rb +91 -91
  805. data/spec/core_ext/file_spec.rb +72 -72
  806. data/spec/core_ext/hash_spec.rb +24 -24
  807. data/spec/core_ext/io_spec.rb +46 -46
  808. data/spec/core_ext/kernel_spec.rb +54 -54
  809. data/spec/core_ext/math_spec.rb +116 -116
  810. data/spec/core_ext/matrix_spec.rb +66 -66
  811. data/spec/core_ext/objectspace_spec.rb +29 -29
  812. data/spec/core_ext/range_spec.rb +21 -21
  813. data/spec/core_ext/socket_spec.rb +32 -32
  814. data/spec/core_ext/string_spec.rb +223 -223
  815. data/spec/core_ext/stringio_spec.rb +21 -21
  816. data/spec/core_ext/time_spec.rb +151 -151
  817. data/spec/gui/line_graph/line_clip_spec.rb +322 -322
  818. data/spec/install/config/system/system.txt +33 -33
  819. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  820. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  821. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  822. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  823. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
  824. data/spec/install/config/targets/COSMOS/target.txt +5 -5
  825. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
  826. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
  827. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
  828. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
  829. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
  830. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -294
  831. data/spec/install/config/targets/INST/target.txt +10 -10
  832. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
  833. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
  834. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  835. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
  836. data/spec/interfaces/interface_spec.rb +130 -131
  837. data/spec/interfaces/linc_interface_spec.rb +199 -199
  838. data/spec/interfaces/serial_interface_spec.rb +56 -56
  839. data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
  840. data/spec/interfaces/stream_interface_spec.rb +157 -157
  841. data/spec/interfaces/tcpip_client_interface_spec.rb +54 -54
  842. data/spec/interfaces/tcpip_server_interface_spec.rb +151 -151
  843. data/spec/interfaces/udp_interface_spec.rb +175 -177
  844. data/spec/io/buffered_file_spec.rb +113 -113
  845. data/spec/io/io_multiplexer_spec.rb +94 -94
  846. data/spec/io/json_drb_object_spec.rb +99 -99
  847. data/spec/io/json_drb_spec.rb +311 -311
  848. data/spec/io/json_rpc_spec.rb +264 -264
  849. data/spec/io/raw_logger_pair_spec.rb +76 -76
  850. data/spec/io/raw_logger_spec.rb +133 -133
  851. data/spec/io/serial_driver_spec.rb +61 -61
  852. data/spec/io/stderr_spec.rb +32 -32
  853. data/spec/io/stdout_spec.rb +32 -32
  854. data/spec/io/tcpip_server_spec.rb +338 -338
  855. data/spec/io/udp_sockets_spec.rb +94 -94
  856. data/spec/io/win32_serial_driver_spec.rb +88 -88
  857. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
  858. data/spec/packet_logs/packet_log_reader_spec.rb +408 -408
  859. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
  860. data/spec/packet_logs/packet_log_writer_spec.rb +223 -223
  861. data/spec/packets/binary_accessor_spec.rb +2073 -2073
  862. data/spec/packets/commands_spec.rb +369 -369
  863. data/spec/packets/limits_response_spec.rb +25 -25
  864. data/spec/packets/limits_spec.rb +326 -326
  865. data/spec/packets/packet_config_spec.rb +1620 -1620
  866. data/spec/packets/packet_item_limits_spec.rb +161 -161
  867. data/spec/packets/packet_item_spec.rb +386 -386
  868. data/spec/packets/packet_spec.rb +1057 -949
  869. data/spec/packets/structure_item_spec.rb +195 -195
  870. data/spec/packets/structure_spec.rb +419 -419
  871. data/spec/packets/telemetry_spec.rb +535 -535
  872. data/spec/processors/new_packet_log_processor_spec.rb +39 -39
  873. data/spec/processors/processor_spec.rb +55 -55
  874. data/spec/processors/statistics_processor_spec.rb +60 -60
  875. data/spec/processors/watermark_processor_spec.rb +51 -51
  876. data/spec/script/script_spec.rb +654 -654
  877. data/spec/spec_helper.rb +154 -148
  878. data/spec/streams/burst_stream_protocol_spec.rb +32 -32
  879. data/spec/streams/fixed_stream_protocol_spec.rb +110 -110
  880. data/spec/streams/length_stream_protocol_spec.rb +297 -297
  881. data/spec/streams/preidentified_stream_protocol_spec.rb +118 -118
  882. data/spec/streams/serial_stream_spec.rb +105 -105
  883. data/spec/streams/stream_protocol_spec.rb +332 -332
  884. data/spec/streams/stream_spec.rb +29 -29
  885. data/spec/streams/tcpip_client_stream_spec.rb +54 -54
  886. data/spec/streams/tcpip_socket_stream_spec.rb +146 -146
  887. data/spec/streams/template_stream_protocol_spec.rb +151 -151
  888. data/spec/streams/terminated_stream_protocol_spec.rb +123 -123
  889. data/spec/system/system_spec.rb +645 -645
  890. data/spec/system/target_spec.rb +248 -248
  891. data/spec/tools/cmd_tlm_server/api_spec.rb +1087 -1113
  892. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
  893. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
  894. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +411 -411
  895. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
  896. data/spec/tools/cmd_tlm_server/commanding_spec.rb +123 -123
  897. data/spec/tools/cmd_tlm_server/connections_spec.rb +147 -147
  898. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
  899. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -238
  900. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
  901. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +98 -101
  902. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -208
  903. data/spec/top_level/top_level_spec.rb +334 -321
  904. data/spec/utilities/crc_spec.rb +45 -45
  905. data/spec/utilities/csv_spec.rb +97 -97
  906. data/spec/utilities/logger_spec.rb +102 -102
  907. data/spec/utilities/message_log_spec.rb +89 -89
  908. data/spec/utilities/quaternion_spec.rb +107 -107
  909. data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
  910. data/tasks/manifest.rake +22 -22
  911. data/tasks/spec.rake +23 -23
  912. metadata +18 -2
@@ -1,99 +1,99 @@
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/packets/packet'
12
- require 'cosmos/packets/structure'
13
- require 'cosmos/system/system'
14
-
15
- module Cosmos
16
-
17
- # Update Packet for Simulated Targets
18
- class Packet < Structure
19
- attr_accessor :packet_rate
20
- end
21
-
22
- class SimulatedTarget
23
-
24
- attr_accessor :tlm_packets
25
-
26
- def initialize (target_name)
27
- @tlm_packets = {}
28
-
29
- #Generate copy of telemetry packets for this target
30
- System.telemetry.packets(target_name).each do |name, packet|
31
- @tlm_packets[name] = packet.clone
32
- @tlm_packets[name].enable_method_missing
33
- end
34
-
35
- #Set id values
36
- @tlm_packets.each do |name, packet|
37
- ids = packet.id_items
38
- ids.each do |id|
39
- packet.send((id.name + '=').to_sym, id.id_value)
40
- end
41
- end
42
-
43
- @current_cycle_delta = {}
44
- end
45
-
46
- def set_rates
47
- raise "Error: set_rates must be implemented by subclass"
48
- end
49
-
50
- def write(packet)
51
- raise "Error: write must be implemented by subclass"
52
- end
53
-
54
- def read(count_100hz, time)
55
- raise "Error: read must be implemented by subclass"
56
- end
57
-
58
- protected
59
-
60
- def set_rate(packet_name, rate)
61
- packet = @tlm_packets[packet_name.upcase]
62
- packet.packet_rate = rate if packet
63
- end
64
-
65
- def get_pending_packets(count_100hz)
66
- pending_packets = []
67
-
68
- #determine if packets are due to be sent and add to pending
69
- @tlm_packets.each do |name, packet|
70
- if packet.packet_rate
71
- if ((count_100hz % packet.packet_rate) == 0)
72
- pending_packets << packet
73
- end
74
- end
75
- end
76
-
77
- pending_packets
78
- end
79
-
80
- def cycle_tlm_item(packet, item_name, min, max, first_delta)
81
- packet_name = packet.packet_name
82
- @current_cycle_delta[packet_name] ||= {}
83
- @current_cycle_delta[packet_name][item_name] ||= first_delta
84
-
85
- current_delta = @current_cycle_delta[packet_name][item_name]
86
- current_value = packet.read(item_name)
87
- updated_value = current_value + current_delta
88
- if updated_value < min
89
- updated_value = min
90
- @current_cycle_delta[packet_name][item_name] = -current_delta
91
- elsif updated_value > max
92
- updated_value = max
93
- @current_cycle_delta[packet_name][item_name] = -current_delta
94
- end
95
- packet.write(item_name, updated_value)
96
- end
97
- end
98
-
99
- end
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos/packets/packet'
12
+ require 'cosmos/packets/structure'
13
+ require 'cosmos/system/system'
14
+
15
+ module Cosmos
16
+
17
+ # Update Packet for Simulated Targets
18
+ class Packet < Structure
19
+ attr_accessor :packet_rate
20
+ end
21
+
22
+ class SimulatedTarget
23
+
24
+ attr_accessor :tlm_packets
25
+
26
+ def initialize (target_name)
27
+ @tlm_packets = {}
28
+
29
+ #Generate copy of telemetry packets for this target
30
+ System.telemetry.packets(target_name).each do |name, packet|
31
+ @tlm_packets[name] = packet.clone
32
+ @tlm_packets[name].enable_method_missing
33
+ end
34
+
35
+ #Set id values
36
+ @tlm_packets.each do |name, packet|
37
+ ids = packet.id_items
38
+ ids.each do |id|
39
+ packet.send((id.name + '=').to_sym, id.id_value)
40
+ end
41
+ end
42
+
43
+ @current_cycle_delta = {}
44
+ end
45
+
46
+ def set_rates
47
+ raise "Error: set_rates must be implemented by subclass"
48
+ end
49
+
50
+ def write(packet)
51
+ raise "Error: write must be implemented by subclass"
52
+ end
53
+
54
+ def read(count_100hz, time)
55
+ raise "Error: read must be implemented by subclass"
56
+ end
57
+
58
+ protected
59
+
60
+ def set_rate(packet_name, rate)
61
+ packet = @tlm_packets[packet_name.upcase]
62
+ packet.packet_rate = rate if packet
63
+ end
64
+
65
+ def get_pending_packets(count_100hz)
66
+ pending_packets = []
67
+
68
+ #determine if packets are due to be sent and add to pending
69
+ @tlm_packets.each do |name, packet|
70
+ if packet.packet_rate
71
+ if ((count_100hz % packet.packet_rate) == 0)
72
+ pending_packets << packet
73
+ end
74
+ end
75
+ end
76
+
77
+ pending_packets
78
+ end
79
+
80
+ def cycle_tlm_item(packet, item_name, min, max, first_delta)
81
+ packet_name = packet.packet_name
82
+ @current_cycle_delta[packet_name] ||= {}
83
+ @current_cycle_delta[packet_name][item_name] ||= first_delta
84
+
85
+ current_delta = @current_cycle_delta[packet_name][item_name]
86
+ current_value = packet.read(item_name)
87
+ updated_value = current_value + current_delta
88
+ if updated_value < min
89
+ updated_value = min
90
+ @current_cycle_delta[packet_name][item_name] = -current_delta
91
+ elsif updated_value > max
92
+ updated_value = max
93
+ @current_cycle_delta[packet_name][item_name] = -current_delta
94
+ end
95
+ packet.write(item_name, updated_value)
96
+ end
97
+ end
98
+
99
+ end
@@ -0,0 +1,44 @@
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
+ module Cosmos
12
+
13
+ # Allows for a breakable sleep implementation using the self-pipe trick
14
+ # See http://www.sitepoint.com/the-self-pipe-trick-explained/
15
+ class Sleeper
16
+ def initialize
17
+ @pipe_reader, @pipe_writer = IO.pipe
18
+ @readers = [@pipe_reader]
19
+ @canceled = false
20
+ end
21
+
22
+ # Breakable version of sleep
23
+ # @param seconds Number of seconds to sleep
24
+ # @return true if the sleep was broken by someone calling cancel
25
+ # otherwise returns false
26
+ def sleep(seconds)
27
+ read_ready, _ = IO.select(@readers, nil, nil, seconds)
28
+ if read_ready && read_ready.include?(@pipe_reader)
29
+ return true
30
+ else
31
+ return false
32
+ end
33
+ end
34
+
35
+ # Break sleeping - Once canceled a sleeper cannot be used again
36
+ def cancel
37
+ if !@canceled
38
+ @canceled = true
39
+ @pipe_writer.write('.')
40
+ end
41
+ end
42
+ end
43
+
44
+ end # module Cosmos
@@ -1,12 +1,12 @@
1
- # encoding: ascii-8bit
2
-
3
- COSMOS_VERSION = '3.0.1'
4
- module Cosmos
5
- module Version
6
- MAJOR = '3'
7
- MINOR = '0'
8
- PATCH = '1'
9
- BUILD = 'f19556ddbfdda1e439bfaec33e9f81f32a3e868e'
10
- end
11
- VERSION = '3.0.1'
12
- end
1
+ # encoding: ascii-8bit
2
+
3
+ COSMOS_VERSION = '3.1.0'
4
+ module Cosmos
5
+ module Version
6
+ MAJOR = '3'
7
+ MINOR = '1'
8
+ PATCH = '0'
9
+ BUILD = 'df3e9ba123a5e75fe76c191e9fab9c80df7ab1d4'
10
+ end
11
+ VERSION = '3.1.0'
12
+ end
@@ -1,66 +1,66 @@
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 'win32ole'
12
-
13
- module Cosmos
14
-
15
- #
16
- # This class will take an Excel spreadsheet and build an easily manipulated spreadsheet in ruby
17
- #
18
- class ExcelSpreadsheet
19
-
20
- attr_reader :worksheets
21
-
22
- class ExcelWorksheet
23
-
24
- attr_reader :name, :num_rows, :num_columns, :data
25
-
26
- def initialize (worksheet)
27
- @name = worksheet.name
28
- @num_rows = worksheet.UsedRange.rows.count
29
- @num_columns = worksheet.UsedRange.columns.count
30
-
31
- #Get Excel Data from Worksheet
32
- @data = worksheet.UsedRange.value
33
- end
34
-
35
- end
36
-
37
- def initialize (filename)
38
- excel = WIN32OLE.new('excel.application')
39
- excel.visible = false
40
- wb = excel.workbooks.open(filename)
41
-
42
- @worksheets = []
43
-
44
- count = wb.worksheets.count
45
- count.times do |index|
46
- ws = wb.worksheets(index + 1)
47
- @worksheets << ExcelWorksheet.new(ws)
48
- end
49
-
50
- excel.DisplayAlerts = false
51
- excel.quit
52
- excel = nil
53
- GC.start
54
- end
55
-
56
- end
57
-
58
- module ExcelColumnConstants
59
- index = 0
60
- ('A'..'IV').each do |value|
61
- self.const_set(value, index)
62
- index += 1
63
- end
64
- end
65
-
66
- 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 'win32ole'
12
+
13
+ module Cosmos
14
+
15
+ #
16
+ # This class will take an Excel spreadsheet and build an easily manipulated spreadsheet in ruby
17
+ #
18
+ class ExcelSpreadsheet
19
+
20
+ attr_reader :worksheets
21
+
22
+ class ExcelWorksheet
23
+
24
+ attr_reader :name, :num_rows, :num_columns, :data
25
+
26
+ def initialize (worksheet)
27
+ @name = worksheet.name
28
+ @num_rows = worksheet.UsedRange.rows.count
29
+ @num_columns = worksheet.UsedRange.columns.count
30
+
31
+ #Get Excel Data from Worksheet
32
+ @data = worksheet.UsedRange.value
33
+ end
34
+
35
+ end
36
+
37
+ def initialize (filename)
38
+ excel = WIN32OLE.new('excel.application')
39
+ excel.visible = false
40
+ wb = excel.workbooks.open(filename)
41
+
42
+ @worksheets = []
43
+
44
+ count = wb.worksheets.count
45
+ count.times do |index|
46
+ ws = wb.worksheets(index + 1)
47
+ @worksheets << ExcelWorksheet.new(ws)
48
+ end
49
+
50
+ excel.DisplayAlerts = false
51
+ excel.quit
52
+ excel = nil
53
+ GC.start
54
+ end
55
+
56
+ end
57
+
58
+ module ExcelColumnConstants
59
+ index = 0
60
+ ('A'..'IV').each do |value|
61
+ self.const_set(value, index)
62
+ index += 1
63
+ end
64
+ end
65
+
66
+ end # module Cosmos
@@ -1,387 +1,387 @@
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/win32/win32_main'
12
- require 'cosmos/packets/structure'
13
-
14
- module Cosmos
15
-
16
- # Win32 class
17
- #
18
- # This class implements the Win32
19
- #
20
- class Win32
21
- # Create a file
22
- def self.create_file(filename, desired_access, share_mode, security_attributes, creation_disposition, flags_and_attributes, template_file = NULL)
23
- api = Win32API.new('Kernel32', 'CreateFile', [LP, DWORD, DWORD, LP, DWORD, DWORD, HANDLE], HANDLE)
24
- handle = api.call(filename, desired_access, share_mode, security_attributes, creation_disposition, flags_and_attributes, template_file)
25
- raise "Error during CreateFile: #{get_last_error_message()}" if handle == INVALID_HANDLE_VALUE
26
- handle
27
- end
28
-
29
- # Close a file
30
- def self.close_handle(handle)
31
- api = Win32API.new('Kernel32', 'CloseHandle', [HANDLE], BOOL)
32
- result = api.call(handle)
33
- raise "Error closing handle: #{get_last_error_message()}" if result == 0
34
- result
35
- end
36
-
37
- # Get Comm State
38
- def self.get_comm_state(handle)
39
- dcb = build_dcb()
40
- api = Win32API.new('Kernel32', 'GetCommState', [HANDLE, LP], BOOL)
41
- result = api.call(handle, dcb.buffer)
42
- raise "GetCommState Error: #{get_last_error_message()}" if result == 0
43
- dcb
44
- end
45
-
46
- # Set Comm State
47
- def self.set_comm_state(handle, dcb)
48
- api = Win32API.new('Kernel32', 'SetCommState', [HANDLE, LP], BOOL)
49
- result = api.call(handle, dcb.buffer)
50
- raise "SetCommState Error: #{get_last_error_message()}" if result == 0
51
- result
52
- end
53
-
54
- # Set Comm Timeouts - Values in Ms
55
- def self.set_comm_timeouts(handle, read_interval_timeout = 4294967295, read_total_timeout_multiplier = 0, read_total_timeout_constant = 0, write_total_timeout_multiplier = 0, write_total_timeout_constant = 0)
56
- comm_timeouts = build_comm_timeouts(read_interval_timeout, read_total_timeout_multiplier, read_total_timeout_constant, write_total_timeout_multiplier, write_total_timeout_constant)
57
- api = Win32API.new('Kernel32', 'SetCommTimeouts', [HANDLE, LP], BOOL)
58
- result = api.call(handle, comm_timeouts.buffer)
59
- raise "SetCommTimeouts Error: #{get_last_error_message()}" if result == 0
60
- result
61
- end
62
-
63
- # Read File
64
- def self.read_file(handle, bytes_to_read, overlapped = NULL)
65
- buffer = ' ' * (bytes_to_read + 1)
66
- bytes_read = ' ' * 8
67
- api = Win32API.new('Kernel32', 'ReadFile', [HANDLE, LP, DWORD, LP, LP], BOOL)
68
- api.call(handle, buffer, bytes_to_read, bytes_read, overlapped)
69
- bytes_read = bytes_read.unpack(DWORD)[0]
70
- if bytes_read > 0
71
- buffer[0..(bytes_read - 1)]
72
- else
73
- ''
74
- end
75
- end
76
-
77
- # Write File
78
- def self.write_file(handle, buffer, bytes_to_write, overlapped = NULL)
79
- bytes_written = ' ' * 8
80
- api = Win32API.new('Kernel32', 'WriteFile', [HANDLE, LP, DWORD, LP, LP], BOOL)
81
- api.call(handle, buffer, bytes_to_write, bytes_written, overlapped)
82
- bytes_written.unpack(DWORD)[0]
83
- end
84
-
85
- protected
86
-
87
- def self.build_dcb
88
- dcb = Structure.new(:LITTLE_ENDIAN)
89
- dcb.define_item('DCBlength', 0, 32, :UINT)
90
- dcb.define_item('BaudRate', 32, 32, :UINT)
91
- dcb.define_item('fBinary', 71, 1, :UINT)
92
- dcb.define_item('fParity', 70, 1, :UINT)
93
- dcb.define_item('fOutxCtsFlow', 69, 1, :UINT)
94
- dcb.define_item('fOutxDsrFlow', 68, 1, :UINT)
95
- dcb.define_item('fDtrControl', 66, 2, :UINT)
96
- dcb.define_item('fDsrSensitivity', 65, 1, :UINT)
97
- dcb.define_item('fTXContinueOnXoff', 64, 1, :UINT)
98
- dcb.define_item('fOutX', 79, 1, :UINT)
99
- dcb.define_item('fInX', 78, 1, :UINT)
100
- dcb.define_item('fErrorChar', 77, 1, :UINT)
101
- dcb.define_item('fNull', 76, 1, :UINT)
102
- dcb.define_item('fRtsControl', 74, 2, :UINT)
103
- dcb.define_item('fAbortOnError', 73, 1, :UINT)
104
- dcb.define_item('fDummy2', 88, 17, :UINT)
105
- dcb.define_item('wReserved', 96, 16, :UINT)
106
- dcb.define_item('XonLim', 112, 16, :UINT)
107
- dcb.define_item('XoffLim', 128, 16, :UINT)
108
- dcb.define_item('ByteSize', 144, 8, :UINT)
109
- dcb.define_item('Parity', 152, 8, :UINT)
110
- dcb.define_item('StopBits', 160, 8, :UINT)
111
- dcb.define_item('XonChar', 168, 8, :INT)
112
- dcb.define_item('XoffChar', 176, 8, :INT)
113
- dcb.define_item('ErrorChar', 184, 8, :INT)
114
- dcb.define_item('EofChar', 192, 8, :INT)
115
- dcb.define_item('EvtChar', 200, 8, :INT)
116
- dcb.define_item('wReserved1', 208, 16, :UINT)
117
- dcb.write('DCBlength', 28)
118
- dcb
119
- end
120
-
121
- def self.build_comm_timeouts(read_interval_timeout = 4294967295, read_total_timeout_multiplier = 0, read_total_timeout_constant = 0, write_total_timeout_multiplier = 0, write_total_timeout_constant = 0)
122
- comm_timeouts = Structure.new(:LITTLE_ENDIAN)
123
- comm_timeouts.append_item('ReadIntervalTimeout', 32, :UINT)
124
- comm_timeouts.append_item('ReadTotalTimeoutMultiplier', 32, :UINT)
125
- comm_timeouts.append_item('ReadTotalTimeoutConstant', 32, :UINT)
126
- comm_timeouts.append_item('WriteTotalTimeoutMultiplier', 32, :UINT)
127
- comm_timeouts.append_item('WriteTotalTimeoutConstant', 32, :UINT)
128
- comm_timeouts.write('ReadIntervalTimeout', read_interval_timeout)
129
- comm_timeouts.write('ReadTotalTimeoutMultiplier', read_total_timeout_multiplier)
130
- comm_timeouts.write('ReadTotalTimeoutConstant', read_total_timeout_constant)
131
- comm_timeouts.write('WriteTotalTimeoutMultiplier', write_total_timeout_multiplier)
132
- comm_timeouts.write('WriteTotalTimeoutConstant', write_total_timeout_constant)
133
- comm_timeouts
134
- end
135
-
136
- end # class Win32
137
-
138
- end # module Cosmos
139
-
140
- module QDA
141
- module Filters
142
- # Used only on windows to enable calling other executables without the
143
- # annoying command-prompt box that pops up when using Ruby backticks in
144
- # a script running under rubyw.
145
- #
146
- # Usage:
147
- # output, errors = QDA::Filters::Win32Process::backtick('dir')
148
- #
149
- # Note - most of this code written by S Kroeger, see
150
- # http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/155684
151
- module Win32Process
152
- NORMAL_PRIORITY_CLASS = 0x00000020
153
- STARTUP_INFO_SIZE = 68
154
- PROCESS_INFO_SIZE = 16
155
- SECURITY_ATTRIBUTES_SIZE = 12
156
-
157
- ERROR_SUCCESS = 0x00
158
- FORMAT_MESSAGE_FROM_SYSTEM = 0x1000
159
- FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x2000
160
-
161
- HANDLE_FLAG_INHERIT = 1
162
- HANDLE_FLAG_PROTECT_FROM_CLOSE =2
163
-
164
- STARTF_USESHOWWINDOW = 0x00000001
165
- STARTF_USESTDHANDLES = 0x00000100
166
-
167
- class << self
168
- def raise_last_win_32_error
169
- errorCode = Cosmos::Win32API.new("kernel32", "GetLastError", [], 'L').call
170
- if errorCode != ERROR_SUCCESS
171
- params = [
172
- 'L', # IN DWORD dwFlags,
173
- 'P', # IN LPCVOID lpSource,
174
- 'L', # IN DWORD dwMessageId,
175
- 'L', # IN DWORD dwLanguageId,
176
- 'P', # OUT LPSTR lpBuffer,
177
- 'L', # IN DWORD nSize,
178
- 'P', # IN va_list *Arguments
179
- ]
180
-
181
- formatMessage = Cosmos::Win32API.new("kernel32", "FormatMessage", params, 'L')
182
- msg = ' ' * 255
183
- formatMessage.call(FORMAT_MESSAGE_FROM_SYSTEM +
184
- FORMAT_MESSAGE_ARGUMENT_ARRAY, '', errorCode, 0, msg, 255, '')
185
-
186
- msg.gsub!(/\000/, '')
187
- msg.strip!
188
- raise msg
189
- else
190
- raise 'GetLastError returned ERROR_SUCCESS'
191
- end
192
- end
193
-
194
- def create_pipe # returns read and write handle
195
- params = [
196
- 'P', # pointer to read handle
197
- 'P', # pointer to write handle
198
- 'P', # pointer to security attributes
199
- 'L'] # pipe size
200
-
201
- createPipe = Cosmos::Win32API.new("kernel32", "CreatePipe", params, 'I')
202
-
203
- read_handle, write_handle = [0].pack('I'), [0].pack('I')
204
- sec_attrs = [SECURITY_ATTRIBUTES_SIZE, 0, 1].pack('III')
205
-
206
- raise_last_win_32_error if createPipe.Call(read_handle,
207
- write_handle, sec_attrs, 0).zero?
208
-
209
- [read_handle.unpack('I')[0], write_handle.unpack('I')[0]]
210
- end
211
-
212
- def set_handle_information(handle, flags, value)
213
- params = [
214
- 'L', # handle to an object
215
- 'L', # specifies flags to change
216
- 'L'] # specifies new values for flags
217
-
218
- setHandleInformation = Cosmos::Win32API.new("kernel32",
219
- "SetHandleInformation", params, 'I')
220
- raise_last_win_32_error if setHandleInformation.Call(handle,
221
- flags, value).zero?
222
- nil
223
- end
224
-
225
- def close_handle(handle)
226
- closeHandle = Cosmos::Win32API.new("kernel32", "CloseHandle", ['L'], 'I')
227
- raise_last_win_32_error if closeHandle.call(handle).zero?
228
- end
229
-
230
- def create_process(command, stdin, stdout, stderror)
231
- params = [
232
- 'L', # IN LPCSTR lpApplicationName
233
- 'P', # IN LPSTR lpCommandLine
234
- 'L', # IN LPSECURITY_ATTRIBUTES lpProcessAttributes
235
- 'L', # IN LPSECURITY_ATTRIBUTES lpThreadAttributes
236
- 'L', # IN BOOL bInheritHandles
237
- 'L', # IN DWORD dwCreationFlags
238
- 'L', # IN LPVOID lpEnvironment
239
- 'L', # IN LPCSTR lpCurrentDirectory
240
- 'P', # IN LPSTARTUPINFOA lpStartupInfo
241
- 'P'] # OUT LPPROCESS_INFORMATION lpProcessInformation
242
-
243
- startupInfo = [STARTUP_INFO_SIZE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
244
- STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW, 0,
245
- 0, 0, stdin, stdout, stderror].pack('IIIIIIIIIIIISSIIII')
246
-
247
- processInfo = [0, 0, 0, 0].pack('IIII')
248
- command << 0
249
-
250
- createProcess = Cosmos::Win32API.new("kernel32", "CreateProcess", params, 'I')
251
- cp_args = [ 0, command, 0, 0, 1, 0, 0, 0, startupInfo, processInfo ]
252
- raise_last_win_32_error if createProcess.call(*cp_args).zero?
253
-
254
- hProcess, hThread,
255
- dwProcessId, dwThreadId = processInfo.unpack('LLLL')
256
-
257
- close_handle(hProcess)
258
- close_handle(hThread)
259
-
260
- [dwProcessId, dwThreadId]
261
- end
262
-
263
- def write_file(hFile, buffer)
264
- params = [
265
- 'L', # handle to file to write to
266
- 'P', # pointer to data to write to file
267
- 'L', # number of bytes to write
268
- 'P', # pointer to number of bytes written
269
- 'L'] # pointer to structure for overlapped I/O
270
-
271
- written = [0].pack('I')
272
- writeFile = Cosmos::Win32API.new("kernel32", "WriteFile", params, 'I')
273
-
274
- raise_last_win_32_error if writeFile.call(hFile, buffer, buffer.size,
275
- written, 0).zero?
276
-
277
- written.unpack('I')[0]
278
- end
279
-
280
- def read_file(hFile)
281
- params = [
282
- 'L', # handle of file to read
283
- 'P', # pointer to buffer that receives data
284
- 'L', # number of bytes to read
285
- 'P', # pointer to number of bytes read
286
- 'L'] #pointer to structure for data
287
-
288
- number = [0].pack('I')
289
- buffer = ' ' * 255
290
-
291
- readFile = Cosmos::Win32API.new("kernel32", "ReadFile", params, 'I')
292
- return '' if readFile.call(hFile, buffer, 255, number, 0).zero?
293
-
294
- buffer[0...number.unpack('I')[0]]
295
- end
296
-
297
- def peek_named_pipe(hFile)
298
- params = [
299
- 'L', # handle to pipe to copy from
300
- 'L', # pointer to data buffer
301
- 'L', # size, in bytes, of data buffer
302
- 'L', # pointer to number of bytes read
303
- 'P', # pointer to total number of bytes available
304
- 'L'] # pointer to unread bytes in this message
305
-
306
- available = [0].pack('I')
307
- peekNamedPipe = Cosmos::Win32API.new("kernel32", "PeekNamedPipe", params, 'I')
308
-
309
- return -1 if peekNamedPipe.Call(hFile, 0, 0, 0, available, 0).zero?
310
-
311
- available.unpack('I')[0]
312
- end
313
- end
314
-
315
- class Win32popenIO
316
- def initialize (hRead, hWrite, hError)
317
- @hRead = hRead
318
- @hWrite = hWrite
319
- @hError = hError
320
- end
321
-
322
- def write data
323
- Win32Process::write_file(@hWrite, data.to_s)
324
- end
325
-
326
- def read
327
- sleep(0.01) while Win32Process::peek_named_pipe(@hRead).zero?
328
- Win32Process::read_file(@hRead)
329
- end
330
-
331
- def read_all
332
- all = ''
333
- until (buffer = read).empty?
334
- all << buffer
335
- end
336
- all
337
- end
338
-
339
- def read_err
340
- sleep(0.01) while Win32Process::peek_named_pipe(@hError).zero?
341
- Win32Process::read_file(@hError)
342
- end
343
-
344
- def read_all_err
345
- all = ''
346
- until (buffer = read_err).empty?
347
- all << buffer
348
- end
349
- all
350
- end
351
- end
352
-
353
- # The only useful public method in this class - receives a command line,
354
- # and returns the output content and error content as a pair of strings.
355
- # No shell expansion is carried out on the command line string.
356
- #
357
- # Usage:
358
- # output, errors = QDA::Filters::Win32Process::backtick('dir')
359
- def self.backtick(command)
360
- # create 3 pipes
361
- child_in_r, child_in_w = create_pipe
362
- child_out_r, child_out_w = create_pipe
363
- child_error_r, child_error_w = create_pipe
364
-
365
- # Ensure the write handle to the pipe for STDIN is not inherited.
366
- set_handle_information(child_in_w, HANDLE_FLAG_INHERIT, 0)
367
- set_handle_information(child_out_r, HANDLE_FLAG_INHERIT, 0)
368
- set_handle_information(child_error_r, HANDLE_FLAG_INHERIT, 0)
369
-
370
- create_process(command,
371
- child_in_r,
372
- child_out_w,
373
- child_error_w)
374
- # we have to close the handles, so the pipes terminate with the process
375
- close_handle(child_in_r)
376
- close_handle(child_out_w)
377
- close_handle(child_error_w)
378
- close_handle(child_in_w)
379
- io = Win32popenIO.new(child_out_r, child_in_w, child_error_r)
380
-
381
- out = io.read_all().gsub(/\r/, '')
382
- err = io.read_all_err().gsub(/\r/, '')
383
- return out, err
384
- end
385
- end # module Win32Process
386
- end #module Filters
387
- end # module QDA
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/win32/win32_main'
12
+ require 'cosmos/packets/structure'
13
+
14
+ module Cosmos
15
+
16
+ # Win32 class
17
+ #
18
+ # This class implements the Win32
19
+ #
20
+ class Win32
21
+ # Create a file
22
+ def self.create_file(filename, desired_access, share_mode, security_attributes, creation_disposition, flags_and_attributes, template_file = NULL)
23
+ api = Win32API.new('Kernel32', 'CreateFile', [LP, DWORD, DWORD, LP, DWORD, DWORD, HANDLE], HANDLE)
24
+ handle = api.call(filename, desired_access, share_mode, security_attributes, creation_disposition, flags_and_attributes, template_file)
25
+ raise "Error during CreateFile: #{get_last_error_message()}" if handle == INVALID_HANDLE_VALUE
26
+ handle
27
+ end
28
+
29
+ # Close a file
30
+ def self.close_handle(handle)
31
+ api = Win32API.new('Kernel32', 'CloseHandle', [HANDLE], BOOL)
32
+ result = api.call(handle)
33
+ raise "Error closing handle: #{get_last_error_message()}" if result == 0
34
+ result
35
+ end
36
+
37
+ # Get Comm State
38
+ def self.get_comm_state(handle)
39
+ dcb = build_dcb()
40
+ api = Win32API.new('Kernel32', 'GetCommState', [HANDLE, LP], BOOL)
41
+ result = api.call(handle, dcb.buffer)
42
+ raise "GetCommState Error: #{get_last_error_message()}" if result == 0
43
+ dcb
44
+ end
45
+
46
+ # Set Comm State
47
+ def self.set_comm_state(handle, dcb)
48
+ api = Win32API.new('Kernel32', 'SetCommState', [HANDLE, LP], BOOL)
49
+ result = api.call(handle, dcb.buffer)
50
+ raise "SetCommState Error: #{get_last_error_message()}" if result == 0
51
+ result
52
+ end
53
+
54
+ # Set Comm Timeouts - Values in Ms
55
+ def self.set_comm_timeouts(handle, read_interval_timeout = 4294967295, read_total_timeout_multiplier = 0, read_total_timeout_constant = 0, write_total_timeout_multiplier = 0, write_total_timeout_constant = 0)
56
+ comm_timeouts = build_comm_timeouts(read_interval_timeout, read_total_timeout_multiplier, read_total_timeout_constant, write_total_timeout_multiplier, write_total_timeout_constant)
57
+ api = Win32API.new('Kernel32', 'SetCommTimeouts', [HANDLE, LP], BOOL)
58
+ result = api.call(handle, comm_timeouts.buffer)
59
+ raise "SetCommTimeouts Error: #{get_last_error_message()}" if result == 0
60
+ result
61
+ end
62
+
63
+ # Read File
64
+ def self.read_file(handle, bytes_to_read, overlapped = NULL)
65
+ buffer = ' ' * (bytes_to_read + 1)
66
+ bytes_read = ' ' * 8
67
+ api = Win32API.new('Kernel32', 'ReadFile', [HANDLE, LP, DWORD, LP, LP], BOOL)
68
+ api.call(handle, buffer, bytes_to_read, bytes_read, overlapped)
69
+ bytes_read = bytes_read.unpack(DWORD)[0]
70
+ if bytes_read > 0
71
+ buffer[0..(bytes_read - 1)]
72
+ else
73
+ ''
74
+ end
75
+ end
76
+
77
+ # Write File
78
+ def self.write_file(handle, buffer, bytes_to_write, overlapped = NULL)
79
+ bytes_written = ' ' * 8
80
+ api = Win32API.new('Kernel32', 'WriteFile', [HANDLE, LP, DWORD, LP, LP], BOOL)
81
+ api.call(handle, buffer, bytes_to_write, bytes_written, overlapped)
82
+ bytes_written.unpack(DWORD)[0]
83
+ end
84
+
85
+ protected
86
+
87
+ def self.build_dcb
88
+ dcb = Structure.new(:LITTLE_ENDIAN)
89
+ dcb.define_item('DCBlength', 0, 32, :UINT)
90
+ dcb.define_item('BaudRate', 32, 32, :UINT)
91
+ dcb.define_item('fBinary', 71, 1, :UINT)
92
+ dcb.define_item('fParity', 70, 1, :UINT)
93
+ dcb.define_item('fOutxCtsFlow', 69, 1, :UINT)
94
+ dcb.define_item('fOutxDsrFlow', 68, 1, :UINT)
95
+ dcb.define_item('fDtrControl', 66, 2, :UINT)
96
+ dcb.define_item('fDsrSensitivity', 65, 1, :UINT)
97
+ dcb.define_item('fTXContinueOnXoff', 64, 1, :UINT)
98
+ dcb.define_item('fOutX', 79, 1, :UINT)
99
+ dcb.define_item('fInX', 78, 1, :UINT)
100
+ dcb.define_item('fErrorChar', 77, 1, :UINT)
101
+ dcb.define_item('fNull', 76, 1, :UINT)
102
+ dcb.define_item('fRtsControl', 74, 2, :UINT)
103
+ dcb.define_item('fAbortOnError', 73, 1, :UINT)
104
+ dcb.define_item('fDummy2', 88, 17, :UINT)
105
+ dcb.define_item('wReserved', 96, 16, :UINT)
106
+ dcb.define_item('XonLim', 112, 16, :UINT)
107
+ dcb.define_item('XoffLim', 128, 16, :UINT)
108
+ dcb.define_item('ByteSize', 144, 8, :UINT)
109
+ dcb.define_item('Parity', 152, 8, :UINT)
110
+ dcb.define_item('StopBits', 160, 8, :UINT)
111
+ dcb.define_item('XonChar', 168, 8, :INT)
112
+ dcb.define_item('XoffChar', 176, 8, :INT)
113
+ dcb.define_item('ErrorChar', 184, 8, :INT)
114
+ dcb.define_item('EofChar', 192, 8, :INT)
115
+ dcb.define_item('EvtChar', 200, 8, :INT)
116
+ dcb.define_item('wReserved1', 208, 16, :UINT)
117
+ dcb.write('DCBlength', 28)
118
+ dcb
119
+ end
120
+
121
+ def self.build_comm_timeouts(read_interval_timeout = 4294967295, read_total_timeout_multiplier = 0, read_total_timeout_constant = 0, write_total_timeout_multiplier = 0, write_total_timeout_constant = 0)
122
+ comm_timeouts = Structure.new(:LITTLE_ENDIAN)
123
+ comm_timeouts.append_item('ReadIntervalTimeout', 32, :UINT)
124
+ comm_timeouts.append_item('ReadTotalTimeoutMultiplier', 32, :UINT)
125
+ comm_timeouts.append_item('ReadTotalTimeoutConstant', 32, :UINT)
126
+ comm_timeouts.append_item('WriteTotalTimeoutMultiplier', 32, :UINT)
127
+ comm_timeouts.append_item('WriteTotalTimeoutConstant', 32, :UINT)
128
+ comm_timeouts.write('ReadIntervalTimeout', read_interval_timeout)
129
+ comm_timeouts.write('ReadTotalTimeoutMultiplier', read_total_timeout_multiplier)
130
+ comm_timeouts.write('ReadTotalTimeoutConstant', read_total_timeout_constant)
131
+ comm_timeouts.write('WriteTotalTimeoutMultiplier', write_total_timeout_multiplier)
132
+ comm_timeouts.write('WriteTotalTimeoutConstant', write_total_timeout_constant)
133
+ comm_timeouts
134
+ end
135
+
136
+ end # class Win32
137
+
138
+ end # module Cosmos
139
+
140
+ module QDA
141
+ module Filters
142
+ # Used only on windows to enable calling other executables without the
143
+ # annoying command-prompt box that pops up when using Ruby backticks in
144
+ # a script running under rubyw.
145
+ #
146
+ # Usage:
147
+ # output, errors = QDA::Filters::Win32Process::backtick('dir')
148
+ #
149
+ # Note - most of this code written by S Kroeger, see
150
+ # http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/155684
151
+ module Win32Process
152
+ NORMAL_PRIORITY_CLASS = 0x00000020
153
+ STARTUP_INFO_SIZE = 68
154
+ PROCESS_INFO_SIZE = 16
155
+ SECURITY_ATTRIBUTES_SIZE = 12
156
+
157
+ ERROR_SUCCESS = 0x00
158
+ FORMAT_MESSAGE_FROM_SYSTEM = 0x1000
159
+ FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x2000
160
+
161
+ HANDLE_FLAG_INHERIT = 1
162
+ HANDLE_FLAG_PROTECT_FROM_CLOSE =2
163
+
164
+ STARTF_USESHOWWINDOW = 0x00000001
165
+ STARTF_USESTDHANDLES = 0x00000100
166
+
167
+ class << self
168
+ def raise_last_win_32_error
169
+ errorCode = Cosmos::Win32API.new("kernel32", "GetLastError", [], 'L').call
170
+ if errorCode != ERROR_SUCCESS
171
+ params = [
172
+ 'L', # IN DWORD dwFlags,
173
+ 'P', # IN LPCVOID lpSource,
174
+ 'L', # IN DWORD dwMessageId,
175
+ 'L', # IN DWORD dwLanguageId,
176
+ 'P', # OUT LPSTR lpBuffer,
177
+ 'L', # IN DWORD nSize,
178
+ 'P', # IN va_list *Arguments
179
+ ]
180
+
181
+ formatMessage = Cosmos::Win32API.new("kernel32", "FormatMessage", params, 'L')
182
+ msg = ' ' * 255
183
+ formatMessage.call(FORMAT_MESSAGE_FROM_SYSTEM +
184
+ FORMAT_MESSAGE_ARGUMENT_ARRAY, '', errorCode, 0, msg, 255, '')
185
+
186
+ msg.gsub!(/\000/, '')
187
+ msg.strip!
188
+ raise msg
189
+ else
190
+ raise 'GetLastError returned ERROR_SUCCESS'
191
+ end
192
+ end
193
+
194
+ def create_pipe # returns read and write handle
195
+ params = [
196
+ 'P', # pointer to read handle
197
+ 'P', # pointer to write handle
198
+ 'P', # pointer to security attributes
199
+ 'L'] # pipe size
200
+
201
+ createPipe = Cosmos::Win32API.new("kernel32", "CreatePipe", params, 'I')
202
+
203
+ read_handle, write_handle = [0].pack('I'), [0].pack('I')
204
+ sec_attrs = [SECURITY_ATTRIBUTES_SIZE, 0, 1].pack('III')
205
+
206
+ raise_last_win_32_error if createPipe.Call(read_handle,
207
+ write_handle, sec_attrs, 0).zero?
208
+
209
+ [read_handle.unpack('I')[0], write_handle.unpack('I')[0]]
210
+ end
211
+
212
+ def set_handle_information(handle, flags, value)
213
+ params = [
214
+ 'L', # handle to an object
215
+ 'L', # specifies flags to change
216
+ 'L'] # specifies new values for flags
217
+
218
+ setHandleInformation = Cosmos::Win32API.new("kernel32",
219
+ "SetHandleInformation", params, 'I')
220
+ raise_last_win_32_error if setHandleInformation.Call(handle,
221
+ flags, value).zero?
222
+ nil
223
+ end
224
+
225
+ def close_handle(handle)
226
+ closeHandle = Cosmos::Win32API.new("kernel32", "CloseHandle", ['L'], 'I')
227
+ raise_last_win_32_error if closeHandle.call(handle).zero?
228
+ end
229
+
230
+ def create_process(command, stdin, stdout, stderror)
231
+ params = [
232
+ 'L', # IN LPCSTR lpApplicationName
233
+ 'P', # IN LPSTR lpCommandLine
234
+ 'L', # IN LPSECURITY_ATTRIBUTES lpProcessAttributes
235
+ 'L', # IN LPSECURITY_ATTRIBUTES lpThreadAttributes
236
+ 'L', # IN BOOL bInheritHandles
237
+ 'L', # IN DWORD dwCreationFlags
238
+ 'L', # IN LPVOID lpEnvironment
239
+ 'L', # IN LPCSTR lpCurrentDirectory
240
+ 'P', # IN LPSTARTUPINFOA lpStartupInfo
241
+ 'P'] # OUT LPPROCESS_INFORMATION lpProcessInformation
242
+
243
+ startupInfo = [STARTUP_INFO_SIZE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
244
+ STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW, 0,
245
+ 0, 0, stdin, stdout, stderror].pack('IIIIIIIIIIIISSIIII')
246
+
247
+ processInfo = [0, 0, 0, 0].pack('IIII')
248
+ command << 0
249
+
250
+ createProcess = Cosmos::Win32API.new("kernel32", "CreateProcess", params, 'I')
251
+ cp_args = [ 0, command, 0, 0, 1, 0, 0, 0, startupInfo, processInfo ]
252
+ raise_last_win_32_error if createProcess.call(*cp_args).zero?
253
+
254
+ hProcess, hThread,
255
+ dwProcessId, dwThreadId = processInfo.unpack('LLLL')
256
+
257
+ close_handle(hProcess)
258
+ close_handle(hThread)
259
+
260
+ [dwProcessId, dwThreadId]
261
+ end
262
+
263
+ def write_file(hFile, buffer)
264
+ params = [
265
+ 'L', # handle to file to write to
266
+ 'P', # pointer to data to write to file
267
+ 'L', # number of bytes to write
268
+ 'P', # pointer to number of bytes written
269
+ 'L'] # pointer to structure for overlapped I/O
270
+
271
+ written = [0].pack('I')
272
+ writeFile = Cosmos::Win32API.new("kernel32", "WriteFile", params, 'I')
273
+
274
+ raise_last_win_32_error if writeFile.call(hFile, buffer, buffer.size,
275
+ written, 0).zero?
276
+
277
+ written.unpack('I')[0]
278
+ end
279
+
280
+ def read_file(hFile)
281
+ params = [
282
+ 'L', # handle of file to read
283
+ 'P', # pointer to buffer that receives data
284
+ 'L', # number of bytes to read
285
+ 'P', # pointer to number of bytes read
286
+ 'L'] #pointer to structure for data
287
+
288
+ number = [0].pack('I')
289
+ buffer = ' ' * 255
290
+
291
+ readFile = Cosmos::Win32API.new("kernel32", "ReadFile", params, 'I')
292
+ return '' if readFile.call(hFile, buffer, 255, number, 0).zero?
293
+
294
+ buffer[0...number.unpack('I')[0]]
295
+ end
296
+
297
+ def peek_named_pipe(hFile)
298
+ params = [
299
+ 'L', # handle to pipe to copy from
300
+ 'L', # pointer to data buffer
301
+ 'L', # size, in bytes, of data buffer
302
+ 'L', # pointer to number of bytes read
303
+ 'P', # pointer to total number of bytes available
304
+ 'L'] # pointer to unread bytes in this message
305
+
306
+ available = [0].pack('I')
307
+ peekNamedPipe = Cosmos::Win32API.new("kernel32", "PeekNamedPipe", params, 'I')
308
+
309
+ return -1 if peekNamedPipe.Call(hFile, 0, 0, 0, available, 0).zero?
310
+
311
+ available.unpack('I')[0]
312
+ end
313
+ end
314
+
315
+ class Win32popenIO
316
+ def initialize (hRead, hWrite, hError)
317
+ @hRead = hRead
318
+ @hWrite = hWrite
319
+ @hError = hError
320
+ end
321
+
322
+ def write data
323
+ Win32Process::write_file(@hWrite, data.to_s)
324
+ end
325
+
326
+ def read
327
+ sleep(0.01) while Win32Process::peek_named_pipe(@hRead).zero?
328
+ Win32Process::read_file(@hRead)
329
+ end
330
+
331
+ def read_all
332
+ all = ''
333
+ until (buffer = read).empty?
334
+ all << buffer
335
+ end
336
+ all
337
+ end
338
+
339
+ def read_err
340
+ sleep(0.01) while Win32Process::peek_named_pipe(@hError).zero?
341
+ Win32Process::read_file(@hError)
342
+ end
343
+
344
+ def read_all_err
345
+ all = ''
346
+ until (buffer = read_err).empty?
347
+ all << buffer
348
+ end
349
+ all
350
+ end
351
+ end
352
+
353
+ # The only useful public method in this class - receives a command line,
354
+ # and returns the output content and error content as a pair of strings.
355
+ # No shell expansion is carried out on the command line string.
356
+ #
357
+ # Usage:
358
+ # output, errors = QDA::Filters::Win32Process::backtick('dir')
359
+ def self.backtick(command)
360
+ # create 3 pipes
361
+ child_in_r, child_in_w = create_pipe
362
+ child_out_r, child_out_w = create_pipe
363
+ child_error_r, child_error_w = create_pipe
364
+
365
+ # Ensure the write handle to the pipe for STDIN is not inherited.
366
+ set_handle_information(child_in_w, HANDLE_FLAG_INHERIT, 0)
367
+ set_handle_information(child_out_r, HANDLE_FLAG_INHERIT, 0)
368
+ set_handle_information(child_error_r, HANDLE_FLAG_INHERIT, 0)
369
+
370
+ create_process(command,
371
+ child_in_r,
372
+ child_out_w,
373
+ child_error_w)
374
+ # we have to close the handles, so the pipes terminate with the process
375
+ close_handle(child_in_r)
376
+ close_handle(child_out_w)
377
+ close_handle(child_error_w)
378
+ close_handle(child_in_w)
379
+ io = Win32popenIO.new(child_out_r, child_in_w, child_error_r)
380
+
381
+ out = io.read_all().gsub(/\r/, '')
382
+ err = io.read_all_err().gsub(/\r/, '')
383
+ return out, err
384
+ end
385
+ end # module Win32Process
386
+ end #module Filters
387
+ end # module QDA