adams-visiona 1.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 (1783) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING.txt +50 -0
  3. data/Dockerfile +71 -0
  4. data/Gemfile +11 -0
  5. data/Guardfile +27 -0
  6. data/LICENSE.txt +879 -0
  7. data/Manifest.txt +1781 -0
  8. data/README.md +15 -0
  9. data/Rakefile +345 -0
  10. data/adams-visiona.gemspec +107 -0
  11. data/appveyor.yml +32 -0
  12. data/autohotkey/config/data/attitude.bin +0 -0
  13. data/autohotkey/config/data/diamond.STL +58 -0
  14. data/autohotkey/config/data/groundoff.gif +0 -0
  15. data/autohotkey/config/data/groundon.gif +0 -0
  16. data/autohotkey/config/data/position.bin +0 -0
  17. data/autohotkey/config/data/satellite.gif +0 -0
  18. data/autohotkey/config/data/tada.wav +0 -0
  19. data/autohotkey/config/system/system.txt +29 -0
  20. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +126 -0
  21. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -0
  22. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -0
  23. data/autohotkey/config/targets/INST/doc/README.txt +1 -0
  24. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -0
  25. data/autohotkey/config/targets/INST/lib/sim_inst.rb +307 -0
  26. data/autohotkey/config/targets/INST/screens/_footer.txt +4 -0
  27. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -0
  28. data/autohotkey/config/targets/INST/screens/array.txt +7 -0
  29. data/autohotkey/config/targets/INST/screens/block.txt +8 -0
  30. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -0
  31. data/autohotkey/config/targets/INST/screens/extra.txt +19 -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 +46 -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/sequences/run_sequence.txt +1 -0
  43. data/autohotkey/config/targets/INST/target.txt +27 -0
  44. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -0
  45. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -0
  46. data/autohotkey/config/targets/META/screens/data.txt +12 -0
  47. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  48. data/autohotkey/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  49. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  50. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  51. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -0
  52. data/autohotkey/config/targets/SYSTEM/screens/limits_change.txt +14 -0
  53. data/autohotkey/config/targets/SYSTEM/screens/meta.txt +14 -0
  54. data/autohotkey/config/targets/SYSTEM/target.txt +12 -0
  55. data/autohotkey/config/tools/cmd_sender/cmd_sender.txt +1 -0
  56. data/autohotkey/config/tools/cmd_sequence/cmd_sequence.txt +2 -0
  57. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -0
  58. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -0
  59. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  60. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  61. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  62. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  63. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  64. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  65. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  66. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  67. data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  68. data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  69. data/autohotkey/config/tools/handbook_creator/default_toc.xsl +59 -0
  70. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -0
  71. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  72. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  73. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  74. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -0
  75. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  76. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  77. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  78. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  79. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  80. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  81. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  82. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  83. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -0
  84. data/autohotkey/config/tools/launcher/launcher.txt +38 -0
  85. data/autohotkey/config/tools/limits_monitor/README.txt +1 -0
  86. data/autohotkey/config/tools/opengl_builder/error.txt +1 -0
  87. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -0
  88. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +6 -0
  89. data/autohotkey/config/tools/table_manager/OldOneDimensionalTable_def.txt +19 -0
  90. data/autohotkey/config/tools/table_manager/OldTwoDimensionalTable_def.txt +248 -0
  91. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +31 -0
  92. data/autohotkey/config/tools/table_manager/SubTables/OneDimensionalSubTable_def.txt +31 -0
  93. data/autohotkey/config/tools/table_manager/SubTables/TwoDimensionalSubTable_def.txt +28 -0
  94. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +28 -0
  95. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -0
  96. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -0
  97. data/autohotkey/config/tools/test_runner/test_runner3.txt +7 -0
  98. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -0
  99. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +14 -0
  100. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -0
  101. data/autohotkey/config/tools/tlm_grapher/README.txt +1 -0
  102. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -0
  103. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -0
  104. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -0
  105. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -0
  106. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -0
  107. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -0
  108. data/autohotkey/lib/cmd_sequence_exporter.rb +52 -0
  109. data/autohotkey/lib/example_background_task.rb +42 -0
  110. data/autohotkey/lib/user_version.rb +3 -0
  111. data/autohotkey/outputs/handbooks/README.txt +1 -0
  112. data/autohotkey/outputs/logs/bigtlm.bin +0 -0
  113. data/autohotkey/outputs/logs/cmd.bin +0 -0
  114. data/autohotkey/outputs/logs/tlm.bin +0 -0
  115. data/autohotkey/outputs/saved_config/README.txt +1 -0
  116. data/autohotkey/outputs/sequences/bad_sequence.txt +1 -0
  117. data/autohotkey/outputs/sequences/bad_sequence2.txt +1 -0
  118. data/autohotkey/outputs/sequences/saved_sequence.txt +3 -0
  119. data/autohotkey/outputs/tables/README.txt +1 -0
  120. data/autohotkey/outputs/tmp/README.txt +1 -0
  121. data/autohotkey/procedures/clear_util.rb +7 -0
  122. data/autohotkey/procedures/collect.rb +18 -0
  123. data/autohotkey/procedures/collect_util.rb +14 -0
  124. data/autohotkey/procedures/example_test.rb +71 -0
  125. data/autohotkey/procedures/example_test2.rb +74 -0
  126. data/autohotkey/procedures/script_test.rb +21 -0
  127. data/autohotkey/procedures/syntax_error.rb +18 -0
  128. data/autohotkey/tools/CmdExtractorAHK +16 -0
  129. data/autohotkey/tools/CmdSender +14 -0
  130. data/autohotkey/tools/CmdSenderAHK +18 -0
  131. data/autohotkey/tools/CmdSenderAHK2 +18 -0
  132. data/autohotkey/tools/CmdSequence +14 -0
  133. data/autohotkey/tools/CmdSequenceAHK +23 -0
  134. data/autohotkey/tools/CmdSequenceAHK2 +16 -0
  135. data/autohotkey/tools/CmdTlmServer +14 -0
  136. data/autohotkey/tools/CmdTlmServerAHK +28 -0
  137. data/autohotkey/tools/CmdTlmServerAHK2 +17 -0
  138. data/autohotkey/tools/ConfigEditor +16 -0
  139. data/autohotkey/tools/ConfigEditorAHK +19 -0
  140. data/autohotkey/tools/DataViewer +14 -0
  141. data/autohotkey/tools/DataViewerAHK +17 -0
  142. data/autohotkey/tools/HandbookCreatorAHK +20 -0
  143. data/autohotkey/tools/LauncherAHK +17 -0
  144. data/autohotkey/tools/LimitsMonitorAHK +20 -0
  145. data/autohotkey/tools/OpenGLBuilderAHK +24 -0
  146. data/autohotkey/tools/PacketViewer +14 -0
  147. data/autohotkey/tools/PacketViewerAHK +18 -0
  148. data/autohotkey/tools/PacketViewerAHK2 +17 -0
  149. data/autohotkey/tools/Replay +14 -0
  150. data/autohotkey/tools/ReplayAHK +17 -0
  151. data/autohotkey/tools/ScriptRunner +14 -0
  152. data/autohotkey/tools/ScriptRunnerAHK +20 -0
  153. data/autohotkey/tools/ScriptRunnerAHK2 +17 -0
  154. data/autohotkey/tools/TableManager +14 -0
  155. data/autohotkey/tools/TableManagerAHK +25 -0
  156. data/autohotkey/tools/TableManagerAHK2 +18 -0
  157. data/autohotkey/tools/TableManagerAHK3 +18 -0
  158. data/autohotkey/tools/TableManagerAHK4 +24 -0
  159. data/autohotkey/tools/TestRunner +15 -0
  160. data/autohotkey/tools/TestRunnerAHK +17 -0
  161. data/autohotkey/tools/TestRunnerAHK2 +17 -0
  162. data/autohotkey/tools/TestRunnerAHK3 +17 -0
  163. data/autohotkey/tools/TestRunnerAHK4 +17 -0
  164. data/autohotkey/tools/TestRunnerAHK5 +17 -0
  165. data/autohotkey/tools/TestRunnerAHK6 +17 -0
  166. data/autohotkey/tools/TlmExtractor +15 -0
  167. data/autohotkey/tools/TlmExtractorAHK +19 -0
  168. data/autohotkey/tools/TlmExtractorAHK2 +16 -0
  169. data/autohotkey/tools/TlmExtractorAHK3 +16 -0
  170. data/autohotkey/tools/TlmGrapher +14 -0
  171. data/autohotkey/tools/TlmGrapherAHK +19 -0
  172. data/autohotkey/tools/TlmGrapherAHK2 +23 -0
  173. data/autohotkey/tools/TlmGrapherAHK3 +17 -0
  174. data/autohotkey/tools/TlmGrapherAHK4 +17 -0
  175. data/autohotkey/tools/TlmViewer +14 -0
  176. data/autohotkey/tools/TlmViewerAHK +28 -0
  177. data/autohotkey/tools/TlmViewerAHK2 +22 -0
  178. data/autohotkey/tools/TlmViewerAHK3 +23 -0
  179. data/autohotkey/tools/TlmViewerAHK4 +22 -0
  180. data/autohotkey/tools/TlmViewerAHK5 +18 -0
  181. data/autohotkey/tools/autohotkey.rb +38 -0
  182. data/autohotkey/tools/cmd_extractor.ahk +52 -0
  183. data/autohotkey/tools/cmd_sender.ahk +208 -0
  184. data/autohotkey/tools/cmd_sender2.ahk +4 -0
  185. data/autohotkey/tools/cmd_sequence.ahk +233 -0
  186. data/autohotkey/tools/cmd_sequence2.ahk +23 -0
  187. data/autohotkey/tools/cmd_tlm_server.ahk +90 -0
  188. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -0
  189. data/autohotkey/tools/config_editor.ahk +197 -0
  190. data/autohotkey/tools/data_viewer.ahk +140 -0
  191. data/autohotkey/tools/handbook_creator.ahk +32 -0
  192. data/autohotkey/tools/launcher.ahk +42 -0
  193. data/autohotkey/tools/limits_monitor.ahk +121 -0
  194. data/autohotkey/tools/open_gl_builder.ahk +133 -0
  195. data/autohotkey/tools/packet_viewer.ahk +224 -0
  196. data/autohotkey/tools/packet_viewer2.ahk +9 -0
  197. data/autohotkey/tools/replay.ahk +103 -0
  198. data/autohotkey/tools/script_runner.ahk +602 -0
  199. data/autohotkey/tools/script_runner2.ahk +50 -0
  200. data/autohotkey/tools/table_manager.ahk +291 -0
  201. data/autohotkey/tools/test_runner.ahk +262 -0
  202. data/autohotkey/tools/test_runner2.ahk +49 -0
  203. data/autohotkey/tools/test_runner3.ahk +11 -0
  204. data/autohotkey/tools/test_runner5.ahk +8 -0
  205. data/autohotkey/tools/test_runner6.ahk +5 -0
  206. data/autohotkey/tools/tlm_extractor.ahk +356 -0
  207. data/autohotkey/tools/tlm_grapher.ahk +670 -0
  208. data/autohotkey/tools/tlm_grapher2.ahk +115 -0
  209. data/autohotkey/tools/tlm_grapher3.ahk +23 -0
  210. data/autohotkey/tools/tlm_viewer.ahk +140 -0
  211. data/autohotkey/tools/tlm_viewer2.ahk +49 -0
  212. data/autohotkey/tools/tlm_viewer4.ahk +4 -0
  213. data/autohotkey/tools/tlm_viewer5.ahk +19 -0
  214. data/autohotkey/tools/tool_launch.rb +38 -0
  215. data/bin/cosmos +303 -0
  216. data/bin/cstol_converter +1166 -0
  217. data/bin/dart_import +4 -0
  218. data/bin/dart_util +4 -0
  219. data/bin/exchndl20-x64.dll +0 -0
  220. data/bin/exchndl20.dll +0 -0
  221. data/bin/exchndl21-x64.dll +0 -0
  222. data/bin/exchndl21.dll +0 -0
  223. data/bin/exchndl22-x64.dll +0 -0
  224. data/bin/exchndl22.dll +0 -0
  225. data/bin/mgwhelp-x64.dll +0 -0
  226. data/bin/mgwhelp.dll +0 -0
  227. data/bin/rubysloc +130 -0
  228. data/bin/xtce_converter +83 -0
  229. data/data/COSMOS_64x64.bmp +0 -0
  230. data/data/COSMOS_64x64.ico +0 -0
  231. data/data/COSMOS_64x64.png +0 -0
  232. data/data/COSMOS_Architecture.png +0 -0
  233. data/data/CheckBoxCheck.gif +0 -0
  234. data/data/CheckBoxEmpty.gif +0 -0
  235. data/data/Earthmap1024x512.gif +0 -0
  236. data/data/about.txt +4 -0
  237. data/data/add_database.png +0 -0
  238. data/data/add_plot.png +0 -0
  239. data/data/add_tab.png +0 -0
  240. data/data/blank.png +0 -0
  241. data/data/bug.png +0 -0
  242. data/data/checkmark.png +0 -0
  243. data/data/close.png +0 -0
  244. data/data/cmd_extractor.png +0 -0
  245. data/data/cmd_sender.png +0 -0
  246. data/data/cmd_sequence.png +0 -0
  247. data/data/config/_array_params.yaml +23 -0
  248. data/data/config/_id_items.yaml +24 -0
  249. data/data/config/_id_params.yaml +58 -0
  250. data/data/config/_interfaces.yaml +210 -0
  251. data/data/config/_items.yaml +20 -0
  252. data/data/config/_params.yaml +58 -0
  253. data/data/config/cmd_sequence.yaml +14 -0
  254. data/data/config/cmd_tlm_server.yaml +136 -0
  255. data/data/config/command.yaml +40 -0
  256. data/data/config/command_modifiers.yaml +160 -0
  257. data/data/config/command_telemetry.yaml +3 -0
  258. data/data/config/data_viewer.yaml +43 -0
  259. data/data/config/handbook_creator.yaml +23 -0
  260. data/data/config/housekeeping_params.yaml +85 -0
  261. data/data/config/interface_modifiers.yaml +97 -0
  262. data/data/config/item_modifiers.yaml +221 -0
  263. data/data/config/launcher.yaml +127 -0
  264. data/data/config/limits_monitor.yaml +53 -0
  265. data/data/config/linegraph_params.yaml +30 -0
  266. data/data/config/linegraph_plot.yaml +106 -0
  267. data/data/config/page_modifiers.yaml +128 -0
  268. data/data/config/param_item_modifiers.yaml +51 -0
  269. data/data/config/parameter_modifiers.yaml +200 -0
  270. data/data/config/protocols.yaml +273 -0
  271. data/data/config/screen.yaml +153 -0
  272. data/data/config/script_runner.yaml +24 -0
  273. data/data/config/system.yaml +371 -0
  274. data/data/config/table_manager.yaml +83 -0
  275. data/data/config/table_parameter_modifiers.yaml +9 -0
  276. data/data/config/target.yaml +92 -0
  277. data/data/config/telemetry.yaml +80 -0
  278. data/data/config/telemetry_modifiers.yaml +159 -0
  279. data/data/config/test_runner.yaml +119 -0
  280. data/data/config/tlm_extractor.yaml +109 -0
  281. data/data/config/tlm_grapher.yaml +78 -0
  282. data/data/config/tlm_viewer.yaml +112 -0
  283. data/data/config/unknown.yaml +3 -0
  284. data/data/config/widgets.yaml +1502 -0
  285. data/data/config/xy_params.yaml +50 -0
  286. data/data/config/xy_plot.yaml +12 -0
  287. data/data/config_editor.png +0 -0
  288. data/data/copy.png +0 -0
  289. data/data/cosmos.xcf +0 -0
  290. data/data/cosmos_word.gif +0 -0
  291. data/data/crc.txt +470 -0
  292. data/data/critical.wav +0 -0
  293. data/data/cts.png +0 -0
  294. data/data/cut.png +0 -0
  295. data/data/dart.png +0 -0
  296. data/data/data_viewer.png +0 -0
  297. data/data/delete.png +0 -0
  298. data/data/delete_database.png +0 -0
  299. data/data/delete_plot.png +0 -0
  300. data/data/delete_tab.png +0 -0
  301. data/data/diamond.STL +58 -0
  302. data/data/disconnected.png +0 -0
  303. data/data/edit.png +0 -0
  304. data/data/edit_database.png +0 -0
  305. data/data/edit_plot.png +0 -0
  306. data/data/edit_tab.png +0 -0
  307. data/data/end-26.png +0 -0
  308. data/data/fast_forward-26.png +0 -0
  309. data/data/file.png +0 -0
  310. data/data/handbook_creator.png +0 -0
  311. data/data/help.png +0 -0
  312. data/data/html-32.png +0 -0
  313. data/data/information.wav +0 -0
  314. data/data/input.wav +0 -0
  315. data/data/launcher.png +0 -0
  316. data/data/legal.gif +0 -0
  317. data/data/legal.txt +8 -0
  318. data/data/limits_monitor.png +0 -0
  319. data/data/message.wav +0 -0
  320. data/data/moonmap1k.gif +0 -0
  321. data/data/multi.png +0 -0
  322. data/data/open.png +0 -0
  323. data/data/open_in_browser-32.png +0 -0
  324. data/data/opengl_builder.png +0 -0
  325. data/data/packet_viewer.png +0 -0
  326. data/data/pdf-32.png +0 -0
  327. data/data/play-26.png +0 -0
  328. data/data/question.wav +0 -0
  329. data/data/redo.png +0 -0
  330. data/data/replay.png +0 -0
  331. data/data/reverse-play-26.png +0 -0
  332. data/data/rewind-26.png +0 -0
  333. data/data/running.png +0 -0
  334. data/data/save.png +0 -0
  335. data/data/save_as.png +0 -0
  336. data/data/screenshot.png +0 -0
  337. data/data/script_runner.png +0 -0
  338. data/data/search-14.png +0 -0
  339. data/data/search.png +0 -0
  340. data/data/send_file.png +0 -0
  341. data/data/skip_to_start-26.png +0 -0
  342. data/data/spinner.gif +0 -0
  343. data/data/splash.gif +0 -0
  344. data/data/stop-26.png +0 -0
  345. data/data/table_manager.png +0 -0
  346. data/data/test_runner.png +0 -0
  347. data/data/tlm_extractor.png +0 -0
  348. data/data/tlm_grapher.png +0 -0
  349. data/data/tlm_viewer.png +0 -0
  350. data/data/undo.png +0 -0
  351. data/data/warning.wav +0 -0
  352. data/demo/Gemfile +13 -0
  353. data/demo/Launcher +16 -0
  354. data/demo/Launcher.bat +1 -0
  355. data/demo/Launcher2.bat +1 -0
  356. data/demo/LauncherMini.bat +1 -0
  357. data/demo/Rakefile +83 -0
  358. data/demo/config/dart/Gemfile +49 -0
  359. data/demo/config/data/attitude.bin +0 -0
  360. data/demo/config/data/crc.txt +294 -0
  361. data/demo/config/data/diamond.STL +58 -0
  362. data/demo/config/data/hselectoff.gif +0 -0
  363. data/demo/config/data/hselecton.gif +0 -0
  364. data/demo/config/data/hswitchoff.gif +0 -0
  365. data/demo/config/data/hswitchon.gif +0 -0
  366. data/demo/config/data/meta_init.txt +1 -0
  367. data/demo/config/data/position.bin +0 -0
  368. data/demo/config/data/poweroff.gif +0 -0
  369. data/demo/config/data/poweron.gif +0 -0
  370. data/demo/config/data/satellite.gif +0 -0
  371. data/demo/config/data/tada.wav +0 -0
  372. data/demo/config/data/vswitchoff.gif +0 -0
  373. data/demo/config/data/vswitchon.gif +0 -0
  374. data/demo/config/system/system.txt +90 -0
  375. data/demo/config/system/system2.txt +75 -0
  376. data/demo/config/system/system_alt_ports.txt +80 -0
  377. data/demo/config/targets/DART/cmd_tlm/dart_cmds.txt +2 -0
  378. data/demo/config/targets/DART/cmd_tlm/dart_tlm.txt +40 -0
  379. data/demo/config/targets/DART/cmd_tlm_server.txt +6 -0
  380. data/demo/config/targets/DART/screens/status.txt +54 -0
  381. data/demo/config/targets/DART/target.txt +7 -0
  382. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -0
  383. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -0
  384. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +7 -0
  385. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +18 -0
  386. data/demo/config/targets/EXAMPLE/target.txt +9 -0
  387. data/demo/config/targets/INST/cmd_tlm/_ccsds_cmd.txt +9 -0
  388. data/demo/config/targets/INST/cmd_tlm/_ccsds_tlm.txt +19 -0
  389. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +58 -0
  390. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +169 -0
  391. data/demo/config/targets/INST/cmd_tlm/inst_tlm_override.txt +12 -0
  392. data/demo/config/targets/INST/cmd_tlm_server.txt +8 -0
  393. data/demo/config/targets/INST/cmd_tlm_server2.txt +7 -0
  394. data/demo/config/targets/INST/doc/README.txt +1 -0
  395. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -0
  396. data/demo/config/targets/INST/lib/inst_dump_component.rb +34 -0
  397. data/demo/config/targets/INST/lib/sim_inst.rb +333 -0
  398. data/demo/config/targets/INST/procedures/checks.rb +11 -0
  399. data/demo/config/targets/INST/procedures/collect.rb +18 -0
  400. data/demo/config/targets/INST/procedures/disconnect.rb +29 -0
  401. data/demo/config/targets/INST/procedures/utilities/clear.rb +7 -0
  402. data/demo/config/targets/INST/procedures/utilities/collect.rb +14 -0
  403. data/demo/config/targets/INST/screens/_footer.txt +4 -0
  404. data/demo/config/targets/INST/screens/adcs.txt +71 -0
  405. data/demo/config/targets/INST/screens/array.txt +15 -0
  406. data/demo/config/targets/INST/screens/block.txt +8 -0
  407. data/demo/config/targets/INST/screens/commanding.txt +42 -0
  408. data/demo/config/targets/INST/screens/graphs.txt +14 -0
  409. data/demo/config/targets/INST/screens/ground.txt +47 -0
  410. data/demo/config/targets/INST/screens/ground_error.gif +0 -0
  411. data/demo/config/targets/INST/screens/ground_off.gif +0 -0
  412. data/demo/config/targets/INST/screens/ground_on.gif +0 -0
  413. data/demo/config/targets/INST/screens/hs.txt +43 -0
  414. data/demo/config/targets/INST/screens/latest.txt +23 -0
  415. data/demo/config/targets/INST/screens/limits.txt +81 -0
  416. data/demo/config/targets/INST/screens/other.txt +34 -0
  417. data/demo/config/targets/INST/screens/params.txt +54 -0
  418. data/demo/config/targets/INST/screens/satellite.gif +0 -0
  419. data/demo/config/targets/INST/screens/spacing_box.txt +44 -0
  420. data/demo/config/targets/INST/screens/spacing_grid.txt +78 -0
  421. data/demo/config/targets/INST/screens/tabs.txt +68 -0
  422. data/demo/config/targets/INST/sequences/sequence.tsv +3 -0
  423. data/demo/config/targets/INST/tables/EventAction.csv +9 -0
  424. data/demo/config/targets/INST/tables/EventAction.dat +0 -0
  425. data/demo/config/targets/INST/tables/McConfigTable.csv +20 -0
  426. data/demo/config/targets/INST/tables/McConfigTable.dat +0 -0
  427. data/demo/config/targets/INST/target.txt +38 -0
  428. data/demo/config/targets/INST/tools/data_viewer/data_viewer.txt +2 -0
  429. data/demo/config/targets/INST/tools/data_viewer/data_viewer2.txt +2 -0
  430. data/demo/config/targets/INST/tools/table_manager/EventAction_def.txt +6 -0
  431. data/demo/config/targets/INST/tools/table_manager/McConfigTable_def.txt +38 -0
  432. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +6 -0
  433. data/demo/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +10 -0
  434. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -0
  435. data/demo/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  436. data/demo/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  437. data/demo/config/targets/SYSTEM/cmd_tlm_server.txt +6 -0
  438. data/demo/config/targets/SYSTEM/lib/limits_groups.rb +55 -0
  439. data/demo/config/targets/SYSTEM/screens/status.txt +12 -0
  440. data/demo/config/targets/SYSTEM/target.txt +12 -0
  441. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -0
  442. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -0
  443. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -0
  444. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +59 -0
  445. data/demo/config/targets/TEMPLATED/target.txt +8 -0
  446. data/demo/config/tools/cmd_sequence/cmd_sequence.txt +2 -0
  447. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +45 -0
  448. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +42 -0
  449. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server_chain.txt +18 -0
  450. data/demo/config/tools/data_viewer/data_viewer.txt +23 -0
  451. data/demo/config/tools/example_application.css +58 -0
  452. data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  453. data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  454. data/demo/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  455. data/demo/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  456. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  457. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  458. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  459. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  460. data/demo/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  461. data/demo/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  462. data/demo/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  463. data/demo/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  464. data/demo/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  465. data/demo/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  466. data/demo/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  467. data/demo/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  468. data/demo/config/tools/handbook_creator/default_toc.xsl +59 -0
  469. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -0
  470. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -0
  471. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  472. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  473. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -0
  474. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  475. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  476. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  477. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  478. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  479. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  480. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -0
  481. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  482. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -0
  483. data/demo/config/tools/launcher/launcher.css +7 -0
  484. data/demo/config/tools/launcher/launcher.txt +49 -0
  485. data/demo/config/tools/launcher/launcher2.css +10 -0
  486. data/demo/config/tools/launcher/launcher2.txt +48 -0
  487. data/demo/config/tools/launcher/launcher_mini.txt +45 -0
  488. data/demo/config/tools/limits_monitor/README.txt +1 -0
  489. data/demo/config/tools/opengl_builder/README.txt +1 -0
  490. data/demo/config/tools/script_runner/script_runner.txt +2 -0
  491. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -0
  492. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  493. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +37 -0
  494. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +34 -0
  495. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +9 -0
  496. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +31 -0
  497. data/demo/config/tools/test_runner/test_runner.css +45 -0
  498. data/demo/config/tools/test_runner/test_runner.txt +19 -0
  499. data/demo/config/tools/tlm_extractor/_adcs_time.txt +2 -0
  500. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  501. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  502. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  503. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  504. data/demo/config/tools/tlm_grapher/README.txt +1 -0
  505. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -0
  506. data/demo/lib/cmd_sequence_exporter.rb +52 -0
  507. data/demo/lib/example_background_task.rb +57 -0
  508. data/demo/lib/example_target.rb +103 -0
  509. data/demo/lib/scpi_target.rb +68 -0
  510. data/demo/lib/user_version.rb +3 -0
  511. data/demo/outputs/dart/data/README.txt +1 -0
  512. data/demo/outputs/handbooks/README.txt +1 -0
  513. data/demo/outputs/logs/README.txt +1 -0
  514. data/demo/outputs/saved_config/README.txt +1 -0
  515. data/demo/outputs/sequences/sequence.tsv +4 -0
  516. data/demo/outputs/tables/README.txt +1 -0
  517. data/demo/outputs/tmp/README.txt +1 -0
  518. data/demo/procedures/cosmos_api_test.rb +314 -0
  519. data/demo/procedures/example_test.rb +192 -0
  520. data/demo/procedures/interactive.rb +22 -0
  521. data/demo/procedures/local_screen_example.rb +51 -0
  522. data/demo/procedures/plot_test.rb +8 -0
  523. data/demo/procedures/replay_test.rb +32 -0
  524. data/demo/procedures/run_example_test.rb +3 -0
  525. data/demo/procedures/test.rb +51 -0
  526. data/demo/tools/CmdExtractor +16 -0
  527. data/demo/tools/CmdExtractor.bat +9 -0
  528. data/demo/tools/CmdSender +16 -0
  529. data/demo/tools/CmdSender.bat +9 -0
  530. data/demo/tools/CmdSequence +16 -0
  531. data/demo/tools/CmdSequence.bat +9 -0
  532. data/demo/tools/CmdTlmServer +16 -0
  533. data/demo/tools/CmdTlmServer.bat +9 -0
  534. data/demo/tools/ConfigEditor +16 -0
  535. data/demo/tools/ConfigEditor.bat +9 -0
  536. data/demo/tools/Dart +16 -0
  537. data/demo/tools/Dart.bat +9 -0
  538. data/demo/tools/DataViewer +16 -0
  539. data/demo/tools/DataViewer.bat +9 -0
  540. data/demo/tools/ExampleTarget +16 -0
  541. data/demo/tools/ExampleTarget.bat +9 -0
  542. data/demo/tools/HandbookCreator +16 -0
  543. data/demo/tools/HandbookCreator.bat +9 -0
  544. data/demo/tools/Launcher +16 -0
  545. data/demo/tools/Launcher.bat +9 -0
  546. data/demo/tools/LimitsMonitor +16 -0
  547. data/demo/tools/LimitsMonitor.bat +9 -0
  548. data/demo/tools/OpenGLBuilder +16 -0
  549. data/demo/tools/OpenGLBuilder.bat +9 -0
  550. data/demo/tools/PacketViewer +16 -0
  551. data/demo/tools/PacketViewer.bat +9 -0
  552. data/demo/tools/Replay +16 -0
  553. data/demo/tools/Replay.bat +9 -0
  554. data/demo/tools/ScpiTarget +16 -0
  555. data/demo/tools/ScpiTarget.bat +9 -0
  556. data/demo/tools/ScriptRunner +16 -0
  557. data/demo/tools/ScriptRunner.bat +9 -0
  558. data/demo/tools/TableManager +16 -0
  559. data/demo/tools/TableManager.bat +9 -0
  560. data/demo/tools/TestRunner +16 -0
  561. data/demo/tools/TestRunner.bat +9 -0
  562. data/demo/tools/TlmExtractor +16 -0
  563. data/demo/tools/TlmExtractor.bat +9 -0
  564. data/demo/tools/TlmGrapher +16 -0
  565. data/demo/tools/TlmGrapher.bat +9 -0
  566. data/demo/tools/TlmViewer +16 -0
  567. data/demo/tools/TlmViewer.bat +9 -0
  568. data/demo/tools/ToolLaunch.bat +72 -0
  569. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  570. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -0
  571. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -0
  572. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  573. data/demo/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  574. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  575. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -0
  576. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -0
  577. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  578. data/demo/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  579. data/demo/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  580. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  581. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  582. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  583. data/demo/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  584. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  585. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -0
  586. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -0
  587. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  588. data/demo/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  589. data/demo/tools/mac/ConfigEditor.app/Contents/Info.plist +38 -0
  590. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/ConfigEditor.rb +16 -0
  591. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +10 -0
  592. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/tool_launch.rb +38 -0
  593. data/demo/tools/mac/ConfigEditor.app/Contents/Resources/appIcon.icns +0 -0
  594. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  595. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -0
  596. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -0
  597. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  598. data/demo/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  599. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  600. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -0
  601. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -0
  602. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  603. data/demo/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  604. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  605. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -0
  606. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -0
  607. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  608. data/demo/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  609. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  610. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -0
  611. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -0
  612. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  613. data/demo/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  614. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  615. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -0
  616. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -0
  617. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  618. data/demo/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  619. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  620. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -0
  621. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -0
  622. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  623. data/demo/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  624. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -0
  625. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -0
  626. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -0
  627. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  628. data/demo/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  629. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  630. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -0
  631. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -0
  632. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  633. data/demo/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  634. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  635. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -0
  636. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -0
  637. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  638. data/demo/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  639. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  640. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -0
  641. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -0
  642. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  643. data/demo/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  644. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  645. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -0
  646. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -0
  647. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  648. data/demo/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  649. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  650. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -0
  651. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -0
  652. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  653. data/demo/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  654. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  655. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -0
  656. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -0
  657. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  658. data/demo/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  659. data/demo/tools/tool_launch.rb +38 -0
  660. data/ext/cosmos/ext/array/array.c +111 -0
  661. data/ext/cosmos/ext/array/extconf.rb +13 -0
  662. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -0
  663. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -0
  664. data/ext/cosmos/ext/config_parser/config_parser.c +236 -0
  665. data/ext/cosmos/ext/config_parser/extconf.rb +13 -0
  666. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +145 -0
  667. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -0
  668. data/ext/cosmos/ext/crc/crc.c +341 -0
  669. data/ext/cosmos/ext/crc/extconf.rb +13 -0
  670. data/ext/cosmos/ext/line_graph/extconf.rb +13 -0
  671. data/ext/cosmos/ext/line_graph/line_graph.c +460 -0
  672. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +13 -0
  673. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -0
  674. data/ext/cosmos/ext/packet/extconf.rb +13 -0
  675. data/ext/cosmos/ext/packet/packet.c +273 -0
  676. data/ext/cosmos/ext/platform/extconf.rb +13 -0
  677. data/ext/cosmos/ext/platform/platform.c +136 -0
  678. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -0
  679. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +69 -0
  680. data/ext/cosmos/ext/string/extconf.rb +13 -0
  681. data/ext/cosmos/ext/string/string.c +49 -0
  682. data/ext/cosmos/ext/structure/structure.c +1493 -0
  683. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -0
  684. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -0
  685. data/ext/cosmos/ext/telemetry/extconf.rb +13 -0
  686. data/ext/cosmos/ext/telemetry/telemetry.c +307 -0
  687. data/ext/mkrf_conf.rb +40 -0
  688. data/extensions/vscode/.gitignore +4 -0
  689. data/extensions/vscode/.vscode/launch.json +32 -0
  690. data/extensions/vscode/.vscode/settings.json +13 -0
  691. data/extensions/vscode/.vscode/tasks.json +79 -0
  692. data/extensions/vscode/License.txt +879 -0
  693. data/extensions/vscode/README.md +9 -0
  694. data/extensions/vscode/client/License.txt +879 -0
  695. data/extensions/vscode/client/README.md +39 -0
  696. data/extensions/vscode/client/cosmos.configuration.json +23 -0
  697. data/extensions/vscode/client/images/icon.png +0 -0
  698. data/extensions/vscode/client/package-lock.json +414 -0
  699. data/extensions/vscode/client/package.json +105 -0
  700. data/extensions/vscode/client/src/extension.ts +132 -0
  701. data/extensions/vscode/client/src/screen_preview.rb +25 -0
  702. data/extensions/vscode/client/syntaxes/cosmos.tmLanguage.json +219 -0
  703. data/extensions/vscode/client/tsconfig.json +17 -0
  704. data/extensions/vscode/package-lock.json +26 -0
  705. data/extensions/vscode/package.json +35 -0
  706. data/extensions/vscode/server/License.txt +879 -0
  707. data/extensions/vscode/server/package-lock.json +236 -0
  708. data/extensions/vscode/server/package.json +29 -0
  709. data/extensions/vscode/server/src/server.ts +59 -0
  710. data/extensions/vscode/server/tsconfig.json +16 -0
  711. data/install/Gemfile +13 -0
  712. data/install/Launcher +16 -0
  713. data/install/Launcher.bat +1 -0
  714. data/install/Rakefile +81 -0
  715. data/install/config/dart/Gemfile +49 -0
  716. data/install/config/data/README.txt +1 -0
  717. data/install/config/data/crc.txt +179 -0
  718. data/install/config/system/system.txt +75 -0
  719. data/install/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +9 -0
  720. data/install/config/targets/SYSTEM/target.txt +12 -0
  721. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +3 -0
  722. data/install/config/tools/data_viewer/data_viewer.txt +4 -0
  723. data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  724. data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  725. data/install/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  726. data/install/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  727. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  728. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  729. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  730. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  731. data/install/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  732. data/install/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  733. data/install/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  734. data/install/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  735. data/install/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  736. data/install/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  737. data/install/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  738. data/install/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  739. data/install/config/tools/handbook_creator/default_toc.xsl +59 -0
  740. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -0
  741. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  742. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  743. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  744. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -0
  745. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  746. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  747. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  748. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  749. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  750. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  751. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  752. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  753. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -0
  754. data/install/config/tools/launcher/launcher.txt +43 -0
  755. data/install/config/tools/limits_monitor/README.txt +1 -0
  756. data/install/config/tools/opengl_builder/README.txt +1 -0
  757. data/install/config/tools/script_runner/script_runner.txt +3 -0
  758. data/install/config/tools/table_manager/README.txt +1 -0
  759. data/install/config/tools/test_runner/test_runner.txt +8 -0
  760. data/install/config/tools/tlm_extractor/README.txt +1 -0
  761. data/install/config/tools/tlm_grapher/README.txt +1 -0
  762. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -0
  763. data/install/lib/user_version.rb +3 -0
  764. data/install/outputs/dart/data/README.txt +1 -0
  765. data/install/outputs/dart/logs/README.txt +1 -0
  766. data/install/outputs/handbooks/README.txt +1 -0
  767. data/install/outputs/logs/README.txt +1 -0
  768. data/install/outputs/saved_config/README.txt +1 -0
  769. data/install/outputs/tables/README.txt +1 -0
  770. data/install/outputs/tmp/README.txt +1 -0
  771. data/install/procedures/README.txt +1 -0
  772. data/install/tools/CmdExtractor +16 -0
  773. data/install/tools/CmdExtractor.bat +9 -0
  774. data/install/tools/CmdSender +16 -0
  775. data/install/tools/CmdSender.bat +9 -0
  776. data/install/tools/CmdSequence +16 -0
  777. data/install/tools/CmdSequence.bat +9 -0
  778. data/install/tools/CmdTlmServer +16 -0
  779. data/install/tools/CmdTlmServer.bat +9 -0
  780. data/install/tools/ConfigEditor +16 -0
  781. data/install/tools/ConfigEditor.bat +9 -0
  782. data/install/tools/Dart +16 -0
  783. data/install/tools/Dart.bat +9 -0
  784. data/install/tools/DataViewer +16 -0
  785. data/install/tools/DataViewer.bat +9 -0
  786. data/install/tools/HandbookCreator +16 -0
  787. data/install/tools/HandbookCreator.bat +9 -0
  788. data/install/tools/Launcher +16 -0
  789. data/install/tools/Launcher.bat +9 -0
  790. data/install/tools/LimitsMonitor +16 -0
  791. data/install/tools/LimitsMonitor.bat +9 -0
  792. data/install/tools/OpenGLBuilder +16 -0
  793. data/install/tools/OpenGLBuilder.bat +9 -0
  794. data/install/tools/PacketViewer +16 -0
  795. data/install/tools/PacketViewer.bat +9 -0
  796. data/install/tools/Replay +16 -0
  797. data/install/tools/Replay.bat +9 -0
  798. data/install/tools/ScriptRunner +16 -0
  799. data/install/tools/ScriptRunner.bat +9 -0
  800. data/install/tools/TableManager +16 -0
  801. data/install/tools/TableManager.bat +9 -0
  802. data/install/tools/TestRunner +16 -0
  803. data/install/tools/TestRunner.bat +9 -0
  804. data/install/tools/TlmExtractor +16 -0
  805. data/install/tools/TlmExtractor.bat +9 -0
  806. data/install/tools/TlmGrapher +16 -0
  807. data/install/tools/TlmGrapher.bat +9 -0
  808. data/install/tools/TlmViewer +16 -0
  809. data/install/tools/TlmViewer.bat +9 -0
  810. data/install/tools/ToolLaunch.bat +72 -0
  811. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  812. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -0
  813. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -0
  814. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  815. data/install/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  816. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  817. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -0
  818. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -0
  819. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  820. data/install/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  821. data/install/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  822. data/install/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  823. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  824. data/install/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  825. data/install/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  826. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  827. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -0
  828. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -0
  829. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  830. data/install/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  831. data/install/tools/mac/ConfigEditor.app/Contents/Info.plist +38 -0
  832. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/ConfigEditor.rb +16 -0
  833. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +10 -0
  834. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/tool_launch.rb +38 -0
  835. data/install/tools/mac/ConfigEditor.app/Contents/Resources/appIcon.icns +0 -0
  836. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  837. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -0
  838. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -0
  839. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  840. data/install/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  841. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  842. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -0
  843. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -0
  844. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  845. data/install/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  846. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  847. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -0
  848. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -0
  849. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  850. data/install/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  851. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  852. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -0
  853. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -0
  854. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  855. data/install/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  856. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  857. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -0
  858. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -0
  859. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  860. data/install/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  861. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  862. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -0
  863. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -0
  864. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  865. data/install/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  866. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -0
  867. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -0
  868. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -0
  869. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  870. data/install/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  871. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  872. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -0
  873. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -0
  874. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  875. data/install/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  876. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  877. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -0
  878. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -0
  879. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  880. data/install/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  881. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  882. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -0
  883. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -0
  884. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  885. data/install/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  886. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  887. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -0
  888. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -0
  889. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  890. data/install/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  891. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  892. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -0
  893. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -0
  894. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  895. data/install/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  896. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  897. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -0
  898. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -0
  899. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  900. data/install/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  901. data/install/tools/tool_launch.rb +38 -0
  902. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -0
  903. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -0
  904. data/lib/cosmos/config/config_parser.rb +506 -0
  905. data/lib/cosmos/config/meta_config_parser.rb +57 -0
  906. data/lib/cosmos/conversions/conversion.rb +52 -0
  907. data/lib/cosmos/conversions/generic_conversion.rb +67 -0
  908. data/lib/cosmos/conversions/new_packet_log_conversion.rb +52 -0
  909. data/lib/cosmos/conversions/packet_time_formatted_conversion.rb +38 -0
  910. data/lib/cosmos/conversions/packet_time_seconds_conversion.rb +38 -0
  911. data/lib/cosmos/conversions/polynomial_conversion.rb +79 -0
  912. data/lib/cosmos/conversions/processor_conversion.rb +56 -0
  913. data/lib/cosmos/conversions/received_count_conversion.rb +33 -0
  914. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -0
  915. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -0
  916. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +139 -0
  917. data/lib/cosmos/conversions/unix_time_conversion.rb +57 -0
  918. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -0
  919. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -0
  920. data/lib/cosmos/conversions.rb +15 -0
  921. data/lib/cosmos/core_ext/array.rb +397 -0
  922. data/lib/cosmos/core_ext/class.rb +63 -0
  923. data/lib/cosmos/core_ext/cosmos_io.rb +46 -0
  924. data/lib/cosmos/core_ext/exception.rb +52 -0
  925. data/lib/cosmos/core_ext/file.rb +76 -0
  926. data/lib/cosmos/core_ext/hash.rb +28 -0
  927. data/lib/cosmos/core_ext/io.rb +122 -0
  928. data/lib/cosmos/core_ext/kernel.rb +33 -0
  929. data/lib/cosmos/core_ext/math.rb +119 -0
  930. data/lib/cosmos/core_ext/matrix.rb +149 -0
  931. data/lib/cosmos/core_ext/objectspace.rb +27 -0
  932. data/lib/cosmos/core_ext/range.rb +18 -0
  933. data/lib/cosmos/core_ext/socket.rb +32 -0
  934. data/lib/cosmos/core_ext/string.rb +351 -0
  935. data/lib/cosmos/core_ext/stringio.rb +24 -0
  936. data/lib/cosmos/core_ext/time.rb +483 -0
  937. data/lib/cosmos/core_ext.rb +18 -0
  938. data/lib/cosmos/dart/.rspec +1 -0
  939. data/lib/cosmos/dart/Rakefile +7 -0
  940. data/lib/cosmos/dart/app/assets/config/manifest.js +4 -0
  941. data/lib/cosmos/dart/app/assets/images/.keep +0 -0
  942. data/lib/cosmos/dart/app/assets/javascripts/application.js +13 -0
  943. data/lib/cosmos/dart/app/assets/javascripts/cable.js +13 -0
  944. data/lib/cosmos/dart/app/assets/stylesheets/application.css.scss +15 -0
  945. data/lib/cosmos/dart/app/channels/application_cable/channel.rb +4 -0
  946. data/lib/cosmos/dart/app/channels/application_cable/connection.rb +4 -0
  947. data/lib/cosmos/dart/app/controllers/application_controller.rb +3 -0
  948. data/lib/cosmos/dart/app/jobs/application_job.rb +2 -0
  949. data/lib/cosmos/dart/app/mailers/application_mailer.rb +4 -0
  950. data/lib/cosmos/dart/app/models/application_record.rb +3 -0
  951. data/lib/cosmos/dart/app/models/item.rb +6 -0
  952. data/lib/cosmos/dart/app/models/item_to_decom_table_mapping.rb +9 -0
  953. data/lib/cosmos/dart/app/models/packet.rb +4 -0
  954. data/lib/cosmos/dart/app/models/packet_config.rb +7 -0
  955. data/lib/cosmos/dart/app/models/packet_log.rb +3 -0
  956. data/lib/cosmos/dart/app/models/packet_log_entry.rb +41 -0
  957. data/lib/cosmos/dart/app/models/status.rb +2 -0
  958. data/lib/cosmos/dart/app/models/system_config.rb +2 -0
  959. data/lib/cosmos/dart/app/models/target.rb +4 -0
  960. data/lib/cosmos/dart/app/views/layouts/application.html.erb +14 -0
  961. data/lib/cosmos/dart/app/views/layouts/mailer.html.erb +13 -0
  962. data/lib/cosmos/dart/app/views/layouts/mailer.text.erb +1 -0
  963. data/lib/cosmos/dart/bin/bundle +3 -0
  964. data/lib/cosmos/dart/bin/rails +4 -0
  965. data/lib/cosmos/dart/bin/rake +4 -0
  966. data/lib/cosmos/dart/bin/setup +34 -0
  967. data/lib/cosmos/dart/bin/update +29 -0
  968. data/lib/cosmos/dart/config/application.rb +29 -0
  969. data/lib/cosmos/dart/config/boot.rb +3 -0
  970. data/lib/cosmos/dart/config/cable.yml +9 -0
  971. data/lib/cosmos/dart/config/database.yml +25 -0
  972. data/lib/cosmos/dart/config/environment.rb +5 -0
  973. data/lib/cosmos/dart/config/environments/development.rb +62 -0
  974. data/lib/cosmos/dart/config/environments/production.rb +84 -0
  975. data/lib/cosmos/dart/config/environments/test.rb +42 -0
  976. data/lib/cosmos/dart/config/initializers/application_controller_renderer.rb +6 -0
  977. data/lib/cosmos/dart/config/initializers/assets.rb +12 -0
  978. data/lib/cosmos/dart/config/initializers/backtrace_silencers.rb +7 -0
  979. data/lib/cosmos/dart/config/initializers/cookies_serializer.rb +5 -0
  980. data/lib/cosmos/dart/config/initializers/filter_parameter_logging.rb +4 -0
  981. data/lib/cosmos/dart/config/initializers/inflections.rb +16 -0
  982. data/lib/cosmos/dart/config/initializers/mime_types.rb +4 -0
  983. data/lib/cosmos/dart/config/initializers/new_framework_defaults.rb +25 -0
  984. data/lib/cosmos/dart/config/initializers/session_store.rb +3 -0
  985. data/lib/cosmos/dart/config/initializers/wrap_parameters.rb +14 -0
  986. data/lib/cosmos/dart/config/locales/en.yml +23 -0
  987. data/lib/cosmos/dart/config/puma.rb +47 -0
  988. data/lib/cosmos/dart/config/routes.rb +3 -0
  989. data/lib/cosmos/dart/config/secrets.yml +22 -0
  990. data/lib/cosmos/dart/config.ru +5 -0
  991. data/lib/cosmos/dart/db/migrate/20170406172907_create_targets.rb +8 -0
  992. data/lib/cosmos/dart/db/migrate/20170406172927_create_packets.rb +10 -0
  993. data/lib/cosmos/dart/db/migrate/20170406172937_create_packet_logs.rb +9 -0
  994. data/lib/cosmos/dart/db/migrate/20170406172943_create_packet_log_entries.rb +16 -0
  995. data/lib/cosmos/dart/db/migrate/20170406183500_change_packet_log_entries_primary_key.rb +5 -0
  996. data/lib/cosmos/dart/db/migrate/20170407153618_add_unique_requirements.rb +7 -0
  997. data/lib/cosmos/dart/db/migrate/20170511155447_add_meta_id_to_packet_log_entries.rb +6 -0
  998. data/lib/cosmos/dart/db/migrate/20170523185056_rename_received_time_and_add_is_tlm_to_packet_log_entries.rb +7 -0
  999. data/lib/cosmos/dart/db/migrate/20170525201157_create_items.rb +10 -0
  1000. data/lib/cosmos/dart/db/migrate/20170525201315_create_system_configs.rb +9 -0
  1001. data/lib/cosmos/dart/db/migrate/20170525201624_create_packet_configs.rb +11 -0
  1002. data/lib/cosmos/dart/db/migrate/20170525201745_create_item_to_decom_table_mappings.rb +12 -0
  1003. data/lib/cosmos/dart/db/migrate/20170525201939_create_decom_tables.rb +12 -0
  1004. data/lib/cosmos/dart/db/migrate/20170525202051_add_decom_state_to_packet_log_entry.rb +5 -0
  1005. data/lib/cosmos/dart/db/migrate/20170913160409_update_items.rb +6 -0
  1006. data/lib/cosmos/dart/db/migrate/20170913160558_update_item_to_decom_table_mapping.rb +11 -0
  1007. data/lib/cosmos/dart/db/migrate/20170913160916_udpate_decom_table.rb +6 -0
  1008. data/lib/cosmos/dart/db/migrate/20170913212026_add_ready_to_packet_configs.rb +5 -0
  1009. data/lib/cosmos/dart/db/migrate/20170913223556_modify_tables.rb +9 -0
  1010. data/lib/cosmos/dart/db/migrate/20170914215744_modify_mapping_table.rb +6 -0
  1011. data/lib/cosmos/dart/db/migrate/20170919201433_add_system_config_id_to_packet_config.rb +11 -0
  1012. data/lib/cosmos/dart/db/migrate/20170919210307_add_max_table_index_to_packet_configs.rb +5 -0
  1013. data/lib/cosmos/dart/db/migrate/20171215225546_add_ready_to_packet_log_entries.rb +5 -0
  1014. data/lib/cosmos/dart/db/migrate/20180116214338_add_index_for_ple_ready_to_packet_log_entries.rb +5 -0
  1015. data/lib/cosmos/dart/db/migrate/20180423205644_create_statuses.rb +22 -0
  1016. data/lib/cosmos/dart/db/migrate/20180425211340_add_decom_state_index.rb +5 -0
  1017. data/lib/cosmos/dart/db/migrate/20180509204705_remove_indexes.rb +29 -0
  1018. data/lib/cosmos/dart/db/migrate/20180510160002_remove_timestamps_from_ples.rb +6 -0
  1019. data/lib/cosmos/dart/db/migrate/20180511194944_add_packet_log_id_to_tables.rb +18 -0
  1020. data/lib/cosmos/dart/db/schema.rb +109 -0
  1021. data/lib/cosmos/dart/db/seeds.rb +15 -0
  1022. data/lib/cosmos/dart/examples/dart_decom_client.rb +45 -0
  1023. data/lib/cosmos/dart/examples/dart_stream_client.rb +97 -0
  1024. data/lib/cosmos/dart/lib/dart_common.rb +755 -0
  1025. data/lib/cosmos/dart/lib/dart_constants.rb +15 -0
  1026. data/lib/cosmos/dart/lib/dart_database_cleaner.rb +223 -0
  1027. data/lib/cosmos/dart/lib/dart_decom_query.rb +285 -0
  1028. data/lib/cosmos/dart/lib/dart_decommutator.rb +304 -0
  1029. data/lib/cosmos/dart/lib/dart_importer.rb +184 -0
  1030. data/lib/cosmos/dart/lib/dart_logging.rb +50 -0
  1031. data/lib/cosmos/dart/lib/dart_master_query.rb +71 -0
  1032. data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +157 -0
  1033. data/lib/cosmos/dart/lib/dart_reducer_manager.rb +116 -0
  1034. data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +305 -0
  1035. data/lib/cosmos/dart/lib/dart_tcpip_server_interface.rb +142 -0
  1036. data/lib/cosmos/dart/processes/dart.rb +148 -0
  1037. data/lib/cosmos/dart/processes/dart_decom_server.rb +40 -0
  1038. data/lib/cosmos/dart/processes/dart_import.rb +64 -0
  1039. data/lib/cosmos/dart/processes/dart_ingester.rb +132 -0
  1040. data/lib/cosmos/dart/processes/dart_master.rb +44 -0
  1041. data/lib/cosmos/dart/processes/dart_reducer.rb +28 -0
  1042. data/lib/cosmos/dart/processes/dart_stream_server.rb +32 -0
  1043. data/lib/cosmos/dart/processes/dart_util.rb +262 -0
  1044. data/lib/cosmos/dart/processes/dart_worker.rb +38 -0
  1045. data/lib/cosmos/dart/spec/dart/dart_common_spec.rb +333 -0
  1046. data/lib/cosmos/dart/spec/dart/dart_database_cleaner_spec.rb +455 -0
  1047. data/lib/cosmos/dart/spec/dart/dart_decom_query_spec.rb +154 -0
  1048. data/lib/cosmos/dart/spec/dart/dart_decommutator_spec.rb +337 -0
  1049. data/lib/cosmos/dart/spec/dart/dart_importer_spec.rb +84 -0
  1050. data/lib/cosmos/dart/spec/dart/dart_logging_spec.rb +30 -0
  1051. data/lib/cosmos/dart/spec/dart/dart_packet_log_writer_spec.rb +152 -0
  1052. data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +290 -0
  1053. data/lib/cosmos/dart/spec/dart/dart_tcpip_server_interface_spec.rb +240 -0
  1054. data/lib/cosmos/dart/spec/rails_helper.rb +60 -0
  1055. data/lib/cosmos/dart/spec/spec_helper.rb +139 -0
  1056. data/lib/cosmos/ext/.keep +0 -0
  1057. data/lib/cosmos/gui/choosers/combobox_chooser.rb +141 -0
  1058. data/lib/cosmos/gui/choosers/file_chooser.rb +85 -0
  1059. data/lib/cosmos/gui/choosers/float_chooser.rb +67 -0
  1060. data/lib/cosmos/gui/choosers/integer_chooser.rb +69 -0
  1061. data/lib/cosmos/gui/choosers/string_chooser.rb +35 -0
  1062. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -0
  1063. data/lib/cosmos/gui/choosers/value_chooser.rb +67 -0
  1064. data/lib/cosmos/gui/dialogs/about_dialog.rb +166 -0
  1065. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +140 -0
  1066. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +51 -0
  1067. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +167 -0
  1068. data/lib/cosmos/gui/dialogs/dart_dialog.rb +60 -0
  1069. data/lib/cosmos/gui/dialogs/details_dialog.rb +205 -0
  1070. data/lib/cosmos/gui/dialogs/exception_dialog.rb +121 -0
  1071. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +60 -0
  1072. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +272 -0
  1073. data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +143 -0
  1074. data/lib/cosmos/gui/dialogs/legal_dialog.rb +184 -0
  1075. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +97 -0
  1076. data/lib/cosmos/gui/dialogs/progress_dialog.rb +313 -0
  1077. data/lib/cosmos/gui/dialogs/pry_dialog.rb +169 -0
  1078. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +48 -0
  1079. data/lib/cosmos/gui/dialogs/select_dialog.rb +59 -0
  1080. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +159 -0
  1081. data/lib/cosmos/gui/dialogs/splash.rb +145 -0
  1082. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +202 -0
  1083. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +79 -0
  1084. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +110 -0
  1085. data/lib/cosmos/gui/line_graph/line_graph.rb +482 -0
  1086. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +36 -0
  1087. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +521 -0
  1088. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +112 -0
  1089. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +452 -0
  1090. data/lib/cosmos/gui/line_graph/line_graph_script.rb +81 -0
  1091. data/lib/cosmos/gui/line_graph/lines.rb +304 -0
  1092. data/lib/cosmos/gui/line_graph/overview_graph.rb +474 -0
  1093. data/lib/cosmos/gui/opengl/earth_model.rb +25 -0
  1094. data/lib/cosmos/gui/opengl/gl_bounds.rb +55 -0
  1095. data/lib/cosmos/gui/opengl/gl_light.rb +38 -0
  1096. data/lib/cosmos/gui/opengl/gl_material.rb +28 -0
  1097. data/lib/cosmos/gui/opengl/gl_scene.rb +78 -0
  1098. data/lib/cosmos/gui/opengl/gl_shape.rb +148 -0
  1099. data/lib/cosmos/gui/opengl/gl_viewer.rb +715 -0
  1100. data/lib/cosmos/gui/opengl/gl_viewport.rb +34 -0
  1101. data/lib/cosmos/gui/opengl/moon_model.rb +25 -0
  1102. data/lib/cosmos/gui/opengl/opengl.rb +14 -0
  1103. data/lib/cosmos/gui/opengl/stl_reader.rb +210 -0
  1104. data/lib/cosmos/gui/opengl/stl_shape.rb +127 -0
  1105. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +204 -0
  1106. data/lib/cosmos/gui/qt.rb +858 -0
  1107. data/lib/cosmos/gui/qt_tool.rb +524 -0
  1108. data/lib/cosmos/gui/text/completion.rb +403 -0
  1109. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -0
  1110. data/lib/cosmos/gui/text/completion_text_edit.rb +198 -0
  1111. data/lib/cosmos/gui/text/ruby_editor.rb +505 -0
  1112. data/lib/cosmos/gui/utilities/analyze_log.rb +153 -0
  1113. data/lib/cosmos/gui/utilities/classification_banner.rb +60 -0
  1114. data/lib/cosmos/gui/utilities/screenshot.rb +33 -0
  1115. data/lib/cosmos/gui/utilities/script_module_gui.rb +390 -0
  1116. data/lib/cosmos/gui/widgets/dart_frame.rb +142 -0
  1117. data/lib/cosmos/gui/widgets/dart_meta_frame.rb +145 -0
  1118. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +171 -0
  1119. data/lib/cosmos/gui/widgets/packet_log_frame.rb +374 -0
  1120. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +99 -0
  1121. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +134 -0
  1122. data/lib/cosmos/interfaces/dart_status_interface.rb +91 -0
  1123. data/lib/cosmos/interfaces/interface.rb +456 -0
  1124. data/lib/cosmos/interfaces/linc_interface.rb +459 -0
  1125. data/lib/cosmos/interfaces/protocols/burst_protocol.rb +183 -0
  1126. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +183 -0
  1127. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +144 -0
  1128. data/lib/cosmos/interfaces/protocols/ignore_packet_protocol.rb +46 -0
  1129. data/lib/cosmos/interfaces/protocols/length_protocol.rb +154 -0
  1130. data/lib/cosmos/interfaces/protocols/override_protocol.rb +52 -0
  1131. data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +187 -0
  1132. data/lib/cosmos/interfaces/protocols/protocol.rb +73 -0
  1133. data/lib/cosmos/interfaces/protocols/template_protocol.rb +253 -0
  1134. data/lib/cosmos/interfaces/protocols/terminated_protocol.rb +83 -0
  1135. data/lib/cosmos/interfaces/serial_interface.rb +91 -0
  1136. data/lib/cosmos/interfaces/simulated_target_interface.rb +149 -0
  1137. data/lib/cosmos/interfaces/stream_interface.rb +65 -0
  1138. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -0
  1139. data/lib/cosmos/interfaces/tcpip_server_interface.rb +624 -0
  1140. data/lib/cosmos/interfaces/udp_interface.rb +154 -0
  1141. data/lib/cosmos/interfaces.rb +24 -0
  1142. data/lib/cosmos/io/buffered_file.rb +100 -0
  1143. data/lib/cosmos/io/cosmos_snmp.rb +50 -0
  1144. data/lib/cosmos/io/io_multiplexer.rb +75 -0
  1145. data/lib/cosmos/io/json_drb.rb +307 -0
  1146. data/lib/cosmos/io/json_drb_object.rb +172 -0
  1147. data/lib/cosmos/io/json_drb_rack.rb +99 -0
  1148. data/lib/cosmos/io/json_rpc.rb +394 -0
  1149. data/lib/cosmos/io/posix_serial_driver.rb +187 -0
  1150. data/lib/cosmos/io/raw_logger.rb +170 -0
  1151. data/lib/cosmos/io/raw_logger_pair.rb +71 -0
  1152. data/lib/cosmos/io/serial_driver.rb +101 -0
  1153. data/lib/cosmos/io/stderr.rb +36 -0
  1154. data/lib/cosmos/io/stdout.rb +36 -0
  1155. data/lib/cosmos/io/udp_sockets.rb +196 -0
  1156. data/lib/cosmos/io/win32_serial_driver.rb +187 -0
  1157. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -0
  1158. data/lib/cosmos/packet_logs/packet_log_reader.rb +504 -0
  1159. data/lib/cosmos/packet_logs/packet_log_writer.rb +353 -0
  1160. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -0
  1161. data/lib/cosmos/packet_logs.rb +6 -0
  1162. data/lib/cosmos/packets/binary_accessor.rb +1201 -0
  1163. data/lib/cosmos/packets/commands.rb +361 -0
  1164. data/lib/cosmos/packets/limits.rb +264 -0
  1165. data/lib/cosmos/packets/limits_response.rb +42 -0
  1166. data/lib/cosmos/packets/packet.rb +1075 -0
  1167. data/lib/cosmos/packets/packet_config.rb +614 -0
  1168. data/lib/cosmos/packets/packet_item.rb +442 -0
  1169. data/lib/cosmos/packets/packet_item_limits.rb +128 -0
  1170. data/lib/cosmos/packets/parsers/format_string_parser.rb +58 -0
  1171. data/lib/cosmos/packets/parsers/limits_parser.rb +147 -0
  1172. data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -0
  1173. data/lib/cosmos/packets/parsers/macro_parser.rb +121 -0
  1174. data/lib/cosmos/packets/parsers/packet_item_parser.rb +252 -0
  1175. data/lib/cosmos/packets/parsers/packet_parser.rb +124 -0
  1176. data/lib/cosmos/packets/parsers/processor_parser.rb +63 -0
  1177. data/lib/cosmos/packets/parsers/state_parser.rb +118 -0
  1178. data/lib/cosmos/packets/parsers/xtce_converter.rb +428 -0
  1179. data/lib/cosmos/packets/parsers/xtce_parser.rb +694 -0
  1180. data/lib/cosmos/packets/structure.rb +557 -0
  1181. data/lib/cosmos/packets/structure_item.rb +326 -0
  1182. data/lib/cosmos/packets/telemetry.rb +470 -0
  1183. data/lib/cosmos/processors/new_packet_log_processor.rb +39 -0
  1184. data/lib/cosmos/processors/processor.rb +76 -0
  1185. data/lib/cosmos/processors/statistics_processor.rb +72 -0
  1186. data/lib/cosmos/processors/watermark_processor.rb +49 -0
  1187. data/lib/cosmos/processors.rb +6 -0
  1188. data/lib/cosmos/script/api_shared.rb +995 -0
  1189. data/lib/cosmos/script/cmd_tlm_server.rb +216 -0
  1190. data/lib/cosmos/script/commands.rb +177 -0
  1191. data/lib/cosmos/script/extract.rb +141 -0
  1192. data/lib/cosmos/script/limits.rb +120 -0
  1193. data/lib/cosmos/script/replay.rb +60 -0
  1194. data/lib/cosmos/script/script.rb +149 -0
  1195. data/lib/cosmos/script/scripting.rb +146 -0
  1196. data/lib/cosmos/script/telemetry.rb +218 -0
  1197. data/lib/cosmos/script/tools.rb +121 -0
  1198. data/lib/cosmos/script.rb +9 -0
  1199. data/lib/cosmos/streams/serial_stream.rb +160 -0
  1200. data/lib/cosmos/streams/stream.rb +54 -0
  1201. data/lib/cosmos/streams/tcpip_client_stream.rb +113 -0
  1202. data/lib/cosmos/streams/tcpip_socket_stream.rb +186 -0
  1203. data/lib/cosmos/system/system.rb +1029 -0
  1204. data/lib/cosmos/system/target.rb +262 -0
  1205. data/lib/cosmos/system.rb +4 -0
  1206. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +470 -0
  1207. data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +94 -0
  1208. data/lib/cosmos/tools/cmd_sender/cmd_params.rb +382 -0
  1209. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +533 -0
  1210. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -0
  1211. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +769 -0
  1212. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +221 -0
  1213. data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +206 -0
  1214. data/lib/cosmos/tools/cmd_tlm_server/api.rb +1694 -0
  1215. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +54 -0
  1216. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +82 -0
  1217. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +785 -0
  1218. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +294 -0
  1219. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +650 -0
  1220. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +132 -0
  1221. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -0
  1222. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +216 -0
  1223. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +181 -0
  1224. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +163 -0
  1225. data/lib/cosmos/tools/cmd_tlm_server/gui/replay_tab.rb +319 -0
  1226. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +270 -0
  1227. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +93 -0
  1228. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +292 -0
  1229. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +153 -0
  1230. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +124 -0
  1231. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +161 -0
  1232. data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +511 -0
  1233. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +71 -0
  1234. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +144 -0
  1235. data/lib/cosmos/tools/config_editor/config_editor.rb +918 -0
  1236. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +686 -0
  1237. data/lib/cosmos/tools/config_editor/system_config_dialog.rb +158 -0
  1238. data/lib/cosmos/tools/data_viewer/data_viewer.rb +789 -0
  1239. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +121 -0
  1240. data/lib/cosmos/tools/data_viewer/dump_component.rb +34 -0
  1241. data/lib/cosmos/tools/data_viewer/text_component.rb +77 -0
  1242. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +182 -0
  1243. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +380 -0
  1244. data/lib/cosmos/tools/launcher/launcher.rb +195 -0
  1245. data/lib/cosmos/tools/launcher/launcher_config.rb +245 -0
  1246. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -0
  1247. data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -0
  1248. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +1029 -0
  1249. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -0
  1250. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -0
  1251. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +641 -0
  1252. data/lib/cosmos/tools/replay/replay.rb +17 -0
  1253. data/lib/cosmos/tools/script_runner/script_audit.rb +148 -0
  1254. data/lib/cosmos/tools/script_runner/script_runner.rb +1066 -0
  1255. data/lib/cosmos/tools/script_runner/script_runner_config.rb +53 -0
  1256. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1985 -0
  1257. data/lib/cosmos/tools/table_manager/table.rb +61 -0
  1258. data/lib/cosmos/tools/table_manager/table_config.rb +191 -0
  1259. data/lib/cosmos/tools/table_manager/table_item.rb +58 -0
  1260. data/lib/cosmos/tools/table_manager/table_item_parser.rb +48 -0
  1261. data/lib/cosmos/tools/table_manager/table_manager.rb +1152 -0
  1262. data/lib/cosmos/tools/table_manager/table_manager_core.rb +320 -0
  1263. data/lib/cosmos/tools/table_manager/table_parser.rb +75 -0
  1264. data/lib/cosmos/tools/test_runner/results_writer.rb +287 -0
  1265. data/lib/cosmos/tools/test_runner/test.rb +540 -0
  1266. data/lib/cosmos/tools/test_runner/test_runner.rb +1302 -0
  1267. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +353 -0
  1268. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -0
  1269. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1305 -0
  1270. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +535 -0
  1271. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +131 -0
  1272. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +92 -0
  1273. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -0
  1274. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -0
  1275. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -0
  1276. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +250 -0
  1277. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -0
  1278. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -0
  1279. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +210 -0
  1280. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +232 -0
  1281. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +503 -0
  1282. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +173 -0
  1283. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +21 -0
  1284. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +381 -0
  1285. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +191 -0
  1286. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -0
  1287. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -0
  1288. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -0
  1289. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +173 -0
  1290. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -0
  1291. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -0
  1292. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +209 -0
  1293. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -0
  1294. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -0
  1295. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -0
  1296. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -0
  1297. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +447 -0
  1298. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +164 -0
  1299. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -0
  1300. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -0
  1301. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -0
  1302. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +79 -0
  1303. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -0
  1304. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1079 -0
  1305. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +104 -0
  1306. data/lib/cosmos/tools/tlm_viewer/screen.rb +590 -0
  1307. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +615 -0
  1308. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +314 -0
  1309. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +109 -0
  1310. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +65 -0
  1311. data/lib/cosmos/tools/tlm_viewer/widgets/backgroundbutton_widget.rb +54 -0
  1312. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +56 -0
  1313. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -0
  1314. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +47 -0
  1315. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +84 -0
  1316. data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +78 -0
  1317. data/lib/cosmos/tools/tlm_viewer/widgets/canvasellipse_widget.rb +40 -0
  1318. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +48 -0
  1319. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +109 -0
  1320. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +45 -0
  1321. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +55 -0
  1322. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -0
  1323. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +67 -0
  1324. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +131 -0
  1325. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +40 -0
  1326. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +32 -0
  1327. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +31 -0
  1328. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +32 -0
  1329. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -0
  1330. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +30 -0
  1331. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +24 -0
  1332. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +31 -0
  1333. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +38 -0
  1334. data/lib/cosmos/tools/tlm_viewer/widgets/labelled_widget.rb +58 -0
  1335. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +37 -0
  1336. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +36 -0
  1337. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +58 -0
  1338. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +40 -0
  1339. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +36 -0
  1340. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +37 -0
  1341. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +36 -0
  1342. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +38 -0
  1343. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +32 -0
  1344. data/lib/cosmos/tools/tlm_viewer/widgets/led_widget.rb +108 -0
  1345. data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +163 -0
  1346. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +130 -0
  1347. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +108 -0
  1348. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +130 -0
  1349. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +62 -0
  1350. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +59 -0
  1351. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +114 -0
  1352. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +39 -0
  1353. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +41 -0
  1354. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +63 -0
  1355. data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +63 -0
  1356. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +35 -0
  1357. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +34 -0
  1358. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +32 -0
  1359. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +53 -0
  1360. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +25 -0
  1361. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +27 -0
  1362. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +56 -0
  1363. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +25 -0
  1364. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +86 -0
  1365. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +21 -0
  1366. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +125 -0
  1367. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +48 -0
  1368. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -0
  1369. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +36 -0
  1370. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +36 -0
  1371. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +36 -0
  1372. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +36 -0
  1373. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +37 -0
  1374. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +40 -0
  1375. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +270 -0
  1376. data/lib/cosmos/tools/tlm_viewer/widgets.rb +65 -0
  1377. data/lib/cosmos/top_level.rb +825 -0
  1378. data/lib/cosmos/utilities/crc.rb +271 -0
  1379. data/lib/cosmos/utilities/csv.rb +190 -0
  1380. data/lib/cosmos/utilities/logger.rb +137 -0
  1381. data/lib/cosmos/utilities/low_fragmentation_array.rb +19 -0
  1382. data/lib/cosmos/utilities/message_log.rb +80 -0
  1383. data/lib/cosmos/utilities/quaternion.rb +258 -0
  1384. data/lib/cosmos/utilities/ruby_lex_utils.rb +312 -0
  1385. data/lib/cosmos/utilities/simulated_target.rb +100 -0
  1386. data/lib/cosmos/utilities/sleeper.rb +44 -0
  1387. data/lib/cosmos/utilities.rb +11 -0
  1388. data/lib/cosmos/version.rb +12 -0
  1389. data/lib/cosmos/win32/excel.rb +123 -0
  1390. data/lib/cosmos/win32/win32.rb +381 -0
  1391. data/lib/cosmos/win32/win32_main.rb +325 -0
  1392. data/lib/cosmos.rb +63 -0
  1393. data/make_gems.sh +10 -0
  1394. data/roodi.yml +24 -0
  1395. data/run_gui_tests.bat +46 -0
  1396. data/spec/ccsds/ccsds_packet_spec.rb +67 -0
  1397. data/spec/ccsds/ccsds_parser_spec.rb +148 -0
  1398. data/spec/config/config_parser_spec.rb +399 -0
  1399. data/spec/conversions/conversion_spec.rb +31 -0
  1400. data/spec/conversions/generic_conversion_spec.rb +45 -0
  1401. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -0
  1402. data/spec/conversions/packet_time_formatted_conversion_spec.rb +58 -0
  1403. data/spec/conversions/packet_time_seconds_conversion_spec.rb +60 -0
  1404. data/spec/conversions/polynomial_conversion_spec.rb +40 -0
  1405. data/spec/conversions/processor_conversion_spec.rb +45 -0
  1406. data/spec/conversions/received_count_conversion_spec.rb +43 -0
  1407. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -0
  1408. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -0
  1409. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -0
  1410. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -0
  1411. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -0
  1412. data/spec/core_ext/array_spec.rb +247 -0
  1413. data/spec/core_ext/class_spec.rb +90 -0
  1414. data/spec/core_ext/cosmos_io_spec.rb +77 -0
  1415. data/spec/core_ext/exception_spec.rb +91 -0
  1416. data/spec/core_ext/file_spec.rb +72 -0
  1417. data/spec/core_ext/hash_spec.rb +24 -0
  1418. data/spec/core_ext/io_spec.rb +46 -0
  1419. data/spec/core_ext/kernel_spec.rb +54 -0
  1420. data/spec/core_ext/math_spec.rb +116 -0
  1421. data/spec/core_ext/matrix_spec.rb +127 -0
  1422. data/spec/core_ext/objectspace_spec.rb +32 -0
  1423. data/spec/core_ext/range_spec.rb +21 -0
  1424. data/spec/core_ext/socket_spec.rb +34 -0
  1425. data/spec/core_ext/string_spec.rb +239 -0
  1426. data/spec/core_ext/stringio_spec.rb +21 -0
  1427. data/spec/core_ext/time_spec.rb +222 -0
  1428. data/spec/gui/line_graph/line_clip_spec.rb +324 -0
  1429. data/spec/gui/qt_spec.rb +104 -0
  1430. data/spec/gui/utilities/script_module_gui_spec.rb +83 -0
  1431. data/spec/install/config/data/data.txt +1 -0
  1432. data/spec/install/config/system/system.txt +27 -0
  1433. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -0
  1434. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +113 -0
  1435. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -0
  1436. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -0
  1437. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -0
  1438. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -0
  1439. data/spec/install/config/targets/INST/screens/hs.txt +42 -0
  1440. data/spec/install/config/targets/INST/target.txt +12 -0
  1441. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  1442. data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +10 -0
  1443. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  1444. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  1445. data/spec/install/config/targets/SYSTEM/cmd_tlm_server.txt +6 -0
  1446. data/spec/install/config/targets/SYSTEM/screens/status.txt +12 -0
  1447. data/spec/install/config/targets/SYSTEM/target.txt +12 -0
  1448. data/spec/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +4 -0
  1449. data/spec/install/lib/README.txt +1 -0
  1450. data/spec/install/yaml_docs_spec.rb +132 -0
  1451. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +149 -0
  1452. data/spec/interfaces/interface_spec.rb +513 -0
  1453. data/spec/interfaces/linc_interface_spec.rb +243 -0
  1454. data/spec/interfaces/protocols/burst_protocol_spec.rb +318 -0
  1455. data/spec/interfaces/protocols/crc_protocol_spec.rb +825 -0
  1456. data/spec/interfaces/protocols/fixed_protocol_spec.rb +154 -0
  1457. data/spec/interfaces/protocols/ignore_packet_protocol_spec.rb +243 -0
  1458. data/spec/interfaces/protocols/length_protocol_spec.rb +587 -0
  1459. data/spec/interfaces/protocols/override_protocol_spec.rb +162 -0
  1460. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +368 -0
  1461. data/spec/interfaces/protocols/template_protocol_spec.rb +444 -0
  1462. data/spec/interfaces/protocols/terminated_protocol_spec.rb +174 -0
  1463. data/spec/interfaces/serial_interface_spec.rb +66 -0
  1464. data/spec/interfaces/simulated_target_interface_spec.rb +128 -0
  1465. data/spec/interfaces/tcpip_client_interface_spec.rb +60 -0
  1466. data/spec/interfaces/tcpip_server_interface_spec.rb +157 -0
  1467. data/spec/interfaces/udp_interface_spec.rb +249 -0
  1468. data/spec/io/buffered_file_spec.rb +146 -0
  1469. data/spec/io/io_multiplexer_spec.rb +102 -0
  1470. data/spec/io/json_drb_object_spec.rb +106 -0
  1471. data/spec/io/json_drb_rack_spec.rb +166 -0
  1472. data/spec/io/json_drb_spec.rb +251 -0
  1473. data/spec/io/json_rpc_spec.rb +270 -0
  1474. data/spec/io/posix_serial_driver_spec.rb +87 -0
  1475. data/spec/io/raw_logger_pair_spec.rb +76 -0
  1476. data/spec/io/raw_logger_spec.rb +138 -0
  1477. data/spec/io/serial_driver_spec.rb +64 -0
  1478. data/spec/io/stderr_spec.rb +32 -0
  1479. data/spec/io/stdout_spec.rb +32 -0
  1480. data/spec/io/udp_sockets_spec.rb +139 -0
  1481. data/spec/io/win32_serial_driver_spec.rb +129 -0
  1482. data/spec/packet_logs/packet_log_reader_spec.rb +607 -0
  1483. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -0
  1484. data/spec/packet_logs/packet_log_writer_spec.rb +227 -0
  1485. data/spec/packets/binary_accessor_spec.rb +2323 -0
  1486. data/spec/packets/commands_spec.rb +401 -0
  1487. data/spec/packets/limits_response_spec.rb +25 -0
  1488. data/spec/packets/limits_spec.rb +344 -0
  1489. data/spec/packets/packet_config_spec.rb +862 -0
  1490. data/spec/packets/packet_item_limits_spec.rb +161 -0
  1491. data/spec/packets/packet_item_spec.rb +450 -0
  1492. data/spec/packets/packet_spec.rb +1499 -0
  1493. data/spec/packets/parsers/format_string_parser_spec.rb +122 -0
  1494. data/spec/packets/parsers/limits_parser_spec.rb +293 -0
  1495. data/spec/packets/parsers/limits_response_parser_spec.rb +149 -0
  1496. data/spec/packets/parsers/macro_parser_spec.rb +220 -0
  1497. data/spec/packets/parsers/packet_item_parser_spec.rb +405 -0
  1498. data/spec/packets/parsers/packet_parser_spec.rb +99 -0
  1499. data/spec/packets/parsers/processor_parser_spec.rb +114 -0
  1500. data/spec/packets/parsers/state_parser_spec.rb +247 -0
  1501. data/spec/packets/parsers/xtce_parser_spec.rb +395 -0
  1502. data/spec/packets/structure_item_spec.rb +200 -0
  1503. data/spec/packets/structure_spec.rb +657 -0
  1504. data/spec/packets/telemetry_spec.rb +629 -0
  1505. data/spec/processors/new_packet_log_processor_spec.rb +39 -0
  1506. data/spec/processors/processor_spec.rb +55 -0
  1507. data/spec/processors/statistics_processor_spec.rb +95 -0
  1508. data/spec/processors/watermark_processor_spec.rb +51 -0
  1509. data/spec/script/cmd_tlm_server_spec.rb +194 -0
  1510. data/spec/script/commands_disconnect_spec.rb +258 -0
  1511. data/spec/script/commands_spec.rb +283 -0
  1512. data/spec/script/extract_spec.rb +166 -0
  1513. data/spec/script/limits_spec.rb +133 -0
  1514. data/spec/script/script_spec.rb +80 -0
  1515. data/spec/script/scripting_spec.rb +742 -0
  1516. data/spec/script/telemetry_spec.rb +186 -0
  1517. data/spec/script/tools_spec.rb +111 -0
  1518. data/spec/spec_helper.rb +248 -0
  1519. data/spec/streams/serial_stream_spec.rb +122 -0
  1520. data/spec/streams/stream_spec.rb +30 -0
  1521. data/spec/streams/tcpip_client_stream_spec.rb +65 -0
  1522. data/spec/streams/tcpip_socket_stream_spec.rb +231 -0
  1523. data/spec/system/system_spec.rb +1081 -0
  1524. data/spec/system/target_spec.rb +368 -0
  1525. data/spec/tools/cmd_tlm_server/api_spec.rb +1656 -0
  1526. data/spec/tools/cmd_tlm_server/background_task_spec.rb +44 -0
  1527. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +190 -0
  1528. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +785 -0
  1529. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +496 -0
  1530. data/spec/tools/cmd_tlm_server/commanding_spec.rb +171 -0
  1531. data/spec/tools/cmd_tlm_server/connections_spec.rb +231 -0
  1532. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +319 -0
  1533. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +248 -0
  1534. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +153 -0
  1535. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +139 -0
  1536. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +150 -0
  1537. data/spec/tools/cmd_tlm_server/routers_spec.rb +219 -0
  1538. data/spec/tools/launcher/launcher_config_spec.rb +474 -0
  1539. data/spec/tools/table_manager/table_config_spec.rb +225 -0
  1540. data/spec/tools/table_manager/table_item_parser_spec.rb +61 -0
  1541. data/spec/tools/table_manager/table_item_spec.rb +57 -0
  1542. data/spec/tools/table_manager/table_parser_spec.rb +96 -0
  1543. data/spec/tools/table_manager/table_spec.rb +90 -0
  1544. data/spec/tools/table_manager/tablemanager_core_spec.rb +556 -0
  1545. data/spec/tools/tlm_viewer/tlm_viewer_config_spec.rb +403 -0
  1546. data/spec/top_level/top_level_spec.rb +545 -0
  1547. data/spec/utilities/crc_spec.rb +45 -0
  1548. data/spec/utilities/csv_spec.rb +148 -0
  1549. data/spec/utilities/logger_spec.rb +102 -0
  1550. data/spec/utilities/message_log_spec.rb +84 -0
  1551. data/spec/utilities/quaternion_spec.rb +107 -0
  1552. data/spec/utilities/ruby_lex_utils_spec.rb +86 -0
  1553. data/tasks/gemfile_stats.rake +103 -0
  1554. data/tasks/manifest.rake +22 -0
  1555. data/tasks/spec.rake +23 -0
  1556. data/test/benchmarks/binary_accessor_benchmark.rb +14 -0
  1557. data/test/benchmarks/gsub_benchmark.rb +152 -0
  1558. data/test/benchmarks/is_a_benchmark.rb +34 -0
  1559. data/test/performance/PACKETS.bat +1 -0
  1560. data/test/performance/Rakefile +77 -0
  1561. data/test/performance/THREADS.bat +1 -0
  1562. data/test/performance/config/data/attitude.bin +0 -0
  1563. data/test/performance/config/data/crc.txt +215 -0
  1564. data/test/performance/config/data/diamond.STL +58 -0
  1565. data/test/performance/config/data/groundoff.gif +0 -0
  1566. data/test/performance/config/data/groundon.gif +0 -0
  1567. data/test/performance/config/data/hselectoff.gif +0 -0
  1568. data/test/performance/config/data/hselecton.gif +0 -0
  1569. data/test/performance/config/data/hswitchoff.gif +0 -0
  1570. data/test/performance/config/data/hswitchon.gif +0 -0
  1571. data/test/performance/config/data/meta_init.txt +4 -0
  1572. data/test/performance/config/data/position.bin +0 -0
  1573. data/test/performance/config/data/poweroff.gif +0 -0
  1574. data/test/performance/config/data/poweron.gif +0 -0
  1575. data/test/performance/config/data/satellite.gif +0 -0
  1576. data/test/performance/config/data/tada.wav +0 -0
  1577. data/test/performance/config/data/vswitchoff.gif +0 -0
  1578. data/test/performance/config/data/vswitchon.gif +0 -0
  1579. data/test/performance/config/system/system.txt +0 -0
  1580. data/test/performance/config/system/system_packets.txt +38 -0
  1581. data/test/performance/config/system/system_threads.txt +58 -0
  1582. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -0
  1583. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  1584. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  1585. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -0
  1586. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -0
  1587. data/test/performance/config/targets/COSMOS/target.txt +11 -0
  1588. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -0
  1589. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -0
  1590. data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -0
  1591. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -0
  1592. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -0
  1593. data/test/performance/config/targets/PACKET/screens/status.txt +25 -0
  1594. data/test/performance/config/targets/PACKET/target.txt +28 -0
  1595. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -0
  1596. data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -0
  1597. data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -0
  1598. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -0
  1599. data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -0
  1600. data/test/performance/config/targets/THREAD/screens/status.txt +25 -0
  1601. data/test/performance/config/targets/THREAD/target.txt +7 -0
  1602. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -0
  1603. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -0
  1604. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -0
  1605. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  1606. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  1607. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  1608. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  1609. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  1610. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  1611. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  1612. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  1613. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  1614. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  1615. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  1616. data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  1617. data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  1618. data/test/performance/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  1619. data/test/performance/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  1620. data/test/performance/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  1621. data/test/performance/config/tools/handbook_creator/default_toc.xsl +59 -0
  1622. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -0
  1623. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  1624. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  1625. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  1626. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -0
  1627. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  1628. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  1629. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  1630. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  1631. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  1632. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  1633. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  1634. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  1635. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -0
  1636. data/test/performance/config/tools/launcher/launcher_packets.txt +34 -0
  1637. data/test/performance/config/tools/launcher/launcher_threads.txt +83 -0
  1638. data/test/performance/config/tools/limits_monitor/README.txt +1 -0
  1639. data/test/performance/config/tools/opengl_builder/README.txt +1 -0
  1640. data/test/performance/config/tools/script_runner/script_runner.txt +3 -0
  1641. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -0
  1642. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  1643. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -0
  1644. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -0
  1645. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -0
  1646. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -0
  1647. data/test/performance/config/tools/test_runner/test_runner.txt +17 -0
  1648. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  1649. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  1650. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  1651. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  1652. data/test/performance/config/tools/tlm_grapher/README.txt +1 -0
  1653. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -0
  1654. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -0
  1655. data/test/performance/lib/packet_target.rb +126 -0
  1656. data/test/performance/lib/thread_target.rb +120 -0
  1657. data/test/performance/lib/user_version.rb +3 -0
  1658. data/test/performance/outputs/handbooks/README.txt +1 -0
  1659. data/test/performance/outputs/logs/README.txt +1 -0
  1660. data/test/performance/outputs/saved_config/README.txt +1 -0
  1661. data/test/performance/outputs/tables/README.txt +1 -0
  1662. data/test/performance/outputs/tmp/README.txt +1 -0
  1663. data/test/performance/procedures/checks.rb +11 -0
  1664. data/test/performance/procedures/clear_util.rb +7 -0
  1665. data/test/performance/procedures/collect.rb +18 -0
  1666. data/test/performance/procedures/collect_util.rb +14 -0
  1667. data/test/performance/procedures/cosmos_api_test.rb +293 -0
  1668. data/test/performance/procedures/disconnect.rb +29 -0
  1669. data/test/performance/procedures/example_test.rb +182 -0
  1670. data/test/performance/procedures/plot_test.rb +8 -0
  1671. data/test/performance/procedures/procedure.rb +3 -0
  1672. data/test/performance/procedures/run_example_test.rb +3 -0
  1673. data/test/performance/procedures/test.rb +51 -0
  1674. data/test/performance/tools/CmdExtractor +14 -0
  1675. data/test/performance/tools/CmdExtractor.bat +59 -0
  1676. data/test/performance/tools/CmdSender +14 -0
  1677. data/test/performance/tools/CmdSender.bat +59 -0
  1678. data/test/performance/tools/CmdTlmServer +16 -0
  1679. data/test/performance/tools/CmdTlmServer.bat +59 -0
  1680. data/test/performance/tools/CmdTlmServerMemProf +20 -0
  1681. data/test/performance/tools/CmdTlmServerMemProf.bat +59 -0
  1682. data/test/performance/tools/DataViewer +14 -0
  1683. data/test/performance/tools/DataViewer.bat +59 -0
  1684. data/test/performance/tools/HandbookCreator +14 -0
  1685. data/test/performance/tools/HandbookCreator.bat +61 -0
  1686. data/test/performance/tools/Launcher +14 -0
  1687. data/test/performance/tools/Launcher.bat +59 -0
  1688. data/test/performance/tools/LimitsMonitor +14 -0
  1689. data/test/performance/tools/LimitsMonitor.bat +59 -0
  1690. data/test/performance/tools/OpenGLBuilder +14 -0
  1691. data/test/performance/tools/OpenGLBuilder.bat +59 -0
  1692. data/test/performance/tools/PacketTarget +14 -0
  1693. data/test/performance/tools/PacketTarget.bat +59 -0
  1694. data/test/performance/tools/PacketViewer +14 -0
  1695. data/test/performance/tools/PacketViewer.bat +59 -0
  1696. data/test/performance/tools/Replay +14 -0
  1697. data/test/performance/tools/Replay.bat +59 -0
  1698. data/test/performance/tools/ScpiTarget +14 -0
  1699. data/test/performance/tools/ScpiTarget.bat +59 -0
  1700. data/test/performance/tools/ScriptRunner +14 -0
  1701. data/test/performance/tools/ScriptRunner.bat +59 -0
  1702. data/test/performance/tools/TableManager +14 -0
  1703. data/test/performance/tools/TableManager.bat +59 -0
  1704. data/test/performance/tools/TestRunner +14 -0
  1705. data/test/performance/tools/TestRunner.bat +59 -0
  1706. data/test/performance/tools/ThreadTarget +14 -0
  1707. data/test/performance/tools/ThreadTarget.bat +59 -0
  1708. data/test/performance/tools/TlmExtractor +14 -0
  1709. data/test/performance/tools/TlmExtractor.bat +59 -0
  1710. data/test/performance/tools/TlmGrapher +14 -0
  1711. data/test/performance/tools/TlmGrapher.bat +59 -0
  1712. data/test/performance/tools/TlmGrapherMemProf +19 -0
  1713. data/test/performance/tools/TlmGrapherMemProf.bat +59 -0
  1714. data/test/performance/tools/TlmViewer +14 -0
  1715. data/test/performance/tools/TlmViewer.bat +59 -0
  1716. data/test/performance/tools/TlmViewerMemProf +19 -0
  1717. data/test/performance/tools/TlmViewerMemProf.bat +59 -0
  1718. data/test/performance/tools/identify_performance.rb +82 -0
  1719. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  1720. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
  1721. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
  1722. data/test/performance/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  1723. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  1724. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
  1725. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
  1726. data/test/performance/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  1727. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  1728. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
  1729. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
  1730. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  1731. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  1732. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
  1733. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
  1734. data/test/performance/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  1735. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  1736. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
  1737. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
  1738. data/test/performance/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  1739. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  1740. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
  1741. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
  1742. data/test/performance/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  1743. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  1744. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
  1745. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
  1746. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  1747. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  1748. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
  1749. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
  1750. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  1751. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  1752. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
  1753. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
  1754. data/test/performance/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  1755. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -0
  1756. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
  1757. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
  1758. data/test/performance/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  1759. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  1760. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
  1761. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
  1762. data/test/performance/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  1763. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  1764. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
  1765. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
  1766. data/test/performance/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  1767. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  1768. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
  1769. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
  1770. data/test/performance/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  1771. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  1772. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
  1773. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
  1774. data/test/performance/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  1775. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  1776. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
  1777. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
  1778. data/test/performance/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  1779. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  1780. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
  1781. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
  1782. data/test/performance/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  1783. metadata +2286 -0
