cosmos 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1114) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +48 -0
  3. data/.travis.yml +5 -0
  4. data/Gemfile +5 -0
  5. data/Guardfile +27 -0
  6. data/LICENSE.txt +879 -0
  7. data/Manifest.txt +1112 -0
  8. data/README.md +42 -0
  9. data/Rakefile +214 -0
  10. data/autohotkey/config/data/attitude.bin +0 -0
  11. data/autohotkey/config/data/diamond.STL +58 -0
  12. data/autohotkey/config/data/groundoff.gif +0 -0
  13. data/autohotkey/config/data/groundon.gif +0 -0
  14. data/autohotkey/config/data/position.bin +0 -0
  15. data/autohotkey/config/data/satellite.gif +0 -0
  16. data/autohotkey/config/data/tada.wav +0 -0
  17. data/autohotkey/config/system/system.txt +34 -0
  18. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
  19. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  20. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  21. data/autohotkey/config/targets/COSMOS/target.txt +5 -0
  22. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -0
  23. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -0
  24. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -0
  25. data/autohotkey/config/targets/INST/doc/README.txt +1 -0
  26. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -0
  27. data/autohotkey/config/targets/INST/lib/sim_inst.rb +294 -0
  28. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -0
  29. data/autohotkey/config/targets/INST/screens/array.txt +7 -0
  30. data/autohotkey/config/targets/INST/screens/block.txt +8 -0
  31. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -0
  32. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -0
  33. data/autohotkey/config/targets/INST/screens/ground.txt +25 -0
  34. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -0
  35. data/autohotkey/config/targets/INST/screens/hs.txt +49 -0
  36. data/autohotkey/config/targets/INST/screens/image.txt +21 -0
  37. data/autohotkey/config/targets/INST/screens/latest.txt +23 -0
  38. data/autohotkey/config/targets/INST/screens/mech.txt +25 -0
  39. data/autohotkey/config/targets/INST/screens/other.txt +25 -0
  40. data/autohotkey/config/targets/INST/screens/params.txt +25 -0
  41. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -0
  42. data/autohotkey/config/targets/INST/target.txt +27 -0
  43. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -0
  44. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -0
  45. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  46. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -0
  47. data/autohotkey/config/tools/cmd_sender/cmd_sender.txt +1 -0
  48. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -0
  49. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -0
  50. data/autohotkey/config/tools/handbook_creator/default_toc.xsl +59 -0
  51. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -0
  52. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  53. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  54. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  55. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -0
  56. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  57. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  58. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  59. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  60. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  61. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  62. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  63. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  64. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -0
  65. data/autohotkey/config/tools/launcher/launcher.txt +38 -0
  66. data/autohotkey/config/tools/limits_monitor/README.txt +1 -0
  67. data/autohotkey/config/tools/opengl_builder/error.txt +1 -0
  68. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -0
  69. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -0
  70. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -0
  71. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -0
  72. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -0
  73. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -0
  74. data/autohotkey/config/tools/test_runner/test_runner3.txt +7 -0
  75. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -0
  76. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +14 -0
  77. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -0
  78. data/autohotkey/config/tools/tlm_grapher/README.txt +1 -0
  79. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -0
  80. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -0
  81. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -0
  82. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -0
  83. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -0
  84. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -0
  85. data/autohotkey/lib/example_background_task.rb +42 -0
  86. data/autohotkey/lib/user_version.rb +3 -0
  87. data/autohotkey/outputs/handbooks/assets/css/bootstrap-theme.css +397 -0
  88. data/autohotkey/outputs/handbooks/assets/css/bootstrap-theme.min.css +7 -0
  89. data/autohotkey/outputs/handbooks/assets/css/bootstrap.css +7118 -0
  90. data/autohotkey/outputs/handbooks/assets/css/bootstrap.min.css +7 -0
  91. data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  92. data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  93. data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  94. data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  95. data/autohotkey/outputs/handbooks/assets/js/bootstrap.js +2006 -0
  96. data/autohotkey/outputs/handbooks/assets/js/bootstrap.min.js +7 -0
  97. data/autohotkey/outputs/logs/bigtlm.bin +0 -0
  98. data/autohotkey/outputs/logs/cmd.bin +0 -0
  99. data/autohotkey/outputs/logs/tlm.bin +0 -0
  100. data/autohotkey/outputs/saved_config/README.txt +1 -0
  101. data/autohotkey/outputs/tables/README.txt +1 -0
  102. data/autohotkey/outputs/tmp/README.txt +1 -0
  103. data/autohotkey/procedures/clear_util.rb +7 -0
  104. data/autohotkey/procedures/collect.rb +18 -0
  105. data/autohotkey/procedures/collect_util.rb +14 -0
  106. data/autohotkey/procedures/example_test.rb +67 -0
  107. data/autohotkey/procedures/example_test2.rb +74 -0
  108. data/autohotkey/procedures/script_test.rb +17 -0
  109. data/autohotkey/procedures/syntax_error.rb +18 -0
  110. data/autohotkey/tools/CmdExtractorAHK +16 -0
  111. data/autohotkey/tools/CmdSender +14 -0
  112. data/autohotkey/tools/CmdSenderAHK +18 -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 +20 -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/Replay.bat +59 -0
  127. data/autohotkey/tools/ReplayAHK +17 -0
  128. data/autohotkey/tools/ScriptRunner +14 -0
  129. data/autohotkey/tools/ScriptRunnerAHK +20 -0
  130. data/autohotkey/tools/ScriptRunnerAHK2 +17 -0
  131. data/autohotkey/tools/TableManager +14 -0
  132. data/autohotkey/tools/TableManagerAHK +30 -0
  133. data/autohotkey/tools/TestRunner +15 -0
  134. data/autohotkey/tools/TestRunnerAHK +17 -0
  135. data/autohotkey/tools/TestRunnerAHK2 +17 -0
  136. data/autohotkey/tools/TestRunnerAHK3 +17 -0
  137. data/autohotkey/tools/TestRunnerAHK4 +17 -0
  138. data/autohotkey/tools/TlmExtractor +15 -0
  139. data/autohotkey/tools/TlmExtractorAHK +19 -0
  140. data/autohotkey/tools/TlmExtractorAHK2 +16 -0
  141. data/autohotkey/tools/TlmExtractorAHK3 +16 -0
  142. data/autohotkey/tools/TlmGrapher +14 -0
  143. data/autohotkey/tools/TlmGrapherAHK +19 -0
  144. data/autohotkey/tools/TlmGrapherAHK2 +23 -0
  145. data/autohotkey/tools/TlmGrapherAHK3 +17 -0
  146. data/autohotkey/tools/TlmGrapherAHK4 +17 -0
  147. data/autohotkey/tools/TlmViewer +14 -0
  148. data/autohotkey/tools/TlmViewerAHK +28 -0
  149. data/autohotkey/tools/TlmViewerAHK2 +18 -0
  150. data/autohotkey/tools/TlmViewerAHK3 +18 -0
  151. data/autohotkey/tools/TlmViewerAHK4 +18 -0
  152. data/autohotkey/tools/TlmViewerAHK5 +18 -0
  153. data/autohotkey/tools/autohotkey.rb +37 -0
  154. data/autohotkey/tools/cmd_extractor.ahk +27 -0
  155. data/autohotkey/tools/cmd_sender.ahk +162 -0
  156. data/autohotkey/tools/cmd_tlm_server.ahk +89 -0
  157. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -0
  158. data/autohotkey/tools/data_viewer.ahk +135 -0
  159. data/autohotkey/tools/handbook_creator.ahk +23 -0
  160. data/autohotkey/tools/launcher.ahk +41 -0
  161. data/autohotkey/tools/limits_monitor.ahk +70 -0
  162. data/autohotkey/tools/open_gl_builder.ahk +134 -0
  163. data/autohotkey/tools/packet_viewer.ahk +143 -0
  164. data/autohotkey/tools/packet_viewer2.ahk +9 -0
  165. data/autohotkey/tools/replay.ahk +98 -0
  166. data/autohotkey/tools/script_runner.ahk +589 -0
  167. data/autohotkey/tools/script_runner2.ahk +31 -0
  168. data/autohotkey/tools/table_manager.ahk +220 -0
  169. data/autohotkey/tools/test_runner.ahk +259 -0
  170. data/autohotkey/tools/test_runner2.ahk +52 -0
  171. data/autohotkey/tools/test_runner3.ahk +13 -0
  172. data/autohotkey/tools/tlm_extractor.ahk +272 -0
  173. data/autohotkey/tools/tlm_grapher.ahk +642 -0
  174. data/autohotkey/tools/tlm_grapher2.ahk +115 -0
  175. data/autohotkey/tools/tlm_grapher3.ahk +24 -0
  176. data/autohotkey/tools/tlm_viewer.ahk +133 -0
  177. data/autohotkey/tools/tlm_viewer2.ahk +49 -0
  178. data/autohotkey/tools/tlm_viewer4.ahk +4 -0
  179. data/autohotkey/tools/tlm_viewer5.ahk +20 -0
  180. data/autohotkey/userpath.txt +1 -0
  181. data/bin/cosmos +96 -0
  182. data/bin/cstol_converter +1166 -0
  183. data/bin/exchndl20.dll +0 -0
  184. data/bin/exchndl21.dll +0 -0
  185. data/bin/mgwhelp.dll +0 -0
  186. data/bin/rubysloc +85 -0
  187. data/cosmos.gemspec +98 -0
  188. data/data/COSMOS_64x64.bmp +0 -0
  189. data/data/COSMOS_64x64.ico +0 -0
  190. data/data/COSMOS_64x64.png +0 -0
  191. data/data/CheckBoxCheck.gif +0 -0
  192. data/data/CheckBoxEmpty.gif +0 -0
  193. data/data/Earthmap1024x512.gif +0 -0
  194. data/data/about.txt +4 -0
  195. data/data/add_database.png +0 -0
  196. data/data/add_plot.png +0 -0
  197. data/data/add_tab.png +0 -0
  198. data/data/blank.png +0 -0
  199. data/data/bug.png +0 -0
  200. data/data/checkmark.png +0 -0
  201. data/data/close.png +0 -0
  202. data/data/cmd_extractor.png +0 -0
  203. data/data/cmd_sender.png +0 -0
  204. data/data/copy.png +0 -0
  205. data/data/cosmos.xcf +0 -0
  206. data/data/cosmos_word.gif +0 -0
  207. data/data/crc.txt +305 -0
  208. data/data/cts.png +0 -0
  209. data/data/cut.png +0 -0
  210. data/data/data_viewer.png +0 -0
  211. data/data/delete_database.png +0 -0
  212. data/data/delete_plot.png +0 -0
  213. data/data/delete_tab.png +0 -0
  214. data/data/diamond.STL +58 -0
  215. data/data/disconnected.png +0 -0
  216. data/data/edit.png +0 -0
  217. data/data/edit_database.png +0 -0
  218. data/data/edit_plot.png +0 -0
  219. data/data/edit_tab.png +0 -0
  220. data/data/end-26.png +0 -0
  221. data/data/fast_forward-26.png +0 -0
  222. data/data/file.png +0 -0
  223. data/data/handbook_creator.png +0 -0
  224. data/data/help.png +0 -0
  225. data/data/html-32.png +0 -0
  226. data/data/launcher.png +0 -0
  227. data/data/legal.gif +0 -0
  228. data/data/legal.txt +9 -0
  229. data/data/limits_monitor.png +0 -0
  230. data/data/moonmap1k.gif +0 -0
  231. data/data/multi.png +0 -0
  232. data/data/open.png +0 -0
  233. data/data/open_in_browser-32.png +0 -0
  234. data/data/opengl_builder.png +0 -0
  235. data/data/packet_viewer.png +0 -0
  236. data/data/pdf-32.png +0 -0
  237. data/data/play-26.png +0 -0
  238. data/data/redo.png +0 -0
  239. data/data/replay.png +0 -0
  240. data/data/reverse-play-26.png +0 -0
  241. data/data/rewind-26.png +0 -0
  242. data/data/running.png +0 -0
  243. data/data/save.png +0 -0
  244. data/data/save_as.png +0 -0
  245. data/data/screenshot.png +0 -0
  246. data/data/script_runner.png +0 -0
  247. data/data/search-14.png +0 -0
  248. data/data/search.png +0 -0
  249. data/data/send_file.png +0 -0
  250. data/data/skip_to_start-26.png +0 -0
  251. data/data/spinner.gif +0 -0
  252. data/data/splash.gif +0 -0
  253. data/data/stop-26.png +0 -0
  254. data/data/table_manager.png +0 -0
  255. data/data/test_runner.png +0 -0
  256. data/data/tlm_extractor.png +0 -0
  257. data/data/tlm_grapher.png +0 -0
  258. data/data/tlm_viewer.png +0 -0
  259. data/data/undo.png +0 -0
  260. data/demo/Gemfile +5 -0
  261. data/demo/Launcher +15 -0
  262. data/demo/Launcher.bat +59 -0
  263. data/demo/Rakefile +61 -0
  264. data/demo/config/data/attitude.bin +0 -0
  265. data/demo/config/data/crc.txt +206 -0
  266. data/demo/config/data/diamond.STL +58 -0
  267. data/demo/config/data/groundoff.gif +0 -0
  268. data/demo/config/data/groundon.gif +0 -0
  269. data/demo/config/data/hselectoff.gif +0 -0
  270. data/demo/config/data/hselecton.gif +0 -0
  271. data/demo/config/data/hswitchoff.gif +0 -0
  272. data/demo/config/data/hswitchon.gif +0 -0
  273. data/demo/config/data/meta_init.txt +4 -0
  274. data/demo/config/data/position.bin +0 -0
  275. data/demo/config/data/poweroff.gif +0 -0
  276. data/demo/config/data/poweron.gif +0 -0
  277. data/demo/config/data/satellite.gif +0 -0
  278. data/demo/config/data/tada.wav +0 -0
  279. data/demo/config/data/vswitchoff.gif +0 -0
  280. data/demo/config/data/vswitchon.gif +0 -0
  281. data/demo/config/system/system.txt +34 -0
  282. data/demo/config/system/system2.txt +33 -0
  283. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
  284. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  285. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  286. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -0
  287. data/demo/config/targets/COSMOS/screens/version.txt +19 -0
  288. data/demo/config/targets/COSMOS/target.txt +11 -0
  289. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -0
  290. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +3 -0
  291. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -0
  292. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -0
  293. data/demo/config/targets/EXAMPLE/target.txt +7 -0
  294. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -0
  295. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -0
  296. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -0
  297. data/demo/config/targets/INST/doc/README.txt +1 -0
  298. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -0
  299. data/demo/config/targets/INST/lib/sim_inst.rb +294 -0
  300. data/demo/config/targets/INST/screens/adcs.txt +46 -0
  301. data/demo/config/targets/INST/screens/array.txt +15 -0
  302. data/demo/config/targets/INST/screens/block.txt +8 -0
  303. data/demo/config/targets/INST/screens/commanding.txt +30 -0
  304. data/demo/config/targets/INST/screens/graphs.txt +14 -0
  305. data/demo/config/targets/INST/screens/ground.txt +25 -0
  306. data/demo/config/targets/INST/screens/hs.txt +44 -0
  307. data/demo/config/targets/INST/screens/latest.txt +23 -0
  308. data/demo/config/targets/INST/screens/other.txt +29 -0
  309. data/demo/config/targets/INST/screens/tabs.txt +70 -0
  310. data/demo/config/targets/INST/target.txt +33 -0
  311. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -0
  312. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -0
  313. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  314. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -0
  315. data/demo/config/targets/SYSTEM/screens/status.txt +12 -0
  316. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +12 -0
  317. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -0
  318. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -0
  319. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +48 -0
  320. data/demo/config/targets/TEMPLATED/target.txt +6 -0
  321. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +33 -0
  322. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +29 -0
  323. data/demo/config/tools/data_viewer/data_viewer.txt +11 -0
  324. data/demo/config/tools/handbook_creator/default_toc.xsl +59 -0
  325. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -0
  326. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  327. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  328. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  329. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -0
  330. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  331. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  332. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  333. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  334. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  335. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  336. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  337. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  338. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -0
  339. data/demo/config/tools/launcher/launcher.txt +45 -0
  340. data/demo/config/tools/launcher/launcher2.txt +45 -0
  341. data/demo/config/tools/limits_monitor/README.txt +1 -0
  342. data/demo/config/tools/opengl_builder/README.txt +1 -0
  343. data/demo/config/tools/script_runner/script_runner.txt +3 -0
  344. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -0
  345. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  346. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -0
  347. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -0
  348. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -0
  349. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -0
  350. data/demo/config/tools/test_runner/test_runner.txt +17 -0
  351. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  352. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  353. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  354. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  355. data/demo/config/tools/tlm_grapher/README.txt +1 -0
  356. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -0
  357. data/demo/lib/example_background_task.rb +52 -0
  358. data/demo/lib/example_target.rb +108 -0
  359. data/demo/lib/scpi_target.rb +74 -0
  360. data/demo/lib/user_version.rb +3 -0
  361. data/demo/outputs/handbooks/assets/css/bootstrap-theme.css +397 -0
  362. data/demo/outputs/handbooks/assets/css/bootstrap-theme.min.css +7 -0
  363. data/demo/outputs/handbooks/assets/css/bootstrap.css +7118 -0
  364. data/demo/outputs/handbooks/assets/css/bootstrap.min.css +7 -0
  365. data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  366. data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  367. data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  368. data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  369. data/demo/outputs/handbooks/assets/img/ball_logo.bmp +0 -0
  370. data/demo/outputs/handbooks/assets/img/ball_logo.gif +0 -0
  371. data/demo/outputs/handbooks/assets/img/ball_logo.jpg +0 -0
  372. data/demo/outputs/handbooks/assets/js/bootstrap.js +2006 -0
  373. data/demo/outputs/handbooks/assets/js/bootstrap.min.js +7 -0
  374. data/demo/outputs/handbooks/assets/js/html5shiv.js +8 -0
  375. data/demo/outputs/handbooks/assets/js/jquery-1.10.2.min.js +6 -0
  376. data/demo/outputs/handbooks/assets/js/respond.min.js +6 -0
  377. data/demo/outputs/logs/README.txt +1 -0
  378. data/demo/outputs/saved_config/README.txt +1 -0
  379. data/demo/outputs/tables/README.txt +1 -0
  380. data/demo/outputs/tmp/README.txt +1 -0
  381. data/demo/procedures/checks.rb +11 -0
  382. data/demo/procedures/clear_util.rb +7 -0
  383. data/demo/procedures/collect.rb +18 -0
  384. data/demo/procedures/collect_util.rb +14 -0
  385. data/demo/procedures/cosmos_api_test.rb +293 -0
  386. data/demo/procedures/disconnect.rb +29 -0
  387. data/demo/procedures/example_test.rb +182 -0
  388. data/demo/procedures/plot_test.rb +8 -0
  389. data/demo/procedures/run_example_test.rb +3 -0
  390. data/demo/procedures/test.rb +51 -0
  391. data/demo/tools/CmdExtractor +15 -0
  392. data/demo/tools/CmdExtractor.bat +59 -0
  393. data/demo/tools/CmdSender +15 -0
  394. data/demo/tools/CmdSender.bat +59 -0
  395. data/demo/tools/CmdTlmServer +15 -0
  396. data/demo/tools/CmdTlmServer.bat +59 -0
  397. data/demo/tools/DataViewer +15 -0
  398. data/demo/tools/DataViewer.bat +59 -0
  399. data/demo/tools/ExampleTarget +15 -0
  400. data/demo/tools/ExampleTarget.bat +59 -0
  401. data/demo/tools/HandbookCreator +15 -0
  402. data/demo/tools/HandbookCreator.bat +61 -0
  403. data/demo/tools/Launcher +15 -0
  404. data/demo/tools/Launcher.bat +59 -0
  405. data/demo/tools/LimitsMonitor +15 -0
  406. data/demo/tools/LimitsMonitor.bat +59 -0
  407. data/demo/tools/OpenGLBuilder +15 -0
  408. data/demo/tools/OpenGLBuilder.bat +59 -0
  409. data/demo/tools/PacketViewer +15 -0
  410. data/demo/tools/PacketViewer.bat +59 -0
  411. data/demo/tools/Replay +15 -0
  412. data/demo/tools/Replay.bat +59 -0
  413. data/demo/tools/ScpiTarget +15 -0
  414. data/demo/tools/ScpiTarget.bat +59 -0
  415. data/demo/tools/ScriptRunner +15 -0
  416. data/demo/tools/ScriptRunner.bat +59 -0
  417. data/demo/tools/TableManager +15 -0
  418. data/demo/tools/TableManager.bat +59 -0
  419. data/demo/tools/TestRunner +15 -0
  420. data/demo/tools/TestRunner.bat +59 -0
  421. data/demo/tools/TlmExtractor +15 -0
  422. data/demo/tools/TlmExtractor.bat +59 -0
  423. data/demo/tools/TlmGrapher +15 -0
  424. data/demo/tools/TlmGrapher.bat +59 -0
  425. data/demo/tools/TlmViewer +15 -0
  426. data/demo/tools/TlmViewer.bat +59 -0
  427. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  428. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
  429. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
  430. data/demo/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  431. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  432. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
  433. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
  434. data/demo/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  435. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  436. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
  437. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
  438. data/demo/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  439. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  440. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
  441. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
  442. data/demo/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  443. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  444. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
  445. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
  446. data/demo/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  447. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  448. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
  449. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
  450. data/demo/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  451. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  452. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
  453. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
  454. data/demo/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  455. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  456. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
  457. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
  458. data/demo/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  459. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  460. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
  461. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
  462. data/demo/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  463. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -0
  464. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
  465. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
  466. data/demo/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  467. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  468. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
  469. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
  470. data/demo/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  471. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  472. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
  473. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
  474. data/demo/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  475. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  476. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
  477. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
  478. data/demo/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  479. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  480. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
  481. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
  482. data/demo/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  483. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  484. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
  485. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
  486. data/demo/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  487. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  488. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
  489. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
  490. data/demo/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  491. data/demo/userpath.txt +1 -0
  492. data/ext/cosmos/ext/array/array.c +111 -0
  493. data/ext/cosmos/ext/array/extconf.rb +13 -0
  494. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -0
  495. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -0
  496. data/ext/cosmos/ext/config_parser/config_parser.c +237 -0
  497. data/ext/cosmos/ext/config_parser/extconf.rb +13 -0
  498. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -0
  499. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -0
  500. data/ext/cosmos/ext/crc/crc.c +341 -0
  501. data/ext/cosmos/ext/crc/extconf.rb +13 -0
  502. data/ext/cosmos/ext/line_graph/extconf.rb +13 -0
  503. data/ext/cosmos/ext/line_graph/line_graph.c +501 -0
  504. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +13 -0
  505. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +261 -0
  506. data/ext/cosmos/ext/packet/extconf.rb +13 -0
  507. data/ext/cosmos/ext/packet/packet.c +339 -0
  508. data/ext/cosmos/ext/platform/extconf.rb +13 -0
  509. data/ext/cosmos/ext/platform/platform.c +82 -0
  510. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -0
  511. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -0
  512. data/ext/cosmos/ext/string/extconf.rb +13 -0
  513. data/ext/cosmos/ext/string/string.c +49 -0
  514. data/ext/cosmos/ext/structure/structure.c +894 -0
  515. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -0
  516. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -0
  517. data/ext/cosmos/ext/telemetry/extconf.rb +13 -0
  518. data/ext/cosmos/ext/telemetry/telemetry.c +306 -0
  519. data/install/Gemfile +5 -0
  520. data/install/Launcher +14 -0
  521. data/install/Launcher.bat +59 -0
  522. data/install/Rakefile +61 -0
  523. data/install/config/data/README.txt +1 -0
  524. data/install/config/data/crc.txt +133 -0
  525. data/install/config/system/system.txt +29 -0
  526. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
  527. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  528. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  529. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -0
  530. data/install/config/targets/COSMOS/screens/version.txt +19 -0
  531. data/install/config/targets/COSMOS/target.txt +9 -0
  532. data/install/config/targets/SYSTEM/README.txt +1 -0
  533. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -0
  534. data/install/config/tools/data_viewer/data_viewer.txt +4 -0
  535. data/install/config/tools/handbook_creator/default_toc.xsl +59 -0
  536. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -0
  537. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  538. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  539. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  540. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -0
  541. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  542. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  543. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  544. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  545. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  546. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  547. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  548. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  549. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -0
  550. data/install/config/tools/launcher/launcher.txt +39 -0
  551. data/install/config/tools/limits_monitor/README.txt +1 -0
  552. data/install/config/tools/opengl_builder/README.txt +1 -0
  553. data/install/config/tools/script_runner/script_runner.txt +3 -0
  554. data/install/config/tools/table_manager/README.txt +1 -0
  555. data/install/config/tools/test_runner/test_runner.txt +8 -0
  556. data/install/config/tools/tlm_extractor/README.txt +1 -0
  557. data/install/config/tools/tlm_grapher/README.txt +1 -0
  558. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -0
  559. data/install/lib/user_version.rb +3 -0
  560. data/install/outputs/handbooks/assets/css/bootstrap-theme.css +397 -0
  561. data/install/outputs/handbooks/assets/css/bootstrap-theme.min.css +7 -0
  562. data/install/outputs/handbooks/assets/css/bootstrap.css +7118 -0
  563. data/install/outputs/handbooks/assets/css/bootstrap.min.css +7 -0
  564. data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  565. data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  566. data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  567. data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  568. data/install/outputs/handbooks/assets/img/ball_logo.bmp +0 -0
  569. data/install/outputs/handbooks/assets/img/ball_logo.gif +0 -0
  570. data/install/outputs/handbooks/assets/img/ball_logo.jpg +0 -0
  571. data/install/outputs/handbooks/assets/js/bootstrap.js +2006 -0
  572. data/install/outputs/handbooks/assets/js/bootstrap.min.js +7 -0
  573. data/install/outputs/handbooks/assets/js/html5shiv.js +8 -0
  574. data/install/outputs/handbooks/assets/js/jquery-1.10.2.min.js +6 -0
  575. data/install/outputs/handbooks/assets/js/respond.min.js +6 -0
  576. data/install/outputs/logs/README.txt +1 -0
  577. data/install/outputs/saved_config/README.txt +1 -0
  578. data/install/outputs/tables/README.txt +1 -0
  579. data/install/outputs/tmp/README.txt +1 -0
  580. data/install/procedures/README.txt +1 -0
  581. data/install/tools/CmdExtractor +15 -0
  582. data/install/tools/CmdExtractor.bat +59 -0
  583. data/install/tools/CmdSender +15 -0
  584. data/install/tools/CmdSender.bat +59 -0
  585. data/install/tools/CmdTlmServer +15 -0
  586. data/install/tools/CmdTlmServer.bat +59 -0
  587. data/install/tools/DataViewer +15 -0
  588. data/install/tools/DataViewer.bat +59 -0
  589. data/install/tools/HandbookCreator +15 -0
  590. data/install/tools/HandbookCreator.bat +61 -0
  591. data/install/tools/Launcher +15 -0
  592. data/install/tools/Launcher.bat +59 -0
  593. data/install/tools/LimitsMonitor +15 -0
  594. data/install/tools/LimitsMonitor.bat +59 -0
  595. data/install/tools/OpenGLBuilder +15 -0
  596. data/install/tools/OpenGLBuilder.bat +59 -0
  597. data/install/tools/PacketViewer +15 -0
  598. data/install/tools/PacketViewer.bat +59 -0
  599. data/install/tools/Replay +15 -0
  600. data/install/tools/Replay.bat +59 -0
  601. data/install/tools/ScriptRunner +15 -0
  602. data/install/tools/ScriptRunner.bat +59 -0
  603. data/install/tools/TableManager +15 -0
  604. data/install/tools/TableManager.bat +59 -0
  605. data/install/tools/TestRunner +15 -0
  606. data/install/tools/TestRunner.bat +59 -0
  607. data/install/tools/TlmExtractor +15 -0
  608. data/install/tools/TlmExtractor.bat +59 -0
  609. data/install/tools/TlmGrapher +15 -0
  610. data/install/tools/TlmGrapher.bat +59 -0
  611. data/install/tools/TlmViewer +15 -0
  612. data/install/tools/TlmViewer.bat +59 -0
  613. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  614. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
  615. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
  616. data/install/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  617. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  618. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
  619. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
  620. data/install/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  621. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  622. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
  623. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
  624. data/install/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  625. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  626. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
  627. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
  628. data/install/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  629. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  630. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
  631. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
  632. data/install/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  633. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  634. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
  635. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
  636. data/install/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  637. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  638. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
  639. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
  640. data/install/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  641. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  642. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
  643. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
  644. data/install/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  645. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  646. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
  647. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
  648. data/install/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  649. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -0
  650. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
  651. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
  652. data/install/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  653. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  654. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
  655. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
  656. data/install/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  657. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  658. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
  659. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
  660. data/install/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  661. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  662. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
  663. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
  664. data/install/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  665. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  666. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
  667. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
  668. data/install/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  669. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  670. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
  671. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
  672. data/install/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  673. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  674. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
  675. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
  676. data/install/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  677. data/install/userpath.txt +1 -0
  678. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -0
  679. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -0
  680. data/lib/cosmos/config/config_parser.rb +324 -0
  681. data/lib/cosmos/conversions/conversion.rb +47 -0
  682. data/lib/cosmos/conversions/generic_conversion.rb +55 -0
  683. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -0
  684. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -0
  685. data/lib/cosmos/conversions/processor_conversion.rb +46 -0
  686. data/lib/cosmos/conversions/received_count_conversion.rb +33 -0
  687. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -0
  688. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -0
  689. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -0
  690. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -0
  691. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -0
  692. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -0
  693. data/lib/cosmos/conversions.rb +13 -0
  694. data/lib/cosmos/core_ext/array.rb +354 -0
  695. data/lib/cosmos/core_ext/class.rb +51 -0
  696. data/lib/cosmos/core_ext/cosmos_io.rb +29 -0
  697. data/lib/cosmos/core_ext/exception.rb +52 -0
  698. data/lib/cosmos/core_ext/file.rb +75 -0
  699. data/lib/cosmos/core_ext/hash.rb +28 -0
  700. data/lib/cosmos/core_ext/io.rb +75 -0
  701. data/lib/cosmos/core_ext/kernel.rb +38 -0
  702. data/lib/cosmos/core_ext/math.rb +119 -0
  703. data/lib/cosmos/core_ext/matrix.rb +146 -0
  704. data/lib/cosmos/core_ext/objectspace.rb +29 -0
  705. data/lib/cosmos/core_ext/range.rb +22 -0
  706. data/lib/cosmos/core_ext/socket.rb +32 -0
  707. data/lib/cosmos/core_ext/string.rb +310 -0
  708. data/lib/cosmos/core_ext/stringio.rb +24 -0
  709. data/lib/cosmos/core_ext/time.rb +446 -0
  710. data/lib/cosmos/core_ext.rb +18 -0
  711. data/lib/cosmos/ext/.keep +0 -0
  712. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -0
  713. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -0
  714. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -0
  715. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -0
  716. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -0
  717. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +317 -0
  718. data/lib/cosmos/gui/dialogs/about_dialog.rb +128 -0
  719. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -0
  720. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -0
  721. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -0
  722. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -0
  723. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -0
  724. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -0
  725. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +196 -0
  726. data/lib/cosmos/gui/dialogs/legal_dialog.rb +168 -0
  727. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -0
  728. data/lib/cosmos/gui/dialogs/progress_dialog.rb +262 -0
  729. data/lib/cosmos/gui/dialogs/pry_dialog.rb +161 -0
  730. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -0
  731. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -0
  732. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -0
  733. data/lib/cosmos/gui/dialogs/splash.rb +113 -0
  734. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -0
  735. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -0
  736. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -0
  737. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -0
  738. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +494 -0
  739. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -0
  740. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +460 -0
  741. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -0
  742. data/lib/cosmos/gui/line_graph/lines.rb +290 -0
  743. data/lib/cosmos/gui/line_graph/overview_graph.rb +459 -0
  744. data/lib/cosmos/gui/opengl/earth_model.rb +22 -0
  745. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -0
  746. data/lib/cosmos/gui/opengl/gl_light.rb +39 -0
  747. data/lib/cosmos/gui/opengl/gl_material.rb +29 -0
  748. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -0
  749. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -0
  750. data/lib/cosmos/gui/opengl/gl_viewer.rb +712 -0
  751. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -0
  752. data/lib/cosmos/gui/opengl/moon_model.rb +22 -0
  753. data/lib/cosmos/gui/opengl/opengl.rb +8 -0
  754. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -0
  755. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -0
  756. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -0
  757. data/lib/cosmos/gui/qt.rb +786 -0
  758. data/lib/cosmos/gui/qt_tool.rb +373 -0
  759. data/lib/cosmos/gui/text/completion.rb +381 -0
  760. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -0
  761. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -0
  762. data/lib/cosmos/gui/text/ruby_editor.rb +395 -0
  763. data/lib/cosmos/gui/utilities/screenshot.rb +25 -0
  764. data/lib/cosmos/gui/utilities/script_module_gui.rb +203 -0
  765. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -0
  766. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -0
  767. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -0
  768. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +149 -0
  769. data/lib/cosmos/interfaces/interface.rb +213 -0
  770. data/lib/cosmos/interfaces/linc_interface.rb +360 -0
  771. data/lib/cosmos/interfaces/serial_interface.rb +76 -0
  772. data/lib/cosmos/interfaces/simulated_target_interface.rb +128 -0
  773. data/lib/cosmos/interfaces/stream_interface.rb +156 -0
  774. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -0
  775. data/lib/cosmos/interfaces/tcpip_server_interface.rb +154 -0
  776. data/lib/cosmos/interfaces/udp_interface.rb +173 -0
  777. data/lib/cosmos/interfaces.rb +11 -0
  778. data/lib/cosmos/io/buffered_file.rb +11 -0
  779. data/lib/cosmos/io/cosmos_snmp.rb +50 -0
  780. data/lib/cosmos/io/io_multiplexer.rb +89 -0
  781. data/lib/cosmos/io/json_drb.rb +320 -0
  782. data/lib/cosmos/io/json_drb_object.rb +137 -0
  783. data/lib/cosmos/io/json_rpc.rb +365 -0
  784. data/lib/cosmos/io/posix_serial_driver.rb +145 -0
  785. data/lib/cosmos/io/raw_logger.rb +174 -0
  786. data/lib/cosmos/io/raw_logger_pair.rb +71 -0
  787. data/lib/cosmos/io/serial_driver.rb +85 -0
  788. data/lib/cosmos/io/stderr.rb +36 -0
  789. data/lib/cosmos/io/stdout.rb +36 -0
  790. data/lib/cosmos/io/tcpip_server.rb +532 -0
  791. data/lib/cosmos/io/udp_sockets.rb +152 -0
  792. data/lib/cosmos/io/win32_serial_driver.rb +147 -0
  793. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -0
  794. data/lib/cosmos/packet_logs/packet_log_reader.rb +439 -0
  795. data/lib/cosmos/packet_logs/packet_log_writer.rb +309 -0
  796. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -0
  797. data/lib/cosmos/packet_logs.rb +6 -0
  798. data/lib/cosmos/packets/binary_accessor.rb +921 -0
  799. data/lib/cosmos/packets/commands.rb +291 -0
  800. data/lib/cosmos/packets/limits.rb +263 -0
  801. data/lib/cosmos/packets/limits_response.rb +38 -0
  802. data/lib/cosmos/packets/packet.rb +699 -0
  803. data/lib/cosmos/packets/packet_config.rb +1034 -0
  804. data/lib/cosmos/packets/packet_item.rb +317 -0
  805. data/lib/cosmos/packets/packet_item_limits.rb +128 -0
  806. data/lib/cosmos/packets/structure.rb +386 -0
  807. data/lib/cosmos/packets/structure_item.rb +233 -0
  808. data/lib/cosmos/packets/telemetry.rb +317 -0
  809. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -0
  810. data/lib/cosmos/processors/processor.rb +71 -0
  811. data/lib/cosmos/processors/statistics_processor.rb +65 -0
  812. data/lib/cosmos/processors/watermark_processor.rb +44 -0
  813. data/lib/cosmos/processors.rb +6 -0
  814. data/lib/cosmos/script/extract.rb +115 -0
  815. data/lib/cosmos/script/script.rb +1493 -0
  816. data/lib/cosmos/script.rb +9 -0
  817. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -0
  818. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -0
  819. data/lib/cosmos/streams/length_stream_protocol.rb +140 -0
  820. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -0
  821. data/lib/cosmos/streams/serial_stream.rb +143 -0
  822. data/lib/cosmos/streams/stream.rb +57 -0
  823. data/lib/cosmos/streams/stream_protocol.rb +369 -0
  824. data/lib/cosmos/streams/tcpip_client_stream.rb +77 -0
  825. data/lib/cosmos/streams/tcpip_socket_stream.rb +139 -0
  826. data/lib/cosmos/streams/template_stream_protocol.rb +140 -0
  827. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -0
  828. data/lib/cosmos/system/system.rb +558 -0
  829. data/lib/cosmos/system/target.rb +178 -0
  830. data/lib/cosmos/system.rb +4 -0
  831. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +253 -0
  832. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +716 -0
  833. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -0
  834. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -0
  835. data/lib/cosmos/tools/cmd_tlm_server/api.rb +940 -0
  836. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -0
  837. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +63 -0
  838. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +496 -0
  839. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +241 -0
  840. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1008 -0
  841. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -0
  842. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +176 -0
  843. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +221 -0
  844. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -0
  845. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -0
  846. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -0
  847. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -0
  848. data/lib/cosmos/tools/data_viewer/data_viewer.rb +600 -0
  849. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +167 -0
  850. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -0
  851. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +149 -0
  852. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +360 -0
  853. data/lib/cosmos/tools/launcher/launcher.rb +184 -0
  854. data/lib/cosmos/tools/launcher/launcher_config.rb +167 -0
  855. data/lib/cosmos/tools/launcher/launcher_multitool.rb +41 -0
  856. data/lib/cosmos/tools/launcher/launcher_tool.rb +104 -0
  857. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +768 -0
  858. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -0
  859. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -0
  860. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +525 -0
  861. data/lib/cosmos/tools/replay/replay.rb +488 -0
  862. data/lib/cosmos/tools/replay/replay_server.rb +91 -0
  863. data/lib/cosmos/tools/script_runner/script_audit.rb +139 -0
  864. data/lib/cosmos/tools/script_runner/script_runner.rb +914 -0
  865. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -0
  866. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1859 -0
  867. data/lib/cosmos/tools/table_manager/table.rb +70 -0
  868. data/lib/cosmos/tools/table_manager/table_config.rb +764 -0
  869. data/lib/cosmos/tools/table_manager/table_item.rb +74 -0
  870. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -0
  871. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -0
  872. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -0
  873. data/lib/cosmos/tools/test_runner/test.rb +480 -0
  874. data/lib/cosmos/tools/test_runner/test_runner.rb +1157 -0
  875. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +338 -0
  876. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -0
  877. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1008 -0
  878. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -0
  879. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -0
  880. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -0
  881. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -0
  882. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +94 -0
  883. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -0
  884. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +180 -0
  885. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -0
  886. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -0
  887. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +173 -0
  888. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +177 -0
  889. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +409 -0
  890. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -0
  891. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -0
  892. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +320 -0
  893. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -0
  894. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -0
  895. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -0
  896. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -0
  897. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -0
  898. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -0
  899. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -0
  900. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -0
  901. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -0
  902. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -0
  903. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -0
  904. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1278 -0
  905. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -0
  906. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -0
  907. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +95 -0
  908. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -0
  909. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +66 -0
  910. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -0
  911. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -0
  912. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -0
  913. data/lib/cosmos/tools/tlm_viewer/screen.rb +458 -0
  914. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +544 -0
  915. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +287 -0
  916. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -0
  917. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +70 -0
  918. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +61 -0
  919. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -0
  920. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -0
  921. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -0
  922. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -0
  923. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -0
  924. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -0
  925. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -0
  926. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -0
  927. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -0
  928. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -0
  929. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -0
  930. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -0
  931. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -0
  932. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -0
  933. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -0
  934. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -0
  935. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -0
  936. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -0
  937. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -0
  938. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -0
  939. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -0
  940. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -0
  941. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -0
  942. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -0
  943. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -0
  944. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -0
  945. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -0
  946. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -0
  947. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -0
  948. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -0
  949. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -0
  950. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -0
  951. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -0
  952. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -0
  953. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -0
  954. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -0
  955. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -0
  956. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -0
  957. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -0
  958. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -0
  959. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -0
  960. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -0
  961. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -0
  962. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -0
  963. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -0
  964. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -0
  965. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -0
  966. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -0
  967. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -0
  968. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -0
  969. data/lib/cosmos/top_level.rb +596 -0
  970. data/lib/cosmos/utilities/crc.rb +166 -0
  971. data/lib/cosmos/utilities/csv.rb +83 -0
  972. data/lib/cosmos/utilities/logger.rb +137 -0
  973. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -0
  974. data/lib/cosmos/utilities/message_log.rb +74 -0
  975. data/lib/cosmos/utilities/quaternion.rb +258 -0
  976. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -0
  977. data/lib/cosmos/utilities/simulated_target.rb +99 -0
  978. data/lib/cosmos/utilities.rb +10 -0
  979. data/lib/cosmos/version.rb +12 -0
  980. data/lib/cosmos/win32/excel.rb +66 -0
  981. data/lib/cosmos/win32/win32.rb +387 -0
  982. data/lib/cosmos/win32/win32_main.rb +311 -0
  983. data/lib/cosmos.rb +63 -0
  984. data/roodi.yml +24 -0
  985. data/run_gui_tests.bat +32 -0
  986. data/spec/ccsds/ccsds_packet_spec.rb +67 -0
  987. data/spec/ccsds/ccsds_parser_spec.rb +148 -0
  988. data/spec/config/config_parser_spec.rb +322 -0
  989. data/spec/conversions/conversion_spec.rb +31 -0
  990. data/spec/conversions/generic_conversion_spec.rb +45 -0
  991. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -0
  992. data/spec/conversions/polynomial_conversion_spec.rb +40 -0
  993. data/spec/conversions/processor_conversion_spec.rb +45 -0
  994. data/spec/conversions/received_count_conversion_spec.rb +43 -0
  995. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -0
  996. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -0
  997. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -0
  998. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -0
  999. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -0
  1000. data/spec/core_ext/array_spec.rb +186 -0
  1001. data/spec/core_ext/class_spec.rb +36 -0
  1002. data/spec/core_ext/cosmos_io_spec.rb +77 -0
  1003. data/spec/core_ext/exception_spec.rb +91 -0
  1004. data/spec/core_ext/file_spec.rb +72 -0
  1005. data/spec/core_ext/hash_spec.rb +24 -0
  1006. data/spec/core_ext/io_spec.rb +46 -0
  1007. data/spec/core_ext/kernel_spec.rb +54 -0
  1008. data/spec/core_ext/math_spec.rb +116 -0
  1009. data/spec/core_ext/matrix_spec.rb +66 -0
  1010. data/spec/core_ext/objectspace_spec.rb +29 -0
  1011. data/spec/core_ext/range_spec.rb +21 -0
  1012. data/spec/core_ext/socket_spec.rb +32 -0
  1013. data/spec/core_ext/string_spec.rb +223 -0
  1014. data/spec/core_ext/stringio_spec.rb +21 -0
  1015. data/spec/core_ext/time_spec.rb +151 -0
  1016. data/spec/gui/line_graph/line_clip_spec.rb +322 -0
  1017. data/spec/install/config/system/system.txt +33 -0
  1018. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
  1019. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  1020. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  1021. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -0
  1022. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -0
  1023. data/spec/install/config/targets/COSMOS/target.txt +5 -0
  1024. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -0
  1025. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -0
  1026. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -0
  1027. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -0
  1028. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -0
  1029. data/spec/install/config/targets/INST/lib/sim_inst.rb +294 -0
  1030. data/spec/install/config/targets/INST/target.txt +10 -0
  1031. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -0
  1032. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -0
  1033. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  1034. data/spec/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +1 -0
  1035. data/spec/install/lib/README.txt +1 -0
  1036. data/spec/install/userpath.txt +1 -0
  1037. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -0
  1038. data/spec/interfaces/interface_spec.rb +128 -0
  1039. data/spec/interfaces/linc_interface_spec.rb +199 -0
  1040. data/spec/interfaces/serial_interface_spec.rb +56 -0
  1041. data/spec/interfaces/simulated_target_interface_spec.rb +128 -0
  1042. data/spec/interfaces/stream_interface_spec.rb +157 -0
  1043. data/spec/interfaces/tcpip_client_interface_spec.rb +54 -0
  1044. data/spec/interfaces/tcpip_server_interface_spec.rb +151 -0
  1045. data/spec/interfaces/udp_interface_spec.rb +175 -0
  1046. data/spec/io/buffered_file_spec.rb +113 -0
  1047. data/spec/io/io_multiplexer_spec.rb +94 -0
  1048. data/spec/io/json_drb_object_spec.rb +93 -0
  1049. data/spec/io/json_drb_spec.rb +293 -0
  1050. data/spec/io/json_rpc_spec.rb +264 -0
  1051. data/spec/io/raw_logger_pair_spec.rb +76 -0
  1052. data/spec/io/raw_logger_spec.rb +133 -0
  1053. data/spec/io/serial_driver_spec.rb +61 -0
  1054. data/spec/io/stderr_spec.rb +32 -0
  1055. data/spec/io/stdout_spec.rb +32 -0
  1056. data/spec/io/tcpip_server_spec.rb +322 -0
  1057. data/spec/io/udp_sockets_spec.rb +94 -0
  1058. data/spec/io/win32_serial_driver_spec.rb +88 -0
  1059. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -0
  1060. data/spec/packet_logs/packet_log_reader_spec.rb +408 -0
  1061. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -0
  1062. data/spec/packet_logs/packet_log_writer_spec.rb +209 -0
  1063. data/spec/packets/binary_accessor_spec.rb +2073 -0
  1064. data/spec/packets/commands_spec.rb +369 -0
  1065. data/spec/packets/limits_response_spec.rb +25 -0
  1066. data/spec/packets/limits_spec.rb +326 -0
  1067. data/spec/packets/packet_config_spec.rb +1620 -0
  1068. data/spec/packets/packet_item_limits_spec.rb +161 -0
  1069. data/spec/packets/packet_item_spec.rb +386 -0
  1070. data/spec/packets/packet_spec.rb +949 -0
  1071. data/spec/packets/structure_item_spec.rb +195 -0
  1072. data/spec/packets/structure_spec.rb +419 -0
  1073. data/spec/packets/telemetry_spec.rb +535 -0
  1074. data/spec/processors/new_packet_log_processor_spec.rb +39 -0
  1075. data/spec/processors/processor_spec.rb +55 -0
  1076. data/spec/processors/statistics_processor_spec.rb +60 -0
  1077. data/spec/processors/watermark_processor_spec.rb +51 -0
  1078. data/spec/script/script_spec.rb +650 -0
  1079. data/spec/spec_helper.rb +138 -0
  1080. data/spec/streams/burst_stream_protocol_spec.rb +32 -0
  1081. data/spec/streams/fixed_stream_protocol_spec.rb +110 -0
  1082. data/spec/streams/length_stream_protocol_spec.rb +297 -0
  1083. data/spec/streams/preidentified_stream_protocol_spec.rb +118 -0
  1084. data/spec/streams/serial_stream_spec.rb +105 -0
  1085. data/spec/streams/stream_protocol_spec.rb +332 -0
  1086. data/spec/streams/stream_spec.rb +29 -0
  1087. data/spec/streams/tcpip_client_stream_spec.rb +54 -0
  1088. data/spec/streams/tcpip_socket_stream_spec.rb +146 -0
  1089. data/spec/streams/template_stream_protocol_spec.rb +151 -0
  1090. data/spec/streams/terminated_stream_protocol_spec.rb +123 -0
  1091. data/spec/system/system_spec.rb +645 -0
  1092. data/spec/system/target_spec.rb +248 -0
  1093. data/spec/tools/cmd_tlm_server/api_spec.rb +1090 -0
  1094. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -0
  1095. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +82 -0
  1096. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +406 -0
  1097. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +418 -0
  1098. data/spec/tools/cmd_tlm_server/commanding_spec.rb +123 -0
  1099. data/spec/tools/cmd_tlm_server/connections_spec.rb +147 -0
  1100. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +317 -0
  1101. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +228 -0
  1102. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -0
  1103. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +104 -0
  1104. data/spec/tools/cmd_tlm_server/routers_spec.rb +196 -0
  1105. data/spec/top_level/top_level_spec.rb +320 -0
  1106. data/spec/utilities/crc_spec.rb +45 -0
  1107. data/spec/utilities/csv_spec.rb +97 -0
  1108. data/spec/utilities/logger_spec.rb +102 -0
  1109. data/spec/utilities/message_log_spec.rb +89 -0
  1110. data/spec/utilities/quaternion_spec.rb +107 -0
  1111. data/spec/utilities/ruby_lex_utils_spec.rb +86 -0
  1112. data/tasks/manifest.rake +22 -0
  1113. data/tasks/spec.rake +23 -0
  1114. metadata +1566 -0
