cosmos 4.0.0-universal-java-1.8

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 (1478) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitattributes +3 -0
  4. data/.gitignore +48 -0
  5. data/.rubocop.yml +23 -0
  6. data/.travis.yml +10 -0
  7. data/.yardopts +3 -0
  8. data/CONTRIBUTING.txt +50 -0
  9. data/Gemfile +10 -0
  10. data/Guardfile +27 -0
  11. data/LICENSE.txt +879 -0
  12. data/Manifest.txt +1536 -0
  13. data/README.md +111 -0
  14. data/Rakefile +264 -0
  15. data/autohotkey/config/data/attitude.bin +0 -0
  16. data/autohotkey/config/data/diamond.STL +58 -0
  17. data/autohotkey/config/data/groundoff.gif +0 -0
  18. data/autohotkey/config/data/groundon.gif +0 -0
  19. data/autohotkey/config/data/position.bin +0 -0
  20. data/autohotkey/config/data/satellite.gif +0 -0
  21. data/autohotkey/config/data/tada.wav +0 -0
  22. data/autohotkey/config/system/system.txt +29 -0
  23. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +126 -0
  24. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -0
  25. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -0
  26. data/autohotkey/config/targets/INST/doc/README.txt +1 -0
  27. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -0
  28. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -0
  29. data/autohotkey/config/targets/INST/screens/_footer.txt +4 -0
  30. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -0
  31. data/autohotkey/config/targets/INST/screens/array.txt +7 -0
  32. data/autohotkey/config/targets/INST/screens/block.txt +8 -0
  33. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -0
  34. data/autohotkey/config/targets/INST/screens/extra.txt +19 -0
  35. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -0
  36. data/autohotkey/config/targets/INST/screens/ground.txt +25 -0
  37. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -0
  38. data/autohotkey/config/targets/INST/screens/hs.txt +46 -0
  39. data/autohotkey/config/targets/INST/screens/image.txt +21 -0
  40. data/autohotkey/config/targets/INST/screens/latest.txt +23 -0
  41. data/autohotkey/config/targets/INST/screens/mech.txt +25 -0
  42. data/autohotkey/config/targets/INST/screens/other.txt +25 -0
  43. data/autohotkey/config/targets/INST/screens/params.txt +25 -0
  44. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -0
  45. data/autohotkey/config/targets/INST/sequences/run_sequence.txt +1 -0
  46. data/autohotkey/config/targets/INST/target.txt +27 -0
  47. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -0
  48. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -0
  49. data/autohotkey/config/targets/META/screens/data.txt +12 -0
  50. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  51. data/autohotkey/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  52. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  53. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  54. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -0
  55. data/autohotkey/config/targets/SYSTEM/screens/limits_change.txt +14 -0
  56. data/autohotkey/config/targets/SYSTEM/screens/meta.txt +14 -0
  57. data/autohotkey/config/targets/SYSTEM/target.txt +12 -0
  58. data/autohotkey/config/tools/cmd_sender/cmd_sender.txt +1 -0
  59. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -0
  60. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -0
  61. data/autohotkey/config/tools/handbook_creator/default_toc.xsl +59 -0
  62. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -0
  63. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  64. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  65. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  66. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -0
  67. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  68. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  69. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  70. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  71. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  72. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  73. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  74. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  75. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -0
  76. data/autohotkey/config/tools/launcher/launcher.txt +38 -0
  77. data/autohotkey/config/tools/limits_monitor/README.txt +1 -0
  78. data/autohotkey/config/tools/opengl_builder/error.txt +1 -0
  79. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -0
  80. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -0
  81. data/autohotkey/config/tools/table_manager/OldOneDimensionalTable_def.txt +19 -0
  82. data/autohotkey/config/tools/table_manager/OldTwoDimensionalTable_def.txt +248 -0
  83. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +31 -0
  84. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +28 -0
  85. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -0
  86. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -0
  87. data/autohotkey/config/tools/test_runner/test_runner3.txt +7 -0
  88. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -0
  89. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +14 -0
  90. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -0
  91. data/autohotkey/config/tools/tlm_grapher/README.txt +1 -0
  92. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -0
  93. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -0
  94. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -0
  95. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -0
  96. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -0
  97. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -0
  98. data/autohotkey/lib/example_background_task.rb +42 -0
  99. data/autohotkey/lib/user_version.rb +3 -0
  100. data/autohotkey/procedures/clear_util.rb +7 -0
  101. data/autohotkey/procedures/collect.rb +18 -0
  102. data/autohotkey/procedures/collect_util.rb +14 -0
  103. data/autohotkey/procedures/example_test.rb +71 -0
  104. data/autohotkey/procedures/example_test2.rb +74 -0
  105. data/autohotkey/procedures/script_test.rb +21 -0
  106. data/autohotkey/procedures/syntax_error.rb +18 -0
  107. data/autohotkey/tools/CmdExtractorAHK +16 -0
  108. data/autohotkey/tools/CmdSender +14 -0
  109. data/autohotkey/tools/CmdSenderAHK +18 -0
  110. data/autohotkey/tools/CmdSequence +14 -0
  111. data/autohotkey/tools/CmdSequenceAHK +23 -0
  112. data/autohotkey/tools/CmdSequenceAHK2 +16 -0
  113. data/autohotkey/tools/CmdTlmServer +14 -0
  114. data/autohotkey/tools/CmdTlmServerAHK +28 -0
  115. data/autohotkey/tools/CmdTlmServerAHK2 +17 -0
  116. data/autohotkey/tools/DataViewer +14 -0
  117. data/autohotkey/tools/DataViewerAHK +17 -0
  118. data/autohotkey/tools/HandbookCreatorAHK +20 -0
  119. data/autohotkey/tools/LauncherAHK +17 -0
  120. data/autohotkey/tools/LimitsMonitorAHK +20 -0
  121. data/autohotkey/tools/OpenGLBuilderAHK +24 -0
  122. data/autohotkey/tools/PacketViewer +14 -0
  123. data/autohotkey/tools/PacketViewerAHK +18 -0
  124. data/autohotkey/tools/PacketViewerAHK2 +17 -0
  125. data/autohotkey/tools/Replay +14 -0
  126. data/autohotkey/tools/ReplayAHK +17 -0
  127. data/autohotkey/tools/ScriptRunner +14 -0
  128. data/autohotkey/tools/ScriptRunnerAHK +20 -0
  129. data/autohotkey/tools/ScriptRunnerAHK2 +17 -0
  130. data/autohotkey/tools/TableManager +14 -0
  131. data/autohotkey/tools/TableManagerAHK +25 -0
  132. data/autohotkey/tools/TableManagerAHK2 +18 -0
  133. data/autohotkey/tools/TableManagerAHK3 +18 -0
  134. data/autohotkey/tools/TableManagerAHK4 +24 -0
  135. data/autohotkey/tools/TestRunner +15 -0
  136. data/autohotkey/tools/TestRunnerAHK +17 -0
  137. data/autohotkey/tools/TestRunnerAHK2 +17 -0
  138. data/autohotkey/tools/TestRunnerAHK3 +17 -0
  139. data/autohotkey/tools/TestRunnerAHK4 +17 -0
  140. data/autohotkey/tools/TestRunnerAHK5 +17 -0
  141. data/autohotkey/tools/TestRunnerAHK6 +17 -0
  142. data/autohotkey/tools/TlmExtractor +15 -0
  143. data/autohotkey/tools/TlmExtractorAHK +19 -0
  144. data/autohotkey/tools/TlmExtractorAHK2 +16 -0
  145. data/autohotkey/tools/TlmExtractorAHK3 +16 -0
  146. data/autohotkey/tools/TlmGrapher +14 -0
  147. data/autohotkey/tools/TlmGrapherAHK +19 -0
  148. data/autohotkey/tools/TlmGrapherAHK2 +23 -0
  149. data/autohotkey/tools/TlmGrapherAHK3 +17 -0
  150. data/autohotkey/tools/TlmGrapherAHK4 +17 -0
  151. data/autohotkey/tools/TlmViewer +14 -0
  152. data/autohotkey/tools/TlmViewerAHK +28 -0
  153. data/autohotkey/tools/TlmViewerAHK2 +22 -0
  154. data/autohotkey/tools/TlmViewerAHK3 +23 -0
  155. data/autohotkey/tools/TlmViewerAHK4 +22 -0
  156. data/autohotkey/tools/TlmViewerAHK5 +18 -0
  157. data/autohotkey/tools/autohotkey.rb +38 -0
  158. data/autohotkey/tools/cmd_extractor.ahk +50 -0
  159. data/autohotkey/tools/cmd_sender.ahk +180 -0
  160. data/autohotkey/tools/cmd_sequence.ahk +215 -0
  161. data/autohotkey/tools/cmd_sequence2.ahk +23 -0
  162. data/autohotkey/tools/cmd_tlm_server.ahk +90 -0
  163. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -0
  164. data/autohotkey/tools/data_viewer.ahk +140 -0
  165. data/autohotkey/tools/handbook_creator.ahk +32 -0
  166. data/autohotkey/tools/launcher.ahk +41 -0
  167. data/autohotkey/tools/limits_monitor.ahk +121 -0
  168. data/autohotkey/tools/open_gl_builder.ahk +133 -0
  169. data/autohotkey/tools/packet_viewer.ahk +216 -0
  170. data/autohotkey/tools/packet_viewer2.ahk +9 -0
  171. data/autohotkey/tools/replay.ahk +103 -0
  172. data/autohotkey/tools/script_runner.ahk +588 -0
  173. data/autohotkey/tools/script_runner2.ahk +50 -0
  174. data/autohotkey/tools/table_manager.ahk +291 -0
  175. data/autohotkey/tools/test_runner.ahk +262 -0
  176. data/autohotkey/tools/test_runner2.ahk +49 -0
  177. data/autohotkey/tools/test_runner3.ahk +11 -0
  178. data/autohotkey/tools/test_runner5.ahk +8 -0
  179. data/autohotkey/tools/test_runner6.ahk +5 -0
  180. data/autohotkey/tools/tlm_extractor.ahk +357 -0
  181. data/autohotkey/tools/tlm_grapher.ahk +658 -0
  182. data/autohotkey/tools/tlm_grapher2.ahk +115 -0
  183. data/autohotkey/tools/tlm_grapher3.ahk +23 -0
  184. data/autohotkey/tools/tlm_viewer.ahk +138 -0
  185. data/autohotkey/tools/tlm_viewer2.ahk +49 -0
  186. data/autohotkey/tools/tlm_viewer4.ahk +4 -0
  187. data/autohotkey/tools/tlm_viewer5.ahk +19 -0
  188. data/bin/cosmos +266 -0
  189. data/bin/cstol_converter +1166 -0
  190. data/bin/exchndl20-x64.dll +0 -0
  191. data/bin/exchndl20.dll +0 -0
  192. data/bin/exchndl21-x64.dll +0 -0
  193. data/bin/exchndl21.dll +0 -0
  194. data/bin/exchndl22-x64.dll +0 -0
  195. data/bin/exchndl22.dll +0 -0
  196. data/bin/mgwhelp-x64.dll +0 -0
  197. data/bin/mgwhelp.dll +0 -0
  198. data/bin/rubysloc +85 -0
  199. data/bin/xtce_converter +83 -0
  200. data/cosmos.gemspec +107 -0
  201. data/data/COSMOS_64x64.bmp +0 -0
  202. data/data/COSMOS_64x64.ico +0 -0
  203. data/data/COSMOS_64x64.png +0 -0
  204. data/data/COSMOS_Architecture.png +0 -0
  205. data/data/CheckBoxCheck.gif +0 -0
  206. data/data/CheckBoxEmpty.gif +0 -0
  207. data/data/Earthmap1024x512.gif +0 -0
  208. data/data/about.txt +4 -0
  209. data/data/add_database.png +0 -0
  210. data/data/add_plot.png +0 -0
  211. data/data/add_tab.png +0 -0
  212. data/data/blank.png +0 -0
  213. data/data/bug.png +0 -0
  214. data/data/checkmark.png +0 -0
  215. data/data/close.png +0 -0
  216. data/data/cmd_extractor.png +0 -0
  217. data/data/cmd_sender.png +0 -0
  218. data/data/cmd_sequence.png +0 -0
  219. data/data/config/_array_params.yaml +23 -0
  220. data/data/config/_id_items.yaml +24 -0
  221. data/data/config/_id_params.yaml +58 -0
  222. data/data/config/_interfaces.yaml +206 -0
  223. data/data/config/_items.yaml +20 -0
  224. data/data/config/_params.yaml +58 -0
  225. data/data/config/cmd_tlm_server.yaml +110 -0
  226. data/data/config/command.yaml +38 -0
  227. data/data/config/command_modifiers.yaml +127 -0
  228. data/data/config/command_telemetry.yaml +3 -0
  229. data/data/config/data_viewer.yaml +43 -0
  230. data/data/config/handbook_creator.yaml +23 -0
  231. data/data/config/housekeeping_params.yaml +71 -0
  232. data/data/config/interface_modifiers.yaml +44 -0
  233. data/data/config/item_modifiers.yaml +172 -0
  234. data/data/config/launcher.yaml +117 -0
  235. data/data/config/limits_monitor.yaml +53 -0
  236. data/data/config/linegraph_params.yaml +30 -0
  237. data/data/config/linegraph_plot.yaml +106 -0
  238. data/data/config/page_modifiers.yaml +128 -0
  239. data/data/config/param_item_modifiers.yaml +41 -0
  240. data/data/config/parameter_modifiers.yaml +144 -0
  241. data/data/config/protocols.yaml +257 -0
  242. data/data/config/screen.yaml +151 -0
  243. data/data/config/script_runner.yaml +15 -0
  244. data/data/config/system.yaml +153 -0
  245. data/data/config/table_manager.yaml +76 -0
  246. data/data/config/table_parameter_modifiers.yaml +9 -0
  247. data/data/config/target.yaml +71 -0
  248. data/data/config/telemetry.yaml +73 -0
  249. data/data/config/telemetry_modifiers.yaml +129 -0
  250. data/data/config/test_runner.yaml +118 -0
  251. data/data/config/tlm_extractor.yaml +109 -0
  252. data/data/config/tlm_grapher.yaml +78 -0
  253. data/data/config/tlm_viewer.yaml +107 -0
  254. data/data/config/unknown.yaml +3 -0
  255. data/data/config/widgets.yaml +1339 -0
  256. data/data/config/xy_params.yaml +50 -0
  257. data/data/config/xy_plot.yaml +12 -0
  258. data/data/config_editor.png +0 -0
  259. data/data/copy.png +0 -0
  260. data/data/cosmos.xcf +0 -0
  261. data/data/cosmos_word.gif +0 -0
  262. data/data/crc.txt +350 -0
  263. data/data/critical.wav +0 -0
  264. data/data/cts.png +0 -0
  265. data/data/cut.png +0 -0
  266. data/data/data_viewer.png +0 -0
  267. data/data/delete.png +0 -0
  268. data/data/delete_database.png +0 -0
  269. data/data/delete_plot.png +0 -0
  270. data/data/delete_tab.png +0 -0
  271. data/data/diamond.STL +58 -0
  272. data/data/disconnected.png +0 -0
  273. data/data/edit.png +0 -0
  274. data/data/edit_database.png +0 -0
  275. data/data/edit_plot.png +0 -0
  276. data/data/edit_tab.png +0 -0
  277. data/data/end-26.png +0 -0
  278. data/data/fast_forward-26.png +0 -0
  279. data/data/file.png +0 -0
  280. data/data/handbook_creator.png +0 -0
  281. data/data/help.png +0 -0
  282. data/data/html-32.png +0 -0
  283. data/data/information.wav +0 -0
  284. data/data/input.wav +0 -0
  285. data/data/launcher.png +0 -0
  286. data/data/legal.gif +0 -0
  287. data/data/legal.txt +8 -0
  288. data/data/limits_monitor.png +0 -0
  289. data/data/message.wav +0 -0
  290. data/data/moonmap1k.gif +0 -0
  291. data/data/multi.png +0 -0
  292. data/data/open.png +0 -0
  293. data/data/open_in_browser-32.png +0 -0
  294. data/data/opengl_builder.png +0 -0
  295. data/data/packet_viewer.png +0 -0
  296. data/data/pdf-32.png +0 -0
  297. data/data/play-26.png +0 -0
  298. data/data/question.wav +0 -0
  299. data/data/redo.png +0 -0
  300. data/data/replay.png +0 -0
  301. data/data/reverse-play-26.png +0 -0
  302. data/data/rewind-26.png +0 -0
  303. data/data/running.png +0 -0
  304. data/data/save.png +0 -0
  305. data/data/save_as.png +0 -0
  306. data/data/screenshot.png +0 -0
  307. data/data/script_runner.png +0 -0
  308. data/data/search-14.png +0 -0
  309. data/data/search.png +0 -0
  310. data/data/send_file.png +0 -0
  311. data/data/skip_to_start-26.png +0 -0
  312. data/data/spinner.gif +0 -0
  313. data/data/splash.gif +0 -0
  314. data/data/stop-26.png +0 -0
  315. data/data/table_manager.png +0 -0
  316. data/data/test_runner.png +0 -0
  317. data/data/tlm_extractor.png +0 -0
  318. data/data/tlm_grapher.png +0 -0
  319. data/data/tlm_viewer.png +0 -0
  320. data/data/undo.png +0 -0
  321. data/data/warning.wav +0 -0
  322. data/demo/Gemfile +10 -0
  323. data/demo/Launcher +16 -0
  324. data/demo/Launcher.bat +9 -0
  325. data/demo/Rakefile +77 -0
  326. data/demo/config/data/attitude.bin +0 -0
  327. data/demo/config/data/crc.txt +253 -0
  328. data/demo/config/data/diamond.STL +58 -0
  329. data/demo/config/data/groundoff.gif +0 -0
  330. data/demo/config/data/groundon.gif +0 -0
  331. data/demo/config/data/hselectoff.gif +0 -0
  332. data/demo/config/data/hselecton.gif +0 -0
  333. data/demo/config/data/hswitchoff.gif +0 -0
  334. data/demo/config/data/hswitchon.gif +0 -0
  335. data/demo/config/data/meta_init.txt +1 -0
  336. data/demo/config/data/position.bin +0 -0
  337. data/demo/config/data/poweroff.gif +0 -0
  338. data/demo/config/data/poweron.gif +0 -0
  339. data/demo/config/data/satellite.gif +0 -0
  340. data/demo/config/data/tada.wav +0 -0
  341. data/demo/config/data/vswitchoff.gif +0 -0
  342. data/demo/config/data/vswitchon.gif +0 -0
  343. data/demo/config/system/system.txt +47 -0
  344. data/demo/config/system/system2.txt +43 -0
  345. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -0
  346. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -0
  347. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -0
  348. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +18 -0
  349. data/demo/config/targets/EXAMPLE/target.txt +9 -0
  350. data/demo/config/targets/INST/cmd_tlm/_ccsds_cmd.txt +9 -0
  351. data/demo/config/targets/INST/cmd_tlm/_ccsds_tlm.txt +19 -0
  352. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +57 -0
  353. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +164 -0
  354. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -0
  355. data/demo/config/targets/INST/doc/README.txt +1 -0
  356. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -0
  357. data/demo/config/targets/INST/lib/inst_dump_component.rb +34 -0
  358. data/demo/config/targets/INST/lib/sim_inst.rb +321 -0
  359. data/demo/config/targets/INST/procedures/checks.rb +11 -0
  360. data/demo/config/targets/INST/procedures/collect.rb +18 -0
  361. data/demo/config/targets/INST/procedures/disconnect.rb +29 -0
  362. data/demo/config/targets/INST/procedures/utilities/clear.rb +7 -0
  363. data/demo/config/targets/INST/procedures/utilities/collect.rb +14 -0
  364. data/demo/config/targets/INST/screens/_footer.txt +4 -0
  365. data/demo/config/targets/INST/screens/adcs.txt +70 -0
  366. data/demo/config/targets/INST/screens/array.txt +15 -0
  367. data/demo/config/targets/INST/screens/block.txt +8 -0
  368. data/demo/config/targets/INST/screens/commanding.txt +37 -0
  369. data/demo/config/targets/INST/screens/graphs.txt +14 -0
  370. data/demo/config/targets/INST/screens/ground.txt +25 -0
  371. data/demo/config/targets/INST/screens/hs.txt +42 -0
  372. data/demo/config/targets/INST/screens/latest.txt +23 -0
  373. data/demo/config/targets/INST/screens/limits.txt +43 -0
  374. data/demo/config/targets/INST/screens/other.txt +24 -0
  375. data/demo/config/targets/INST/screens/spacing_box.txt +44 -0
  376. data/demo/config/targets/INST/screens/spacing_grid.txt +78 -0
  377. data/demo/config/targets/INST/screens/tabs.txt +68 -0
  378. data/demo/config/targets/INST/sequences/sequence.tsv +3 -0
  379. data/demo/config/targets/INST/tables/EventAction.csv +9 -0
  380. data/demo/config/targets/INST/tables/EventAction.dat +0 -0
  381. data/demo/config/targets/INST/tables/McConfigTable.csv +20 -0
  382. data/demo/config/targets/INST/tables/McConfigTable.dat +0 -0
  383. data/demo/config/targets/INST/target.txt +37 -0
  384. data/demo/config/targets/INST/tools/data_viewer/data_viewer.txt +2 -0
  385. data/demo/config/targets/INST/tools/data_viewer/data_viewer2.txt +2 -0
  386. data/demo/config/targets/INST/tools/table_manager/EventAction_def.txt +6 -0
  387. data/demo/config/targets/INST/tools/table_manager/McConfigTable_def.txt +38 -0
  388. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +11 -0
  389. data/demo/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  390. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -0
  391. data/demo/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  392. data/demo/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  393. data/demo/config/targets/SYSTEM/cmd_tlm_server.txt +6 -0
  394. data/demo/config/targets/SYSTEM/lib/limits_groups.rb +39 -0
  395. data/demo/config/targets/SYSTEM/screens/status.txt +12 -0
  396. data/demo/config/targets/SYSTEM/target.txt +12 -0
  397. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -0
  398. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -0
  399. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -0
  400. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +59 -0
  401. data/demo/config/targets/TEMPLATED/target.txt +8 -0
  402. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +49 -0
  403. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +42 -0
  404. data/demo/config/tools/data_viewer/data_viewer.txt +20 -0
  405. data/demo/config/tools/example_application.css +58 -0
  406. data/demo/config/tools/handbook_creator/default_toc.xsl +59 -0
  407. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -0
  408. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -0
  409. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  410. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  411. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -0
  412. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  413. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  414. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  415. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  416. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  417. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  418. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -0
  419. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  420. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -0
  421. data/demo/config/tools/launcher/launcher.css +7 -0
  422. data/demo/config/tools/launcher/launcher.txt +48 -0
  423. data/demo/config/tools/launcher/launcher2.css +10 -0
  424. data/demo/config/tools/launcher/launcher2.txt +48 -0
  425. data/demo/config/tools/launcher/launcher_mini.txt +45 -0
  426. data/demo/config/tools/limits_monitor/README.txt +1 -0
  427. data/demo/config/tools/opengl_builder/README.txt +1 -0
  428. data/demo/config/tools/script_runner/script_runner.txt +3 -0
  429. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -0
  430. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  431. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +37 -0
  432. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +34 -0
  433. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +9 -0
  434. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +31 -0
  435. data/demo/config/tools/test_runner/test_runner.css +45 -0
  436. data/demo/config/tools/test_runner/test_runner.txt +17 -0
  437. data/demo/config/tools/tlm_extractor/_adcs_time.txt +2 -0
  438. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  439. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  440. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  441. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  442. data/demo/config/tools/tlm_grapher/README.txt +1 -0
  443. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -0
  444. data/demo/lib/example_background_task.rb +55 -0
  445. data/demo/lib/example_target.rb +103 -0
  446. data/demo/lib/scpi_target.rb +68 -0
  447. data/demo/lib/user_version.rb +3 -0
  448. data/demo/procedures/cosmos_api_test.rb +310 -0
  449. data/demo/procedures/example_test.rb +192 -0
  450. data/demo/procedures/plot_test.rb +8 -0
  451. data/demo/procedures/run_example_test.rb +3 -0
  452. data/demo/procedures/test.rb +51 -0
  453. data/demo/tools/CmdExtractor +16 -0
  454. data/demo/tools/CmdExtractor.bat +9 -0
  455. data/demo/tools/CmdSender +16 -0
  456. data/demo/tools/CmdSender.bat +9 -0
  457. data/demo/tools/CmdSequence +16 -0
  458. data/demo/tools/CmdSequence.bat +9 -0
  459. data/demo/tools/CmdTlmServer +16 -0
  460. data/demo/tools/CmdTlmServer.bat +9 -0
  461. data/demo/tools/ConfigEditor +16 -0
  462. data/demo/tools/ConfigEditor.bat +9 -0
  463. data/demo/tools/DataViewer +16 -0
  464. data/demo/tools/DataViewer.bat +9 -0
  465. data/demo/tools/ExampleTarget +16 -0
  466. data/demo/tools/ExampleTarget.bat +9 -0
  467. data/demo/tools/HandbookCreator +16 -0
  468. data/demo/tools/HandbookCreator.bat +9 -0
  469. data/demo/tools/Launcher +16 -0
  470. data/demo/tools/Launcher.bat +9 -0
  471. data/demo/tools/LimitsMonitor +16 -0
  472. data/demo/tools/LimitsMonitor.bat +9 -0
  473. data/demo/tools/OpenGLBuilder +16 -0
  474. data/demo/tools/OpenGLBuilder.bat +9 -0
  475. data/demo/tools/PacketViewer +16 -0
  476. data/demo/tools/PacketViewer.bat +9 -0
  477. data/demo/tools/Replay +16 -0
  478. data/demo/tools/Replay.bat +9 -0
  479. data/demo/tools/ScpiTarget +16 -0
  480. data/demo/tools/ScpiTarget.bat +9 -0
  481. data/demo/tools/ScriptRunner +16 -0
  482. data/demo/tools/ScriptRunner.bat +9 -0
  483. data/demo/tools/TableManager +16 -0
  484. data/demo/tools/TableManager.bat +9 -0
  485. data/demo/tools/TestRunner +16 -0
  486. data/demo/tools/TestRunner.bat +9 -0
  487. data/demo/tools/TlmExtractor +16 -0
  488. data/demo/tools/TlmExtractor.bat +9 -0
  489. data/demo/tools/TlmGrapher +16 -0
  490. data/demo/tools/TlmGrapher.bat +9 -0
  491. data/demo/tools/TlmViewer +16 -0
  492. data/demo/tools/TlmViewer.bat +9 -0
  493. data/demo/tools/ToolLaunch.bat +72 -0
  494. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  495. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -0
  496. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -0
  497. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  498. data/demo/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  499. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  500. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -0
  501. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -0
  502. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  503. data/demo/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  504. data/demo/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  505. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  506. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  507. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  508. data/demo/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  509. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  510. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -0
  511. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -0
  512. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  513. data/demo/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  514. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  515. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -0
  516. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -0
  517. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  518. data/demo/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  519. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  520. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -0
  521. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -0
  522. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  523. data/demo/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  524. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  525. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -0
  526. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -0
  527. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  528. data/demo/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  529. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  530. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -0
  531. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -0
  532. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  533. data/demo/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  534. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  535. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -0
  536. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -0
  537. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  538. data/demo/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  539. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  540. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -0
  541. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -0
  542. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  543. data/demo/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  544. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -0
  545. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -0
  546. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -0
  547. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  548. data/demo/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  549. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  550. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -0
  551. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -0
  552. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  553. data/demo/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  554. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  555. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -0
  556. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -0
  557. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  558. data/demo/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  559. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  560. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -0
  561. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -0
  562. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  563. data/demo/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  564. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  565. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -0
  566. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -0
  567. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  568. data/demo/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  569. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  570. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -0
  571. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -0
  572. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  573. data/demo/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  574. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  575. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -0
  576. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -0
  577. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  578. data/demo/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  579. data/demo/tools/tool_launch.rb +38 -0
  580. data/ext/cosmos/ext/array/array.c +111 -0
  581. data/ext/cosmos/ext/array/extconf.rb +13 -0
  582. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -0
  583. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -0
  584. data/ext/cosmos/ext/config_parser/config_parser.c +237 -0
  585. data/ext/cosmos/ext/config_parser/extconf.rb +13 -0
  586. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -0
  587. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -0
  588. data/ext/cosmos/ext/crc/crc.c +341 -0
  589. data/ext/cosmos/ext/crc/extconf.rb +13 -0
  590. data/ext/cosmos/ext/line_graph/extconf.rb +13 -0
  591. data/ext/cosmos/ext/line_graph/line_graph.c +501 -0
  592. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +13 -0
  593. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -0
  594. data/ext/cosmos/ext/packet/extconf.rb +13 -0
  595. data/ext/cosmos/ext/packet/packet.c +350 -0
  596. data/ext/cosmos/ext/platform/extconf.rb +13 -0
  597. data/ext/cosmos/ext/platform/platform.c +101 -0
  598. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -0
  599. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -0
  600. data/ext/cosmos/ext/string/extconf.rb +13 -0
  601. data/ext/cosmos/ext/string/string.c +49 -0
  602. data/ext/cosmos/ext/structure/structure.c +1433 -0
  603. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -0
  604. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -0
  605. data/ext/cosmos/ext/telemetry/extconf.rb +13 -0
  606. data/ext/cosmos/ext/telemetry/telemetry.c +307 -0
  607. data/ext/mkrf_conf.rb +40 -0
  608. data/install/Gemfile +10 -0
  609. data/install/Launcher +16 -0
  610. data/install/Launcher.bat +9 -0
  611. data/install/Rakefile +77 -0
  612. data/install/config/data/README.txt +1 -0
  613. data/install/config/data/crc.txt +155 -0
  614. data/install/config/system/system.txt +39 -0
  615. data/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +14 -0
  616. data/install/config/targets/SYSTEM/target.txt +12 -0
  617. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -0
  618. data/install/config/tools/data_viewer/data_viewer.txt +4 -0
  619. data/install/config/tools/handbook_creator/default_toc.xsl +59 -0
  620. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -0
  621. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  622. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  623. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  624. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -0
  625. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  626. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  627. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  628. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  629. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  630. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  631. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  632. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  633. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -0
  634. data/install/config/tools/launcher/launcher.txt +40 -0
  635. data/install/config/tools/limits_monitor/README.txt +1 -0
  636. data/install/config/tools/opengl_builder/README.txt +1 -0
  637. data/install/config/tools/script_runner/script_runner.txt +3 -0
  638. data/install/config/tools/table_manager/README.txt +1 -0
  639. data/install/config/tools/test_runner/test_runner.txt +8 -0
  640. data/install/config/tools/tlm_extractor/README.txt +1 -0
  641. data/install/config/tools/tlm_grapher/README.txt +1 -0
  642. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -0
  643. data/install/lib/user_version.rb +3 -0
  644. data/install/procedures/README.txt +1 -0
  645. data/install/tools/CmdExtractor +16 -0
  646. data/install/tools/CmdExtractor.bat +9 -0
  647. data/install/tools/CmdSender +16 -0
  648. data/install/tools/CmdSender.bat +9 -0
  649. data/install/tools/CmdSequence +16 -0
  650. data/install/tools/CmdSequence.bat +9 -0
  651. data/install/tools/CmdTlmServer +16 -0
  652. data/install/tools/CmdTlmServer.bat +9 -0
  653. data/install/tools/ConfigEditor +16 -0
  654. data/install/tools/ConfigEditor.bat +9 -0
  655. data/install/tools/DataViewer +16 -0
  656. data/install/tools/DataViewer.bat +9 -0
  657. data/install/tools/HandbookCreator +16 -0
  658. data/install/tools/HandbookCreator.bat +9 -0
  659. data/install/tools/Launcher +16 -0
  660. data/install/tools/Launcher.bat +9 -0
  661. data/install/tools/LimitsMonitor +16 -0
  662. data/install/tools/LimitsMonitor.bat +9 -0
  663. data/install/tools/OpenGLBuilder +16 -0
  664. data/install/tools/OpenGLBuilder.bat +9 -0
  665. data/install/tools/PacketViewer +16 -0
  666. data/install/tools/PacketViewer.bat +9 -0
  667. data/install/tools/Replay +16 -0
  668. data/install/tools/Replay.bat +9 -0
  669. data/install/tools/ScriptRunner +16 -0
  670. data/install/tools/ScriptRunner.bat +9 -0
  671. data/install/tools/TableManager +16 -0
  672. data/install/tools/TableManager.bat +9 -0
  673. data/install/tools/TestRunner +16 -0
  674. data/install/tools/TestRunner.bat +9 -0
  675. data/install/tools/TlmExtractor +16 -0
  676. data/install/tools/TlmExtractor.bat +9 -0
  677. data/install/tools/TlmGrapher +16 -0
  678. data/install/tools/TlmGrapher.bat +9 -0
  679. data/install/tools/TlmViewer +16 -0
  680. data/install/tools/TlmViewer.bat +9 -0
  681. data/install/tools/ToolLaunch.bat +72 -0
  682. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  683. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -0
  684. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -0
  685. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  686. data/install/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  687. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  688. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -0
  689. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -0
  690. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  691. data/install/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  692. data/install/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  693. data/install/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  694. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  695. data/install/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  696. data/install/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  697. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  698. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -0
  699. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -0
  700. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  701. data/install/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  702. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  703. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -0
  704. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -0
  705. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  706. data/install/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  707. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  708. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -0
  709. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -0
  710. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  711. data/install/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  712. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  713. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -0
  714. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -0
  715. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  716. data/install/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  717. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  718. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -0
  719. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -0
  720. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  721. data/install/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  722. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  723. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -0
  724. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -0
  725. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  726. data/install/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  727. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  728. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -0
  729. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -0
  730. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  731. data/install/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  732. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -0
  733. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -0
  734. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -0
  735. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  736. data/install/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  737. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  738. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -0
  739. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -0
  740. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  741. data/install/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  742. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  743. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -0
  744. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -0
  745. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  746. data/install/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  747. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  748. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -0
  749. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -0
  750. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  751. data/install/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  752. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  753. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -0
  754. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -0
  755. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  756. data/install/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  757. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  758. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -0
  759. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -0
  760. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  761. data/install/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  762. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  763. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -0
  764. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -0
  765. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  766. data/install/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  767. data/install/tools/tool_launch.rb +38 -0
  768. data/lib/cosmos.rb +63 -0
  769. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -0
  770. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -0
  771. data/lib/cosmos/config/config_parser.rb +508 -0
  772. data/lib/cosmos/config/meta_config_parser.rb +57 -0
  773. data/lib/cosmos/conversions.rb +13 -0
  774. data/lib/cosmos/conversions/conversion.rb +49 -0
  775. data/lib/cosmos/conversions/generic_conversion.rb +67 -0
  776. data/lib/cosmos/conversions/new_packet_log_conversion.rb +52 -0
  777. data/lib/cosmos/conversions/polynomial_conversion.rb +79 -0
  778. data/lib/cosmos/conversions/processor_conversion.rb +56 -0
  779. data/lib/cosmos/conversions/received_count_conversion.rb +33 -0
  780. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -0
  781. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -0
  782. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +139 -0
  783. data/lib/cosmos/conversions/unix_time_conversion.rb +57 -0
  784. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -0
  785. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -0
  786. data/lib/cosmos/core_ext.rb +18 -0
  787. data/lib/cosmos/core_ext/array.rb +397 -0
  788. data/lib/cosmos/core_ext/class.rb +53 -0
  789. data/lib/cosmos/core_ext/cosmos_io.rb +45 -0
  790. data/lib/cosmos/core_ext/exception.rb +52 -0
  791. data/lib/cosmos/core_ext/file.rb +76 -0
  792. data/lib/cosmos/core_ext/hash.rb +28 -0
  793. data/lib/cosmos/core_ext/io.rb +93 -0
  794. data/lib/cosmos/core_ext/kernel.rb +33 -0
  795. data/lib/cosmos/core_ext/math.rb +119 -0
  796. data/lib/cosmos/core_ext/matrix.rb +149 -0
  797. data/lib/cosmos/core_ext/objectspace.rb +27 -0
  798. data/lib/cosmos/core_ext/range.rb +18 -0
  799. data/lib/cosmos/core_ext/socket.rb +32 -0
  800. data/lib/cosmos/core_ext/string.rb +351 -0
  801. data/lib/cosmos/core_ext/stringio.rb +24 -0
  802. data/lib/cosmos/core_ext/time.rb +481 -0
  803. data/lib/cosmos/ext/.keep +0 -0
  804. data/lib/cosmos/gui/choosers/combobox_chooser.rb +141 -0
  805. data/lib/cosmos/gui/choosers/file_chooser.rb +85 -0
  806. data/lib/cosmos/gui/choosers/float_chooser.rb +67 -0
  807. data/lib/cosmos/gui/choosers/integer_chooser.rb +69 -0
  808. data/lib/cosmos/gui/choosers/string_chooser.rb +35 -0
  809. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -0
  810. data/lib/cosmos/gui/choosers/value_chooser.rb +67 -0
  811. data/lib/cosmos/gui/dialogs/about_dialog.rb +166 -0
  812. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +140 -0
  813. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +51 -0
  814. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +163 -0
  815. data/lib/cosmos/gui/dialogs/details_dialog.rb +190 -0
  816. data/lib/cosmos/gui/dialogs/exception_dialog.rb +106 -0
  817. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +60 -0
  818. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +272 -0
  819. data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +143 -0
  820. data/lib/cosmos/gui/dialogs/legal_dialog.rb +183 -0
  821. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +97 -0
  822. data/lib/cosmos/gui/dialogs/progress_dialog.rb +313 -0
  823. data/lib/cosmos/gui/dialogs/pry_dialog.rb +169 -0
  824. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +51 -0
  825. data/lib/cosmos/gui/dialogs/select_dialog.rb +59 -0
  826. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +156 -0
  827. data/lib/cosmos/gui/dialogs/splash.rb +145 -0
  828. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +201 -0
  829. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +79 -0
  830. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +114 -0
  831. data/lib/cosmos/gui/line_graph/line_graph.rb +482 -0
  832. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +36 -0
  833. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +521 -0
  834. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +112 -0
  835. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +452 -0
  836. data/lib/cosmos/gui/line_graph/line_graph_script.rb +81 -0
  837. data/lib/cosmos/gui/line_graph/lines.rb +304 -0
  838. data/lib/cosmos/gui/line_graph/overview_graph.rb +474 -0
  839. data/lib/cosmos/gui/opengl/earth_model.rb +25 -0
  840. data/lib/cosmos/gui/opengl/gl_bounds.rb +55 -0
  841. data/lib/cosmos/gui/opengl/gl_light.rb +38 -0
  842. data/lib/cosmos/gui/opengl/gl_material.rb +28 -0
  843. data/lib/cosmos/gui/opengl/gl_scene.rb +78 -0
  844. data/lib/cosmos/gui/opengl/gl_shape.rb +150 -0
  845. data/lib/cosmos/gui/opengl/gl_viewer.rb +712 -0
  846. data/lib/cosmos/gui/opengl/gl_viewport.rb +34 -0
  847. data/lib/cosmos/gui/opengl/moon_model.rb +25 -0
  848. data/lib/cosmos/gui/opengl/opengl.rb +8 -0
  849. data/lib/cosmos/gui/opengl/stl_reader.rb +210 -0
  850. data/lib/cosmos/gui/opengl/stl_shape.rb +127 -0
  851. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -0
  852. data/lib/cosmos/gui/qt.rb +841 -0
  853. data/lib/cosmos/gui/qt_tool.rb +489 -0
  854. data/lib/cosmos/gui/text/completion.rb +402 -0
  855. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -0
  856. data/lib/cosmos/gui/text/completion_text_edit.rb +194 -0
  857. data/lib/cosmos/gui/text/ruby_editor.rb +463 -0
  858. data/lib/cosmos/gui/utilities/analyze_log.rb +153 -0
  859. data/lib/cosmos/gui/utilities/screenshot.rb +33 -0
  860. data/lib/cosmos/gui/utilities/script_module_gui.rb +364 -0
  861. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +171 -0
  862. data/lib/cosmos/gui/widgets/packet_log_frame.rb +344 -0
  863. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -0
  864. data/lib/cosmos/interfaces.rb +21 -0
  865. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +134 -0
  866. data/lib/cosmos/interfaces/interface.rb +449 -0
  867. data/lib/cosmos/interfaces/linc_interface.rb +459 -0
  868. data/lib/cosmos/interfaces/protocols/burst_protocol.rb +173 -0
  869. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +141 -0
  870. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +114 -0
  871. data/lib/cosmos/interfaces/protocols/length_protocol.rb +147 -0
  872. data/lib/cosmos/interfaces/protocols/override_protocol.rb +52 -0
  873. data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +141 -0
  874. data/lib/cosmos/interfaces/protocols/protocol.rb +60 -0
  875. data/lib/cosmos/interfaces/protocols/template_protocol.rb +209 -0
  876. data/lib/cosmos/interfaces/protocols/terminated_protocol.rb +81 -0
  877. data/lib/cosmos/interfaces/serial_interface.rb +81 -0
  878. data/lib/cosmos/interfaces/simulated_target_interface.rb +140 -0
  879. data/lib/cosmos/interfaces/stream_interface.rb +64 -0
  880. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -0
  881. data/lib/cosmos/interfaces/tcpip_server_interface.rb +625 -0
  882. data/lib/cosmos/interfaces/udp_interface.rb +141 -0
  883. data/lib/cosmos/io/buffered_file.rb +101 -0
  884. data/lib/cosmos/io/cosmos_snmp.rb +50 -0
  885. data/lib/cosmos/io/io_multiplexer.rb +71 -0
  886. data/lib/cosmos/io/json_drb.rb +386 -0
  887. data/lib/cosmos/io/json_drb_object.rb +201 -0
  888. data/lib/cosmos/io/json_rpc.rb +365 -0
  889. data/lib/cosmos/io/posix_serial_driver.rb +147 -0
  890. data/lib/cosmos/io/raw_logger.rb +170 -0
  891. data/lib/cosmos/io/raw_logger_pair.rb +71 -0
  892. data/lib/cosmos/io/serial_driver.rb +94 -0
  893. data/lib/cosmos/io/stderr.rb +36 -0
  894. data/lib/cosmos/io/stdout.rb +36 -0
  895. data/lib/cosmos/io/udp_sockets.rb +152 -0
  896. data/lib/cosmos/io/win32_serial_driver.rb +165 -0
  897. data/lib/cosmos/packet_logs.rb +6 -0
  898. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -0
  899. data/lib/cosmos/packet_logs/packet_log_reader.rb +461 -0
  900. data/lib/cosmos/packet_logs/packet_log_writer.rb +341 -0
  901. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -0
  902. data/lib/cosmos/packets/binary_accessor.rb +1201 -0
  903. data/lib/cosmos/packets/commands.rb +313 -0
  904. data/lib/cosmos/packets/limits.rb +264 -0
  905. data/lib/cosmos/packets/limits_response.rb +42 -0
  906. data/lib/cosmos/packets/packet.rb +971 -0
  907. data/lib/cosmos/packets/packet_config.rb +1392 -0
  908. data/lib/cosmos/packets/packet_item.rb +576 -0
  909. data/lib/cosmos/packets/packet_item_limits.rb +140 -0
  910. data/lib/cosmos/packets/parsers/format_string_parser.rb +58 -0
  911. data/lib/cosmos/packets/parsers/limits_parser.rb +146 -0
  912. data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -0
  913. data/lib/cosmos/packets/parsers/macro_parser.rb +118 -0
  914. data/lib/cosmos/packets/parsers/packet_item_parser.rb +234 -0
  915. data/lib/cosmos/packets/parsers/packet_parser.rb +131 -0
  916. data/lib/cosmos/packets/parsers/processor_parser.rb +63 -0
  917. data/lib/cosmos/packets/parsers/state_parser.rb +116 -0
  918. data/lib/cosmos/packets/structure.rb +508 -0
  919. data/lib/cosmos/packets/structure_item.rb +292 -0
  920. data/lib/cosmos/packets/telemetry.rb +444 -0
  921. data/lib/cosmos/processors.rb +6 -0
  922. data/lib/cosmos/processors/new_packet_log_processor.rb +39 -0
  923. data/lib/cosmos/processors/processor.rb +76 -0
  924. data/lib/cosmos/processors/statistics_processor.rb +70 -0
  925. data/lib/cosmos/processors/watermark_processor.rb +49 -0
  926. data/lib/cosmos/script.rb +9 -0
  927. data/lib/cosmos/script/api_shared.rb +1000 -0
  928. data/lib/cosmos/script/cmd_tlm_server.rb +138 -0
  929. data/lib/cosmos/script/commands.rb +189 -0
  930. data/lib/cosmos/script/extract.rb +139 -0
  931. data/lib/cosmos/script/limits.rb +116 -0
  932. data/lib/cosmos/script/script.rb +76 -0
  933. data/lib/cosmos/script/scripting.rb +146 -0
  934. data/lib/cosmos/script/telemetry.rb +200 -0
  935. data/lib/cosmos/script/tools.rb +97 -0
  936. data/lib/cosmos/streams/serial_stream.rb +150 -0
  937. data/lib/cosmos/streams/stream.rb +54 -0
  938. data/lib/cosmos/streams/tcpip_client_stream.rb +113 -0
  939. data/lib/cosmos/streams/tcpip_socket_stream.rb +186 -0
  940. data/lib/cosmos/system.rb +4 -0
  941. data/lib/cosmos/system/system.rb +780 -0
  942. data/lib/cosmos/system/target.rb +228 -0
  943. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +268 -0
  944. data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +78 -0
  945. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +773 -0
  946. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -0
  947. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +652 -0
  948. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +510 -0
  949. data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +194 -0
  950. data/lib/cosmos/tools/cmd_tlm_server/api.rb +1314 -0
  951. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +54 -0
  952. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +77 -0
  953. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +537 -0
  954. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +274 -0
  955. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +480 -0
  956. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +121 -0
  957. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -0
  958. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +213 -0
  959. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -0
  960. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +157 -0
  961. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +255 -0
  962. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +85 -0
  963. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +274 -0
  964. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +153 -0
  965. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +121 -0
  966. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +161 -0
  967. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -0
  968. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +134 -0
  969. data/lib/cosmos/tools/config_editor/config_editor.rb +720 -0
  970. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +675 -0
  971. data/lib/cosmos/tools/data_viewer/data_viewer.rb +633 -0
  972. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +120 -0
  973. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -0
  974. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -0
  975. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -0
  976. data/lib/cosmos/tools/launcher/launcher.rb +194 -0
  977. data/lib/cosmos/tools/launcher/launcher_config.rb +256 -0
  978. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -0
  979. data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -0
  980. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +972 -0
  981. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -0
  982. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -0
  983. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +616 -0
  984. data/lib/cosmos/tools/replay/replay.rb +517 -0
  985. data/lib/cosmos/tools/replay/replay_server.rb +91 -0
  986. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -0
  987. data/lib/cosmos/tools/script_runner/script_runner.rb +979 -0
  988. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -0
  989. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1838 -0
  990. data/lib/cosmos/tools/table_manager/table.rb +61 -0
  991. data/lib/cosmos/tools/table_manager/table_config.rb +189 -0
  992. data/lib/cosmos/tools/table_manager/table_item.rb +58 -0
  993. data/lib/cosmos/tools/table_manager/table_item_parser.rb +46 -0
  994. data/lib/cosmos/tools/table_manager/table_manager.rb +1152 -0
  995. data/lib/cosmos/tools/table_manager/table_manager_core.rb +321 -0
  996. data/lib/cosmos/tools/table_manager/table_parser.rb +75 -0
  997. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -0
  998. data/lib/cosmos/tools/test_runner/test.rb +539 -0
  999. data/lib/cosmos/tools/test_runner/test_runner.rb +1271 -0
  1000. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -0
  1001. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -0
  1002. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1152 -0
  1003. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +441 -0
  1004. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -0
  1005. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +92 -0
  1006. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -0
  1007. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -0
  1008. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -0
  1009. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +222 -0
  1010. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -0
  1011. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -0
  1012. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -0
  1013. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -0
  1014. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +422 -0
  1015. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -0
  1016. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -0
  1017. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +325 -0
  1018. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +191 -0
  1019. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -0
  1020. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -0
  1021. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -0
  1022. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +173 -0
  1023. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -0
  1024. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -0
  1025. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +209 -0
  1026. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -0
  1027. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -0
  1028. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -0
  1029. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -0
  1030. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +451 -0
  1031. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -0
  1032. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -0
  1033. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -0
  1034. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -0
  1035. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -0
  1036. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -0
  1037. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +103 -0
  1038. data/lib/cosmos/tools/tlm_viewer/screen.rb +502 -0
  1039. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +571 -0
  1040. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +293 -0
  1041. data/lib/cosmos/tools/tlm_viewer/widgets.rb +61 -0
  1042. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -0
  1043. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -0
  1044. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -0
  1045. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -0
  1046. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -0
  1047. data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +79 -0
  1048. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -0
  1049. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -0
  1050. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -0
  1051. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -0
  1052. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -0
  1053. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -0
  1054. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +125 -0
  1055. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +38 -0
  1056. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -0
  1057. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -0
  1058. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -0
  1059. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -0
  1060. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -0
  1061. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -0
  1062. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -0
  1063. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -0
  1064. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -0
  1065. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -0
  1066. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +57 -0
  1067. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -0
  1068. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -0
  1069. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +38 -0
  1070. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -0
  1071. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +39 -0
  1072. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -0
  1073. data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +113 -0
  1074. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +116 -0
  1075. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +102 -0
  1076. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +116 -0
  1077. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +63 -0
  1078. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +56 -0
  1079. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -0
  1080. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -0
  1081. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +38 -0
  1082. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +65 -0
  1083. data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +65 -0
  1084. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -0
  1085. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -0
  1086. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -0
  1087. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +55 -0
  1088. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -0
  1089. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -0
  1090. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -0
  1091. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -0
  1092. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +91 -0
  1093. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -0
  1094. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -0
  1095. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -0
  1096. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -0
  1097. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -0
  1098. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +37 -0
  1099. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -0
  1100. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +37 -0
  1101. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +36 -0
  1102. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +38 -0
  1103. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -0
  1104. data/lib/cosmos/top_level.rb +778 -0
  1105. data/lib/cosmos/utilities.rb +11 -0
  1106. data/lib/cosmos/utilities/crc.rb +268 -0
  1107. data/lib/cosmos/utilities/csv.rb +137 -0
  1108. data/lib/cosmos/utilities/logger.rb +137 -0
  1109. data/lib/cosmos/utilities/low_fragmentation_array.rb +19 -0
  1110. data/lib/cosmos/utilities/message_log.rb +79 -0
  1111. data/lib/cosmos/utilities/quaternion.rb +258 -0
  1112. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -0
  1113. data/lib/cosmos/utilities/simulated_target.rb +100 -0
  1114. data/lib/cosmos/utilities/sleeper.rb +44 -0
  1115. data/lib/cosmos/version.rb +12 -0
  1116. data/lib/cosmos/win32/excel.rb +66 -0
  1117. data/lib/cosmos/win32/win32.rb +387 -0
  1118. data/lib/cosmos/win32/win32_main.rb +325 -0
  1119. data/roodi.yml +24 -0
  1120. data/run_gui_tests.bat +44 -0
  1121. data/spec/ccsds/ccsds_packet_spec.rb +67 -0
  1122. data/spec/ccsds/ccsds_parser_spec.rb +148 -0
  1123. data/spec/config/config_parser_spec.rb +353 -0
  1124. data/spec/conversions/conversion_spec.rb +31 -0
  1125. data/spec/conversions/generic_conversion_spec.rb +45 -0
  1126. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -0
  1127. data/spec/conversions/polynomial_conversion_spec.rb +40 -0
  1128. data/spec/conversions/processor_conversion_spec.rb +45 -0
  1129. data/spec/conversions/received_count_conversion_spec.rb +43 -0
  1130. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -0
  1131. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -0
  1132. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -0
  1133. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -0
  1134. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -0
  1135. data/spec/core_ext/array_spec.rb +247 -0
  1136. data/spec/core_ext/class_spec.rb +36 -0
  1137. data/spec/core_ext/cosmos_io_spec.rb +77 -0
  1138. data/spec/core_ext/exception_spec.rb +91 -0
  1139. data/spec/core_ext/file_spec.rb +72 -0
  1140. data/spec/core_ext/hash_spec.rb +24 -0
  1141. data/spec/core_ext/io_spec.rb +46 -0
  1142. data/spec/core_ext/kernel_spec.rb +54 -0
  1143. data/spec/core_ext/math_spec.rb +116 -0
  1144. data/spec/core_ext/matrix_spec.rb +127 -0
  1145. data/spec/core_ext/objectspace_spec.rb +32 -0
  1146. data/spec/core_ext/range_spec.rb +21 -0
  1147. data/spec/core_ext/socket_spec.rb +32 -0
  1148. data/spec/core_ext/string_spec.rb +239 -0
  1149. data/spec/core_ext/stringio_spec.rb +21 -0
  1150. data/spec/core_ext/time_spec.rb +220 -0
  1151. data/spec/gui/line_graph/line_clip_spec.rb +324 -0
  1152. data/spec/gui/qt_spec.rb +104 -0
  1153. data/spec/install/config/system/system.txt +27 -0
  1154. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -0
  1155. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -0
  1156. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -0
  1157. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -0
  1158. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -0
  1159. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -0
  1160. data/spec/install/config/targets/INST/target.txt +10 -0
  1161. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  1162. data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  1163. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  1164. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  1165. data/spec/install/config/targets/SYSTEM/cmd_tlm_server.txt +6 -0
  1166. data/spec/install/config/targets/SYSTEM/screens/status.txt +12 -0
  1167. data/spec/install/config/targets/SYSTEM/target.txt +12 -0
  1168. data/spec/install/lib/README.txt +1 -0
  1169. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +146 -0
  1170. data/spec/interfaces/interface_spec.rb +514 -0
  1171. data/spec/interfaces/linc_interface_spec.rb +248 -0
  1172. data/spec/interfaces/protocols/burst_protocol_spec.rb +300 -0
  1173. data/spec/interfaces/protocols/crc_protocol_spec.rb +709 -0
  1174. data/spec/interfaces/protocols/fixed_protocol_spec.rb +119 -0
  1175. data/spec/interfaces/protocols/length_protocol_spec.rb +499 -0
  1176. data/spec/interfaces/protocols/override_protocol_spec.rb +158 -0
  1177. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +149 -0
  1178. data/spec/interfaces/protocols/template_protocol_spec.rb +218 -0
  1179. data/spec/interfaces/protocols/terminated_protocol_spec.rb +174 -0
  1180. data/spec/interfaces/serial_interface_spec.rb +57 -0
  1181. data/spec/interfaces/simulated_target_interface_spec.rb +128 -0
  1182. data/spec/interfaces/tcpip_client_interface_spec.rb +60 -0
  1183. data/spec/interfaces/tcpip_server_interface_spec.rb +157 -0
  1184. data/spec/interfaces/udp_interface_spec.rb +240 -0
  1185. data/spec/io/buffered_file_spec.rb +113 -0
  1186. data/spec/io/io_multiplexer_spec.rb +102 -0
  1187. data/spec/io/json_drb_object_spec.rb +119 -0
  1188. data/spec/io/json_drb_spec.rb +297 -0
  1189. data/spec/io/json_rpc_spec.rb +264 -0
  1190. data/spec/io/raw_logger_pair_spec.rb +76 -0
  1191. data/spec/io/raw_logger_spec.rb +137 -0
  1192. data/spec/io/serial_driver_spec.rb +62 -0
  1193. data/spec/io/stderr_spec.rb +32 -0
  1194. data/spec/io/stdout_spec.rb +32 -0
  1195. data/spec/io/udp_sockets_spec.rb +99 -0
  1196. data/spec/io/win32_serial_driver_spec.rb +91 -0
  1197. data/spec/packet_logs/packet_log_reader_spec.rb +553 -0
  1198. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -0
  1199. data/spec/packet_logs/packet_log_writer_spec.rb +227 -0
  1200. data/spec/packets/binary_accessor_spec.rb +2326 -0
  1201. data/spec/packets/commands_spec.rb +369 -0
  1202. data/spec/packets/limits_response_spec.rb +25 -0
  1203. data/spec/packets/limits_spec.rb +344 -0
  1204. data/spec/packets/packet_config_spec.rb +949 -0
  1205. data/spec/packets/packet_item_limits_spec.rb +188 -0
  1206. data/spec/packets/packet_item_spec.rb +386 -0
  1207. data/spec/packets/packet_spec.rb +1394 -0
  1208. data/spec/packets/parsers/format_string_parser_spec.rb +122 -0
  1209. data/spec/packets/parsers/limits_parser_spec.rb +282 -0
  1210. data/spec/packets/parsers/limits_response_parser_spec.rb +149 -0
  1211. data/spec/packets/parsers/macro_parser_spec.rb +220 -0
  1212. data/spec/packets/parsers/packet_item_parser_spec.rb +366 -0
  1213. data/spec/packets/parsers/packet_parser_spec.rb +99 -0
  1214. data/spec/packets/parsers/processor_parser_spec.rb +114 -0
  1215. data/spec/packets/parsers/state_parser_spec.rb +156 -0
  1216. data/spec/packets/structure_item_spec.rb +213 -0
  1217. data/spec/packets/structure_spec.rb +565 -0
  1218. data/spec/packets/telemetry_spec.rb +578 -0
  1219. data/spec/processors/new_packet_log_processor_spec.rb +39 -0
  1220. data/spec/processors/processor_spec.rb +55 -0
  1221. data/spec/processors/statistics_processor_spec.rb +60 -0
  1222. data/spec/processors/watermark_processor_spec.rb +51 -0
  1223. data/spec/script/cmd_tlm_server_spec.rb +176 -0
  1224. data/spec/script/commands_disconnect_spec.rb +270 -0
  1225. data/spec/script/commands_spec.rb +303 -0
  1226. data/spec/script/extract_spec.rb +158 -0
  1227. data/spec/script/limits_spec.rb +153 -0
  1228. data/spec/script/script_spec.rb +90 -0
  1229. data/spec/script/scripting_spec.rb +745 -0
  1230. data/spec/script/telemetry_spec.rb +174 -0
  1231. data/spec/script/tools_spec.rb +134 -0
  1232. data/spec/spec_helper.rb +225 -0
  1233. data/spec/streams/serial_stream_spec.rb +122 -0
  1234. data/spec/streams/stream_spec.rb +30 -0
  1235. data/spec/streams/tcpip_client_stream_spec.rb +65 -0
  1236. data/spec/streams/tcpip_socket_stream_spec.rb +226 -0
  1237. data/spec/system/system_spec.rb +699 -0
  1238. data/spec/system/target_spec.rb +303 -0
  1239. data/spec/tools/cmd_tlm_server/api_spec.rb +1123 -0
  1240. data/spec/tools/cmd_tlm_server/background_task_spec.rb +44 -0
  1241. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +227 -0
  1242. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +610 -0
  1243. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +431 -0
  1244. data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -0
  1245. data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -0
  1246. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +401 -0
  1247. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -0
  1248. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +145 -0
  1249. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -0
  1250. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +191 -0
  1251. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -0
  1252. data/spec/tools/launcher/launcher_config_spec.rb +474 -0
  1253. data/spec/tools/table_manager/table_config_spec.rb +226 -0
  1254. data/spec/tools/table_manager/table_item_parser_spec.rb +61 -0
  1255. data/spec/tools/table_manager/table_item_spec.rb +57 -0
  1256. data/spec/tools/table_manager/table_parser_spec.rb +96 -0
  1257. data/spec/tools/table_manager/table_spec.rb +90 -0
  1258. data/spec/tools/table_manager/tablemanager_core_spec.rb +556 -0
  1259. data/spec/top_level/top_level_spec.rb +373 -0
  1260. data/spec/utilities/crc_spec.rb +45 -0
  1261. data/spec/utilities/csv_spec.rb +139 -0
  1262. data/spec/utilities/logger_spec.rb +102 -0
  1263. data/spec/utilities/message_log_spec.rb +89 -0
  1264. data/spec/utilities/quaternion_spec.rb +107 -0
  1265. data/spec/utilities/ruby_lex_utils_spec.rb +86 -0
  1266. data/tasks/gemfile_stats.rake +79 -0
  1267. data/tasks/manifest.rake +22 -0
  1268. data/tasks/spec.rake +23 -0
  1269. data/test/benchmarks/binary_accessor_benchmark.rb +14 -0
  1270. data/test/benchmarks/gsub_benchmark.rb +152 -0
  1271. data/test/benchmarks/is_a_benchmark.rb +34 -0
  1272. data/test/performance/PACKETS.bat +1 -0
  1273. data/test/performance/Rakefile +77 -0
  1274. data/test/performance/THREADS.bat +1 -0
  1275. data/test/performance/config/data/attitude.bin +0 -0
  1276. data/test/performance/config/data/crc.txt +196 -0
  1277. data/test/performance/config/data/diamond.STL +58 -0
  1278. data/test/performance/config/data/groundoff.gif +0 -0
  1279. data/test/performance/config/data/groundon.gif +0 -0
  1280. data/test/performance/config/data/hselectoff.gif +0 -0
  1281. data/test/performance/config/data/hselecton.gif +0 -0
  1282. data/test/performance/config/data/hswitchoff.gif +0 -0
  1283. data/test/performance/config/data/hswitchon.gif +0 -0
  1284. data/test/performance/config/data/meta_init.txt +4 -0
  1285. data/test/performance/config/data/position.bin +0 -0
  1286. data/test/performance/config/data/poweroff.gif +0 -0
  1287. data/test/performance/config/data/poweron.gif +0 -0
  1288. data/test/performance/config/data/satellite.gif +0 -0
  1289. data/test/performance/config/data/tada.wav +0 -0
  1290. data/test/performance/config/data/vswitchoff.gif +0 -0
  1291. data/test/performance/config/data/vswitchon.gif +0 -0
  1292. data/test/performance/config/system/system_packets.txt +38 -0
  1293. data/test/performance/config/system/system_threads.txt +58 -0
  1294. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -0
  1295. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  1296. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  1297. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -0
  1298. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -0
  1299. data/test/performance/config/targets/COSMOS/target.txt +11 -0
  1300. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -0
  1301. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -0
  1302. data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -0
  1303. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -0
  1304. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -0
  1305. data/test/performance/config/targets/PACKET/screens/status.txt +25 -0
  1306. data/test/performance/config/targets/PACKET/target.txt +28 -0
  1307. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -0
  1308. data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -0
  1309. data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -0
  1310. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -0
  1311. data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -0
  1312. data/test/performance/config/targets/THREAD/screens/status.txt +25 -0
  1313. data/test/performance/config/targets/THREAD/target.txt +7 -0
  1314. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -0
  1315. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -0
  1316. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -0
  1317. data/test/performance/config/tools/handbook_creator/default_toc.xsl +59 -0
  1318. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -0
  1319. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  1320. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  1321. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  1322. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -0
  1323. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  1324. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  1325. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  1326. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  1327. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  1328. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  1329. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  1330. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  1331. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -0
  1332. data/test/performance/config/tools/launcher/launcher_packets.txt +34 -0
  1333. data/test/performance/config/tools/launcher/launcher_threads.txt +83 -0
  1334. data/test/performance/config/tools/limits_monitor/README.txt +1 -0
  1335. data/test/performance/config/tools/opengl_builder/README.txt +1 -0
  1336. data/test/performance/config/tools/script_runner/script_runner.txt +3 -0
  1337. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -0
  1338. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  1339. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -0
  1340. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -0
  1341. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -0
  1342. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -0
  1343. data/test/performance/config/tools/test_runner/test_runner.txt +17 -0
  1344. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  1345. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  1346. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  1347. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  1348. data/test/performance/config/tools/tlm_grapher/README.txt +1 -0
  1349. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -0
  1350. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -0
  1351. data/test/performance/lib/packet_target.rb +126 -0
  1352. data/test/performance/lib/thread_target.rb +120 -0
  1353. data/test/performance/lib/user_version.rb +3 -0
  1354. data/test/performance/outputs/handbooks/README.txt +1 -0
  1355. data/test/performance/outputs/logs/README.txt +1 -0
  1356. data/test/performance/outputs/saved_config/README.txt +1 -0
  1357. data/test/performance/outputs/tables/README.txt +1 -0
  1358. data/test/performance/outputs/tmp/README.txt +1 -0
  1359. data/test/performance/procedures/checks.rb +11 -0
  1360. data/test/performance/procedures/clear_util.rb +7 -0
  1361. data/test/performance/procedures/collect.rb +18 -0
  1362. data/test/performance/procedures/collect_util.rb +14 -0
  1363. data/test/performance/procedures/cosmos_api_test.rb +293 -0
  1364. data/test/performance/procedures/disconnect.rb +29 -0
  1365. data/test/performance/procedures/example_test.rb +182 -0
  1366. data/test/performance/procedures/plot_test.rb +8 -0
  1367. data/test/performance/procedures/procedure.rb +3 -0
  1368. data/test/performance/procedures/run_example_test.rb +3 -0
  1369. data/test/performance/procedures/test.rb +51 -0
  1370. data/test/performance/tools/CmdExtractor +14 -0
  1371. data/test/performance/tools/CmdExtractor.bat +59 -0
  1372. data/test/performance/tools/CmdSender +14 -0
  1373. data/test/performance/tools/CmdSender.bat +59 -0
  1374. data/test/performance/tools/CmdTlmServer +16 -0
  1375. data/test/performance/tools/CmdTlmServer.bat +59 -0
  1376. data/test/performance/tools/CmdTlmServerMemProf +20 -0
  1377. data/test/performance/tools/CmdTlmServerMemProf.bat +59 -0
  1378. data/test/performance/tools/DataViewer +14 -0
  1379. data/test/performance/tools/DataViewer.bat +59 -0
  1380. data/test/performance/tools/HandbookCreator +14 -0
  1381. data/test/performance/tools/HandbookCreator.bat +61 -0
  1382. data/test/performance/tools/Launcher +14 -0
  1383. data/test/performance/tools/Launcher.bat +59 -0
  1384. data/test/performance/tools/LimitsMonitor +14 -0
  1385. data/test/performance/tools/LimitsMonitor.bat +59 -0
  1386. data/test/performance/tools/OpenGLBuilder +14 -0
  1387. data/test/performance/tools/OpenGLBuilder.bat +59 -0
  1388. data/test/performance/tools/PacketTarget +14 -0
  1389. data/test/performance/tools/PacketTarget.bat +59 -0
  1390. data/test/performance/tools/PacketViewer +14 -0
  1391. data/test/performance/tools/PacketViewer.bat +59 -0
  1392. data/test/performance/tools/Replay +14 -0
  1393. data/test/performance/tools/Replay.bat +59 -0
  1394. data/test/performance/tools/ScpiTarget +14 -0
  1395. data/test/performance/tools/ScpiTarget.bat +59 -0
  1396. data/test/performance/tools/ScriptRunner +14 -0
  1397. data/test/performance/tools/ScriptRunner.bat +59 -0
  1398. data/test/performance/tools/TableManager +14 -0
  1399. data/test/performance/tools/TableManager.bat +59 -0
  1400. data/test/performance/tools/TestRunner +14 -0
  1401. data/test/performance/tools/TestRunner.bat +59 -0
  1402. data/test/performance/tools/ThreadTarget +14 -0
  1403. data/test/performance/tools/ThreadTarget.bat +59 -0
  1404. data/test/performance/tools/TlmExtractor +14 -0
  1405. data/test/performance/tools/TlmExtractor.bat +59 -0
  1406. data/test/performance/tools/TlmGrapher +14 -0
  1407. data/test/performance/tools/TlmGrapher.bat +59 -0
  1408. data/test/performance/tools/TlmGrapherMemProf +19 -0
  1409. data/test/performance/tools/TlmGrapherMemProf.bat +59 -0
  1410. data/test/performance/tools/TlmViewer +14 -0
  1411. data/test/performance/tools/TlmViewer.bat +59 -0
  1412. data/test/performance/tools/TlmViewerMemProf +19 -0
  1413. data/test/performance/tools/TlmViewerMemProf.bat +59 -0
  1414. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  1415. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
  1416. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
  1417. data/test/performance/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  1418. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  1419. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
  1420. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
  1421. data/test/performance/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  1422. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  1423. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
  1424. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
  1425. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  1426. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  1427. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
  1428. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
  1429. data/test/performance/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  1430. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  1431. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
  1432. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
  1433. data/test/performance/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  1434. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  1435. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
  1436. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
  1437. data/test/performance/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  1438. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  1439. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
  1440. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
  1441. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  1442. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  1443. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
  1444. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
  1445. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  1446. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  1447. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
  1448. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
  1449. data/test/performance/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  1450. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -0
  1451. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
  1452. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
  1453. data/test/performance/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  1454. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  1455. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
  1456. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
  1457. data/test/performance/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  1458. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  1459. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
  1460. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
  1461. data/test/performance/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  1462. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  1463. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
  1464. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
  1465. data/test/performance/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  1466. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  1467. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
  1468. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
  1469. data/test/performance/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  1470. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  1471. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
  1472. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
  1473. data/test/performance/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  1474. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  1475. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
  1476. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
  1477. data/test/performance/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  1478. metadata +1951 -0