@@ -0,0 +1,1985 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos'
12
+ require 'cosmos/script'
13
+ require 'cosmos/gui/utilities/script_module_gui'
14
+ require 'cosmos/gui/dialogs/splash'
15
+ require 'cosmos/gui/dialogs/exception_dialog'
16
+ require 'cosmos/gui/text/completion'
17
+ require 'cosmos/gui/text/completion_line_edit'
18
+ require 'cosmos/gui/text/ruby_editor'
19
+ require 'cosmos/gui/dialogs/progress_dialog'
20
+ require 'cosmos/gui/widgets/realtime_button_bar'
21
+ require 'cosmos/gui/dialogs/find_replace_dialog'
22
+ require 'cosmos/gui/choosers/file_chooser'
23
+ require 'cosmos/io/stdout'
24
+ require 'cosmos/io/stderr'
25
+
26
+ module Cosmos
27
+
28
+ Cosmos.disable_warnings do
29
+ module Script
30
+ def prompt_for_script_abort
31
+ ScriptRunnerFrame.instance.perform_pause
32
+ return false # Not aborted - Retry
33
+ end
34
+ end
35
+ end
36
+
37
+ # Create a dialog with an embedded ScriptRunnerFrame used to execute
38
+ # a snippet of code while the main script is paused.
39
+ class ScriptRunnerDialog < Qt::Dialog
40
+ attr_reader :script_runner_frame
41
+
42
+ def initialize(parent,
43
+ title,
44
+ default_tab_text = 'Untitled')
45
+ super(parent)
46
+ setWindowTitle(title)
47
+ setMinimumWidth(parent.width * 0.8)
48
+ setMinimumHeight(parent.height * 0.6)
49
+
50
+ # Create script runner frame
51
+ @script_runner_frame = ScriptRunnerFrame.new(self, default_tab_text)
52
+ layout = Qt::VBoxLayout.new
53
+ layout.addWidget(@script_runner_frame)
54
+ setLayout(layout)
55
+ end
56
+
57
+ # Executes the given text and closes when complete
58
+ def execute_text_and_close_on_complete(text, text_binding = nil)
59
+ @script_runner_frame.set_text(text)
60
+ @script_runner_frame.run_and_close_on_complete(text_binding)
61
+ exec
62
+ dispose
63
+ end
64
+
65
+ def reject
66
+ # Don't allow the dialog to close if we're running
67
+ return if @script_runner_frame.running?
68
+ super
69
+ end
70
+ end
71
+
72
+ # Frame within ScriptRunner and TestRunner that handles instrumenting the
73
+ # script and running it. This includes handling all the user interation and
74
+ # how to run, step, pause, and stop a script.
75
+ class ScriptRunnerFrame < Qt::Widget
76
+ slots 'context_menu(const QPoint&)'
77
+ slots 'undo_available(bool)'
78
+ slots 'breakpoint_set(int)'
79
+ slots 'breakpoint_cleared(int)'
80
+ slots 'breakpoints_cleared()'
81
+ signals 'undoAvailable(bool)'
82
+ signals 'modificationChanged(bool)'
83
+
84
+ CMD_KEYWORDS = %w(cmd cmd_no_range_check cmd_no_hazardous_check cmd_no_checks)
85
+ TLM_KEYWORDS = %w(tlm tlm_raw tlm_formatted tlm_with_units limits_enabled? \
86
+ enable_limits disable_limits wait_tolerance wait_tolerance_raw \
87
+ check_tolerance check_tolerance_raw wait_check_tolerance \
88
+ wait_check_tolerance_raw)
89
+ SET_TLM_KEYWORDS = %w(set_tlm set_tlm_raw override_tlm_raw normalize_tlm_raw)
90
+ CHECK_KEYWORDS = %w(check check_raw wait wait_raw wait_check wait_check_raw)
91
+
92
+ INSTANCE_VARS = %w(__return_val close_on_complete error eval_error filename instrumented_script \
93
+ line_number line_offset saved_instance saved_run_thread text text_binding uncaught_exception)
94
+
95
+ attr_accessor :use_instrumentation
96
+ attr_accessor :change_callback
97
+ attr_accessor :run_callback
98
+ attr_accessor :stop_callback
99
+ attr_accessor :error_callback
100
+ attr_accessor :pause_callback
101
+ attr_reader :filename
102
+ attr_accessor :continue_after_error
103
+ attr_accessor :exceptions
104
+ attr_accessor :script_binding
105
+ attr_accessor :inline_return # Deprecated and unused - Here to prevent cache errors for old scripts
106
+ attr_accessor :inline_return_params # Deprecated and unused - Here to prevent cache errors for old scripts
107
+ attr_reader :message_log
108
+ attr_reader :script_class
109
+ attr_reader :top_level_instrumented_cache
110
+ attr_accessor :stdout_max_lines
111
+ attr_reader :script
112
+
113
+ @@instance = nil
114
+ @@run_thread = nil
115
+ @@breakpoints = {}
116
+ @@step_mode = false
117
+ @@line_delay = 0.1
118
+ @@instrumented_cache = {}
119
+ @@file_cache = {}
120
+ @@output_thread = nil
121
+ @@limits_monitor_thread = nil
122
+ @@pause_on_error = true
123
+ @@monitor_limits = false
124
+ @@pause_on_red = false
125
+ @@show_backtrace = false
126
+ @@error = nil
127
+ @@output_sleeper = Sleeper.new
128
+ @@limits_sleeper = Sleeper.new
129
+ @@cancel_output = false
130
+ @@cancel_limits = false
131
+ @@file_number = 1
132
+ @@default_font = Cosmos.get_default_font
133
+
134
+ def initialize(parent, default_tab_text = 'Untitled')
135
+ super(parent)
136
+ @default_tab_text = ' ' + default_tab_text + ' '
137
+ # Keep track of whether this frame has been fully initialized
138
+ @initialized = false
139
+ @debug_frame = nil
140
+
141
+ # Keep track of a unique file number so we can differentiate untitled tabs
142
+ @file_number = @@file_number
143
+ @@file_number +=1
144
+ @filename = ''
145
+
146
+ @layout = Qt::VBoxLayout.new
147
+ @layout.setContentsMargins(0,0,0,0)
148
+
149
+ # Add Realtime Button Bar
150
+ @realtime_button_bar = RealtimeButtonBar.new(self)
151
+ @realtime_button_bar.state = 'Stopped'
152
+ @realtime_button_bar.step_callback = method(:handle_step_button)
153
+ @realtime_button_bar.start_callback = method(:handle_start_go_button)
154
+ @realtime_button_bar.pause_callback = method(:handle_pause_retry_button)
155
+ @realtime_button_bar.stop_callback = method(:handle_stop_button)
156
+ @layout.addWidget(@realtime_button_bar)
157
+
158
+ # Create shortcuts to activate the RealtimeButtonBar actions
159
+ step = Qt::Shortcut.new(Qt::KeySequence.new(Qt::Key_F10), self)
160
+ self.connect(step, SIGNAL('activated()')) { handle_step_button() }
161
+ start_go = Qt::Shortcut.new(Qt::KeySequence.new(Qt::Key_F5), self)
162
+ self.connect(start_go, SIGNAL('activated()')) { handle_start_go_button() }
163
+ pause_retry = Qt::Shortcut.new(Qt::KeySequence.new(Qt::Key_F6), self)
164
+ self.connect(pause_retry, SIGNAL('activated()')) { handle_pause_retry_button() }
165
+ stop = Qt::Shortcut.new(Qt::KeySequence.new(Qt::Key_F7), self)
166
+ self.connect(stop, SIGNAL('activated()')) { handle_stop_button() }
167
+
168
+ # Create a splitter to hold the script text area and the script output text area.
169
+ @splitter = Qt::Splitter.new(Qt::Vertical, self)
170
+ @layout.addWidget(@splitter)
171
+ @top_widget = Qt::Widget.new(@splitter)
172
+ @top_widget.setContentsMargins(0,0,0,0)
173
+ @top_frame = Qt::VBoxLayout.new(@top_widget)
174
+ @top_frame.setContentsMargins(0,0,0,0)
175
+
176
+ # Add Initial Text Window
177
+ @script = create_ruby_editor()
178
+ @script.filename = unique_filename()
179
+ @script.connect(SIGNAL('modificationChanged(bool)')) do |changed|
180
+ emit modificationChanged(changed)
181
+ end
182
+ @top_frame.addWidget(@script)
183
+
184
+ # Set self as the gui window to allow prompts and other popups to appear
185
+ set_cmd_tlm_gui_window(self)
186
+
187
+ # Add change handlers
188
+ connect(@script,
189
+ SIGNAL('undoAvailable(bool)'),
190
+ self,
191
+ SLOT('undo_available(bool)'))
192
+
193
+ # Add Output Text
194
+ @bottom_frame = Qt::Widget.new
195
+ @bottom_layout = Qt::VBoxLayout.new
196
+ @bottom_layout.setContentsMargins(0,0,0,0)
197
+ @bottom_layout_label = Qt::Label.new("Script Output:")
198
+ @bottom_layout.addWidget(@bottom_layout_label)
199
+ @output = Qt::PlainTextEdit.new
200
+ @output.setReadOnly(true)
201
+ @output.setMaximumBlockCount(100)
202
+ @bottom_layout.addWidget(@output)
203
+ @bottom_frame.setLayout(@bottom_layout)
204
+ @splitter.addWidget(@bottom_frame)
205
+ @splitter.setStretchFactor(0,10)
206
+ @splitter.setStretchFactor(1,1)
207
+
208
+ setLayout(@layout)
209
+
210
+ # Configure Variables
211
+ @line_offset = 0
212
+ @output_io = StringIO.new('', 'r+')
213
+ @output_io_mutex = Mutex.new
214
+ @change_callback = nil
215
+ @run_callback = nil
216
+ @stop_callback = nil
217
+ @error_callback = nil
218
+ @pause_callback = nil
219
+ @allow_start = true
220
+ @continue_after_error = true
221
+ @debug_text = nil
222
+ @debug_history = []
223
+ @debug_code_completion = nil
224
+ @top_level_instrumented_cache = nil
225
+ @output_time = Time.now.sys
226
+ initialize_variables()
227
+
228
+ # Redirect $stdout and $stderr
229
+ redirect_io()
230
+
231
+ # Create Tabbook
232
+ @tab_book = Qt::TabWidget.new
233
+ @tab_book_shown = false
234
+
235
+ @find_dialog = nil
236
+ @replace_dialog = nil
237
+
238
+ mark_breakpoints(@script.filename)
239
+ end
240
+
241
+ def unique_filename
242
+ if @filename and !@filename.empty?
243
+ return @filename
244
+ else
245
+ return @default_tab_text.strip + @file_number.to_s
246
+ end
247
+ end
248
+
249
+ def current_tab_filename
250
+ if @tab_book_shown
251
+ return @tab_book.widget(@tab_book.currentIndex).filename
252
+ else
253
+ return @script.filename
254
+ end
255
+ end
256
+
257
+ def create_ruby_editor
258
+ # Add Initial Text Window
259
+ script = RubyEditor.new(self, @@default_font)
260
+ script.enable_breakpoints = true if @debug_frame
261
+ connect(script,
262
+ SIGNAL('breakpoint_set(int)'),
263
+ self,
264
+ SLOT('breakpoint_set(int)'))
265
+ connect(script,
266
+ SIGNAL('breakpoint_cleared(int)'),
267
+ self,
268
+ SLOT('breakpoint_cleared(int)'))
269
+ connect(script,
270
+ SIGNAL('breakpoints_cleared()'),
271
+ self,
272
+ SLOT('breakpoints_cleared()'))
273
+ script.connect(SIGNAL('font_changed(QFont)')) do |font|
274
+ # Remember changed fonts for future tabs
275
+ @@default_font = font
276
+ end
277
+
278
+ # Add right click menu
279
+ script.setContextMenuPolicy(Qt::CustomContextMenu)
280
+ connect(script,
281
+ SIGNAL('customContextMenuRequested(const QPoint&)'),
282
+ self,
283
+ SLOT('context_menu(const QPoint&)'))
284
+
285
+ return script
286
+ end
287
+
288
+ def stop_message_log
289
+ @message_log.stop if @message_log
290
+ @message_log = nil
291
+ end
292
+
293
+ def filename=(filename)
294
+ # Stop the message log so a new one will be created with the new filename
295
+ stop_message_log()
296
+ @filename = filename
297
+
298
+ # Deal with breakpoints created under the previous filename.
299
+ bkpt_filename = unique_filename()
300
+ if @@breakpoints[bkpt_filename].nil?
301
+ @@breakpoints[bkpt_filename] = @@breakpoints[@script.filename]
302
+ end
303
+ if bkpt_filename != @script.filename
304
+ @@breakpoints.delete(@script.filename)
305
+ @script.filename = bkpt_filename
306
+ end
307
+ mark_breakpoints(@script.filename)
308
+ end
309
+
310
+ def modified
311
+ @script.document.isModified()
312
+ end
313
+
314
+ def modified=(bool)
315
+ @script.document.setModified(bool)
316
+ end
317
+
318
+ def undo_available(bool)
319
+ emit undoAvailable(bool)
320
+ end
321
+
322
+ def setFocus
323
+ @script.setFocus
324
+ end
325
+
326
+ def active_script_highlight(color)
327
+ Qt.execute_in_main_thread { @active_script.highlight_line(color) }
328
+ end
329
+
330
+ def allow_start=(value)
331
+ @allow_start = value
332
+ if @allow_start
333
+ @realtime_button_bar.start_button.setEnabled(true)
334
+ elsif not running?
335
+ @realtime_button_bar.start_button.setEnabled(false)
336
+ @script.setReadOnly(true)
337
+ end
338
+ end
339
+
340
+ def clear
341
+ self.set_text('')
342
+ self.filename = ''
343
+ @script.filename = unique_filename()
344
+ self.modified = false
345
+ end
346
+
347
+ def self.instance
348
+ @@instance
349
+ end
350
+
351
+ def self.instance=(value)
352
+ @@instance = value
353
+ end
354
+
355
+ def self.step_mode
356
+ @@step_mode
357
+ end
358
+
359
+ def self.step_mode=(value)
360
+ @@step_mode = value
361
+ if self.instance
362
+ if value
363
+ self.instance.pause
364
+ else
365
+ self.instance.go
366
+ end
367
+ end
368
+ end
369
+
370
+ def self.line_delay
371
+ @@line_delay
372
+ end
373
+
374
+ def self.line_delay=(value)
375
+ @@line_delay = value
376
+ end
377
+
378
+ def self.instrumented_cache
379
+ @@instrumented_cache
380
+ end
381
+
382
+ def self.instrumented_cache=(value)
383
+ @@instrumented_cache = value
384
+ end
385
+
386
+ def self.file_cache
387
+ @@file_cache
388
+ end
389
+
390
+ def self.file_cache=(value)
391
+ @@file_cache = value
392
+ end
393
+
394
+ def self.pause_on_error
395
+ @@pause_on_error
396
+ end
397
+
398
+ def self.pause_on_error=(value)
399
+ @@pause_on_error = value
400
+ end
401
+
402
+ def self.monitor_limits
403
+ @@monitor_limits
404
+ end
405
+
406
+ def self.monitor_limits=(value)
407
+ @@monitor_limits = value
408
+ end
409
+
410
+ def self.pause_on_red
411
+ @@pause_on_red
412
+ end
413
+
414
+ def self.pause_on_red=(value)
415
+ @@pause_on_red = value
416
+ end
417
+
418
+ def self.show_backtrace
419
+ @@show_backtrace
420
+ end
421
+
422
+ def self.show_backtrace=(value)
423
+ @@show_backtrace = value
424
+ if @@show_backtrace and @@error
425
+ puts Time.now.sys.formatted + " (SCRIPTRUNNER): " + "Most recent exception:\n" + @@error.formatted
426
+ end
427
+ end
428
+
429
+ def text
430
+ @script.toPlainText.gsub("\r", '')
431
+ end
432
+
433
+ def set_text(text, filename = '')
434
+ unless running?()
435
+ @script.setPlainText(text)
436
+ @script.stop_highlight
437
+ @filename = filename
438
+ @script.filename = unique_filename()
439
+ mark_breakpoints(@script.filename)
440
+ end
441
+ end
442
+
443
+ def set_text_from_file(filename)
444
+ unless running?()
445
+ @@file_cache[filename] = nil
446
+ @@breakpoints[filename] = nil
447
+ load_file_into_script(filename)
448
+ @filename = filename
449
+ end
450
+ end
451
+
452
+ def self.running?
453
+ if @@run_thread then true else false end
454
+ end
455
+
456
+ def running?
457
+ if @@instance == self and ScriptRunnerFrame.running?() then true else false end
458
+ end
459
+
460
+ def go
461
+ @go = true
462
+ @pause = false unless @@step_mode
463
+ end
464
+
465
+ def go?
466
+ temp = @go
467
+ @go = false
468
+ temp
469
+ end
470
+
471
+ def pause
472
+ @pause = true
473
+ @go = false
474
+ end
475
+
476
+ def pause?
477
+ @pause
478
+ end
479
+
480
+ def self.stop!
481
+ if @@run_thread
482
+ Cosmos.kill_thread(nil, @@run_thread)
483
+ @@run_thread = nil
484
+ end
485
+ end
486
+
487
+ def stop?
488
+ @stop
489
+ end
490
+
491
+ def retry_needed?
492
+ @retry_needed
493
+ end
494
+
495
+ def retry_needed
496
+ @retry_needed = true
497
+ end
498
+
499
+ def disable_retry
500
+ @realtime_button_bar.start_button.setText('Skip')
501
+ @realtime_button_bar.pause_button.setDisabled(true)
502
+ end
503
+
504
+ def enable_retry
505
+ @realtime_button_bar.start_button.setText('Go')
506
+ @realtime_button_bar.pause_button.setDisabled(false)
507
+ end
508
+
509
+ def run
510
+ unless self.class.running?()
511
+ run_text(@script.toPlainText)
512
+ end
513
+ end
514
+
515
+ def run_and_close_on_complete(text_binding = nil)
516
+ run_text(@script.toPlainText, 0, text_binding, true)
517
+ end
518
+
519
+ def self.instrument_script(text, filename, mark_private = false)
520
+ if filename and !filename.empty?
521
+ @@file_cache[filename] = text.clone
522
+ end
523
+
524
+ ruby_lex_utils = RubyLexUtils.new
525
+ instrumented_text = ''
526
+
527
+ Qt.execute_in_main_thread(true) do
528
+ window = Qt::CoreApplication.instance.activeWindow
529
+ @cancel_instrumentation = false
530
+ ProgressDialog.execute(window, # parent
531
+ "Instrumenting: #{File.basename(filename.to_s)}",
532
+ 500, # width
533
+ 100, # height
534
+ true, # show overall progress
535
+ false, # don't show step progress
536
+ false, # don't show text
537
+ false, # don't show done
538
+ true) do |progress_dialog| # show cancel
539
+ progress_dialog.cancel_callback = lambda { |dialog| @cancel_instrumentation = true; [true, false] }
540
+ progress_dialog.enable_cancel_button
541
+ comments_removed_text = ruby_lex_utils.remove_comments(text)
542
+ num_lines = comments_removed_text.num_lines.to_f
543
+ num_lines = 1 if num_lines < 1
544
+ instrumented_text =
545
+ instrument_script_implementation(ruby_lex_utils,
546
+ comments_removed_text,
547
+ num_lines,
548
+ progress_dialog,
549
+ filename,
550
+ mark_private)
551
+ progress_dialog.close_done
552
+ end
553
+ end
554
+
555
+ Kernel.raise StopScript if @cancel_instrumentation or ProgressDialog.canceled?
556
+ instrumented_text
557
+ end
558
+
559
+ def self.instrument_script_implementation(ruby_lex_utils,
560
+ comments_removed_text,
561
+ num_lines,
562
+ progress_dialog,
563
+ filename,
564
+ mark_private = false)
565
+ if mark_private
566
+ instrumented_text = 'private; '
567
+ else
568
+ instrumented_text = ''
569
+ end
570
+
571
+ ruby_lex_utils.each_lexed_segment(comments_removed_text) do |segment, instrumentable, inside_begin, line_no|
572
+ return nil if @cancel_instrumentation
573
+ instrumented_line = ''
574
+ if instrumentable
575
+ # Add a newline if it's empty to ensure the instrumented code has
576
+ # the same number of lines as the original script. Note that the
577
+ # segment could have originally had comments but they were stripped in
578
+ # ruby_lex_utils.remove_comments
579
+ if segment.strip.empty?
580
+ instrumented_text << "\n"
581
+ next
582
+ end
583
+
584
+ # Create a variable to hold the segment's return value
585
+ instrumented_line << "__return_val = nil; "
586
+
587
+ # If not inside a begin block then create one to catch exceptions
588
+ unless inside_begin
589
+ instrumented_line << 'begin; '
590
+ end
591
+
592
+ # Add preline instrumentation
593
+ instrumented_line << "ScriptRunnerFrame.instance.script_binding = binding(); "\
594
+ "ScriptRunnerFrame.instance.pre_line_instrumentation('#{filename}', #{line_no}); "
595
+
596
+ # Add the actual line
597
+ instrumented_line << "__return_val = begin; "
598
+ instrumented_line << segment
599
+ instrumented_line.chomp!
600
+
601
+ # Add postline instrumentation
602
+ instrumented_line << " end; ScriptRunnerFrame.instance.post_line_instrumentation('#{filename}', #{line_no}); "
603
+
604
+ # Complete begin block to catch exceptions
605
+ unless inside_begin
606
+ instrumented_line << "rescue Exception => eval_error; "\
607
+ "retry if ScriptRunnerFrame.instance.exception_instrumentation(eval_error, '#{filename}', #{line_no}); end; "
608
+ end
609
+
610
+ instrumented_line << " __return_val\n"
611
+ else
612
+ unless segment =~ /^\s*end\s*$/ or segment =~ /^\s*when .*$/
613
+ num_left_brackets = segment.count('{')
614
+ num_right_brackets = segment.count('}')
615
+ num_left_square_brackets = segment.count('[')
616
+ num_right_square_brackets = segment.count(']')
617
+
618
+ if (num_right_brackets > num_left_brackets) ||
619
+ (num_right_square_brackets > num_left_square_brackets)
620
+ instrumented_line = segment
621
+ else
622
+ instrumented_line = "ScriptRunnerFrame.instance.pre_line_instrumentation('#{filename}', #{line_no}); " + segment
623
+ end
624
+ else
625
+ instrumented_line = segment
626
+ end
627
+ end
628
+
629
+ instrumented_text << instrumented_line
630
+
631
+ progress_dialog.set_overall_progress(line_no / num_lines) if progress_dialog and line_no
632
+ end
633
+ instrumented_text
634
+ end
635
+
636
+ def pre_line_instrumentation(filename, line_number)
637
+ @current_filename = filename
638
+ @current_line_number = line_number
639
+ if @use_instrumentation
640
+ # Clear go
641
+ @go = false
642
+
643
+ # Handle stopping mid-script if necessary
644
+ Kernel.raise StopScript if @stop
645
+
646
+ # Handle needing to change tabs
647
+ handle_potential_tab_change(filename)
648
+
649
+ # Adjust line number for offset in main script
650
+ line_number = line_number + @line_offset if @active_script.object_id == @script.object_id
651
+ detail_string = nil
652
+ if filename
653
+ detail_string = File.basename(filename) << ':' << line_number.to_s
654
+ end
655
+ Logger.detail_string = detail_string
656
+
657
+ # Highlight the line that is about to run
658
+ Qt.execute_in_main_thread(true) do
659
+ @active_script.center_line(line_number)
660
+ @active_script.highlight_line
661
+ end
662
+
663
+ # Handle pausing the script
664
+ handle_pause(filename, line_number)
665
+
666
+ # Handle delay between lines
667
+ handle_line_delay()
668
+ end
669
+ end
670
+
671
+ def post_line_instrumentation(filename, line_number)
672
+ if @use_instrumentation
673
+ line_number = line_number + @line_offset if @active_script.object_id == @script.object_id
674
+ handle_output_io(filename, line_number)
675
+ end
676
+ end
677
+
678
+ def exception_instrumentation(error, filename, line_number)
679
+ if error.class == StopScript || error.class == SkipTestCase || !@use_instrumentation
680
+ Kernel.raise error
681
+ elsif !error.eql?(@@error)
682
+ line_number = line_number + @line_offset if @active_script.object_id == @script.object_id
683
+ handle_exception(error, false, filename, line_number)
684
+ end
685
+ end
686
+
687
+ def perform_pause
688
+ mark_paused()
689
+ wait_for_go_or_stop()
690
+ end
691
+
692
+ def perform_breakpoint(filename, line_number)
693
+ mark_breakpoint()
694
+ scriptrunner_puts "Hit Breakpoint at #{filename}:#{line_number}"
695
+ handle_output_io(filename, line_number)
696
+ wait_for_go_or_stop()
697
+ end
698
+
699
+ # Prompts the user that a script is running before they close the app
700
+ def prompt_if_running_on_close
701
+ safe_to_continue = true
702
+ if running?
703
+ case Qt::MessageBox.warning(
704
+ self, # parent
705
+ 'Warning', # title
706
+ 'A Script is Running! Close Anyways?', # text
707
+ Qt::MessageBox::Yes | Qt::MessageBox::No, # buttons
708
+ Qt::MessageBox::No) # default button
709
+ when Qt::MessageBox::Yes
710
+ safe_to_continue = true
711
+ ScriptRunnerFrame.stop!
712
+ else
713
+ safe_to_continue = false
714
+ end
715
+ end
716
+ return safe_to_continue
717
+ end
718
+
719
+ ######################################
720
+ # Implement the breakpoint callbacks from the RubyEditor
721
+ ######################################
722
+ def breakpoint_set(line)
723
+ # Check for blank and comment lines which can't have a breakpoint.
724
+ # There are other un-instrumentable lines which don't support breakpoints
725
+ # but this is the most common and is an easy check.
726
+ # Note: line is 1 based but @script.get_line is zero based so subtract 1
727
+ text = @active_script.get_line(line - 1)
728
+ if text && (text.strip.empty? || text.strip[0] == '#')
729
+ @active_script.clear_breakpoint(line) # Immediately clear it
730
+ else
731
+ ScriptRunnerFrame.set_breakpoint(current_tab_filename(), line)
732
+ end
733
+ end
734
+
735
+ def breakpoint_cleared(line)
736
+ ScriptRunnerFrame.clear_breakpoint(current_tab_filename(), line)
737
+ end
738
+
739
+ def breakpoints_cleared
740
+ ScriptRunnerFrame.clear_breakpoints(current_tab_filename())
741
+ end
742
+
743
+ ######################################
744
+ # Implement edit functionality in the frame (cut, copy, paste, etc)
745
+ ######################################
746
+ def undo
747
+ @script.undo unless running?()
748
+ end
749
+
750
+ def redo
751
+ @script.redo unless running?()
752
+ end
753
+
754
+ def cut
755
+ @script.cut unless running?()
756
+ end
757
+
758
+ def copy
759
+ @script.copy unless running?()
760
+ end
761
+
762
+ def paste
763
+ @script.paste unless running?()
764
+ end
765
+
766
+ def select_all
767
+ @script.select_all unless running?()
768
+ end
769
+
770
+ def comment_or_uncomment_lines
771
+ @script.comment_or_uncomment_lines unless running?()
772
+ end
773
+
774
+ def zoom_in
775
+ # @active_script since this can be used while running
776
+ @active_script.zoom_in
777
+ end
778
+
779
+ def zoom_out
780
+ # @active_script since this can be used while running
781
+ @active_script.zoom_out
782
+ end
783
+
784
+ def zoom_default
785
+ # @active_script since this can be used while running
786
+ @active_script.zoom_default
787
+ end
788
+
789
+ ##################################################################################
790
+ # Implement Script functionality in the frame (run selection, run from cursor, etc
791
+ ##################################################################################
792
+ def run_selection
793
+ unless self.class.running?()
794
+ selection = @script.selected_lines
795
+ if selection
796
+ start_line_number = @script.selection_start_line
797
+ end_line_number = @script.selection_end_line
798
+ scriptrunner_puts "Running script lines #{start_line_number+1}-#{end_line_number+1}: #{File.basename(@filename)}"
799
+ handle_output_io()
800
+ run_text(selection, start_line_number)
801
+ end
802
+ end
803
+ end
804
+
805
+ def run_selection_while_paused
806
+ current_script = @tab_book.widget(@tab_book.currentIndex)
807
+ selection = current_script.selected_lines
808
+ if selection
809
+ start_line_number = current_script.selection_start_line
810
+ end_line_number = current_script.selection_end_line
811
+ scriptrunner_puts "Debug: Running selected lines #{start_line_number+1}-#{end_line_number+1}: #{@tab_book.tabText(@tab_book.currentIndex)}"
812
+ handle_output_io()
813
+ dialog = ScriptRunnerDialog.new(self, 'Executing Selected Lines While Paused')
814
+ dialog.execute_text_and_close_on_complete(selection, @script_binding)
815
+ handle_output_io()
816
+ end
817
+ end
818
+
819
+ def run_from_cursor
820
+ unless self.class.running?()
821
+ line_number = @script.selection_start_line
822
+ text = @script.toPlainText.split("\n")[line_number..-1].join("\n")
823
+ scriptrunner_puts "Running script from line #{line_number}: #{File.basename(@filename)}"
824
+ handle_output_io()
825
+ run_text(text, line_number)
826
+ end
827
+ end
828
+
829
+ def ruby_syntax_check_selection
830
+ unless self.class.running?()
831
+ selection = @script.selected_lines
832
+ ruby_syntax_check_text(selection) if selection
833
+ end
834
+ end
835
+
836
+ def ruby_syntax_check_text(selection = nil)
837
+ unless self.class.running?()
838
+ selection = text() unless selection
839
+ check_process = IO.popen("ruby -c -rubygems 2>&1", 'r+')
840
+ check_process.write("require 'cosmos'; require 'cosmos/script'; " + selection)
841
+ check_process.close_write
842
+ results = check_process.gets
843
+ check_process.close
844
+ if results
845
+ if results =~ /Syntax OK/
846
+ Qt::MessageBox.information(self, 'Syntax Check Successful', results)
847
+ else
848
+ # Results is a string like this: ":2: syntax error ..."
849
+ # Normally the procedure comes before the first colon but since we
850
+ # are writing to the process this is blank so we throw it away
851
+ _, line_no, error = results.split(':')
852
+ Qt::MessageBox.warning(self,
853
+ 'Syntax Check Failed',
854
+ "Error on line #{line_no}: #{error.strip}")
855
+ end
856
+ else
857
+ Qt::MessageBox.critical(self,
858
+ 'Syntax Check Exception',
859
+ 'Ruby syntax check unexpectedly returned nil')
860
+ end
861
+ end
862
+ end
863
+
864
+ def mnemonic_check_selection
865
+ unless self.class.running?()
866
+ selection = @script.selected_lines
867
+ mnemonic_check_text(selection, @script.selection_start_line+1) if selection
868
+ end
869
+ end
870
+
871
+ def mnemonic_check_text(text, start_line_number = 1)
872
+ results = []
873
+ line_number = start_line_number
874
+ text.each_line do |line|
875
+ if line =~ /\(/
876
+ result = nil
877
+ keyword = line.split('(')[0].split[-1]
878
+ if CMD_KEYWORDS.include? keyword
879
+ result = mnemonic_check_cmd_line(keyword, line_number, line)
880
+ elsif TLM_KEYWORDS.include? keyword
881
+ result = mnemonic_check_tlm_line(keyword, line_number, line)
882
+ elsif SET_TLM_KEYWORDS.include? keyword
883
+ result = mnemonic_check_set_tlm_line(keyword, line_number, line)
884
+ elsif CHECK_KEYWORDS.include? keyword
885
+ result = mnemonic_check_check_line(keyword, line_number, line)
886
+ end
887
+ results << result if result
888
+ end
889
+ line_number += 1
890
+ end
891
+
892
+ if results.empty?
893
+ Qt::MessageBox.information(self,
894
+ 'Mnemonic Check Successful',
895
+ 'Mnemonic Check Found No Errors')
896
+ else
897
+ dialog = Qt::Dialog.new(self) do |box|
898
+ box.setWindowTitle('Mnemonic Check Failed')
899
+ text = Qt::PlainTextEdit.new
900
+ text.setReadOnly(true)
901
+ text.setPlainText(results.join("\n"))
902
+ frame = Qt::VBoxLayout.new(box)
903
+ ok = Qt::PushButton.new('Ok')
904
+ ok.setDefault(true)
905
+ ok.connect(SIGNAL('clicked(bool)')) { box.accept }
906
+ frame.addWidget(text)
907
+ frame.addWidget(ok)
908
+ end
909
+ dialog.exec
910
+ dialog.dispose
911
+ end
912
+ end
913
+
914
+ ######################################################
915
+ # Implement the debug capability
916
+ ######################################################
917
+ def toggle_debug(debug = nil)
918
+ if debug.nil?
919
+ if @debug_frame
920
+ hide_debug()
921
+ else
922
+ show_debug()
923
+ end
924
+ else
925
+ if debug
926
+ if !@debug_frame
927
+ show_debug()
928
+ end
929
+ else
930
+ if @debug_frame
931
+ hide_debug()
932
+ end
933
+ end
934
+ end
935
+ end
936
+
937
+ def show_debug
938
+ unless @debug_frame
939
+ @realtime_button_bar.step_button.setHidden(false)
940
+ @script.enable_breakpoints = true
941
+ if @tab_book_shown
942
+ if @tab_book.count > 0
943
+ (0..(@tab_book.count - 1)).each do |index|
944
+ @tab_book.widget(index).enable_breakpoints = true
945
+ end
946
+ end
947
+ end
948
+
949
+ @debug_frame = Qt::HBoxLayout.new
950
+ @debug_frame.setContentsMargins(0,0,0,0)
951
+ @debug_frame_label = Qt::Label.new("Debug:")
952
+ @debug_frame.addWidget(@debug_frame_label)
953
+ @debug_text = CompletionLineEdit.new(self)
954
+ @debug_text.setFocus(Qt::OtherFocusReason)
955
+ @debug_text.connect(SIGNAL('key_pressed(QKeyEvent*)')) do |event|
956
+ case event.key
957
+ when Qt::Key_Return, Qt::Key_Enter
958
+ begin
959
+ debug_text = @debug_text.toPlainText
960
+ @debug_history.unshift(debug_text)
961
+ @debug_history_index = 0
962
+ @debug_text.setPlainText('')
963
+ scriptrunner_puts "Debug: #{debug_text}"
964
+ handle_output_io()
965
+ if not running?
966
+ # Capture STDOUT and STDERR
967
+ $stdout.add_stream(@output_io)
968
+ $stderr.add_stream(@output_io)
969
+ end
970
+
971
+ if @script_binding
972
+ # Check for accessing an instance variable or local
973
+ if debug_text =~ /^@\S+$/ || @script_binding.local_variables.include?(debug_text.to_sym)
974
+ debug_text = "puts #{debug_text}" # Automatically add puts to print it
975
+ end
976
+ # Fortify: Dynamic Code Evaluation: Code Injection
977
+ eval(debug_text, @script_binding, 'debug', 1)
978
+ else
979
+ # Fortify: Dynamic Code Evaluation: Code Injection
980
+ Object.class_eval(debug_text, 'debug', 1)
981
+ end
982
+ handle_output_io()
983
+ rescue Exception => error
984
+ if error.class == DRb::DRbConnError
985
+ Logger.error("Error Connecting to Command and Telemetry Server")
986
+ else
987
+ Logger.error(error.class.to_s.split('::')[-1] + ' : ' + error.message)
988
+ end
989
+ handle_output_io()
990
+ ensure
991
+ if not running?
992
+ # Capture STDOUT and STDERR
993
+ $stdout.remove_stream(@output_io)
994
+ $stderr.remove_stream(@output_io)
995
+ end
996
+ end
997
+ when Qt::Key_Up
998
+ if @debug_history.length > 0
999
+ @debug_text.setPlainText(@debug_history[@debug_history_index])
1000
+ @debug_history_index += 1
1001
+ if @debug_history_index == @debug_history.length
1002
+ @debug_history_index = @debug_history.length-1
1003
+ end
1004
+ end
1005
+ when Qt::Key_Down
1006
+ if @debug_history.length > 0
1007
+ @debug_text.setPlainText(@debug_history[@debug_history_index])
1008
+ @debug_history_index -= 1
1009
+ @debug_history_index = 0 if @debug_history_index < 0
1010
+ end
1011
+ when Qt::Key_Escape
1012
+ @debug_text.setPlainText("")
1013
+ end
1014
+ end
1015
+ @debug_frame.addWidget(@debug_text)
1016
+
1017
+ @locals_button = Qt::PushButton.new('Locals')
1018
+ @locals_button.connect(SIGNAL('clicked(bool)')) do
1019
+ next unless @script_binding
1020
+ @locals_button.setEnabled(false)
1021
+ vars = @script_binding.local_variables.map(&:to_s)
1022
+ puts "Locals: #{vars.reject {|x| INSTANCE_VARS.include?(x)}.sort.join(', ')}"
1023
+ while @output_io.string[-1..-1] == "\n"
1024
+ Qt::CoreApplication.processEvents()
1025
+ end
1026
+ @locals_button.setEnabled(true)
1027
+ end
1028
+ @debug_frame.addWidget(@locals_button)
1029
+
1030
+ @bottom_frame.layout.addLayout(@debug_frame)
1031
+ end
1032
+ end
1033
+
1034
+ def hide_debug
1035
+ # Since we're disabling debug, clear the breakpoints and disable them
1036
+ ScriptRunnerFrame.clear_breakpoints()
1037
+ @script.clear_breakpoints
1038
+ @script.enable_breakpoints = false
1039
+ if @tab_book_shown
1040
+ if @tab_book.count > 0
1041
+ (0..(@tab_book.count - 1)).each do |index|
1042
+ @tab_book.widget(index).enable_breakpoints = false
1043
+ end
1044
+ end
1045
+ end
1046
+ @realtime_button_bar.step_button.setHidden(true)
1047
+ # Remove the debug frame
1048
+ @bottom_frame.layout.takeAt(@bottom_frame.layout.count - 1) if @debug_frame
1049
+ @debug_frame.removeAll
1050
+ @debug_frame.dispose
1051
+ @debug_frame = nil
1052
+
1053
+ # If step mode was previously active then pause the script so it doesn't
1054
+ # just take off when we end the debugging session
1055
+ if @@step_mode
1056
+ pause()
1057
+ @@step_mode = false
1058
+ end
1059
+ end
1060
+
1061
+ def self.set_breakpoint(filename, line_number)
1062
+ @@breakpoints[filename] ||= {}
1063
+ @@breakpoints[filename][line_number] = true
1064
+ end
1065
+
1066
+ def self.clear_breakpoint(filename, line_number)
1067
+ @@breakpoints[filename] ||= {}
1068
+ @@breakpoints[filename].delete(line_number) if @@breakpoints[filename][line_number]
1069
+ end
1070
+
1071
+ def self.clear_breakpoints(filename = nil)
1072
+ if filename == nil or filename.empty?
1073
+ @@breakpoints = {}
1074
+ else
1075
+ @@breakpoints.delete(filename)
1076
+ end
1077
+ end
1078
+
1079
+ def clear_breakpoints
1080
+ ScriptRunnerFrame.clear_breakpoints(unique_filename())
1081
+ end
1082
+
1083
+ def select_tab_and_destroy_tabs_after_index(index)
1084
+ Qt.execute_in_main_thread(true) do
1085
+ if @tab_book_shown
1086
+ @tab_book.setCurrentIndex(index)
1087
+ @active_script = @tab_book.widget(@tab_book.currentIndex)
1088
+
1089
+ first_to_remove = index + 1
1090
+ last_to_remove = @call_stack.length - 1
1091
+
1092
+ last_to_remove.downto(first_to_remove) do |tab_index|
1093
+ tab = @tab_book.widget(tab_index)
1094
+ @tab_book.removeTab(tab_index)
1095
+ tab.dispose
1096
+ end
1097
+
1098
+ @call_stack = @call_stack[0..index]
1099
+ @current_file = @call_stack[index]
1100
+ end
1101
+ end
1102
+ end
1103
+
1104
+ def toggle_disconnect(config_file, ask_for_config_file = true)
1105
+ dialog = Qt::Dialog.new(self, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
1106
+ dialog.setWindowTitle("Disconnect Settings")
1107
+ dialog_layout = Qt::VBoxLayout.new
1108
+ dialog_layout.addWidget(Qt::Label.new("Targets checked will be disconnected."))
1109
+
1110
+ all_targets = {}
1111
+ set_clear_layout = Qt::HBoxLayout.new
1112
+ check_all = Qt::PushButton.new("Check All")
1113
+ check_all.setAutoDefault(false)
1114
+ check_all.setDefault(false)
1115
+ check_all.connect(SIGNAL('clicked()')) do
1116
+ all_targets.each do |target, checkbox|
1117
+ checkbox.setChecked(true)
1118
+ end
1119
+ end
1120
+ set_clear_layout.addWidget(check_all)
1121
+ clear_all = Qt::PushButton.new("Clear All")
1122
+ clear_all.connect(SIGNAL('clicked()')) do
1123
+ all_targets.each do |target, checkbox|
1124
+ checkbox.setChecked(false)
1125
+ end
1126
+ end
1127
+ set_clear_layout.addWidget(clear_all)
1128
+ dialog_layout.addLayout(set_clear_layout)
1129
+
1130
+ scroll = Qt::ScrollArea.new
1131
+ target_widget = Qt::Widget.new
1132
+ scroll.setWidget(target_widget)
1133
+ target_layout = Qt::VBoxLayout.new(target_widget)
1134
+ target_layout.setSizeConstraint(Qt::Layout::SetMinAndMaxSize)
1135
+ scroll.setSizePolicy(Qt::SizePolicy::Preferred, Qt::SizePolicy::Expanding)
1136
+ scroll.setWidgetResizable(true)
1137
+
1138
+ existing = get_disconnected_targets()
1139
+ System.targets.keys.each do |target|
1140
+ check_layout = Qt::HBoxLayout.new
1141
+ check_label = Qt::CheckboxLabel.new(target)
1142
+ checkbox = Qt::CheckBox.new
1143
+ all_targets[target] = checkbox
1144
+ if existing
1145
+ checkbox.setChecked(existing && existing.include?(target))
1146
+ else
1147
+ checkbox.setChecked(true)
1148
+ end
1149
+ check_label.setCheckbox(checkbox)
1150
+ check_layout.addWidget(checkbox)
1151
+ check_layout.addWidget(check_label)
1152
+ check_layout.addStretch
1153
+ target_layout.addLayout(check_layout)
1154
+ end
1155
+ dialog_layout.addWidget(scroll)
1156
+
1157
+ if ask_for_config_file
1158
+ chooser = FileChooser.new(self, "Config File", config_file, 'Select',
1159
+ File.dirname(config_file))
1160
+ chooser.callback = lambda do |filename|
1161
+ chooser.filename = filename
1162
+ end
1163
+ dialog_layout.addWidget(chooser)
1164
+ end
1165
+
1166
+ button_layout = Qt::HBoxLayout.new
1167
+ ok = Qt::PushButton.new("Ok")
1168
+ ok.setAutoDefault(true)
1169
+ ok.setDefault(true)
1170
+ targets = []
1171
+ ok.connect(SIGNAL('clicked()')) do
1172
+ all_targets.each do |target, checkbox|
1173
+ targets << target if checkbox.isChecked
1174
+ end
1175
+ dialog.accept()
1176
+ end
1177
+ button_layout.addWidget(ok)
1178
+ cancel = Qt::PushButton.new("Cancel")
1179
+ cancel.connect(SIGNAL('clicked()')) do
1180
+ dialog.reject()
1181
+ end
1182
+ button_layout.addWidget(cancel)
1183
+ dialog_layout.addLayout(button_layout)
1184
+
1185
+ dialog.setLayout(dialog_layout)
1186
+ my_parent = self.parent
1187
+ while my_parent.parent
1188
+ my_parent = my_parent.parent
1189
+ end
1190
+ if dialog.exec == Qt::Dialog::Accepted
1191
+ if targets.empty?
1192
+ clear_disconnected_targets()
1193
+ my_parent.statusBar.showMessage("")
1194
+ self.setPalette(Qt::Palette.new(Cosmos::DEFAULT_PALETTE))
1195
+ else
1196
+ config_file = chooser.filename
1197
+ my_parent.statusBar.showMessage("Targets disconnected: #{targets.join(" ")}")
1198
+ self.setPalette(Qt::Palette.new(Cosmos::RED_PALETTE))
1199
+ Splash.execute(self) do |splash|
1200
+ ConfigParser.splash = splash
1201
+ splash.message = "Initializing Command and Telemetry Server"
1202
+ set_disconnected_targets(targets, targets.length == all_targets.length, config_file)
1203
+ ConfigParser.splash = nil
1204
+ end
1205
+ end
1206
+ end
1207
+ dialog.dispose
1208
+ config_file
1209
+ end
1210
+
1211
+ def current_backtrace
1212
+ trace = []
1213
+ Qt.execute_in_main_thread(true) do
1214
+ if @@run_thread
1215
+ temp_trace = @@run_thread.backtrace
1216
+ cosmos_lib = Regexp.new(File.join(Cosmos::PATH, 'lib'))
1217
+ temp_trace.each do |line|
1218
+ next if line =~ cosmos_lib
1219
+ trace << line
1220
+ end
1221
+ end
1222
+ end
1223
+ trace
1224
+ end
1225
+
1226
+ def scriptrunner_puts(string)
1227
+ puts Time.now.sys.formatted + " (SCRIPTRUNNER): " + string
1228
+ end
1229
+
1230
+ def handle_output_io(filename = @current_filename, line_number = @current_line_number)
1231
+ @output_time = Time.now.sys
1232
+ Qt.execute_in_main_thread(true) do
1233
+ if @output_io.string[-1..-1] == "\n"
1234
+ time_formatted = Time.now.sys.formatted
1235
+ lines_to_write = ''
1236
+ out_line_number = line_number.to_s
1237
+ out_filename = File.basename(filename) if filename
1238
+
1239
+ # Build each line to write
1240
+ string = @output_io.string.clone
1241
+ @output_io.string = @output_io.string[string.length..-1]
1242
+ line_count = 0
1243
+ string.each_line do |out_line|
1244
+ color = nil
1245
+ if out_line[0..1] == '20' and out_line[10] == ' ' and out_line[23..24] == ' ('
1246
+ line_to_write = out_line
1247
+ else
1248
+ if filename
1249
+ line_to_write = time_formatted + " (#{out_filename}:#{out_line_number}): " + out_line
1250
+ else
1251
+ line_to_write = time_formatted + " (SCRIPTRUNNER): " + out_line
1252
+ color = Cosmos::BLUE
1253
+ end
1254
+ end
1255
+ @output.add_formatted_text(line_to_write, color)
1256
+ lines_to_write << line_to_write
1257
+
1258
+ line_count += 1
1259
+ if line_count > @stdout_max_lines
1260
+ out_line = "ERROR: Too much written to stdout. Truncating output to #{@stdout_max_lines} lines.\n"
1261
+ if filename
1262
+ line_to_write = time_formatted + " (#{out_filename}:#{out_line_number}): " + out_line
1263
+ else
1264
+ line_to_write = time_formatted + " (SCRIPTRUNNER): " + out_line
1265
+ end
1266
+ @output.addText(line_to_write, Cosmos::RED)
1267
+ lines_to_write << line_to_write
1268
+ break
1269
+ end
1270
+ end # string.each_line
1271
+
1272
+ # Actually add to the GUI
1273
+ @output.flush
1274
+
1275
+ # Add to the message log
1276
+ if @filename.empty?
1277
+ @message_log ||= MessageLog.new("sr_untitled")
1278
+ else
1279
+ @message_log ||= MessageLog.new("sr_#{File.basename(@filename).split('.')[0]}")
1280
+ end
1281
+ @message_log.write(lines_to_write)
1282
+ end
1283
+ end
1284
+ end
1285
+
1286
+ def graceful_kill
1287
+ # Just to avoid warning
1288
+ end
1289
+
1290
+ protected
1291
+
1292
+ def initialize_variables
1293
+ @@error = nil
1294
+ @go = false
1295
+ if @@step_mode
1296
+ @pause = true
1297
+ else
1298
+ @pause = false
1299
+ end
1300
+ @stop = false
1301
+ @retry_needed = false
1302
+ @use_instrumentation = true
1303
+ @active_script = @script
1304
+ @call_stack = []
1305
+ @pre_line_time = Time.now.sys
1306
+ @current_file = @filename
1307
+ @exceptions = nil
1308
+ @script_binding = nil
1309
+ @inline_eval = nil
1310
+ @current_filename = nil
1311
+ @current_line_number = 0
1312
+ @stdout_max_lines = 1000
1313
+
1314
+ @script.stop_highlight
1315
+ @call_stack.push(@current_file.dup)
1316
+ end
1317
+
1318
+ def wait_for_go_or_stop(error = nil)
1319
+ @go = false
1320
+ sleep(0.01) until @go or @stop
1321
+ @go = false
1322
+ mark_running()
1323
+ Kernel.raise StopScript if @stop
1324
+ Kernel.raise error if error and !@continue_after_error
1325
+ end
1326
+
1327
+ def wait_for_go_or_stop_or_retry(error = nil)
1328
+ @go = false
1329
+ sleep(0.01) until @go or @stop or @retry_needed
1330
+ @go = false
1331
+ mark_running()
1332
+ Kernel.raise StopScript if @stop
1333
+ Kernel.raise error if error and !@continue_after_error
1334
+ end
1335
+
1336
+ def mark_running
1337
+ Qt.execute_in_main_thread(true) do
1338
+ @run_callback.call(self) if @run_callback
1339
+ @active_script.highlight_line
1340
+ @realtime_button_bar.state = 'Running'
1341
+ @realtime_button_bar.start_button.setText('Go')
1342
+ @realtime_button_bar.pause_button.setText('Pause')
1343
+ end
1344
+ end
1345
+
1346
+ def mark_paused
1347
+ Qt.execute_in_main_thread(true) do
1348
+ @pause_callback.call(self) if @pause_callback
1349
+ @active_script.highlight_line('lightblue')
1350
+ @realtime_button_bar.state = 'Paused'
1351
+ end
1352
+ end
1353
+
1354
+ def mark_error
1355
+ Qt.execute_in_main_thread(true) do
1356
+ @error_callback.call(self) if @error_callback
1357
+ @active_script.highlight_line('pink')
1358
+ @realtime_button_bar.state = 'Error'
1359
+ @realtime_button_bar.pause_button.setText('Retry')
1360
+ end
1361
+ end
1362
+
1363
+ def mark_stopped
1364
+ stop_message_log()
1365
+ Qt.execute_in_main_thread(true) do
1366
+ @realtime_button_bar.start_button.setText('Start')
1367
+ @realtime_button_bar.pause_button.setText('Pause')
1368
+ @realtime_button_bar.state = 'Stopped'
1369
+ @stop_callback.call(self) if @stop_callback
1370
+ end
1371
+ end
1372
+
1373
+ def mark_breakpoint
1374
+ Qt.execute_in_main_thread(true) do
1375
+ @active_script.highlight_line('tan')
1376
+ @realtime_button_bar.state = 'Breakpoint'
1377
+ end
1378
+ end
1379
+
1380
+ def run_text(text,
1381
+ line_offset = 0,
1382
+ text_binding = nil,
1383
+ close_on_complete = false)
1384
+ @run_callback.call(self) if @run_callback
1385
+ @realtime_button_bar.start_button.setEnabled(true)
1386
+ initialize_variables()
1387
+ create_tabs()
1388
+ @line_offset = line_offset
1389
+ @script.setReadOnly(true)
1390
+ @realtime_button_bar.start_button.setText(' Go ')
1391
+ @realtime_button_bar.state = 'Running'
1392
+
1393
+ saved_instance = @@instance
1394
+ saved_run_thread = @@run_thread
1395
+ @@instance = self
1396
+ @@run_thread = Thread.new do
1397
+ uncaught_exception = false
1398
+ begin
1399
+ # Capture STDOUT and STDERR
1400
+ $stdout.add_stream(@output_io)
1401
+ $stderr.add_stream(@output_io)
1402
+
1403
+ unless close_on_complete
1404
+ scriptrunner_puts("Starting script: #{File.basename(@filename)}")
1405
+ targets = get_disconnected_targets()
1406
+ if targets
1407
+ scriptrunner_puts("DISCONNECTED targets: #{targets.join(',')}")
1408
+ end
1409
+ end
1410
+ handle_output_io()
1411
+
1412
+ # Start Limits Monitoring
1413
+ @@limits_monitor_thread = Thread.new { limits_monitor_thread() } if @@monitor_limits and !@@limits_monitor_thread
1414
+
1415
+ # Start Output Thread
1416
+ @@output_thread = Thread.new { output_thread() } unless @@output_thread
1417
+
1418
+ # Check top level cache
1419
+ if @top_level_instrumented_cache &&
1420
+ (@top_level_instrumented_cache[1] == line_offset) &&
1421
+ (@top_level_instrumented_cache[2] == @filename) &&
1422
+ (@top_level_instrumented_cache[0] == text)
1423
+ # Use the instrumented cache
1424
+ instrumented_script = @top_level_instrumented_cache[3]
1425
+ else
1426
+ # Instrument the script
1427
+ if text_binding
1428
+ instrumented_script = self.class.instrument_script(text, @filename, false)
1429
+ else
1430
+ instrumented_script = self.class.instrument_script(text, @filename, true)
1431
+ end
1432
+ @top_level_instrumented_cache = [text, line_offset, @filename, instrumented_script]
1433
+ end
1434
+
1435
+ # Execute the script with warnings disabled
1436
+ Cosmos.disable_warnings do
1437
+ @pre_line_time = Time.now.sys
1438
+ Cosmos.set_working_dir do
1439
+ if text_binding
1440
+ eval(instrumented_script, text_binding, @filename, 1)
1441
+ else
1442
+ Object.class_eval(instrumented_script, @filename, 1)
1443
+ end
1444
+ end
1445
+ end
1446
+
1447
+ scriptrunner_puts "Script completed: #{File.basename(@filename)}" unless close_on_complete
1448
+ handle_output_io()
1449
+
1450
+ rescue Exception => error
1451
+ if error.class == StopScript or error.class == SkipTestCase
1452
+ scriptrunner_puts "Script stopped: #{File.basename(@filename)}"
1453
+ handle_output_io()
1454
+ else
1455
+ uncaught_exception = true
1456
+ filename, line_number = error.source
1457
+ handle_exception(error, true, filename, line_number)
1458
+ scriptrunner_puts "Exception in Control Statement - Script stopped: #{File.basename(@filename)}"
1459
+ handle_output_io()
1460
+ Qt.execute_in_main_thread(true) { @script.highlight_line('red') }
1461
+ end
1462
+ ensure
1463
+ # Change Go Button to Start Button and remove highlight
1464
+ Qt.execute_in_main_thread(true) do
1465
+ # Stop Capturing STDOUT and STDERR
1466
+ # Check for remove_stream because if the tool is quitting the
1467
+ # Cosmos::restore_io may have been called which sets $stdout and
1468
+ # $stderr to the IO constant
1469
+ $stdout.remove_stream(@output_io) if $stdout.respond_to? :remove_stream
1470
+ $stderr.remove_stream(@output_io) if $stderr.respond_to? :remove_stream
1471
+
1472
+ # Clear run thread and instance to indicate we are no longer running
1473
+ @@instance = saved_instance
1474
+ @@run_thread = saved_run_thread
1475
+ @active_script = @script
1476
+ @script_binding = nil
1477
+ @current_filename = nil
1478
+ @current_line_number = 0
1479
+ if @@limits_monitor_thread and not @@instance
1480
+ @@cancel_limits = true
1481
+ @@limits_sleeper.cancel
1482
+ Qt::CoreApplication.processEvents()
1483
+ Cosmos.kill_thread(self, @@limits_monitor_thread)
1484
+ @@limits_monitor_thread = nil
1485
+ end
1486
+ if @@output_thread and not @@instance
1487
+ @@cancel_output = true
1488
+ @@output_sleeper.cancel
1489
+ Qt::CoreApplication.processEvents()
1490
+ Cosmos.kill_thread(self, @@output_thread)
1491
+ @@output_thread = nil
1492
+ end
1493
+
1494
+ @script.setReadOnly(false) unless @script.read_only
1495
+ @script.stop_highlight unless uncaught_exception
1496
+ select_tab_and_destroy_tabs_after_index(0)
1497
+ remove_tabs()
1498
+ unless @allow_start
1499
+ @realtime_button_bar.start_button.setEnabled(false)
1500
+ @script.setReadOnly(true)
1501
+ end
1502
+ mark_stopped()
1503
+ if close_on_complete
1504
+ self.parent.done(0)
1505
+ end
1506
+ end
1507
+ end
1508
+ end
1509
+ end
1510
+
1511
+ def handle_potential_tab_change(filename)
1512
+ # Make sure the correct file is shown in script runner
1513
+ if @current_file != filename and @tab_book_shown
1514
+ Qt.execute_in_main_thread(true) do
1515
+ if @call_stack.include?(filename)
1516
+ index = @call_stack.index(filename)
1517
+ select_tab_and_destroy_tabs_after_index(index)
1518
+ else # new file
1519
+ # Create new tab
1520
+ new_script = create_ruby_editor()
1521
+ new_script.filename = filename
1522
+ @tab_book.addTab(new_script, ' ' + File.basename(filename) + ' ')
1523
+
1524
+ @call_stack.push(filename.dup)
1525
+
1526
+ # Switch to new tab
1527
+ @tab_book.setCurrentIndex(@tab_book.count - 1)
1528
+ @active_script = new_script
1529
+ load_file_into_script(filename)
1530
+ new_script.setReadOnly(true)
1531
+ end
1532
+
1533
+ @current_file = filename
1534
+ end
1535
+ end
1536
+ end
1537
+
1538
+ def show_active_tab
1539
+ @tab_book.setCurrentIndex(@call_stack.length - 1) if @tab_book_shown
1540
+ end
1541
+
1542
+ def handle_pause(filename, line_number)
1543
+ bkpt_filename = ''
1544
+ Qt.execute_in_main_thread(true) {bkpt_filename = @active_script.filename}
1545
+ breakpoint = false
1546
+ breakpoint = true if @@breakpoints[bkpt_filename] and @@breakpoints[bkpt_filename][line_number]
1547
+
1548
+ filename = File.basename(filename)
1549
+ if @pause
1550
+ @pause = false unless @@step_mode
1551
+ if breakpoint
1552
+ perform_breakpoint(filename, line_number)
1553
+ else
1554
+ perform_pause()
1555
+ end
1556
+ else
1557
+ perform_breakpoint(filename, line_number) if breakpoint
1558
+ end
1559
+ end
1560
+
1561
+ def handle_line_delay
1562
+ if @@line_delay > 0.0
1563
+ sleep_time = @@line_delay - (Time.now.sys - @pre_line_time)
1564
+ sleep(sleep_time) if sleep_time > 0.0
1565
+ end
1566
+ @pre_line_time = Time.now.sys
1567
+ end
1568
+
1569
+ def continue_without_pausing_on_errors?
1570
+ if !@@pause_on_error
1571
+ if Qt::MessageBox.warning(self, "Warning", "If an error occurs, the script will not pause and will run to completion. Continue?", Qt::MessageBox::Yes | Qt::MessageBox::No, Qt::MessageBox::Yes) == Qt::MessageBox::No
1572
+ return false
1573
+ end
1574
+ end
1575
+ true
1576
+ end
1577
+
1578
+ def handle_step_button
1579
+ scriptrunner_puts "User pressed #{@realtime_button_bar.step_button.text.strip}"
1580
+ pause()
1581
+ @@step_mode = true
1582
+ handle_start_go_button(step = true)
1583
+ end
1584
+
1585
+ def handle_start_go_button(step = false)
1586
+ unless step
1587
+ scriptrunner_puts "User pressed #{@realtime_button_bar.start_button.text.strip}"
1588
+ @@step_mode = false
1589
+ end
1590
+ handle_output_io()
1591
+ @realtime_button_bar.start_button.clear_focus()
1592
+
1593
+ if running?()
1594
+ show_active_tab()
1595
+ go()
1596
+ else
1597
+ if @allow_start
1598
+ run() if continue_without_pausing_on_errors?()
1599
+ end
1600
+ end
1601
+ end
1602
+
1603
+ def handle_pause_retry_button
1604
+ scriptrunner_puts "User pressed #{@realtime_button_bar.pause_button.text.strip}"
1605
+ handle_output_io()
1606
+ @realtime_button_bar.pause_button.clear_focus()
1607
+ show_active_tab() if running?
1608
+ if @realtime_button_bar.pause_button.text.to_s == 'Pause'
1609
+ pause()
1610
+ else
1611
+ retry_needed()
1612
+ end
1613
+ end
1614
+
1615
+ def handle_stop_button
1616
+ scriptrunner_puts "User pressed #{@realtime_button_bar.stop_button.text.strip}"
1617
+ handle_output_io()
1618
+ @realtime_button_bar.stop_button.clear_focus()
1619
+
1620
+ if @stop
1621
+ # If we're already stopped and they click Stop again, kill the run
1622
+ # thread. This will break any ruby sleeps or other code blocks.
1623
+ ScriptRunnerFrame.stop!
1624
+ handle_output_io()
1625
+ else
1626
+ @stop = true
1627
+ end
1628
+ if !running?()
1629
+ # Stop highlight if there was a red syntax error
1630
+ @script.stop_highlight
1631
+ end
1632
+ end
1633
+
1634
+ def handle_exception(error, fatal, filename = nil, line_number = 0)
1635
+ @error_callback.call(self) if @error_callback
1636
+
1637
+ @exceptions ||= []
1638
+ @exceptions << error
1639
+ @@error = error
1640
+
1641
+ if error.class == DRb::DRbConnError
1642
+ Logger.error("Error Connecting to Command and Telemetry Server")
1643
+ elsif error.class == CheckError
1644
+ Logger.error(error.message)
1645
+ else
1646
+ Logger.error(error.class.to_s.split('::')[-1] + ' : ' + error.message)
1647
+ end
1648
+ Logger.error(error.backtrace.join("\n")) if @@show_backtrace
1649
+ handle_output_io(filename, line_number)
1650
+
1651
+ Kernel.raise error if !@@pause_on_error and !@continue_after_error and !fatal
1652
+
1653
+ if !fatal and @@pause_on_error
1654
+ mark_error()
1655
+ wait_for_go_or_stop_or_retry(error)
1656
+ end
1657
+
1658
+ if @retry_needed
1659
+ @retry_needed = false
1660
+ true
1661
+ else
1662
+ false
1663
+ end
1664
+ end
1665
+
1666
+ # Right click context_menu for the script
1667
+ def context_menu(point)
1668
+ # Only show context menu if not running or paused. Otherwise will segfault if current tab goes away while menu
1669
+ # is shown
1670
+ if not self.class.running? or (running?() and @realtime_button_bar.state != 'Running')
1671
+ if @tab_book_shown
1672
+ current_script = @tab_book.widget(@tab_book.currentIndex)
1673
+ else
1674
+ current_script = @script
1675
+ end
1676
+ menu = current_script.context_menu(point)
1677
+ menu.addSeparator()
1678
+ if not self.class.running?
1679
+ exec_selected_action = Qt::Action.new("Execute Selected Lines", self)
1680
+ exec_selected_action.statusTip = "Execute the selected lines as a standalone script"
1681
+ exec_selected_action.connect(SIGNAL('triggered()')) { run_selection() }
1682
+ menu.addAction(exec_selected_action)
1683
+
1684
+ exec_cursor_action = Qt::Action.new("Execute From Cursor", self)
1685
+ exec_cursor_action.statusTip = "Execute the script starting at the line containing the cursor"
1686
+ exec_cursor_action.connect(SIGNAL('triggered()')) { run_from_cursor() }
1687
+ menu.addAction(exec_cursor_action)
1688
+
1689
+ menu.addSeparator()
1690
+
1691
+ if RUBY_VERSION.split('.')[0].to_i > 1
1692
+ syntax_action = Qt::Action.new("Ruby Syntax Check Selected Lines", self)
1693
+ syntax_action.statusTip = "Check the selected lines for valid Ruby syntax"
1694
+ syntax_action.connect(SIGNAL('triggered()')) { ruby_syntax_check_selection() }
1695
+ menu.addAction(syntax_action)
1696
+ end
1697
+
1698
+ mnemonic_action = Qt::Action.new("Mnemonic Check Selected Lines", self)
1699
+ mnemonic_action.statusTip = "Check the selected lines for valid targets, packets, mnemonics and parameters"
1700
+ mnemonic_action.connect(SIGNAL('triggered()')) { mnemonic_check_selection() }
1701
+ menu.addAction(mnemonic_action)
1702
+
1703
+ elsif running?() and @realtime_button_bar.state != 'Running'
1704
+ exec_selected_action = Qt::Action.new("Execute Selected Lines While Paused", self)
1705
+ exec_selected_action.statusTip = "Execute the selected lines as a standalone script"
1706
+ exec_selected_action.connect(SIGNAL('triggered()')) { run_selection_while_paused() }
1707
+ menu.addAction(exec_selected_action)
1708
+ end
1709
+ menu.exec(current_script.mapToGlobal(point))
1710
+ menu.dispose
1711
+ end
1712
+ end
1713
+
1714
+ def load_file_into_script(filename)
1715
+ cached = @@file_cache[filename]
1716
+ if cached
1717
+ @active_script.setPlainText(cached.gsub("\r", ''))
1718
+ else
1719
+ if File.exist?(filename)
1720
+ data = File.read(filename).gsub("\r", '')
1721
+ else
1722
+ data = ""
1723
+ end
1724
+ @active_script.setPlainText(data)
1725
+ end
1726
+ mark_breakpoints(filename)
1727
+ @active_script.read_only = !File.writable?(filename)
1728
+ @active_script.setReadOnly(@active_script.read_only)
1729
+ @active_script.stop_highlight
1730
+ end
1731
+
1732
+ def mark_breakpoints(filename)
1733
+ breakpoints = @@breakpoints[filename]
1734
+ if breakpoints
1735
+ breakpoints.each do |line_number, present|
1736
+ @active_script.add_breakpoint(line_number) if present
1737
+ end
1738
+ end
1739
+ end
1740
+
1741
+ def redirect_io
1742
+ # Redirect Standard Output and Standard Error
1743
+ $stdout = Stdout.instance
1744
+ $stderr = Stderr.instance
1745
+
1746
+ # Disable outputting to default io file descriptors
1747
+ $stdout.remove_default_io
1748
+ $stderr.remove_default_io
1749
+
1750
+ Logger.level = Logger::INFO
1751
+ Logger::INFO_SEVERITY_STRING.replace('')
1752
+ Logger::WARN_SEVERITY_STRING.replace('<Y> WARN:')
1753
+ Logger::ERROR_SEVERITY_STRING.replace('<R> ERROR:')
1754
+ end
1755
+
1756
+ def create_tabs
1757
+ tab_text = @default_tab_text
1758
+ tab_text = ' ' + File.basename(@filename) + ' ' unless @filename.empty?
1759
+ @tab_book.addTab(@script, tab_text)
1760
+ @top_frame.insertWidget(0, @tab_book)
1761
+ @tab_book_shown = true
1762
+ end
1763
+
1764
+ def remove_tabs
1765
+ @top_frame.takeAt(0) # Remove the @tab_book from the layout
1766
+ @top_frame.addWidget(@script) # Add back the script
1767
+ @script.show
1768
+ @tab_book_shown = false
1769
+ end
1770
+
1771
+ def isolate_string(keyword, line)
1772
+ found_string = nil
1773
+
1774
+ # Find keyword
1775
+ keyword_index = line.index(keyword)
1776
+
1777
+ # Remove keyword from line
1778
+ line = line[(keyword_index + keyword.length)..-1]
1779
+
1780
+ # Find start parens
1781
+ start_parens = line.index('(')
1782
+ if start_parens
1783
+ end_parens = line[start_parens..-1].index(')')
1784
+ found_string = line[(start_parens + 1)..(end_parens + start_parens - 1)].remove_quotes if end_parens
1785
+ if keyword == 'wait' or keyword == 'wait_check'
1786
+ quote_index = found_string.rindex('"')
1787
+ quote_index = found_string.rindex("'") unless quote_index
1788
+ if quote_index
1789
+ found_string = found_string[0..quote_index].remove_quotes
1790
+ else
1791
+ found_string = nil
1792
+ end
1793
+ end
1794
+ end
1795
+ found_string
1796
+ end
1797
+
1798
+ def mnemonic_check_cmd_line(keyword, line_number, line)
1799
+ result = nil
1800
+
1801
+ # Isolate the string
1802
+ string = isolate_string(keyword, line)
1803
+ if string
1804
+ begin
1805
+ target_name, cmd_name, cmd_params = extract_fields_from_cmd_text(string)
1806
+ result = "At line #{line_number}: Unknown command: #{target_name} #{cmd_name}"
1807
+ packet = System.commands.packet(target_name, cmd_name)
1808
+ Kernel.raise "Command not found" unless packet
1809
+ cmd_params.each do |param_name, param_value|
1810
+ result = "At line #{line_number}: Unknown command parameter: #{target_name} #{cmd_name} #{param_name}"
1811
+ packet.get_item(param_name)
1812
+ end
1813
+ result = nil
1814
+ rescue
1815
+ if result
1816
+ if string.index('=>')
1817
+ # Assume alternative syntax
1818
+ result = nil
1819
+ end
1820
+ else
1821
+ result = "At line #{line_number}: Potentially malformed command: #{line}"
1822
+ end
1823
+ end
1824
+ end
1825
+
1826
+ result
1827
+ end
1828
+
1829
+ def _mnemonic_check_tlm_line(keyword, line_number, line)
1830
+ result = nil
1831
+
1832
+ # Isolate the string
1833
+ string = isolate_string(keyword, line)
1834
+ if string
1835
+ begin
1836
+ target_name, packet_name, item_name = yield string
1837
+ result = "At line #{line_number}: Unknown telemetry item: #{target_name} #{packet_name} #{item_name}"
1838
+ System.telemetry.packet_and_item(target_name, packet_name, item_name)
1839
+ result = nil
1840
+ rescue
1841
+ if result
1842
+ if string.index(',')
1843
+ # Assume alternative syntax
1844
+ result = nil
1845
+ end
1846
+ else
1847
+ result = "At line #{line_number}: Potentially malformed telemetry: #{line}"
1848
+ end
1849
+ end
1850
+ end
1851
+
1852
+ result
1853
+ end
1854
+
1855
+ def mnemonic_check_tlm_line(keyword, line_number, line)
1856
+ _mnemonic_check_tlm_line(keyword, line_number, line) do |string|
1857
+ extract_fields_from_tlm_text(string)
1858
+ end
1859
+ end
1860
+
1861
+ def mnemonic_check_set_tlm_line(keyword, line_number, line)
1862
+ _mnemonic_check_tlm_line(keyword, line_number, line) do |string|
1863
+ extract_fields_from_set_tlm_text(string)
1864
+ end
1865
+ end
1866
+
1867
+ def mnemonic_check_check_line(keyword, line_number, line)
1868
+ _mnemonic_check_tlm_line(keyword, line_number, line) do |string|
1869
+ extract_fields_from_check_text(string)
1870
+ end
1871
+ end
1872
+
1873
+ def output_thread
1874
+ @@cancel_output = false
1875
+ @@output_sleeper = Sleeper.new
1876
+ begin
1877
+ loop do
1878
+ break if @@cancel_output
1879
+ handle_output_io() if (Time.now.sys - @output_time) > 5.0
1880
+ break if @@cancel_output
1881
+ break if @@output_sleeper.sleep(1.0)
1882
+ end # loop
1883
+ rescue => error
1884
+ Qt.execute_in_main_thread(true) do
1885
+ ExceptionDialog.new(self, error, "Output Thread")
1886
+ end
1887
+ end
1888
+ end
1889
+
1890
+ def limits_monitor_thread
1891
+ @@cancel_limits = false
1892
+ @@limits_sleeper = Sleeper.new
1893
+ queue_id = nil
1894
+ begin
1895
+ loop do
1896
+ break if @@cancel_limits
1897
+ begin
1898
+ # Subscribe to limits notifications
1899
+ queue_id = subscribe_limits_events(100000) unless queue_id
1900
+
1901
+ # Get the next limits event
1902
+ break if @@cancel_limits
1903
+ begin
1904
+ type, data = get_limits_event(queue_id, true)
1905
+ rescue ThreadError
1906
+ break if @@cancel_limits
1907
+ break if @@limits_sleeper.sleep(0.5)
1908
+ next
1909
+ end
1910
+
1911
+ break if @@cancel_limits
1912
+
1913
+ # Display limits state changes
1914
+ if type == :LIMITS_CHANGE
1915
+ target_name = data[0]
1916
+ packet_name = data[1]
1917
+ item_name = data[2]
1918
+ old_limits_state = data[3]
1919
+ new_limits_state = data[4]
1920
+
1921
+ if old_limits_state == nil # Changing from nil
1922
+ if (new_limits_state != :GREEN) &&
1923
+ (new_limits_state != :GREEN_LOW) &&
1924
+ (new_limits_state != :GREEN_HIGH) &&
1925
+ (new_limits_state != :BLUE)
1926
+ msg = "#{target_name} #{packet_name} #{item_name} is #{new_limits_state.to_s}"
1927
+ case new_limits_state
1928
+ when :YELLOW, :YELLOW_LOW, :YELLOW_HIGH
1929
+ scriptrunner_puts "<Y>#{msg}"
1930
+ when :RED, :RED_LOW, :RED_HIGH
1931
+ scriptrunner_puts "<R>#{msg}"
1932
+ else
1933
+ # Print nothing
1934
+ end
1935
+ handle_output_io()
1936
+ end
1937
+ else # changing from a color
1938
+ msg = "#{target_name} #{packet_name} #{item_name} is #{new_limits_state.to_s}"
1939
+ case new_limits_state
1940
+ when :BLUE
1941
+ scriptrunner_puts "<B>#{msg}"
1942
+ when :GREEN, :GREEN_LOW, :GREEN_HIGH
1943
+ scriptrunner_puts "<G>#{msg}"
1944
+ when :YELLOW, :YELLOW_LOW, :YELLOW_HIGH
1945
+ scriptrunner_puts "<Y>#{msg}"
1946
+ when :RED, :RED_LOW, :RED_HIGH
1947
+ scriptrunner_puts "<R>#{msg}"
1948
+ else
1949
+ # Print nothing
1950
+ end
1951
+ break if @@cancel_limits
1952
+ handle_output_io()
1953
+ break if @@cancel_limits
1954
+ end
1955
+
1956
+ if @@pause_on_red && (new_limits_state == :RED ||
1957
+ new_limits_state == :RED_LOW ||
1958
+ new_limits_state == :RED_HIGH)
1959
+ break if @@cancel_limits
1960
+ pause()
1961
+ break if @@cancel_limits
1962
+ end
1963
+ end
1964
+
1965
+ rescue DRb::DRbConnError
1966
+ queue_id = nil
1967
+ break if @@cancel_limits
1968
+ break if @@limits_sleeper.sleep(1)
1969
+ end
1970
+
1971
+ end # loop
1972
+ rescue => error
1973
+ Qt.execute_in_main_thread(true) do
1974
+ ExceptionDialog.new(self, error, "Limits Monitor Thread")
1975
+ end
1976
+ end
1977
+ ensure
1978
+ begin
1979
+ unsubscribe_limits_events(queue_id) if queue_id
1980
+ rescue
1981
+ # Oh Well
1982
+ end
1983
+ end
1984
+ end
1985
+ end