@@ -0,0 +1,1166 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: ascii-8bit
3
+
4
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
5
+ # All Rights Reserved.
6
+ #
7
+ # This program is free software; you can modify and/or redistribute it
8
+ # under the terms of the GNU General Public License
9
+ # as published by the Free Software Foundation; version 3 with
10
+ # attribution addendums as found in the LICENSE.txt
11
+
12
+ # This file converts OASIS CSTOL files to COSMOS scripts
13
+
14
+ require 'cosmos'
15
+ require 'cosmos/script'
16
+ require 'cosmos/system'
17
+
18
+ # TODO: capitalized string from ask statement may not match expression (gmi.rb:70)
19
+ # TODO: handle V, C other units specifications...
20
+ # TODO: handle unary operators (-1, not - 1) => although Ruby handles this fine
21
+
22
+ def parse_cmd(words)
23
+ # Convert the part that's common to all commands
24
+ str = "cmd(\"" + words[1].upcase + " " + words[2].upcase
25
+
26
+ # If it has parameters
27
+ if words.length == 5
28
+ str = str + " " + parse_id(words[4], true, false, true, true)
29
+
30
+ elsif words.length > 5
31
+ str = str + " with"
32
+
33
+ # Join the rest of the list and remove the commas
34
+ args = words[4..-1].join(" ").split(",")
35
+ args.length.times do |i|
36
+ # Only prepend comma if it is not the first argument pair
37
+ if i != 0
38
+ str = str + ","
39
+ end
40
+ params = args[i].split(" ")
41
+
42
+ str = str + " " + params[0].upcase + " " + parse_id(params[1],true, false, true)
43
+ end
44
+ end
45
+ str = str + "\")"
46
+ end
47
+
48
+ def parse_cond_operator(op, is_set_tlm = false)
49
+ str = ""
50
+ # Convert CSTOL operators into Ruby operators
51
+ if op.match("/=")
52
+ str = " != "
53
+ elsif op.match(">=")
54
+ str = " >= "
55
+ elsif op.match("<=")
56
+ str = " <= "
57
+ elsif op.match(">")
58
+ str = " > "
59
+ elsif op.match("<")
60
+ str = " < "
61
+ elsif op.match("=")
62
+ str = " == "
63
+ if is_set_tlm
64
+ str = " = "
65
+ end
66
+ elsif op.match(/VS/i)
67
+ str = " == "
68
+ end
69
+ str
70
+ end
71
+
72
+ def parse_expression(vars, quoted=false, in_eval=false)
73
+ i=0
74
+ str = ""
75
+ finished = false
76
+ # Make sure there are spaces around the operators
77
+ if vars.length > 1
78
+ vars = vars.join(" ")
79
+ else
80
+ vars = vars.to_s
81
+ end
82
+ vars = vars.gsub("(", " ( ")
83
+ vars = vars.gsub(")", " ) ")
84
+ vars = vars.gsub("+", " + ")
85
+ vars = vars.gsub("-", " - ")
86
+ vars = vars.gsub("*", " * ")
87
+ vars = vars.gsub("==", " == ")
88
+ vars = vars.gsub("/=", " /= ")
89
+ vars = vars.gsub("<=", " <= ")
90
+ vars = vars.gsub(">=", " >= ")
91
+ vars = vars.gsub(";", " ; ")
92
+ # Add spaces around single character operators (/ < >)
93
+ offset = 0
94
+ while((idx = vars.index(/[\/<>][^=]/,offset)) != nil)
95
+ # Add space before and after operator and increment offset
96
+ vars = vars.insert(idx," ")
97
+ vars = vars.insert(idx+2," ")
98
+ offset = idx + 2
99
+ end
100
+ # Add spaces around single = operator (not /=, ==, <=, or >=)
101
+ offset = 0
102
+ while((idx = vars.index(/[^\/=<>]=[^=]/,offset)) != nil)
103
+ # Add space before and after operator and increment offset
104
+ vars = vars.insert(idx+1," ")
105
+ vars = vars.insert(idx+3," ")
106
+ offset = idx + 3
107
+ end
108
+
109
+ # Split the expression on spaces
110
+ vars = vars.split(" ")
111
+
112
+ last = nil
113
+ while (vars[i] != nil and finished != true)
114
+ case vars[i].tr('[]"', '')
115
+ when "("
116
+ if quoted == false
117
+ str = str + "("
118
+ end
119
+
120
+ when ")"
121
+ if quoted == false
122
+ str = str + ")"
123
+ end
124
+
125
+ when /\bOR\b/i
126
+ str = str + " || "
127
+
128
+ when /\bAND\b/i
129
+ str = str + " && "
130
+
131
+ when /\b\$[0-9]\b/ # $0, $1, etc are function inputs
132
+ str = str + "inVar" + vars[0][1..-1]
133
+
134
+ when /\$/ # $varName
135
+ str = str + parse_id(vars[i].tr('[]"', ''),quoted,in_eval)
136
+
137
+ when /RAW/i
138
+ if quoted
139
+ str = str + "tlm_raw('" + parse_tlm_item(vars[i+1..i+2]) + "')"
140
+ else
141
+ str = str + "tlm_raw(\"" + parse_tlm_item(vars[i+1..i+2]) + "\")"
142
+ end
143
+ i = i + 2
144
+ when /x#[0-9a-fA-F]+/i # Hex number
145
+ str = str + parse_id(vars[i].tr('[]"', ''),quoted)
146
+ when /b#[0-1]+/i # Binary number
147
+ str = str + parse_id(vars[i].tr('[]"', ''),quoted)
148
+
149
+ when /(\AVS\z|=|\/=|>|>=|<|<=)/ # Conditional operator
150
+ str = str + parse_cond_operator(vars[i])
151
+ when /(\+|-|\*|\/)/ # Arithmetic operator
152
+ str = str + " " + vars[i].tr('[]"', '') + " "
153
+
154
+ # Verfies Number followed immediately by units
155
+ when /\dDN\z|\ddn\z|\dDEG\z|\ddeg\z|\dRAD\z|\drad\z|\dV\z|\dA\z|\dv\z|\da\z|\dc\z|\dC\z|\df\z|\dF\z|\dDPS\z|\dM\z|\dMPS\z|\dm\z|\dmps\z/ # Checks for decimal/degrees/volts and amps
156
+ temp = vars[i].tr('[]"', '')
157
+ temp = temp.gsub(/DN\z|dn\z|DEG\z|deg\z|RAD\z|rad\z|V\z|A\z|v\z|a\z|c\z|C\z|f\z|F\z|DPS\z|M\z|MPS\z|m\z|mps\z/, '')
158
+ if temp.match(/[a-zA-Z]/)
159
+ str = str + parse_id(vars[i].tr('[]"', ''),quoted)
160
+ else
161
+ str = str + temp
162
+ end
163
+
164
+ # Verifies units are standalone
165
+ when last != '=' && /DN\z|dn\z|DEG\z|deg\z|RAD\z|rad\z|V\z|A\z|v\z|a\z|c\z|C\z|f\z|F\z|DPS\z|M\z|MPS\z|m\z|mps\z/ # Checks for decimal/degrees/volts and amps
166
+ # Verify it is not a target
167
+ if(vars[i] != nil and $targetList.include?(vars[i].tr('[]"', '').upcase))
168
+ if quoted
169
+ str = str + "tlm('" + parse_tlm_item(vars[i..i+1]) + "')"
170
+ else
171
+ str = str + "tlm(\"" + parse_tlm_item(vars[i..i+1]) + "\")"
172
+ end
173
+ i = i + 1
174
+ else
175
+ str = str + parse_id(vars[i].tr('[]"', ''),quoted)
176
+ end
177
+ when /[0-9]*:[0-9]*:[0-9]+/ # Timestamp
178
+ str = str + parse_time(vars[i].tr('[]"', ''))
179
+
180
+ when /\dE/ # Floating point
181
+ temp_number = vars[i].tr('E', '').to_f * 10**vars[i+2].to_f
182
+ str = str + "#{temp_number}"
183
+ finished = true
184
+ when /\d/ # Decimal number
185
+ str = str + parse_id(vars[i].tr('[]"', ''),quoted)
186
+
187
+ when /\w/ # Must stay low on the list to avoid matching other items
188
+ # Check this keyword against the list of targets
189
+ if(vars[i] != nil and $targetList.include?(vars[i].tr('[]"', '').upcase))
190
+ if quoted
191
+ str = str + "tlm('" + parse_tlm_item(vars[i..i+1]) + "')"
192
+ else
193
+ str = str + "tlm(\"" + parse_tlm_item(vars[i..i+1]) + "\")"
194
+ end
195
+ i += 1
196
+
197
+ # If it is not a target, then it must be a string or other identifier
198
+ else
199
+ str = str + parse_id(vars[i].tr('[]"', ''), quoted, false, false, false, false)
200
+ end
201
+
202
+ # Other cases not handled
203
+ # else
204
+ # str = str + " # TODO unsupported: " + vars[i].tr('[]"', '')
205
+ end # case
206
+ last = vars[i].tr('[]"', '')
207
+ i += 1
208
+ end # while
209
+ str
210
+ end
211
+
212
+ def parse_id(id, quoted=false, in_eval=false, in_command=false, in_single_command = false, units = true)
213
+ str = ""
214
+ # Remove parentheses
215
+ if id.index("(") == 0
216
+ id = id[1..-1]
217
+ end
218
+ if id.index(")") == id.length - 1
219
+ id = id[0..-2]
220
+ end
221
+
222
+ if id.match(/\$\w/) # $varName
223
+ id[1,1] = id[1,1].downcase
224
+ if quoted and !in_eval
225
+ str = "'\#{" + id[1..-1] + "}'"
226
+ else
227
+
228
+ str = id[1..-1]
229
+ end
230
+
231
+ elsif (id.match(/^"/) != nil and
232
+ id.match(/"$/) != nil) # Starts and ends with a quote
233
+ if quoted
234
+ str = "'" + id.upcase[1..-2] + "'"
235
+ else
236
+ str = id.upcase
237
+ end
238
+
239
+ elsif id.match(/x#[A-Fa-f0-9]+DN/i) # Hex number with DN
240
+ str = "0x" + id[2..-3]
241
+
242
+ elsif id.match(/x#[0-9a-fA-F]+/i) # Hex number
243
+ str = "0x" + id[2..-1]
244
+
245
+ elsif id.match(/b#[0-1]+DN/i) # Binary number with DN
246
+ str = "0b" + id[2..-3]
247
+
248
+ elsif id.match(/b#[0-1]+/i) # Binary number
249
+ str = "0b" + id[2..-1]
250
+
251
+ elsif id.match(/\d+DN/i) or id.match(/-\d+DN/i) # Decimal number with DN
252
+ str = id[0..-3]
253
+ elsif id.match(/\AVS\z|\Avs\z/)
254
+ str = str + " == "
255
+
256
+ # Verifies extensions with a decimal number followed by a unit
257
+ elsif units && id.match(/\dDN|\ddn|\dDEG|\ddeg|\dRAD|\drad|\dV|\dA|\dv|\da|\dc|\dC|\df|\dF|\dDPS|\dM\z|\dMPS\z|\dm\z|\dmps\z/)
258
+ temp = id.gsub(/DN\z|dn\z|DEG\z|deg\z|RAD\z|rad\z|V\z|A\z|v\z|a\z|c\z|C\z|f\z|F\z|DPS\z|M\z|MPS\z|m\z|mps\z/, '')
259
+ if in_command and temp.match(/[a-zA-Z]/)
260
+ str = str + "\'" + id.upcase + "\'"
261
+ # if filtered words still contain letter, then it is not a number
262
+ elsif temp.match(/[a-zA-Z]/)
263
+ str = str + id
264
+ else
265
+ str = str + temp
266
+ end
267
+ elsif id.match(/\dE\+\d/) # Floating point
268
+ id = id.gsub('+', ' + ')
269
+ temp_num_arr = id.split(' ')
270
+ temp_number = temp_num_arr[0].tr('E', '').to_f * 10**temp_num_arr[2].to_f
271
+ str = str + "#{temp_number}"
272
+ elsif id.match(/\A\d/) or id.match(/\A-\d/) # starts with Decimal number
273
+ str = id
274
+ # Verifies extensions with a decimal number followed by a unit
275
+ # that is by itself separated by whitespace
276
+ elsif units && id.match(/\ADN\z|\Adn\z|\ADEG\z|\Adeg\z|\ARAD\z|\Arad\z|\AV\z|\AA\z|\Av\z|\Aa\z|\Ac\z|\AC\z|\Af\z|\AF\z|\ADPS\z|\AM\z|\AMPS\z|\Am\z|\Amps\z/)
277
+ temp = id.gsub(/DN\z|dn\z|DEG\z|deg\z|RAD\z|rad\z|V\z|A\z|v\z|a\z|c\z|C\z|f\z|F\z|DPS\z|M\z|MPS\z|m\z|mps\z/, '')
278
+ if in_command
279
+ str = str + "\'" + id.upcase + "\'"
280
+ else
281
+ str = str + temp
282
+ end
283
+ elsif id.match(/\w/) # Any other word
284
+ # If it's quoted still need quotes for comparison
285
+ if in_single_command
286
+ str = id.upcase
287
+ elsif quoted
288
+ str = "\'" + id.upcase + "\'"
289
+ else
290
+ str = "\"" + id.tr('\\', '').upcase + "\""
291
+ end
292
+ else
293
+ str = id
294
+ end
295
+ end
296
+
297
+ def parse_macro(words)
298
+ # Call the macro with the first parameter as binding
299
+ str = words[0] + "(binding"
300
+
301
+ # Add all arguments in a loop
302
+ (words.length-1).times do |i|
303
+ str = str + ", " + parse_id(words[i+1])
304
+ end
305
+ str = str + ")"
306
+ end
307
+
308
+ def parse_time(time)
309
+ # If this is a timestamp
310
+ if time.match(/[0-9]*:[0-9]*:[0-9]+/) # Timestamp
311
+ # Split on colons to separate hours/minutes/seconds
312
+ tok = time.split(":")
313
+
314
+ # If the first two tokens are empty, set to 0 (ex. ::10 is a valid time)
315
+ if tok[0] == ""
316
+ tok[0] = "0"
317
+ end
318
+ if tok[1] == ""
319
+ tok[1] = "0"
320
+ end
321
+
322
+ # Compute the number of seconds
323
+ secs = (3600*tok[0].to_i + 60*tok[1].to_i + tok[2].to_i).to_s
324
+
325
+ # Other cases not handled
326
+ else
327
+ secs = "# TODO unsupported: " + time
328
+ end
329
+ end
330
+
331
+ def parse_tlm_item(tlm)
332
+ # Remove preceeding parentheses
333
+ if tlm[0].index("(") == 0
334
+ tlm[0] = tlm[0][1..-1]
335
+ end
336
+
337
+ # If there are two telemetry items (target and mnemonic)
338
+ if tlm.length == 2
339
+ begin
340
+ str = tlm[0].tr('[]"', '').upcase + " " + Cosmos::System.telemetry.newest_packet(tlm[0].tr('[]"', '').upcase,tlm[1].tr('[]"', '').upcase).packet_name + " " + tlm[1].tr('[]"', '').upcase
341
+ rescue
342
+ str = "# TODO unknown TLM: " + tlm.to_s
343
+ end
344
+
345
+ # Other cases not handled
346
+ else
347
+ str = "# TODO unsupported: " + tlm.to_s
348
+ end
349
+ end
350
+
351
+ def parse_line(full_line, loc_out_file, wait_check_flag=false)
352
+ line = ""
353
+ comment = ""
354
+ str = ""
355
+
356
+ # Handle any empty lines
357
+ if full_line == nil || full_line.strip == ""
358
+ loc_out_file.puts full_line
359
+ return
360
+ end
361
+
362
+ # Detemine the location of any comments in this line
363
+ commentIdx = full_line.index(";")
364
+
365
+ # If we found a comment operator
366
+ if commentIdx != nil
367
+ # If there's text to pull out before the ;
368
+ if commentIdx != 0
369
+ line = full_line[0..(commentIdx-1)].rstrip
370
+ end
371
+ # If there's text to pull out after the ;
372
+ if commentIdx != full_line.length - 1
373
+ comment = "#" + full_line[(commentIdx+1)..-1]
374
+ end
375
+ else
376
+ # No comment operator so use the entire line
377
+ line = full_line.rstrip
378
+ end
379
+
380
+ # Determine the number of spaces to indent this line by finding the first
381
+ # non-whitespace character
382
+ numSpaces = full_line.index(/\S/)
383
+ numSpaces.times {str = str + " "}
384
+
385
+ # Handle lines with only comments
386
+ if line == nil or line == ""
387
+ loc_out_file.puts str + comment
388
+ return
389
+ end
390
+
391
+ # Redundant substitutions are done for comparators
392
+ line = line.gsub("==", " == ")
393
+ line = line.gsub("/=", " /= ")
394
+ line = line.gsub("<=", " <= ")
395
+ line = line.gsub(">=", " >= ")
396
+ line = line.gsub(/(\w)(=)(\w)/, '\1 = \3')
397
+ line = line.gsub(/(\w)(=)(\d)/, '\1 = \3')
398
+ line = line.gsub(/(\w)(=)(-)/, ' = -')
399
+ line = line.gsub(/(\w)(=)(\s)/, '\1 = \3')
400
+ line = line.gsub(/(\s)(=)(\w)/, '\1 = \3')
401
+
402
+ # Split the line into tokens by spaces, if no spaces between equals sign add them
403
+ words = line.split(" ")
404
+
405
+ # Check for old CSTOL labels which have a trailing colon
406
+ if words[0][-1] == ':'
407
+ loc_out_file.puts "# #{line}"
408
+ return
409
+ end
410
+
411
+ # if wait_check flag is activated ensure that the next line is a check otherwise infinite loop
412
+ if wait_check_flag and words[0].downcase != 'check'
413
+ return ""
414
+ end
415
+
416
+ case words[0].downcase
417
+ when "endproc"
418
+ if $inFunction
419
+ str += "end\n#{$inFunction}(#{$inFunctionParams.join(',')})" if $inFunction
420
+ $inFunction = nil
421
+ end
422
+
423
+ when "ask"
424
+ str = str + parse_id(words[1]) + " = ask(" + words[2]
425
+ (words.length-3).times do |i|
426
+ str = str + " " + words[i+3]
427
+ end
428
+ str = str + ")"
429
+
430
+ when "begin"
431
+ # Don't need to do anything with this keyword, so exit unless there's
432
+ # a comment to print
433
+ if comment == ""
434
+ return
435
+ end
436
+
437
+ when "check"
438
+
439
+ # If the next word starts with the raw keyword
440
+ if words[1].match(/\A(raw)/i)
441
+ # If the line contains a colon, parse out the range and use tolerance
442
+ if line.match(":")
443
+ vsIdx = line.index("VS")
444
+ vsIdx = line.index("vs") if vsIdx == nil
445
+ colIdx = line.index(":")
446
+ lowRange = line[(vsIdx+2)..(colIdx-1)]
447
+ highRange = line[(colIdx+1)..-1]
448
+ str = str + "check_tolerance_raw(\"" + parse_tlm_item(words[2..3]) +
449
+ "\", ((" + parse_expression([highRange],false) + ") + (" +
450
+ parse_expression([lowRange],false) +
451
+ ")) / 2," + " ((" + parse_expression([highRange],false) + ") - (" +
452
+ parse_expression([lowRange],false) + "))/2)"
453
+ else
454
+ if wait_check_flag
455
+ if @wait_match_string == "\"" + parse_tlm_item(words[2..3]) +
456
+ parse_cond_operator(words[4]) + parse_expression(words[5..-1],true) + "\""
457
+ @verify_wait_check = true
458
+ # exit function with true flag, and skips check statement next parse
459
+ return " "
460
+ end
461
+ end
462
+ str = str + "check_raw(\"" + parse_tlm_item(words[2..3]) +
463
+ parse_cond_operator(words[4]) + parse_expression(words[5..-1],true) +
464
+ "\")"
465
+ end
466
+
467
+ # If the next word starts with a variable indicator
468
+ elsif words[1].match(/\$/)
469
+ # If the line contains a colon, make check expression formatted to
470
+ # check against a defined range
471
+ if line.match(":")
472
+ vsIdx = line.index("VS")
473
+ vsIdx = line.index("vs") if vsIdx == nil
474
+ colIdx = line.index(":")
475
+ lowRange = line[(vsIdx+2)..(colIdx-1)]
476
+ highRange = line[(colIdx+1)..-1]
477
+ str = str + "check_expression(\"(" +
478
+ parse_expression([words[1]],true) + " >= (" +
479
+ parse_expression([lowRange],true) + ")) and (" +
480
+ parse_expression([words[1]],true) + " <= (" +
481
+ parse_expression([highRange],true) + "))\")"
482
+ else
483
+ str = str + "check_expression(\"" +
484
+ parse_expression(words[1..-1],true) + "\")"
485
+ end
486
+
487
+ # If the next word doesn't start with raw
488
+ elsif words[1].match(/\w/)
489
+ # If the line contains a colon, parse out the range and use tolerance
490
+ if line.match(":")
491
+ vsIdx = line.index("VS")
492
+ vsIdx = line.index("vs") if vsIdx == nil
493
+ colIdx = line.index(":")
494
+ lowRange = line[(vsIdx+2)..(colIdx-1)]
495
+ highRange = line[(colIdx+1)..-1]
496
+ str = str + "check_tolerance(\"" +
497
+ parse_tlm_item(words[1..2]) + "\", ((" +
498
+ parse_expression([highRange],false) + ") + (" +
499
+ parse_expression([lowRange],false) + ")) / 2, ((" +
500
+ parse_expression([highRange],false) + ") - (" +
501
+ parse_expression([lowRange],false) + "))/2)"
502
+ else
503
+ if (words[3])
504
+ # if single integer comparison or variable, just parse single (for negative integer cases)
505
+ if words.length <= 6
506
+ if wait_check_flag
507
+ if @wait_match_string == "\"" + parse_tlm_item(words[1..2]) + parse_cond_operator(words[3]) + parse_id(words[4],true) + "\""
508
+ @verify_wait_check = true
509
+ # exit function with true flag, and skips check statement next parse
510
+ return ""
511
+ end
512
+ else
513
+ str = str + "check(\"" + parse_tlm_item(words[1..2]) +
514
+ parse_cond_operator(words[3]) + parse_id(words[4],true) +
515
+ "\")"
516
+ end
517
+ else
518
+ str = str + "check(\"" + parse_tlm_item(words[1..2]) +
519
+ parse_cond_operator(words[3]) + parse_expression(words[4..-1],true) +
520
+ "\")"
521
+ end
522
+ else
523
+ str = str + "check(\"" + parse_tlm_item(words[1..2]) +
524
+ "\")"
525
+ end
526
+ end
527
+ end
528
+
529
+ when "cmd"
530
+ str = str + parse_cmd(words)
531
+
532
+ when "set"
533
+ str = str + parse_cmd(words)
534
+
535
+ when "declare"
536
+ # If the next word is input, ignore the line
537
+ if words.length >= 2 and words[1].match(/input/i)
538
+ if $inFunction
539
+ $inFunctionParams << "\"#{words[4].upcase}\""
540
+ else
541
+ str = str + "# SCL Ignored: " + line
542
+ end
543
+
544
+ # If it is a defined enum list, ignore definitions
545
+ elsif (words.length >= 6 and
546
+ words[4..-1].join(" ").match(/[A-Z]+\s+[A-Z]+(,\s*[A-Z]+)+/i))
547
+ str = str + parse_id(words[2]) + " " + words[3] + " " +
548
+ parse_id(words[4])
549
+
550
+ # If it is a defined range (one and only one colon), ignore range
551
+ elsif (words.length >= 6 and
552
+ words[4..-1].join(" ").count(":") == 1)
553
+ str = str + parse_id(words[2]) + " " + words[3] + " " +
554
+ parse_id(words[4])
555
+
556
+ # Parse the expression
557
+ elsif words.length >= 5
558
+ str = str + parse_id(words[2]) + " " + words[3] + " " +
559
+ parse_expression(words[4..-1])
560
+
561
+ else
562
+ str = str + "# TODO unsupported: " + line
563
+ end
564
+
565
+ when "else"
566
+ # Only an else
567
+ if words.length == 1
568
+ str = str + "else"
569
+
570
+ # 'Else if' statement
571
+ elsif words.length >= 2 and words[1].match(/if/i)
572
+ str = str + "elsif " + parse_expression(words[2..-1])
573
+
574
+ # Other cases not handled
575
+ else
576
+ str = str + "# TODO unsupported: " + line
577
+ end
578
+
579
+ when "end"
580
+ # End of an if statement
581
+ if words[1].match(/if/i)
582
+ str = str + "end"
583
+
584
+ # End of a procedure with arguments
585
+ elsif words[1].match(/proc/i) && $inFunction
586
+ str += "end\n#{$inFunction}(#{$inFunctionParams.join(',')})"
587
+
588
+ # End of a procedure without arguments
589
+ elsif words[1].match(/proc/i) && !$inFunction
590
+ str = str + "# SCL Ignored: " + line
591
+
592
+ # End of a loop
593
+ elsif words[1].match(/loop/i)
594
+ str = str + "end"
595
+
596
+ # End of a macro
597
+ elsif words[1].match(/macro/i)
598
+ str = str + "# SCL Ignored: " + line
599
+
600
+ # Other cases not handled
601
+ else
602
+ str = str + "# TODO unsupported: " + line
603
+ end
604
+
605
+ when "endif"
606
+ str = str + "end"
607
+
608
+ when "escape"
609
+ str = str + "break"
610
+
611
+ when "goto"
612
+ # Ignore typical goto for skipping the header section
613
+ if words.length == 2 and words[1].match(/start_here/i)
614
+ str = str + "# SCL Ignored: " + line
615
+
616
+ # Other cases not handled
617
+ else
618
+ str = str + "# TODO unsupported: " + line
619
+ end
620
+
621
+ when "if"
622
+ str = str + "if " + parse_expression(words[1..-1])
623
+
624
+ when "let"
625
+ # If we're assigning a telemetry point
626
+ if $targetList.include?(words[1].upcase)
627
+ # If there is no space between the equal sign reparse string
628
+ str = str + "set_tlm(\"" + parse_tlm_item(words[1..2]) +
629
+ parse_cond_operator(words[3], true) + parse_id(words[4],true) + "\")"
630
+ else
631
+ # there's no spaces between declaration
632
+ str = str + parse_id(words[1]) + " " + words[2] + " " +
633
+ parse_expression(words[3..-1])
634
+ end
635
+
636
+ when "lock"
637
+ # Ignore database commands
638
+ str = str + "# SCL Ignored: " + line
639
+
640
+ when "loop"
641
+ # TODO not sure if this is wise, for some files the loop is infinite and
642
+ # there's no exist case
643
+ if words[1] == nil
644
+ str = str + "# TODO Possible inifinite loop case check script file" +
645
+ "\n" + str + "while(true)"
646
+ else
647
+ str = str + words[1] + ".times do |i|"
648
+ end
649
+
650
+ when "macro"
651
+ str = str + ("# SCL Ignored: " + line)
652
+ $macroName = words[1].upcase
653
+ $macroNumArgs = 0
654
+ i = 2
655
+ while ((nextWord = words[i]) != nil)
656
+ case nextWord
657
+ when /\$/
658
+ $macroNumArgs = $macroNumArgs + 1
659
+ end
660
+ i = i + 1
661
+ end
662
+
663
+ when "new_mac"
664
+ # Ignore OASIS commands
665
+ str = str + "# SCL Ignored: " + line
666
+
667
+ when "new_proc"
668
+ # Ignore OASIS commands
669
+ str = str + "# SCL Ignored: " + line
670
+
671
+ when "proc"
672
+ # Process procedures without arguments as scripts
673
+ if words.length == 2
674
+ # Set a global so we know how to close this function
675
+ $inFunction = nil
676
+
677
+ # Process procedures with arguments as functions
678
+ else
679
+ # Split the list of arguments on commas
680
+ listWords = words[2..-1].join().split(",")
681
+
682
+ # Print the function name and the first argument
683
+ str = str + "def " + words[1].downcase + "(" + parse_id(listWords[0])
684
+
685
+ # Print the remaining arguments preceeded by a separator
686
+ (listWords.length-1).times do |i|
687
+ str = str + ", " + parse_id(listWords[i+1])
688
+ end
689
+ str = str + ")"
690
+
691
+ # Set a global so we know how to close this function
692
+ $inFunction = words[1].downcase
693
+ $inFunctionParams = []
694
+ end
695
+
696
+ when "record"
697
+ # Record messages without a label
698
+ if words.length == 2 and words[1].match(/messages/i)
699
+ str = str + "start_logging()\n"
700
+ numSpaces.times {str = str + " "}
701
+ str = str + "start_new_server_message_log()"
702
+
703
+ # Record message with a label
704
+ elsif words.length == 3 and words[1].match(/messages/i)
705
+ str = str + "set_log_label(" + words[2] + ")\n"
706
+ numSpaces.times {str = str + " "}
707
+ str = str + "start_logging()\n"
708
+ numSpaces.times {str = str + " "}
709
+ str = str + "start_new_server_message_log()"
710
+
711
+ # Other cases not handled
712
+ else
713
+ str = str + "# TODO unsupported: " + line
714
+ end
715
+
716
+ when "restore"
717
+ # Ignore database commands
718
+ str = str + "# SCL Ignored: " + line
719
+ when "run"
720
+ temp = words[1..-1].to_s
721
+ temp = temp.tr(',[]\"', '')
722
+ # removes the quotes symbol remnants
723
+ temp = temp.gsub('\\', '')
724
+ temp = temp.gsub(/\\\z/, '')
725
+ str = str + "system(\'" + temp + "\')"
726
+ when "start"
727
+ # Process procedures without arguments as scripts
728
+ if words.length == 2
729
+ str = str + "start(\"" + words[1].downcase + ".rb\")"
730
+
731
+ # Process procedures with arguments as functions
732
+ else
733
+ # Add the statement to require the function
734
+ str = str + "require_utility(\"" + words[1].downcase + ".rb\")\n"
735
+ numSpaces.times {str = str + " "}
736
+
737
+ # Split the list of arguments on commas
738
+ listWords = words[2..-1].join().split(",")
739
+ listWords.map! do |word|
740
+ if word.match(/[0-9]*:[0-9]*:[0-9]+/) # Timestamp
741
+ parse_time(word)
742
+ else
743
+ word
744
+ end
745
+ end
746
+
747
+ # Print the function name and the first argument
748
+ str = str + words[1].downcase + "(" + parse_id(listWords[0])
749
+
750
+ # Print the remaining arguments preceeded by a separator
751
+ (listWords.length-1).times do |i|
752
+ str = str + ", " + parse_id(listWords[i+1])
753
+ end
754
+ str = str + ")"
755
+ end
756
+
757
+ when "start_here:"
758
+ # Ignore typical starting point label
759
+ str = str + "# SCL Ignored: " + line
760
+
761
+ when "stop"
762
+ # Ignore calls to stop logging since COSMOS stops logging with each start
763
+ str = str + "# SCL Ignored: " + line
764
+
765
+ when "unlock"
766
+ # Ignore database commands
767
+ str = str + "# SCL Ignored: " + line
768
+
769
+ when "update"
770
+ # Ignore database commands
771
+ str = str + "# SCL Ignored: " + line
772
+
773
+ when "wait"
774
+ # add a space incase there's no space between or and parantheses
775
+ line = line.gsub(')or', ') or')
776
+ words = line.split(' ')
777
+ # Only a wait
778
+ if words.length == 1
779
+ str = str + "wait()"
780
+
781
+ # Waiting for length of time
782
+ elsif words[1].match(/[0-9]*:[0-9]*:[0-9]+/)
783
+ str = str + "wait(" + parse_time(words[1]) + ")"
784
+
785
+ # Waiting for a variable of time
786
+ elsif words.length == 2 and words[1].match(/\$/)
787
+ str = str + "wait(" + parse_id(words[1]) + ")"
788
+
789
+ # Waiting for an expression [or for a time]
790
+ elsif words.length > 2 and words[1].match(/\$/)
791
+ # Get index of 'OR FOR' if it exists by the 'FOR' keyword
792
+ idx = words.index("FOR")
793
+ if idx == nil
794
+ idx = words.index("for")
795
+ end
796
+
797
+ # If there is a timeout
798
+ if idx != nil
799
+ str = str + "wait_expression(\"" +
800
+ parse_expression(words[1..(idx-2)],true) + "\", " +
801
+ parse_expression([words[idx+1]]) + ")"
802
+
803
+ # No timeout given, so insert a default timeout
804
+ else
805
+ str = str + "wait_expression(\"" +
806
+ parse_expression(words[1..-1],true) + "\", " +
807
+ parse_time("::30") + ")"
808
+ end
809
+
810
+ # If the next word starts with the raw keyword
811
+ elsif words[1].match(/[\(]*(raw)/i)
812
+ # Get index of 'OR FOR' if it exists by the 'FOR' keyword
813
+ idx = words.index("FOR")
814
+ if idx == nil
815
+ idx = words.index("for")
816
+ end
817
+
818
+ # If there is a timeout
819
+ if idx != nil
820
+ # If the first part is a complex expression
821
+ if (words[1..(idx-2)].include?("OR") ||
822
+ words[1..(idx-2)].include?("or") ||
823
+ words[1..(idx-2)].include?("AND") ||
824
+ words[1..(idx-2)].include?("and"))
825
+ str = str + "wait_expression(\"" +
826
+ parse_expression(words[1..(idx-2)],true) + "\", "
827
+
828
+ # If it is a single telemetry item
829
+ else
830
+ @wait_match_string = "\"" + parse_tlm_item(words[2..3]) +
831
+ parse_cond_operator(words[4]) +
832
+ parse_expression(words[5..(idx-2)],true) + "\""
833
+ @verify_wait_check = false
834
+
835
+ parse_line(@data_by_lines[@universal_index+1], @out_file, true)
836
+
837
+ if @verify_wait_check == true
838
+ str = str + "wait_check_raw(\"" + parse_tlm_item(words[2..3]) +
839
+ parse_cond_operator(words[4]) +
840
+ parse_expression(words[5..(idx-2)],true) + "\", "
841
+ else
842
+ str = str + "wait_raw(\"" + parse_tlm_item(words[2..3]) +
843
+ parse_cond_operator(words[4]) +
844
+ parse_expression(words[5..(idx-2)],true) + "\", "
845
+ end
846
+ end
847
+
848
+ # Parse the timeout
849
+ str = str + parse_expression([words[idx+1]])
850
+
851
+ # If there is no timeout given
852
+ else
853
+ # If it is a complex expression
854
+ if (words[1..-1].include?("OR") || words[1..-1].include?("or") ||
855
+ words[1..-1].include?("AND") || words[1..-1].include?("and"))
856
+ str = str + "wait_expression(\"" +
857
+ parse_expression(words[1..-1],true) + "\", "
858
+
859
+ # If it is a single telemetry item
860
+ else
861
+ @wait_match_string = "\"" + parse_tlm_item(words[2..3]) +
862
+ parse_cond_operator(words[4]) + parse_id(words[5],true) + "\""
863
+ @verify_wait_check = false
864
+
865
+ parse_line(@data_by_lines[@universal_index+1], @out_file, true)
866
+
867
+ if @verify_wait_check == true
868
+ str = str + "wait_check_raw(\"" + parse_tlm_item(words[2..3]) +
869
+ parse_cond_operator(words[4]) + parse_id(words[5],true) + "\", "
870
+ else
871
+ str = str + "wait_raw(\"" + parse_tlm_item(words[2..3]) +
872
+ parse_cond_operator(words[4]) + parse_id(words[5],true) + "\", "
873
+ end
874
+ end
875
+
876
+ # Insert a default timeout
877
+ str = str + parse_time("::30")
878
+ end
879
+ str = str + ")"
880
+
881
+ # If the next word doesn't start with raw
882
+ elsif words[1].match(/[\(]*\w/)
883
+ # Get index of 'OR FOR' if it exists by the 'FOR' keyword
884
+ idx = words.index("FOR")
885
+ if idx == nil
886
+ idx = words.index("for")
887
+ end
888
+
889
+ # If there is a timeout
890
+ if idx != nil
891
+ # If the first part is a complex expression
892
+ if (words[1..(idx-2)].include?("OR") ||
893
+ words[1..(idx-2)].include?("or") ||
894
+ words[1..(idx-2)].include?("AND") ||
895
+ words[1..(idx-2)].include?("and"))
896
+ str = str + "wait_expression(\"" +
897
+ parse_expression(words[1..(idx-2)],true) + "\", "
898
+
899
+ # If it is a single telemetry item
900
+ else
901
+ @wait_match_string = "\"" + parse_tlm_item(words[1..2]) +
902
+ parse_cond_operator(words[3]) + parse_id(words[4],true) + "\""
903
+ @verify_wait_check = false
904
+
905
+ parse_line(@data_by_lines[@universal_index+1], @out_file, true)
906
+
907
+ if @verify_wait_check == true
908
+ str = str + "wait_check(\"" + parse_tlm_item(words[1..2]) +
909
+ parse_cond_operator(words[3]) + parse_id(words[4],true) + "\", "
910
+ else
911
+ str = str + "wait(\"" + parse_tlm_item(words[1..2]) +
912
+ parse_cond_operator(words[3]) + parse_id(words[4],true) + "\", "
913
+ end
914
+ end
915
+
916
+ # Parse the timeout
917
+ str = str + parse_expression([words[idx+1]])
918
+
919
+ # If there is no timeout given
920
+ else
921
+ # If it is a complex expression
922
+ if (words[1..-1].include?("OR") || words[1..-1].include?("or") ||
923
+ words[1..-1].include?("AND") || words[1..-1].include?("and"))
924
+ str = str + "wait_expression(\"" +
925
+ parse_expression(words[1..-1],true) + "\", "
926
+
927
+ # If it is a single telemetry item
928
+ else
929
+ @wait_match_string = "\"" + parse_tlm_item(words[1..2]) +
930
+ parse_cond_operator(words[3]) + parse_id(words[4],true) + "\""
931
+ @verify_wait_check = false
932
+
933
+ parse_line(@data_by_lines[@universal_index+1], @out_file, true)
934
+
935
+ if @verify_wait_check == true
936
+ str = str + "wait_check(\"" + parse_tlm_item(words[1..2]) +
937
+ parse_cond_operator(words[3]) + parse_id(words[4],true) + "\", "
938
+ else
939
+ str = str + "wait(\"" + parse_tlm_item(words[1..2]) +
940
+ parse_cond_operator(words[3]) + parse_id(words[4],true) + "\", "
941
+ end
942
+ end
943
+
944
+ # Insert a default timeout
945
+ str = str + parse_time("::30")
946
+ end
947
+ str = str + ")"
948
+
949
+ else
950
+ str = str + "# TODO unsupported: " + line
951
+ end
952
+
953
+ when "write"
954
+ # Write the command and first word
955
+ str = str + "puts(" + words[1]
956
+
957
+ # Consolidate a " , to ",
958
+ rem = words[2..-1].join(" ")
959
+ quoteSpaceIdx = rem.index("\" ,")
960
+ if quoteSpaceIdx != nil
961
+ rem = rem[0..(quoteSpaceIdx)] + rem[(quoteSpaceIdx+2)..-1]
962
+ end
963
+
964
+ # Find the closing quote
965
+ quoteIdx = rem.index("\",")
966
+
967
+ # If there was a closing quote
968
+ if (quoteIdx != nil and quoteIdx != rem.length - 1)
969
+ # Write the characters up until the quote
970
+ str = str + rem[0..quoteIdx-1]
971
+
972
+ # Parse the rest after the ", as a quoted expression
973
+ expr = rem[(quoteIdx+2)..-1]
974
+ if expr.class == String
975
+ # There might be yet another quoted section
976
+ quoteIdx = expr.index("\"")
977
+ remainder = ''
978
+ if quoteIdx
979
+ remainder = expr[quoteIdx+1..-2]
980
+ expr = expr[0..quoteIdx-1].strip
981
+ expr = expr[0..-2] if expr[-1] == ','
982
+ end
983
+ str = str + " \#{#{parse_expression([expr],true,true)}}#{remainder}\""
984
+ else
985
+ puts "****************** NOT STRING ******************"
986
+ str = str + " \#{" + parse_expression(expr,true,true) + "}\""
987
+ end
988
+
989
+ # If there was no closing quote
990
+ else
991
+ words[2..-1].each do |word|
992
+ str = str + " " + word.to_s
993
+ end
994
+ end
995
+ str = str + ")"
996
+
997
+ else
998
+ # If this keyword is contained in the list of macros
999
+ if $macroList != nil and $macroList.include?(words[0].upcase)
1000
+ str = str + parse_macro(words)
1001
+
1002
+ # Other keywords not handled
1003
+ else
1004
+ str = str + "# TODO unsupported: " + line
1005
+ end
1006
+ end
1007
+ # Implicit end of case statement
1008
+
1009
+ # Write the code and comment to the output file
1010
+ if comment == ""
1011
+ loc_out_file.puts str
1012
+ else
1013
+ loc_out_file.puts str + " " + comment
1014
+ end
1015
+ end
1016
+
1017
+ ################################################################################
1018
+ ##### BEGIN SCRIPT ######
1019
+ ################################################################################
1020
+
1021
+ require 'ostruct'
1022
+ require 'optparse'
1023
+
1024
+ options = OpenStruct.new
1025
+ options.file = nil
1026
+
1027
+ opts = OptionParser.new do |opts|
1028
+ opts.banner = "Usage: cstol_converter [optional filenames]"
1029
+ opts.separator ""
1030
+ opts.separator "By default it will parse all macros (*.mac) and CSTOLS (*.prc)"
1031
+ opts.separator "recursively starting in the current working directory"
1032
+ opts.separator ""
1033
+ # Create the help and version options
1034
+ opts.on("-h", "--help", "Show this message") do
1035
+ puts opts
1036
+ exit
1037
+ end
1038
+ end
1039
+
1040
+ begin
1041
+ opts.parse!(ARGV)
1042
+ rescue => err
1043
+ puts err
1044
+ puts opts
1045
+ exit
1046
+ end
1047
+
1048
+ mac_files = []
1049
+ prc_files = []
1050
+ if ARGV[0]
1051
+ ARGV.each do |filename|
1052
+ prc_files << filename
1053
+ end
1054
+ else
1055
+ # Find all macros
1056
+ mac_files = Dir["**/*.mac"]
1057
+ # Find all procedures
1058
+ prc_files = Dir["**/*.prc"]
1059
+ end
1060
+
1061
+ # List of targets found in the CSTOL files
1062
+ $targetList = Cosmos::System.targets.keys
1063
+
1064
+ # Process all macros first
1065
+ unless mac_files.empty?
1066
+ puts "*****************************************************"
1067
+ macros_file = File.open("macrosAutoGen.rb","w")
1068
+ mac_files.each do |file|
1069
+ puts " Parsing MAC file: " + file
1070
+
1071
+ # Parse each line in the macro file
1072
+ File.open(file,"r") do |infile|
1073
+ out_file = File.open(File.join(Dir.pwd, file[0..-5] + "_macro.rb"), "w")
1074
+ infile.each do |line|
1075
+ parse_line(line,@out_file)
1076
+ end
1077
+ @out_file.close
1078
+ end
1079
+
1080
+ # Create a Ruby macro file that evaluates the macro in the callers context
1081
+ macros_file.print "#{$macroName}_SRC =
1082
+ open(\"#{file[0..-5]}_macro.rb\"){ |f|\n f.sysread(f.stat().size())\n}\n\n"
1083
+ macros_file.print "def #{$macroName}(locBinding"
1084
+ $macroNumArgs.times { |num|
1085
+ macros_file.print ",macVar#{num+1}"
1086
+ }
1087
+ macros_file.print ")\n"
1088
+ $macroNumArgs.times { |num|
1089
+ macros_file.print " eval(\"inVar#{num+1} = \#{macVar#{num+1}}\",locBinding)\n"
1090
+ }
1091
+ macros_file.print " eval(#{$macroName}_SRC,locBinding)\n"
1092
+ macros_file.print "end\n\n"
1093
+
1094
+ # Append this macro to the master list of macros
1095
+ if $macroList == nil
1096
+ $macroList = [$macroName]
1097
+ else
1098
+ $macroList = $macroList.concat([$macroName])
1099
+ end
1100
+ end
1101
+ macros_file.close
1102
+ end
1103
+
1104
+ if prc_files.empty?
1105
+ puts "No *.prc files found"
1106
+ else
1107
+ puts "*****************************************************"
1108
+
1109
+ # Process all procedures next
1110
+ prc_files.each do |file|
1111
+ puts " Parsing PRC file: " + file
1112
+
1113
+ # Open each procedure
1114
+ File.open(file,"r") do |infile|
1115
+ # Open its equivalent Ruby output file
1116
+ @out_file = File.open(File.join(Dir.pwd, File.basename(file)[0..-5] + ".rb"), "w")
1117
+
1118
+ # Read the entire file in first in order to compress line continuations
1119
+ @data = ""
1120
+ matched_quotes = true
1121
+ infile.each do |line|
1122
+ # Check for matching quotes on this line
1123
+ num_quotes = line.scan(/("|[^\\]")/).size
1124
+ if num_quotes % 2 == 1
1125
+ matched_quotes = !matched_quotes
1126
+ end
1127
+
1128
+ # If the last non-whitespace character is the line continuation char
1129
+ if line.match(/&\s*$/)
1130
+ # Remove the continuation char and returns to join with next line
1131
+ idx = line.rindex("&")
1132
+ @data = @data + line[0..(idx-1)]
1133
+ elsif matched_quotes == false
1134
+ # If the unmatched string uses the non-standard underscore char
1135
+ if line.match(/_\s*$/)
1136
+ # Remove the trailing underscore
1137
+ idx = line.rindex("_")
1138
+ line = line[0..(idx-1)]
1139
+ end
1140
+ # Remove the returns from this line to join with next line
1141
+ @data = @data + line.rstrip
1142
+ else
1143
+ # Leave it alone
1144
+ @data = @data + line
1145
+ end
1146
+ end
1147
+
1148
+ @universal_index = 0
1149
+ @data_by_lines = @data.lines.to_a
1150
+ # Parse each line in the file
1151
+ @data_by_lines.each do |line|
1152
+ if @verify_wait_check == true
1153
+ # Skip line
1154
+ @verify_wait_check = false
1155
+ else
1156
+ parse_line(@data_by_lines[@universal_index], @out_file)
1157
+ end
1158
+ @universal_index += 1
1159
+ end
1160
+
1161
+ # Close the file
1162
+ @out_file.close
1163
+ end
1164
+ end
1165
+ end
1166
+