@@ -0,0 +1,778 @@
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
+ # This file contains top level functions in the Cosmos namespace
12
+
13
+ require 'thread'
14
+ require 'digest/md5'
15
+ require 'open3'
16
+ require 'cosmos/core_ext'
17
+ require 'cosmos/version'
18
+ require 'cosmos/utilities/logger'
19
+ require 'socket'
20
+ require 'pathname'
21
+ require 'bundler'
22
+
23
+ # If a hazardous command is sent through the {Cosmos::Api} this error is raised.
24
+ # {Cosmos::Script} rescues the error and prompts the user to continue.
25
+ class HazardousError < StandardError
26
+ attr_accessor :target_name
27
+ attr_accessor :cmd_name
28
+ attr_accessor :cmd_params
29
+ attr_accessor :hazardous_description
30
+ end
31
+
32
+ # The Ball Aerospace COSMOS system is almost
33
+ # wholly contained within the Cosmos module. COSMOS also extends some of the
34
+ # core Ruby classes to add additional functionality as well as creates
35
+ # additional QT GUI classes under the {Qt} module.
36
+ #
37
+ # The primary entry point into COSMOS is through {Cosmos::System}. The System
38
+ # class provides two class variables {Cosmos::System#commands} and
39
+ # {Cosmos::System#telemetry} which provide access to all the commands and
40
+ # telemetry in Cosmos. The targets are available through the
41
+ # {Cosmos::System#targets} hash whose keys are the target names and values are
42
+ # {Cosmos::Target} instances.
43
+ #
44
+ # Creating a new COSMOS tool involves subclassing {Cosmos::QtTool}. All COSMOS
45
+ # tools derive from {Cosmos::QtTool} and provide a good basis for creating a
46
+ # new tool. Be sure to explore the various GUI classes
47
+ module Cosmos
48
+
49
+ BASE_PWD = Dir.pwd
50
+
51
+ # FatalErrors cause an exit but are not as dangerous as other errors.
52
+ # They are used for known issues and thus we don't need a full error report.
53
+ class FatalError < StandardError; end
54
+
55
+ # Global mutex for the Cosmos module
56
+ COSMOS_MUTEX = Mutex.new
57
+
58
+ # Path to COSMOS Gem based on location of top_level.rb
59
+ PATH = File.expand_path(File.join(File.dirname(__FILE__), '../..'))
60
+ PATH.freeze
61
+
62
+ # Header to put on all marshal files created by COSMOS
63
+ COSMOS_MARSHAL_HEADER = "ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} patchlevel #{RUBY_PATCHLEVEL}) [#{RUBY_PLATFORM}] COSMOS #{COSMOS_VERSION}"
64
+
65
+ # Disables the Ruby interpreter warnings such as when redefining a constant
66
+ def self.disable_warnings
67
+ saved_verbose = $VERBOSE
68
+ $VERBOSE = nil
69
+ yield
70
+ $VERBOSE = saved_verbose
71
+ end
72
+
73
+ # Searches for the /config/system and /config/targets directories to define
74
+ # the USERPATH constant
75
+ #
76
+ # @param start_dir [String] Path to start the search for the /config/system
77
+ # and /config/targets directories. The search will continue by moving up
78
+ # directories until the root directory is reached.
79
+ def self.define_user_path(start_dir = Dir.pwd)
80
+ current_dir = File.expand_path(start_dir)
81
+ while true
82
+ if File.exist?(File.join(current_dir, 'config', 'system')) and
83
+ File.exist?(File.join(current_dir, 'config', 'targets'))
84
+ disable_warnings do
85
+ Cosmos.const_set(:USERPATH, current_dir)
86
+ end
87
+ break
88
+ else
89
+ old_current_dir = current_dir
90
+ current_dir = File.expand_path(File.join(current_dir, '..'))
91
+ if old_current_dir == current_dir
92
+ # Hit the root dir - give up
93
+ break
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ #############################################################################
100
+ # This code is executed in place when this file is required
101
+
102
+ # Initialize to nil before searching
103
+ USERPATH = nil
104
+
105
+ # First attempt try from the location of the executable ($0)
106
+ # Note this method will fail when a intermediary executable is used like rcov
107
+ self.define_user_path(File.dirname($0))
108
+ if USERPATH.nil?
109
+ # Second attempt try from location of the current working directory
110
+ self.define_user_path(Dir.pwd)
111
+ if USERPATH.nil?
112
+ # Last chance - Check environment
113
+ if ENV['COSMOS_USERPATH']
114
+ disable_warnings do
115
+ Cosmos.const_set(:USERPATH, ENV['COSMOS_USERPATH'])
116
+ end
117
+ else
118
+ # Give up and assume we are in the tools directory
119
+ disable_warnings do
120
+ Cosmos.const_set(:USERPATH, File.expand_path(File.join(File.dirname($0), '..')))
121
+ end
122
+ end
123
+ end
124
+ end
125
+ USERPATH.freeze
126
+
127
+ #############################################################################
128
+
129
+
130
+ # Adds a path to the global Ruby search path
131
+ #
132
+ # @param path [String] Directory path
133
+ def self.add_to_search_path(path, front = true)
134
+ Cosmos.set_working_dir do
135
+ path = File.expand_path(path)
136
+ $:.delete(path)
137
+ if front
138
+ $:.unshift(path)
139
+ else # Back
140
+ $: << path
141
+ end
142
+ end
143
+ end
144
+
145
+ # Searches the COSMOS::USERPATH/config/data directory and then the core
146
+ # COSMOS/data directory for the given file name. Returns the absolute file
147
+ # path or nil if the file could not be found. This allows for user configuration
148
+ # files to override COSMOS data file defaults.
149
+ def self.data_path(name)
150
+ # Check USERPATH
151
+ filename = File.join(::Cosmos::USERPATH, 'config', 'data', name)
152
+ return filename if File.exist? filename
153
+
154
+ # Check extensions
155
+ begin
156
+ Bundler.load.specs.each do |spec|
157
+ spec_name_split = spec.name.split('-')
158
+ if spec_name_split.length > 1 and spec_name_split[0] == 'cosmos'
159
+ filename = File.join(spec.gem_dir, 'config', 'data', name)
160
+ return filename if File.exist? filename
161
+ end
162
+ end
163
+ rescue Bundler::GemfileNotFound
164
+ # No Gemfile - so no gem based extensions
165
+ end
166
+
167
+ # Check CORE
168
+ filename = File.join(::Cosmos::PATH, 'data', name)
169
+ return filename if File.exist? filename
170
+
171
+ # Check relative to executing file
172
+ filename = Cosmos.path($0, 'config/data/' + name)
173
+ return filename if File.exist? filename
174
+
175
+ nil
176
+ end
177
+
178
+ # Returns a path to a cosmos file. Prefers files in USERPATH but will look
179
+ # relative to calling_file if not present in USERPATH
180
+ # @param calling_file [String] Should be __FILE__ from the calling file
181
+ # @param paths [Array<String>] Partial paths like in File.join
182
+ def self.path(calling_file, *paths)
183
+ partial_path = File.join(*paths)
184
+
185
+ # First look in the Cosmos::USERPATH
186
+ user_path = File.join(Cosmos::USERPATH, partial_path)
187
+ return user_path if File.exist?(user_path)
188
+
189
+ # Then look relative to the calling file
190
+ if Pathname.new(calling_file).absolute?
191
+ current_dir = File.dirname(calling_file)
192
+ else
193
+ current_dir = File.join(BASE_PWD, calling_file)
194
+ end
195
+ while true
196
+ test_path = File.join(current_dir, partial_path)
197
+ if File.exist?(test_path)
198
+ return test_path
199
+ else
200
+ old_current_dir = current_dir
201
+ current_dir = File.expand_path(File.join(current_dir, '..'))
202
+ if old_current_dir == current_dir
203
+ # Hit the root dir - give up
204
+ raise "Could not find path to #{File.join(*paths)}"
205
+ end
206
+ end
207
+ end
208
+ end
209
+
210
+ # Creates a marshal file by serializing the given obj
211
+ #
212
+ # @param marshal_filename [String] Name of the marshal file to create
213
+ # @param obj [Object] The object to serialize to the file
214
+ def self.marshal_dump(marshal_filename, obj)
215
+ begin
216
+ Cosmos.set_working_dir do
217
+ File.open(marshal_filename, 'wb') do |file|
218
+ file.write(COSMOS_MARSHAL_HEADER)
219
+ file.write(Marshal.dump(obj))
220
+ end
221
+ end
222
+ rescue Exception => exception
223
+ begin
224
+ Cosmos.set_working_dir do
225
+ File.delete(marshal_filename)
226
+ end
227
+ rescue Exception
228
+ # Oh well - we tried
229
+ end
230
+ self.handle_fatal_exception(exception)
231
+ end
232
+ end
233
+
234
+ # Loads the marshal file back into a Ruby object
235
+ #
236
+ # @param marshal_filename [String] Name of the marshal file to load
237
+ def self.marshal_load(marshal_filename)
238
+ begin
239
+ cosmos_marshal_header = nil
240
+ data = nil
241
+ Cosmos.set_working_dir do
242
+ File.open(marshal_filename, 'rb') do |file|
243
+ cosmos_marshal_header = file.read(COSMOS_MARSHAL_HEADER.length)
244
+ data = file.read
245
+ end
246
+ end
247
+ if cosmos_marshal_header == COSMOS_MARSHAL_HEADER
248
+ return Marshal.load(data)
249
+ else
250
+ Logger.warn "Marshal load failed with invalid marshal file: #{marshal_filename}"
251
+ return nil
252
+ end
253
+ rescue Exception => exception
254
+ Cosmos.set_working_dir do
255
+ if File.exist?(marshal_filename)
256
+ Logger.error "Marshal load failed with exception: #{marshal_filename}\n#{exception.formatted}"
257
+ else
258
+ Logger.info "Marshal file does not exist: #{marshal_filename}"
259
+ end
260
+
261
+ # Try to delete the bad marshal file
262
+ begin
263
+ File.delete(marshal_filename)
264
+ rescue Exception
265
+ # Oh well - we tried
266
+ end
267
+ self.handle_fatal_exception(exception) if File.exist?(marshal_filename)
268
+ end
269
+ return nil
270
+ end
271
+ end
272
+
273
+ # Changes the current working directory to the USERPATH and then executes the
274
+ # command in a new Ruby Thread.
275
+ #
276
+ # @param command [String] The command to execute via the 'system' call
277
+ def self.run_process(command)
278
+ thread = nil
279
+ Cosmos.set_working_dir do
280
+ thread = Thread.new do
281
+ system(command)
282
+ end
283
+ # Wait for the thread and process to start
284
+ sleep 0.01 until !thread.status.nil?
285
+ sleep 0.1
286
+ end
287
+ thread
288
+ end
289
+
290
+ # Changes the current working directory to the USERPATH and then executes the
291
+ # command in a new Ruby Thread. Will show a messagebox or print the output if the
292
+ # process produces any output
293
+ #
294
+ # @param command [String] The command to execute via the 'system' call
295
+ def self.run_process_check_output(command)
296
+ thread = nil
297
+ Cosmos.set_working_dir do
298
+ thread = Thread.new do
299
+ output, _ = Open3.capture2e(command)
300
+ if !output.empty?
301
+ # Work around modalSession messages on Mac Mavericks
302
+ real_lines = 0
303
+ output.each_line do |line|
304
+ real_lines += 1 if line !~ /modalSession/
305
+ end
306
+
307
+ if real_lines > 0
308
+ Logger.error output
309
+ self.write_unexpected_file(output)
310
+ if defined? ::Qt and $qApp
311
+ Qt.execute_in_main_thread(false) do
312
+ dialog = Qt::Dialog.new do |box|
313
+ box.setWindowTitle('Unexpected text output')
314
+ box.resize(600, 600)
315
+ text_field = Qt::PlainTextEdit.new
316
+ text_field.setReadOnly(true)
317
+ orig_font = text_field.font
318
+ text_field.setFont(Cosmos.getFont(orig_font.family, orig_font.point_size+2))
319
+ text_field.setWordWrapMode(Qt::TextOption::NoWrap)
320
+ text_field.appendPlainText(output)
321
+ vframe = Qt::VBoxLayout.new
322
+ vframe.addWidget(text_field)
323
+ sep = Qt::Frame.new(box)
324
+ sep.setFrameStyle(Qt::Frame::VLine | Qt::Frame::Sunken)
325
+ vframe.addWidget(sep)
326
+ ok = Qt::PushButton.new('OK')
327
+ ok.setDefault(true)
328
+ ok.connect(SIGNAL('clicked(bool)')) { box.accept }
329
+ vframe.addWidget(ok)
330
+ box.setLayout(vframe)
331
+ box.show
332
+ box.raise
333
+ end
334
+ dialog.exec
335
+ dialog.dispose
336
+ end
337
+ end
338
+ end
339
+ end
340
+ end
341
+ # Wait for the thread and process to start
342
+ sleep 0.01 until !thread.status.nil?
343
+ sleep 0.1
344
+ end
345
+ thread
346
+ end
347
+
348
+ # Runs an md5 sum over one or more files and returns the Digest::MD5 object.
349
+ # Handles windows/unix new line differences but changes in whitespace will
350
+ # change the md5 sum.
351
+ #
352
+ # Usage:
353
+ # digest = Cosmos.md5_files(files)
354
+ # digest.digest # => the 16 bytes of digest
355
+ # digest.hexdigest # => the formatted string in hex
356
+ #
357
+ # @param filenames [Array<String>] List of files to read and calculate a md5
358
+ # sum on
359
+ # @param additional_data [String] Additional data to add to the md5 sum
360
+ # @return [Digest::MD5] The md5 sum
361
+ def self.md5_files(filenames, additional_data = nil)
362
+ digest = Digest::MD5.new
363
+ Cosmos.set_working_dir do
364
+ filenames.each do |filename|
365
+ # Read the file's data and add to the running MD5 sum
366
+ digest << File.read(filename).gsub(/\r/,'')
367
+ end
368
+ end
369
+ digest << additional_data if additional_data
370
+ digest
371
+ end
372
+
373
+ # Opens a timestamped log file for writing. The opened file is yielded back
374
+ # to the block.
375
+ #
376
+ # @param filename [String] String to append to the exception log filename.
377
+ # The filename will start with a date/time stamp.
378
+ # @param log_dir [String] By default this method will write to the COSMOS
379
+ # default log directory. By setting this parameter you can override the
380
+ # directory the log will be written to.
381
+ # @yieldparam file [File] The log file
382
+ # @return [String|nil] The fully pathed log file name or nil if there was
383
+ # an error creating the log file.
384
+ def self.create_log_file(filename, log_dir)
385
+ log_file = nil
386
+ Cosmos.set_working_dir do
387
+ begin
388
+ # The following code goes inside a begin rescue because it reads the
389
+ # system.txt configuration file. If this has an error we won't be able
390
+ # to determine the log path but we still want to write the log.
391
+ log_dir = System.instance.paths['LOGS'] unless log_dir
392
+ log_file = File.join(log_dir,
393
+ File.build_timestamped_filename([filename]))
394
+ # Make sure the log directory exists
395
+ raise unless File.exist?(log_dir)
396
+ log_file
397
+ rescue Exception
398
+ # If not then we just build a file locally
399
+ if File.exist?('./outputs/logs')
400
+ log_file = File.join('./outputs/logs', File.build_timestamped_filename([filename]))
401
+ elsif File.exist?('./logs')
402
+ log_file = File.join('./logs', File.build_timestamped_filename([filename]))
403
+ else
404
+ log_file = File.build_timestamped_filename([filename])
405
+ end
406
+ end
407
+ begin
408
+ # Log exception to file, open the file in append mode in case we get
409
+ # multiple exceptions in the same second. That way we don't lose
410
+ # exceptions by overwritting the last exception file.
411
+ COSMOS_MUTEX.synchronize do
412
+ begin
413
+ file = File.open(log_file, 'a')
414
+ yield file
415
+ ensure
416
+ file.close unless file.closed?
417
+ end
418
+ end
419
+ rescue Exception
420
+ # Ensure we always return
421
+ end
422
+ log_file = File.expand_path(log_file)
423
+ end
424
+ return log_file
425
+ end
426
+
427
+ # Writes a log file with information about the current configuration
428
+ # including the Ruby version, Cosmos version, whether you are on Windows, the
429
+ # COSMOS path and userpath, and the Ruby path along with the exception that
430
+ # is passed in.
431
+ #
432
+ # @param [String] filename String to append to the exception log filename.
433
+ # The filename will start with a date/time stamp.
434
+ # @param [String] log_dir By default this method will write to the COSMOS
435
+ # default log directory. By setting this parameter you can override the
436
+ # directory the log will be written to.
437
+ # @return [String|nil] The fully pathed log file name or nil if there was
438
+ # an error creating the log file.
439
+ def self.write_exception_file(exception, filename = 'exception', log_dir = nil)
440
+ log_file = create_log_file(filename, log_dir) do |file|
441
+ begin
442
+ file.puts "Exception:"
443
+ if exception
444
+ file.puts exception.formatted
445
+ file.puts
446
+ else
447
+ file.puts "No Exception Given"
448
+ file.puts caller.join("\n")
449
+ file.puts
450
+ end
451
+ file.puts "Caller Backtrace:"
452
+ file.puts caller().join("\n")
453
+ file.puts
454
+
455
+ file.puts "Ruby Version: ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} patchlevel #{RUBY_PATCHLEVEL}) [#{RUBY_PLATFORM}]"
456
+ file.puts "Rubygems Version: #{Gem::VERSION}"
457
+ file.puts "Cosmos Version: #{Cosmos::VERSION}"
458
+ file.puts "Cosmos::PATH: #{Cosmos::PATH}"
459
+ file.puts "Cosmos::USERPATH: #{Cosmos::USERPATH}"
460
+ file.puts ""
461
+ file.puts "Environment:"
462
+ file.puts "RUBYOPT: #{ENV['RUBYOPT']}"
463
+ file.puts "RUBYLIB: #{ENV['RUBYLIB']}"
464
+ file.puts "GEM_PATH: #{ENV['GEM_PATH']}"
465
+ file.puts "GEMRC: #{ENV['GEMRC']}"
466
+ file.puts "RI_DEVKIT: #{ENV['RI_DEVKIT']}"
467
+ file.puts "GEM_HOME: #{ENV['GEM_HOME']}"
468
+ file.puts "PATH: #{ENV['PATH']}"
469
+ file.puts ""
470
+ file.puts "Ruby Path:\n #{$:.join("\n ")}\n\n"
471
+ file.puts "Gems:"
472
+ Gem.loaded_specs.values.map {|x| file.puts "#{x.name} #{x.version} #{x.platform}"}
473
+ file.puts ""
474
+ file.puts "All Threads Backtraces:"
475
+ Thread.list.each do |thread|
476
+ file.puts thread.backtrace.join("\n")
477
+ file.puts
478
+ end
479
+ file.puts ""
480
+ file.puts ""
481
+ ensure
482
+ file.close
483
+ end
484
+ end
485
+ return log_file
486
+ end
487
+
488
+ # Writes a log file with information about unexpected output
489
+ #
490
+ # @param[String] text The unexpected output text
491
+ # @param [String] filename String to append to the exception log filename.
492
+ # The filename will start with a date/time stamp.
493
+ # @param [String] log_dir By default this method will write to the COSMOS
494
+ # default log directory. By setting this parameter you can override the
495
+ # directory the log will be written to.
496
+ # @return [String|nil] The fully pathed log file name or nil if there was
497
+ # an error creating the log file.
498
+ def self.write_unexpected_file(text, filename = 'unexpected', log_dir = nil)
499
+ log_file = create_log_file(filename, log_dir) do |file|
500
+ begin
501
+ file.puts "Unexpected Output:\n\n"
502
+ file.puts text
503
+ ensure
504
+ file.close
505
+ end
506
+ end
507
+ return log_file
508
+ end
509
+
510
+ # Catch fatal exceptions within the block
511
+ # This is intended to catch exceptions before the GUI is available
512
+ def self.catch_fatal_exception
513
+ begin
514
+ yield
515
+ rescue Exception => error
516
+ unless error.class == SystemExit or error.class == Interrupt
517
+ Logger.level = Logger::FATAL
518
+ Cosmos.handle_fatal_exception(error, false)
519
+ end
520
+ end
521
+ end
522
+
523
+ # Write a message to the Logger, write an exception file, and popup a GUI
524
+ # window if try_gui. Finally 'exit 1' is called to end the calling program.
525
+ #
526
+ # @param error [Exception] The exception to handle
527
+ # @param try_gui [Boolean] Whether to try and create a GUI exception popup
528
+ def self.handle_fatal_exception(error, try_gui = true)
529
+ $cosmos_fatal_exception = error
530
+ log_file = self.write_exception_file(error)
531
+ Logger.level = Logger::FATAL unless try_gui
532
+ Logger.fatal "Fatal Exception! Exiting..."
533
+ Logger.fatal error.formatted
534
+ if defined? ExceptionDialog and try_gui and $qApp
535
+ Qt.execute_in_main_thread(true) {||ExceptionDialog.new(nil, error, '', true, false, log_file)}
536
+ else
537
+ if $stdout != STDOUT
538
+ $stdout = STDOUT
539
+ Logger.fatal "Fatal Exception! Exiting..."
540
+ Logger.fatal error.formatted
541
+ end
542
+ sleep 1 # Allow the messages to be printed and then crash
543
+ exit 1
544
+ end
545
+ end
546
+
547
+ # CriticalErrors are errors that need to be brought to a user's attention but
548
+ # do not cause an exit. A good example is if the packet log writer fails and
549
+ # can no longer write the log file. Write a message to the Logger, write an
550
+ # exception file, and popup a GUI window if try_gui. Ensure the GUI only
551
+ # comes up once so this method can be called over and over by failing code.
552
+ #
553
+ # @param error [Exception] The exception to handle
554
+ # @param try_gui [Boolean] Whether to try and create a GUI exception popup
555
+ def self.handle_critical_exception(error, try_gui = true)
556
+ Logger.error "Critical Exception! #{error.formatted}"
557
+ if defined? ExceptionDialog and !ExceptionDialog.dialog_open?
558
+ log_file = self.write_exception_file(error)
559
+ if try_gui
560
+ Qt.execute_in_main_thread(true) {|| ExceptionDialog.new(nil, error, '', false, false, log_file)}
561
+ end
562
+ end
563
+ end
564
+
565
+ # Creates a Ruby Thread to run the given block. Rescues any exceptions and
566
+ # retries the threads the given number of times before handling the thread
567
+ # death by calling {Cosmos.handle_fatal_exception}.
568
+ #
569
+ # @param name [String] Name of the thread
570
+ # @param retry_attempts [Integer] The number of times to allow the thread to
571
+ # restart before exiting
572
+ def self.safe_thread(name, retry_attempts = 0)
573
+ Thread.new do
574
+ retry_count = 0
575
+ begin
576
+ yield
577
+ rescue => error
578
+ Logger.error "#{name} thread unexpectedly died. Retries: #{retry_count} of #{retry_attempts}"
579
+ Logger.error error.formatted
580
+ retry_count += 1
581
+ if retry_count <= retry_attempts
582
+ self.write_exception_file(error)
583
+ retry
584
+ end
585
+ handle_fatal_exception(error)
586
+ end
587
+ end
588
+ end
589
+
590
+ # Require the class represented by the filename. This uses the standard Ruby
591
+ # convention of having a single class per file where the class name is camel
592
+ # cased and filename is lowercase with underscores.
593
+ #
594
+ # @param class_name_or_class_filename [String] The name of the class or the file which contains the
595
+ # Ruby class to require
596
+ # @param log_error [Boolean] Whether to log an error if we can not require
597
+ # the class
598
+ def self.require_class(class_name_or_class_filename, log_error = true)
599
+ if class_name_or_class_filename.downcase[-3..-1] == '.rb' or (class_name_or_class_filename[0] == class_name_or_class_filename[0].downcase)
600
+ class_filename = class_name_or_class_filename
601
+ class_name = class_filename.filename_to_class_name
602
+ else
603
+ class_name = class_name_or_class_filename
604
+ class_filename = class_name.class_name_to_filename
605
+ end
606
+ return class_name.to_class if class_name.to_class and defined? class_name.to_class
607
+ self.require_file(class_filename, log_error)
608
+ klass = class_name.to_class
609
+ raise "Ruby class #{class_name} not found" unless klass
610
+ klass
611
+ end
612
+
613
+ # Requires a file with a standard error message if it fails
614
+ #
615
+ # @param filename [String] The name of the file to require
616
+ # @param log_error [Boolean] Whether to log an error if we can not require
617
+ # the class
618
+ def self.require_file(filename, log_error = true)
619
+ begin
620
+ require filename
621
+ rescue Exception => err
622
+ msg = "Unable to require #{filename} due to #{err.message}. "\
623
+ "Ensure #{filename} is in the COSMOS lib directory."
624
+ Logger.error msg if log_error
625
+ raise $!, msg, $!.backtrace
626
+ end
627
+ end
628
+
629
+ # Open a platform specific file browser at the given path
630
+ # @param path [String] Directory path
631
+ def self.open_file_browser(path)
632
+ if Kernel.is_windows?
633
+ self.run_process("start #{path}")
634
+ elsif Kernel.is_mac?
635
+ self.run_process("open #{path}")
636
+ else
637
+ self.run_process("xdg-open #{path}")
638
+ end
639
+ end
640
+
641
+ # @param filename [String] Name of the file to open in the editor
642
+ def self.open_in_text_editor(filename)
643
+ if filename
644
+ if ENV['COSMOS_TEXT']
645
+ self.run_process("#{ENV['COSMOS_TEXT']} \"#{filename}\"")
646
+ else
647
+ if Kernel.is_windows?
648
+ if File.extname(filename).to_s.downcase == '.csv'
649
+ self.run_process("cmd /c \"start wordpad \"#{filename.gsub('/','\\')}\"\"")
650
+ else
651
+ self.run_process("cmd /c \"start \"\" \"#{filename.gsub('/','\\')}\"\"")
652
+ end
653
+ elsif Kernel.is_mac?
654
+ self.run_process("open -a TextEdit \"#{filename}\"")
655
+ else
656
+ which_gedit = `which gedit 2>&1`.chomp
657
+ if which_gedit.to_s.strip == "" or which_gedit =~ /Command not found/i or which_gedit =~ /no .* in/i
658
+ # No gedit
659
+ ['xterm', 'gnome-terminal', 'urxvt', 'rxvt'].each do |terminal|
660
+ which_terminal = `which #{terminal} 2>&1`.chomp
661
+ next if which_terminal.to_s.strip == "" or which_terminal =~ /Command not found/i or which_terminal =~ /no .* in/i
662
+ editor = ENV['VISUAL']
663
+ editor = ENV['EDITOR'] unless editor
664
+ editor = 'vi' unless editor
665
+ self.run_process("#{terminal} -e \"#{editor} '#{filename}'\"")
666
+ break
667
+ end
668
+ else
669
+ # Have gedit
670
+ self.run_process("gedit \"#{filename}\"")
671
+ end
672
+ end
673
+ end
674
+ end
675
+ end
676
+
677
+ # @param filename [String] Name of the file to open in the web browser
678
+ def self.open_in_web_browser(filename)
679
+ if filename
680
+ if Kernel.is_windows?
681
+ self.run_process("cmd /c \"start \"\" \"#{filename.gsub('/','\\')}\"\"")
682
+ elsif Kernel.is_mac?
683
+ self.run_process("open -a Safari \"#{filename}\"")
684
+ else
685
+ which_firefox = `which firefox`.chomp
686
+ if which_firefox =~ /Command not found/i or which_firefox =~ /no .* in/i
687
+ raise "Firefox not found"
688
+ else
689
+ system_call = "#{which_firefox} \"#{filename}\""
690
+ end
691
+ self.run_process(system_call)
692
+ end
693
+ end
694
+ end
695
+
696
+ # Temporarily set the working directory during a block
697
+ def self.set_working_dir(working_dir = Cosmos::USERPATH)
698
+ current_dir = Dir.pwd
699
+ Dir.chdir(working_dir)
700
+ begin
701
+ yield
702
+ ensure
703
+ Dir.chdir(current_dir)
704
+ end
705
+ end
706
+
707
+ # Attempt to gracefully kill a thread
708
+ # @param owner Object that owns the thread and may have a graceful_kill method
709
+ # @param thread The thread to gracefully kill
710
+ # @param graceful_timeout Timeout in seconds to wait for it to die gracefully
711
+ # @param timeout_interval How often to poll for aliveness
712
+ # @param hard_timeout Timeout in seconds to wait for it to die ungracefully
713
+ def self.kill_thread(owner, thread, graceful_timeout = 1, timeout_interval = 0.01, hard_timeout = 1)
714
+ if thread
715
+ if owner and owner.respond_to? :graceful_kill
716
+ if Thread.current != thread
717
+ owner.graceful_kill
718
+ end_time = Time.now.sys + graceful_timeout
719
+ while thread.alive? && ((end_time - Time.now.sys) > 0)
720
+ sleep(timeout_interval)
721
+ end
722
+ else
723
+ Logger.warn "Threads cannot graceful_kill themselves"
724
+ end
725
+ elsif owner
726
+ Logger.info "Thread owner #{owner.class} does not support graceful_kill"
727
+ end
728
+ if thread.alive?
729
+ # Graceful failed
730
+ Logger.warn "Failed to gracefully kill thread:\n Caller Backtrace:\n #{caller().join("\n ")}\n \n Thread Backtrace:\n #{thread.backtrace.join("\n ")}\n\n"
731
+ thread.kill
732
+ end_time = Time.now.sys + hard_timeout
733
+ while thread.alive? && ((end_time - Time.now.sys) > 0)
734
+ sleep(timeout_interval)
735
+ end
736
+ end
737
+ if thread.alive?
738
+ Logger.error "Failed to kill thread"
739
+ end
740
+ end
741
+ end
742
+
743
+ # Close a socket in a manner that ensures that any reads blocked in select
744
+ # will unblock across platforms
745
+ # @param socket The socket to close
746
+ def self.close_socket(socket)
747
+ if socket
748
+ # Calling shutdown and then sleep seems to be required
749
+ # to get select to reliably unblock on linux
750
+ begin
751
+ socket.shutdown(:RDWR)
752
+ sleep(0)
753
+ rescue Exception
754
+ # Oh well we tried
755
+ end
756
+ begin
757
+ socket.close unless socket.closed?
758
+ rescue Exception
759
+ # Oh well we tried
760
+ end
761
+ end
762
+ end
763
+
764
+ # Play a wav file
765
+ # @param wav_filename filename of the wav file
766
+ def self.play_wav_file(wav_filename)
767
+ if defined? Qt and wav_filename
768
+ Qt.execute_in_main_thread(true) do
769
+ if Qt::CoreApplication.instance and Qt::Sound.isAvailable
770
+ Cosmos.set_working_dir do
771
+ Qt::Sound.play(wav_filename.to_s)
772
+ end
773
+ end
774
+ end
775
+ end
776
+ end
777
+
778
+ end