cosmos 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1114) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +48 -0
  3. data/.travis.yml +5 -0
  4. data/Gemfile +5 -0
  5. data/Guardfile +27 -0
  6. data/LICENSE.txt +879 -0
  7. data/Manifest.txt +1112 -0
  8. data/README.md +42 -0
  9. data/Rakefile +214 -0
  10. data/autohotkey/config/data/attitude.bin +0 -0
  11. data/autohotkey/config/data/diamond.STL +58 -0
  12. data/autohotkey/config/data/groundoff.gif +0 -0
  13. data/autohotkey/config/data/groundon.gif +0 -0
  14. data/autohotkey/config/data/position.bin +0 -0
  15. data/autohotkey/config/data/satellite.gif +0 -0
  16. data/autohotkey/config/data/tada.wav +0 -0
  17. data/autohotkey/config/system/system.txt +34 -0
  18. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
  19. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  20. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  21. data/autohotkey/config/targets/COSMOS/target.txt +5 -0
  22. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -0
  23. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -0
  24. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -0
  25. data/autohotkey/config/targets/INST/doc/README.txt +1 -0
  26. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -0
  27. data/autohotkey/config/targets/INST/lib/sim_inst.rb +294 -0
  28. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -0
  29. data/autohotkey/config/targets/INST/screens/array.txt +7 -0
  30. data/autohotkey/config/targets/INST/screens/block.txt +8 -0
  31. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -0
  32. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -0
  33. data/autohotkey/config/targets/INST/screens/ground.txt +25 -0
  34. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -0
  35. data/autohotkey/config/targets/INST/screens/hs.txt +49 -0
  36. data/autohotkey/config/targets/INST/screens/image.txt +21 -0
  37. data/autohotkey/config/targets/INST/screens/latest.txt +23 -0
  38. data/autohotkey/config/targets/INST/screens/mech.txt +25 -0
  39. data/autohotkey/config/targets/INST/screens/other.txt +25 -0
  40. data/autohotkey/config/targets/INST/screens/params.txt +25 -0
  41. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -0
  42. data/autohotkey/config/targets/INST/target.txt +27 -0
  43. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -0
  44. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -0
  45. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  46. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -0
  47. data/autohotkey/config/tools/cmd_sender/cmd_sender.txt +1 -0
  48. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -0
  49. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -0
  50. data/autohotkey/config/tools/handbook_creator/default_toc.xsl +59 -0
  51. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -0
  52. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  53. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  54. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  55. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -0
  56. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  57. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  58. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  59. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  60. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  61. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  62. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  63. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  64. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -0
  65. data/autohotkey/config/tools/launcher/launcher.txt +38 -0
  66. data/autohotkey/config/tools/limits_monitor/README.txt +1 -0
  67. data/autohotkey/config/tools/opengl_builder/error.txt +1 -0
  68. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -0
  69. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -0
  70. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -0
  71. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -0
  72. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -0
  73. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -0
  74. data/autohotkey/config/tools/test_runner/test_runner3.txt +7 -0
  75. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -0
  76. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +14 -0
  77. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -0
  78. data/autohotkey/config/tools/tlm_grapher/README.txt +1 -0
  79. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -0
  80. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -0
  81. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -0
  82. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -0
  83. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -0
  84. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -0
  85. data/autohotkey/lib/example_background_task.rb +42 -0
  86. data/autohotkey/lib/user_version.rb +3 -0
  87. data/autohotkey/outputs/handbooks/assets/css/bootstrap-theme.css +397 -0
  88. data/autohotkey/outputs/handbooks/assets/css/bootstrap-theme.min.css +7 -0
  89. data/autohotkey/outputs/handbooks/assets/css/bootstrap.css +7118 -0
  90. data/autohotkey/outputs/handbooks/assets/css/bootstrap.min.css +7 -0
  91. data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  92. data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  93. data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  94. data/autohotkey/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  95. data/autohotkey/outputs/handbooks/assets/js/bootstrap.js +2006 -0
  96. data/autohotkey/outputs/handbooks/assets/js/bootstrap.min.js +7 -0
  97. data/autohotkey/outputs/logs/bigtlm.bin +0 -0
  98. data/autohotkey/outputs/logs/cmd.bin +0 -0
  99. data/autohotkey/outputs/logs/tlm.bin +0 -0
  100. data/autohotkey/outputs/saved_config/README.txt +1 -0
  101. data/autohotkey/outputs/tables/README.txt +1 -0
  102. data/autohotkey/outputs/tmp/README.txt +1 -0
  103. data/autohotkey/procedures/clear_util.rb +7 -0
  104. data/autohotkey/procedures/collect.rb +18 -0
  105. data/autohotkey/procedures/collect_util.rb +14 -0
  106. data/autohotkey/procedures/example_test.rb +67 -0
  107. data/autohotkey/procedures/example_test2.rb +74 -0
  108. data/autohotkey/procedures/script_test.rb +17 -0
  109. data/autohotkey/procedures/syntax_error.rb +18 -0
  110. data/autohotkey/tools/CmdExtractorAHK +16 -0
  111. data/autohotkey/tools/CmdSender +14 -0
  112. data/autohotkey/tools/CmdSenderAHK +18 -0
  113. data/autohotkey/tools/CmdTlmServer +14 -0
  114. data/autohotkey/tools/CmdTlmServerAHK +28 -0
  115. data/autohotkey/tools/CmdTlmServerAHK2 +17 -0
  116. data/autohotkey/tools/DataViewer +14 -0
  117. data/autohotkey/tools/DataViewerAHK +17 -0
  118. data/autohotkey/tools/HandbookCreatorAHK +20 -0
  119. data/autohotkey/tools/LauncherAHK +17 -0
  120. data/autohotkey/tools/LimitsMonitorAHK +20 -0
  121. data/autohotkey/tools/OpenGLBuilderAHK +20 -0
  122. data/autohotkey/tools/PacketViewer +14 -0
  123. data/autohotkey/tools/PacketViewerAHK +18 -0
  124. data/autohotkey/tools/PacketViewerAHK2 +17 -0
  125. data/autohotkey/tools/Replay +14 -0
  126. data/autohotkey/tools/Replay.bat +59 -0
  127. data/autohotkey/tools/ReplayAHK +17 -0
  128. data/autohotkey/tools/ScriptRunner +14 -0
  129. data/autohotkey/tools/ScriptRunnerAHK +20 -0
  130. data/autohotkey/tools/ScriptRunnerAHK2 +17 -0
  131. data/autohotkey/tools/TableManager +14 -0
  132. data/autohotkey/tools/TableManagerAHK +30 -0
  133. data/autohotkey/tools/TestRunner +15 -0
  134. data/autohotkey/tools/TestRunnerAHK +17 -0
  135. data/autohotkey/tools/TestRunnerAHK2 +17 -0
  136. data/autohotkey/tools/TestRunnerAHK3 +17 -0
  137. data/autohotkey/tools/TestRunnerAHK4 +17 -0
  138. data/autohotkey/tools/TlmExtractor +15 -0
  139. data/autohotkey/tools/TlmExtractorAHK +19 -0
  140. data/autohotkey/tools/TlmExtractorAHK2 +16 -0
  141. data/autohotkey/tools/TlmExtractorAHK3 +16 -0
  142. data/autohotkey/tools/TlmGrapher +14 -0
  143. data/autohotkey/tools/TlmGrapherAHK +19 -0
  144. data/autohotkey/tools/TlmGrapherAHK2 +23 -0
  145. data/autohotkey/tools/TlmGrapherAHK3 +17 -0
  146. data/autohotkey/tools/TlmGrapherAHK4 +17 -0
  147. data/autohotkey/tools/TlmViewer +14 -0
  148. data/autohotkey/tools/TlmViewerAHK +28 -0
  149. data/autohotkey/tools/TlmViewerAHK2 +18 -0
  150. data/autohotkey/tools/TlmViewerAHK3 +18 -0
  151. data/autohotkey/tools/TlmViewerAHK4 +18 -0
  152. data/autohotkey/tools/TlmViewerAHK5 +18 -0
  153. data/autohotkey/tools/autohotkey.rb +37 -0
  154. data/autohotkey/tools/cmd_extractor.ahk +27 -0
  155. data/autohotkey/tools/cmd_sender.ahk +162 -0
  156. data/autohotkey/tools/cmd_tlm_server.ahk +89 -0
  157. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -0
  158. data/autohotkey/tools/data_viewer.ahk +135 -0
  159. data/autohotkey/tools/handbook_creator.ahk +23 -0
  160. data/autohotkey/tools/launcher.ahk +41 -0
  161. data/autohotkey/tools/limits_monitor.ahk +70 -0
  162. data/autohotkey/tools/open_gl_builder.ahk +134 -0
  163. data/autohotkey/tools/packet_viewer.ahk +143 -0
  164. data/autohotkey/tools/packet_viewer2.ahk +9 -0
  165. data/autohotkey/tools/replay.ahk +98 -0
  166. data/autohotkey/tools/script_runner.ahk +589 -0
  167. data/autohotkey/tools/script_runner2.ahk +31 -0
  168. data/autohotkey/tools/table_manager.ahk +220 -0
  169. data/autohotkey/tools/test_runner.ahk +259 -0
  170. data/autohotkey/tools/test_runner2.ahk +52 -0
  171. data/autohotkey/tools/test_runner3.ahk +13 -0
  172. data/autohotkey/tools/tlm_extractor.ahk +272 -0
  173. data/autohotkey/tools/tlm_grapher.ahk +642 -0
  174. data/autohotkey/tools/tlm_grapher2.ahk +115 -0
  175. data/autohotkey/tools/tlm_grapher3.ahk +24 -0
  176. data/autohotkey/tools/tlm_viewer.ahk +133 -0
  177. data/autohotkey/tools/tlm_viewer2.ahk +49 -0
  178. data/autohotkey/tools/tlm_viewer4.ahk +4 -0
  179. data/autohotkey/tools/tlm_viewer5.ahk +20 -0
  180. data/autohotkey/userpath.txt +1 -0
  181. data/bin/cosmos +96 -0
  182. data/bin/cstol_converter +1166 -0
  183. data/bin/exchndl20.dll +0 -0
  184. data/bin/exchndl21.dll +0 -0
  185. data/bin/mgwhelp.dll +0 -0
  186. data/bin/rubysloc +85 -0
  187. data/cosmos.gemspec +98 -0
  188. data/data/COSMOS_64x64.bmp +0 -0
  189. data/data/COSMOS_64x64.ico +0 -0
  190. data/data/COSMOS_64x64.png +0 -0
  191. data/data/CheckBoxCheck.gif +0 -0
  192. data/data/CheckBoxEmpty.gif +0 -0
  193. data/data/Earthmap1024x512.gif +0 -0
  194. data/data/about.txt +4 -0
  195. data/data/add_database.png +0 -0
  196. data/data/add_plot.png +0 -0
  197. data/data/add_tab.png +0 -0
  198. data/data/blank.png +0 -0
  199. data/data/bug.png +0 -0
  200. data/data/checkmark.png +0 -0
  201. data/data/close.png +0 -0
  202. data/data/cmd_extractor.png +0 -0
  203. data/data/cmd_sender.png +0 -0
  204. data/data/copy.png +0 -0
  205. data/data/cosmos.xcf +0 -0
  206. data/data/cosmos_word.gif +0 -0
  207. data/data/crc.txt +305 -0
  208. data/data/cts.png +0 -0
  209. data/data/cut.png +0 -0
  210. data/data/data_viewer.png +0 -0
  211. data/data/delete_database.png +0 -0
  212. data/data/delete_plot.png +0 -0
  213. data/data/delete_tab.png +0 -0
  214. data/data/diamond.STL +58 -0
  215. data/data/disconnected.png +0 -0
  216. data/data/edit.png +0 -0
  217. data/data/edit_database.png +0 -0
  218. data/data/edit_plot.png +0 -0
  219. data/data/edit_tab.png +0 -0
  220. data/data/end-26.png +0 -0
  221. data/data/fast_forward-26.png +0 -0
  222. data/data/file.png +0 -0
  223. data/data/handbook_creator.png +0 -0
  224. data/data/help.png +0 -0
  225. data/data/html-32.png +0 -0
  226. data/data/launcher.png +0 -0
  227. data/data/legal.gif +0 -0
  228. data/data/legal.txt +9 -0
  229. data/data/limits_monitor.png +0 -0
  230. data/data/moonmap1k.gif +0 -0
  231. data/data/multi.png +0 -0
  232. data/data/open.png +0 -0
  233. data/data/open_in_browser-32.png +0 -0
  234. data/data/opengl_builder.png +0 -0
  235. data/data/packet_viewer.png +0 -0
  236. data/data/pdf-32.png +0 -0
  237. data/data/play-26.png +0 -0
  238. data/data/redo.png +0 -0
  239. data/data/replay.png +0 -0
  240. data/data/reverse-play-26.png +0 -0
  241. data/data/rewind-26.png +0 -0
  242. data/data/running.png +0 -0
  243. data/data/save.png +0 -0
  244. data/data/save_as.png +0 -0
  245. data/data/screenshot.png +0 -0
  246. data/data/script_runner.png +0 -0
  247. data/data/search-14.png +0 -0
  248. data/data/search.png +0 -0
  249. data/data/send_file.png +0 -0
  250. data/data/skip_to_start-26.png +0 -0
  251. data/data/spinner.gif +0 -0
  252. data/data/splash.gif +0 -0
  253. data/data/stop-26.png +0 -0
  254. data/data/table_manager.png +0 -0
  255. data/data/test_runner.png +0 -0
  256. data/data/tlm_extractor.png +0 -0
  257. data/data/tlm_grapher.png +0 -0
  258. data/data/tlm_viewer.png +0 -0
  259. data/data/undo.png +0 -0
  260. data/demo/Gemfile +5 -0
  261. data/demo/Launcher +15 -0
  262. data/demo/Launcher.bat +59 -0
  263. data/demo/Rakefile +61 -0
  264. data/demo/config/data/attitude.bin +0 -0
  265. data/demo/config/data/crc.txt +206 -0
  266. data/demo/config/data/diamond.STL +58 -0
  267. data/demo/config/data/groundoff.gif +0 -0
  268. data/demo/config/data/groundon.gif +0 -0
  269. data/demo/config/data/hselectoff.gif +0 -0
  270. data/demo/config/data/hselecton.gif +0 -0
  271. data/demo/config/data/hswitchoff.gif +0 -0
  272. data/demo/config/data/hswitchon.gif +0 -0
  273. data/demo/config/data/meta_init.txt +4 -0
  274. data/demo/config/data/position.bin +0 -0
  275. data/demo/config/data/poweroff.gif +0 -0
  276. data/demo/config/data/poweron.gif +0 -0
  277. data/demo/config/data/satellite.gif +0 -0
  278. data/demo/config/data/tada.wav +0 -0
  279. data/demo/config/data/vswitchoff.gif +0 -0
  280. data/demo/config/data/vswitchon.gif +0 -0
  281. data/demo/config/system/system.txt +34 -0
  282. data/demo/config/system/system2.txt +33 -0
  283. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
  284. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  285. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  286. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -0
  287. data/demo/config/targets/COSMOS/screens/version.txt +19 -0
  288. data/demo/config/targets/COSMOS/target.txt +11 -0
  289. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -0
  290. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +3 -0
  291. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -0
  292. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -0
  293. data/demo/config/targets/EXAMPLE/target.txt +7 -0
  294. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -0
  295. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -0
  296. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -0
  297. data/demo/config/targets/INST/doc/README.txt +1 -0
  298. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -0
  299. data/demo/config/targets/INST/lib/sim_inst.rb +294 -0
  300. data/demo/config/targets/INST/screens/adcs.txt +46 -0
  301. data/demo/config/targets/INST/screens/array.txt +15 -0
  302. data/demo/config/targets/INST/screens/block.txt +8 -0
  303. data/demo/config/targets/INST/screens/commanding.txt +30 -0
  304. data/demo/config/targets/INST/screens/graphs.txt +14 -0
  305. data/demo/config/targets/INST/screens/ground.txt +25 -0
  306. data/demo/config/targets/INST/screens/hs.txt +44 -0
  307. data/demo/config/targets/INST/screens/latest.txt +23 -0
  308. data/demo/config/targets/INST/screens/other.txt +29 -0
  309. data/demo/config/targets/INST/screens/tabs.txt +70 -0
  310. data/demo/config/targets/INST/target.txt +33 -0
  311. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -0
  312. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -0
  313. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  314. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -0
  315. data/demo/config/targets/SYSTEM/screens/status.txt +12 -0
  316. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +12 -0
  317. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -0
  318. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -0
  319. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +48 -0
  320. data/demo/config/targets/TEMPLATED/target.txt +6 -0
  321. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +33 -0
  322. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +29 -0
  323. data/demo/config/tools/data_viewer/data_viewer.txt +11 -0
  324. data/demo/config/tools/handbook_creator/default_toc.xsl +59 -0
  325. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -0
  326. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  327. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  328. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  329. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -0
  330. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  331. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  332. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  333. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  334. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  335. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  336. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  337. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  338. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -0
  339. data/demo/config/tools/launcher/launcher.txt +45 -0
  340. data/demo/config/tools/launcher/launcher2.txt +45 -0
  341. data/demo/config/tools/limits_monitor/README.txt +1 -0
  342. data/demo/config/tools/opengl_builder/README.txt +1 -0
  343. data/demo/config/tools/script_runner/script_runner.txt +3 -0
  344. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -0
  345. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  346. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -0
  347. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -0
  348. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -0
  349. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -0
  350. data/demo/config/tools/test_runner/test_runner.txt +17 -0
  351. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  352. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  353. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  354. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  355. data/demo/config/tools/tlm_grapher/README.txt +1 -0
  356. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -0
  357. data/demo/lib/example_background_task.rb +52 -0
  358. data/demo/lib/example_target.rb +108 -0
  359. data/demo/lib/scpi_target.rb +74 -0
  360. data/demo/lib/user_version.rb +3 -0
  361. data/demo/outputs/handbooks/assets/css/bootstrap-theme.css +397 -0
  362. data/demo/outputs/handbooks/assets/css/bootstrap-theme.min.css +7 -0
  363. data/demo/outputs/handbooks/assets/css/bootstrap.css +7118 -0
  364. data/demo/outputs/handbooks/assets/css/bootstrap.min.css +7 -0
  365. data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  366. data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  367. data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  368. data/demo/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  369. data/demo/outputs/handbooks/assets/img/ball_logo.bmp +0 -0
  370. data/demo/outputs/handbooks/assets/img/ball_logo.gif +0 -0
  371. data/demo/outputs/handbooks/assets/img/ball_logo.jpg +0 -0
  372. data/demo/outputs/handbooks/assets/js/bootstrap.js +2006 -0
  373. data/demo/outputs/handbooks/assets/js/bootstrap.min.js +7 -0
  374. data/demo/outputs/handbooks/assets/js/html5shiv.js +8 -0
  375. data/demo/outputs/handbooks/assets/js/jquery-1.10.2.min.js +6 -0
  376. data/demo/outputs/handbooks/assets/js/respond.min.js +6 -0
  377. data/demo/outputs/logs/README.txt +1 -0
  378. data/demo/outputs/saved_config/README.txt +1 -0
  379. data/demo/outputs/tables/README.txt +1 -0
  380. data/demo/outputs/tmp/README.txt +1 -0
  381. data/demo/procedures/checks.rb +11 -0
  382. data/demo/procedures/clear_util.rb +7 -0
  383. data/demo/procedures/collect.rb +18 -0
  384. data/demo/procedures/collect_util.rb +14 -0
  385. data/demo/procedures/cosmos_api_test.rb +293 -0
  386. data/demo/procedures/disconnect.rb +29 -0
  387. data/demo/procedures/example_test.rb +182 -0
  388. data/demo/procedures/plot_test.rb +8 -0
  389. data/demo/procedures/run_example_test.rb +3 -0
  390. data/demo/procedures/test.rb +51 -0
  391. data/demo/tools/CmdExtractor +15 -0
  392. data/demo/tools/CmdExtractor.bat +59 -0
  393. data/demo/tools/CmdSender +15 -0
  394. data/demo/tools/CmdSender.bat +59 -0
  395. data/demo/tools/CmdTlmServer +15 -0
  396. data/demo/tools/CmdTlmServer.bat +59 -0
  397. data/demo/tools/DataViewer +15 -0
  398. data/demo/tools/DataViewer.bat +59 -0
  399. data/demo/tools/ExampleTarget +15 -0
  400. data/demo/tools/ExampleTarget.bat +59 -0
  401. data/demo/tools/HandbookCreator +15 -0
  402. data/demo/tools/HandbookCreator.bat +61 -0
  403. data/demo/tools/Launcher +15 -0
  404. data/demo/tools/Launcher.bat +59 -0
  405. data/demo/tools/LimitsMonitor +15 -0
  406. data/demo/tools/LimitsMonitor.bat +59 -0
  407. data/demo/tools/OpenGLBuilder +15 -0
  408. data/demo/tools/OpenGLBuilder.bat +59 -0
  409. data/demo/tools/PacketViewer +15 -0
  410. data/demo/tools/PacketViewer.bat +59 -0
  411. data/demo/tools/Replay +15 -0
  412. data/demo/tools/Replay.bat +59 -0
  413. data/demo/tools/ScpiTarget +15 -0
  414. data/demo/tools/ScpiTarget.bat +59 -0
  415. data/demo/tools/ScriptRunner +15 -0
  416. data/demo/tools/ScriptRunner.bat +59 -0
  417. data/demo/tools/TableManager +15 -0
  418. data/demo/tools/TableManager.bat +59 -0
  419. data/demo/tools/TestRunner +15 -0
  420. data/demo/tools/TestRunner.bat +59 -0
  421. data/demo/tools/TlmExtractor +15 -0
  422. data/demo/tools/TlmExtractor.bat +59 -0
  423. data/demo/tools/TlmGrapher +15 -0
  424. data/demo/tools/TlmGrapher.bat +59 -0
  425. data/demo/tools/TlmViewer +15 -0
  426. data/demo/tools/TlmViewer.bat +59 -0
  427. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  428. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
  429. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
  430. data/demo/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  431. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  432. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
  433. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
  434. data/demo/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  435. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  436. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
  437. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
  438. data/demo/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  439. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  440. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
  441. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
  442. data/demo/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  443. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  444. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
  445. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
  446. data/demo/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  447. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  448. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
  449. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
  450. data/demo/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  451. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  452. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
  453. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
  454. data/demo/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  455. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  456. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
  457. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
  458. data/demo/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  459. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  460. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
  461. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
  462. data/demo/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  463. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -0
  464. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
  465. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
  466. data/demo/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  467. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  468. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
  469. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
  470. data/demo/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  471. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  472. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
  473. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
  474. data/demo/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  475. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  476. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
  477. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
  478. data/demo/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  479. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  480. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
  481. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
  482. data/demo/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  483. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  484. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
  485. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
  486. data/demo/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  487. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  488. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
  489. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
  490. data/demo/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  491. data/demo/userpath.txt +1 -0
  492. data/ext/cosmos/ext/array/array.c +111 -0
  493. data/ext/cosmos/ext/array/extconf.rb +13 -0
  494. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -0
  495. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -0
  496. data/ext/cosmos/ext/config_parser/config_parser.c +237 -0
  497. data/ext/cosmos/ext/config_parser/extconf.rb +13 -0
  498. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -0
  499. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -0
  500. data/ext/cosmos/ext/crc/crc.c +341 -0
  501. data/ext/cosmos/ext/crc/extconf.rb +13 -0
  502. data/ext/cosmos/ext/line_graph/extconf.rb +13 -0
  503. data/ext/cosmos/ext/line_graph/line_graph.c +501 -0
  504. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +13 -0
  505. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +261 -0
  506. data/ext/cosmos/ext/packet/extconf.rb +13 -0
  507. data/ext/cosmos/ext/packet/packet.c +339 -0
  508. data/ext/cosmos/ext/platform/extconf.rb +13 -0
  509. data/ext/cosmos/ext/platform/platform.c +82 -0
  510. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -0
  511. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -0
  512. data/ext/cosmos/ext/string/extconf.rb +13 -0
  513. data/ext/cosmos/ext/string/string.c +49 -0
  514. data/ext/cosmos/ext/structure/structure.c +894 -0
  515. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -0
  516. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -0
  517. data/ext/cosmos/ext/telemetry/extconf.rb +13 -0
  518. data/ext/cosmos/ext/telemetry/telemetry.c +306 -0
  519. data/install/Gemfile +5 -0
  520. data/install/Launcher +14 -0
  521. data/install/Launcher.bat +59 -0
  522. data/install/Rakefile +61 -0
  523. data/install/config/data/README.txt +1 -0
  524. data/install/config/data/crc.txt +133 -0
  525. data/install/config/system/system.txt +29 -0
  526. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
  527. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  528. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  529. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -0
  530. data/install/config/targets/COSMOS/screens/version.txt +19 -0
  531. data/install/config/targets/COSMOS/target.txt +9 -0
  532. data/install/config/targets/SYSTEM/README.txt +1 -0
  533. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -0
  534. data/install/config/tools/data_viewer/data_viewer.txt +4 -0
  535. data/install/config/tools/handbook_creator/default_toc.xsl +59 -0
  536. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -0
  537. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  538. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  539. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  540. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -0
  541. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  542. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  543. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  544. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  545. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  546. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  547. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  548. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  549. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -0
  550. data/install/config/tools/launcher/launcher.txt +39 -0
  551. data/install/config/tools/limits_monitor/README.txt +1 -0
  552. data/install/config/tools/opengl_builder/README.txt +1 -0
  553. data/install/config/tools/script_runner/script_runner.txt +3 -0
  554. data/install/config/tools/table_manager/README.txt +1 -0
  555. data/install/config/tools/test_runner/test_runner.txt +8 -0
  556. data/install/config/tools/tlm_extractor/README.txt +1 -0
  557. data/install/config/tools/tlm_grapher/README.txt +1 -0
  558. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -0
  559. data/install/lib/user_version.rb +3 -0
  560. data/install/outputs/handbooks/assets/css/bootstrap-theme.css +397 -0
  561. data/install/outputs/handbooks/assets/css/bootstrap-theme.min.css +7 -0
  562. data/install/outputs/handbooks/assets/css/bootstrap.css +7118 -0
  563. data/install/outputs/handbooks/assets/css/bootstrap.min.css +7 -0
  564. data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  565. data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  566. data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  567. data/install/outputs/handbooks/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  568. data/install/outputs/handbooks/assets/img/ball_logo.bmp +0 -0
  569. data/install/outputs/handbooks/assets/img/ball_logo.gif +0 -0
  570. data/install/outputs/handbooks/assets/img/ball_logo.jpg +0 -0
  571. data/install/outputs/handbooks/assets/js/bootstrap.js +2006 -0
  572. data/install/outputs/handbooks/assets/js/bootstrap.min.js +7 -0
  573. data/install/outputs/handbooks/assets/js/html5shiv.js +8 -0
  574. data/install/outputs/handbooks/assets/js/jquery-1.10.2.min.js +6 -0
  575. data/install/outputs/handbooks/assets/js/respond.min.js +6 -0
  576. data/install/outputs/logs/README.txt +1 -0
  577. data/install/outputs/saved_config/README.txt +1 -0
  578. data/install/outputs/tables/README.txt +1 -0
  579. data/install/outputs/tmp/README.txt +1 -0
  580. data/install/procedures/README.txt +1 -0
  581. data/install/tools/CmdExtractor +15 -0
  582. data/install/tools/CmdExtractor.bat +59 -0
  583. data/install/tools/CmdSender +15 -0
  584. data/install/tools/CmdSender.bat +59 -0
  585. data/install/tools/CmdTlmServer +15 -0
  586. data/install/tools/CmdTlmServer.bat +59 -0
  587. data/install/tools/DataViewer +15 -0
  588. data/install/tools/DataViewer.bat +59 -0
  589. data/install/tools/HandbookCreator +15 -0
  590. data/install/tools/HandbookCreator.bat +61 -0
  591. data/install/tools/Launcher +15 -0
  592. data/install/tools/Launcher.bat +59 -0
  593. data/install/tools/LimitsMonitor +15 -0
  594. data/install/tools/LimitsMonitor.bat +59 -0
  595. data/install/tools/OpenGLBuilder +15 -0
  596. data/install/tools/OpenGLBuilder.bat +59 -0
  597. data/install/tools/PacketViewer +15 -0
  598. data/install/tools/PacketViewer.bat +59 -0
  599. data/install/tools/Replay +15 -0
  600. data/install/tools/Replay.bat +59 -0
  601. data/install/tools/ScriptRunner +15 -0
  602. data/install/tools/ScriptRunner.bat +59 -0
  603. data/install/tools/TableManager +15 -0
  604. data/install/tools/TableManager.bat +59 -0
  605. data/install/tools/TestRunner +15 -0
  606. data/install/tools/TestRunner.bat +59 -0
  607. data/install/tools/TlmExtractor +15 -0
  608. data/install/tools/TlmExtractor.bat +59 -0
  609. data/install/tools/TlmGrapher +15 -0
  610. data/install/tools/TlmGrapher.bat +59 -0
  611. data/install/tools/TlmViewer +15 -0
  612. data/install/tools/TlmViewer.bat +59 -0
  613. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  614. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
  615. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
  616. data/install/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  617. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  618. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
  619. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
  620. data/install/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  621. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  622. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
  623. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
  624. data/install/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  625. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  626. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
  627. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
  628. data/install/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  629. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  630. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
  631. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
  632. data/install/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  633. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  634. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
  635. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
  636. data/install/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  637. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  638. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
  639. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
  640. data/install/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  641. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  642. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
  643. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
  644. data/install/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  645. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  646. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
  647. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
  648. data/install/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  649. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -0
  650. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
  651. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
  652. data/install/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  653. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  654. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
  655. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
  656. data/install/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  657. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  658. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
  659. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
  660. data/install/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  661. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  662. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
  663. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
  664. data/install/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  665. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  666. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
  667. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
  668. data/install/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  669. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  670. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
  671. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
  672. data/install/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  673. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  674. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
  675. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
  676. data/install/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  677. data/install/userpath.txt +1 -0
  678. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -0
  679. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -0
  680. data/lib/cosmos/config/config_parser.rb +324 -0
  681. data/lib/cosmos/conversions/conversion.rb +47 -0
  682. data/lib/cosmos/conversions/generic_conversion.rb +55 -0
  683. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -0
  684. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -0
  685. data/lib/cosmos/conversions/processor_conversion.rb +46 -0
  686. data/lib/cosmos/conversions/received_count_conversion.rb +33 -0
  687. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -0
  688. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -0
  689. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -0
  690. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -0
  691. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -0
  692. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -0
  693. data/lib/cosmos/conversions.rb +13 -0
  694. data/lib/cosmos/core_ext/array.rb +354 -0
  695. data/lib/cosmos/core_ext/class.rb +51 -0
  696. data/lib/cosmos/core_ext/cosmos_io.rb +29 -0
  697. data/lib/cosmos/core_ext/exception.rb +52 -0
  698. data/lib/cosmos/core_ext/file.rb +75 -0
  699. data/lib/cosmos/core_ext/hash.rb +28 -0
  700. data/lib/cosmos/core_ext/io.rb +75 -0
  701. data/lib/cosmos/core_ext/kernel.rb +38 -0
  702. data/lib/cosmos/core_ext/math.rb +119 -0
  703. data/lib/cosmos/core_ext/matrix.rb +146 -0
  704. data/lib/cosmos/core_ext/objectspace.rb +29 -0
  705. data/lib/cosmos/core_ext/range.rb +22 -0
  706. data/lib/cosmos/core_ext/socket.rb +32 -0
  707. data/lib/cosmos/core_ext/string.rb +310 -0
  708. data/lib/cosmos/core_ext/stringio.rb +24 -0
  709. data/lib/cosmos/core_ext/time.rb +446 -0
  710. data/lib/cosmos/core_ext.rb +18 -0
  711. data/lib/cosmos/ext/.keep +0 -0
  712. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -0
  713. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -0
  714. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -0
  715. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -0
  716. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -0
  717. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +317 -0
  718. data/lib/cosmos/gui/dialogs/about_dialog.rb +128 -0
  719. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -0
  720. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -0
  721. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -0
  722. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -0
  723. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -0
  724. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -0
  725. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +196 -0
  726. data/lib/cosmos/gui/dialogs/legal_dialog.rb +168 -0
  727. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -0
  728. data/lib/cosmos/gui/dialogs/progress_dialog.rb +262 -0
  729. data/lib/cosmos/gui/dialogs/pry_dialog.rb +161 -0
  730. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -0
  731. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -0
  732. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -0
  733. data/lib/cosmos/gui/dialogs/splash.rb +113 -0
  734. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -0
  735. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -0
  736. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -0
  737. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -0
  738. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +494 -0
  739. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -0
  740. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +460 -0
  741. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -0
  742. data/lib/cosmos/gui/line_graph/lines.rb +290 -0
  743. data/lib/cosmos/gui/line_graph/overview_graph.rb +459 -0
  744. data/lib/cosmos/gui/opengl/earth_model.rb +22 -0
  745. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -0
  746. data/lib/cosmos/gui/opengl/gl_light.rb +39 -0
  747. data/lib/cosmos/gui/opengl/gl_material.rb +29 -0
  748. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -0
  749. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -0
  750. data/lib/cosmos/gui/opengl/gl_viewer.rb +712 -0
  751. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -0
  752. data/lib/cosmos/gui/opengl/moon_model.rb +22 -0
  753. data/lib/cosmos/gui/opengl/opengl.rb +8 -0
  754. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -0
  755. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -0
  756. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -0
  757. data/lib/cosmos/gui/qt.rb +786 -0
  758. data/lib/cosmos/gui/qt_tool.rb +373 -0
  759. data/lib/cosmos/gui/text/completion.rb +381 -0
  760. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -0
  761. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -0
  762. data/lib/cosmos/gui/text/ruby_editor.rb +395 -0
  763. data/lib/cosmos/gui/utilities/screenshot.rb +25 -0
  764. data/lib/cosmos/gui/utilities/script_module_gui.rb +203 -0
  765. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -0
  766. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -0
  767. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -0
  768. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +149 -0
  769. data/lib/cosmos/interfaces/interface.rb +213 -0
  770. data/lib/cosmos/interfaces/linc_interface.rb +360 -0
  771. data/lib/cosmos/interfaces/serial_interface.rb +76 -0
  772. data/lib/cosmos/interfaces/simulated_target_interface.rb +128 -0
  773. data/lib/cosmos/interfaces/stream_interface.rb +156 -0
  774. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -0
  775. data/lib/cosmos/interfaces/tcpip_server_interface.rb +154 -0
  776. data/lib/cosmos/interfaces/udp_interface.rb +173 -0
  777. data/lib/cosmos/interfaces.rb +11 -0
  778. data/lib/cosmos/io/buffered_file.rb +11 -0
  779. data/lib/cosmos/io/cosmos_snmp.rb +50 -0
  780. data/lib/cosmos/io/io_multiplexer.rb +89 -0
  781. data/lib/cosmos/io/json_drb.rb +320 -0
  782. data/lib/cosmos/io/json_drb_object.rb +137 -0
  783. data/lib/cosmos/io/json_rpc.rb +365 -0
  784. data/lib/cosmos/io/posix_serial_driver.rb +145 -0
  785. data/lib/cosmos/io/raw_logger.rb +174 -0
  786. data/lib/cosmos/io/raw_logger_pair.rb +71 -0
  787. data/lib/cosmos/io/serial_driver.rb +85 -0
  788. data/lib/cosmos/io/stderr.rb +36 -0
  789. data/lib/cosmos/io/stdout.rb +36 -0
  790. data/lib/cosmos/io/tcpip_server.rb +532 -0
  791. data/lib/cosmos/io/udp_sockets.rb +152 -0
  792. data/lib/cosmos/io/win32_serial_driver.rb +147 -0
  793. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -0
  794. data/lib/cosmos/packet_logs/packet_log_reader.rb +439 -0
  795. data/lib/cosmos/packet_logs/packet_log_writer.rb +309 -0
  796. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -0
  797. data/lib/cosmos/packet_logs.rb +6 -0
  798. data/lib/cosmos/packets/binary_accessor.rb +921 -0
  799. data/lib/cosmos/packets/commands.rb +291 -0
  800. data/lib/cosmos/packets/limits.rb +263 -0
  801. data/lib/cosmos/packets/limits_response.rb +38 -0
  802. data/lib/cosmos/packets/packet.rb +699 -0
  803. data/lib/cosmos/packets/packet_config.rb +1034 -0
  804. data/lib/cosmos/packets/packet_item.rb +317 -0
  805. data/lib/cosmos/packets/packet_item_limits.rb +128 -0
  806. data/lib/cosmos/packets/structure.rb +386 -0
  807. data/lib/cosmos/packets/structure_item.rb +233 -0
  808. data/lib/cosmos/packets/telemetry.rb +317 -0
  809. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -0
  810. data/lib/cosmos/processors/processor.rb +71 -0
  811. data/lib/cosmos/processors/statistics_processor.rb +65 -0
  812. data/lib/cosmos/processors/watermark_processor.rb +44 -0
  813. data/lib/cosmos/processors.rb +6 -0
  814. data/lib/cosmos/script/extract.rb +115 -0
  815. data/lib/cosmos/script/script.rb +1493 -0
  816. data/lib/cosmos/script.rb +9 -0
  817. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -0
  818. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -0
  819. data/lib/cosmos/streams/length_stream_protocol.rb +140 -0
  820. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -0
  821. data/lib/cosmos/streams/serial_stream.rb +143 -0
  822. data/lib/cosmos/streams/stream.rb +57 -0
  823. data/lib/cosmos/streams/stream_protocol.rb +369 -0
  824. data/lib/cosmos/streams/tcpip_client_stream.rb +77 -0
  825. data/lib/cosmos/streams/tcpip_socket_stream.rb +139 -0
  826. data/lib/cosmos/streams/template_stream_protocol.rb +140 -0
  827. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -0
  828. data/lib/cosmos/system/system.rb +558 -0
  829. data/lib/cosmos/system/target.rb +178 -0
  830. data/lib/cosmos/system.rb +4 -0
  831. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +253 -0
  832. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +716 -0
  833. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -0
  834. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -0
  835. data/lib/cosmos/tools/cmd_tlm_server/api.rb +940 -0
  836. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -0
  837. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +63 -0
  838. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +496 -0
  839. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +241 -0
  840. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1008 -0
  841. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -0
  842. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +176 -0
  843. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +221 -0
  844. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -0
  845. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -0
  846. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -0
  847. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -0
  848. data/lib/cosmos/tools/data_viewer/data_viewer.rb +600 -0
  849. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +167 -0
  850. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -0
  851. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +149 -0
  852. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +360 -0
  853. data/lib/cosmos/tools/launcher/launcher.rb +184 -0
  854. data/lib/cosmos/tools/launcher/launcher_config.rb +167 -0
  855. data/lib/cosmos/tools/launcher/launcher_multitool.rb +41 -0
  856. data/lib/cosmos/tools/launcher/launcher_tool.rb +104 -0
  857. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +768 -0
  858. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -0
  859. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -0
  860. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +525 -0
  861. data/lib/cosmos/tools/replay/replay.rb +488 -0
  862. data/lib/cosmos/tools/replay/replay_server.rb +91 -0
  863. data/lib/cosmos/tools/script_runner/script_audit.rb +139 -0
  864. data/lib/cosmos/tools/script_runner/script_runner.rb +914 -0
  865. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -0
  866. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1859 -0
  867. data/lib/cosmos/tools/table_manager/table.rb +70 -0
  868. data/lib/cosmos/tools/table_manager/table_config.rb +764 -0
  869. data/lib/cosmos/tools/table_manager/table_item.rb +74 -0
  870. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -0
  871. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -0
  872. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -0
  873. data/lib/cosmos/tools/test_runner/test.rb +480 -0
  874. data/lib/cosmos/tools/test_runner/test_runner.rb +1157 -0
  875. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +338 -0
  876. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -0
  877. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1008 -0
  878. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -0
  879. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -0
  880. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -0
  881. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -0
  882. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +94 -0
  883. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -0
  884. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +180 -0
  885. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -0
  886. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -0
  887. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +173 -0
  888. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +177 -0
  889. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +409 -0
  890. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -0
  891. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -0
  892. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +320 -0
  893. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -0
  894. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -0
  895. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -0
  896. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -0
  897. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -0
  898. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -0
  899. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -0
  900. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -0
  901. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -0
  902. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -0
  903. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -0
  904. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1278 -0
  905. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -0
  906. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -0
  907. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +95 -0
  908. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -0
  909. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +66 -0
  910. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -0
  911. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -0
  912. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -0
  913. data/lib/cosmos/tools/tlm_viewer/screen.rb +458 -0
  914. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +544 -0
  915. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +287 -0
  916. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -0
  917. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +70 -0
  918. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +61 -0
  919. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -0
  920. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -0
  921. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -0
  922. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -0
  923. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -0
  924. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -0
  925. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -0
  926. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -0
  927. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -0
  928. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -0
  929. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -0
  930. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -0
  931. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -0
  932. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -0
  933. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -0
  934. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -0
  935. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -0
  936. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -0
  937. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -0
  938. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -0
  939. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -0
  940. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -0
  941. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -0
  942. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -0
  943. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -0
  944. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -0
  945. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -0
  946. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -0
  947. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -0
  948. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -0
  949. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -0
  950. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -0
  951. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -0
  952. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -0
  953. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -0
  954. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -0
  955. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -0
  956. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -0
  957. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -0
  958. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -0
  959. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -0
  960. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -0
  961. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -0
  962. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -0
  963. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -0
  964. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -0
  965. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -0
  966. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -0
  967. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -0
  968. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -0
  969. data/lib/cosmos/top_level.rb +596 -0
  970. data/lib/cosmos/utilities/crc.rb +166 -0
  971. data/lib/cosmos/utilities/csv.rb +83 -0
  972. data/lib/cosmos/utilities/logger.rb +137 -0
  973. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -0
  974. data/lib/cosmos/utilities/message_log.rb +74 -0
  975. data/lib/cosmos/utilities/quaternion.rb +258 -0
  976. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -0
  977. data/lib/cosmos/utilities/simulated_target.rb +99 -0
  978. data/lib/cosmos/utilities.rb +10 -0
  979. data/lib/cosmos/version.rb +12 -0
  980. data/lib/cosmos/win32/excel.rb +66 -0
  981. data/lib/cosmos/win32/win32.rb +387 -0
  982. data/lib/cosmos/win32/win32_main.rb +311 -0
  983. data/lib/cosmos.rb +63 -0
  984. data/roodi.yml +24 -0
  985. data/run_gui_tests.bat +32 -0
  986. data/spec/ccsds/ccsds_packet_spec.rb +67 -0
  987. data/spec/ccsds/ccsds_parser_spec.rb +148 -0
  988. data/spec/config/config_parser_spec.rb +322 -0
  989. data/spec/conversions/conversion_spec.rb +31 -0
  990. data/spec/conversions/generic_conversion_spec.rb +45 -0
  991. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -0
  992. data/spec/conversions/polynomial_conversion_spec.rb +40 -0
  993. data/spec/conversions/processor_conversion_spec.rb +45 -0
  994. data/spec/conversions/received_count_conversion_spec.rb +43 -0
  995. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -0
  996. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -0
  997. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -0
  998. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -0
  999. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -0
  1000. data/spec/core_ext/array_spec.rb +186 -0
  1001. data/spec/core_ext/class_spec.rb +36 -0
  1002. data/spec/core_ext/cosmos_io_spec.rb +77 -0
  1003. data/spec/core_ext/exception_spec.rb +91 -0
  1004. data/spec/core_ext/file_spec.rb +72 -0
  1005. data/spec/core_ext/hash_spec.rb +24 -0
  1006. data/spec/core_ext/io_spec.rb +46 -0
  1007. data/spec/core_ext/kernel_spec.rb +54 -0
  1008. data/spec/core_ext/math_spec.rb +116 -0
  1009. data/spec/core_ext/matrix_spec.rb +66 -0
  1010. data/spec/core_ext/objectspace_spec.rb +29 -0
  1011. data/spec/core_ext/range_spec.rb +21 -0
  1012. data/spec/core_ext/socket_spec.rb +32 -0
  1013. data/spec/core_ext/string_spec.rb +223 -0
  1014. data/spec/core_ext/stringio_spec.rb +21 -0
  1015. data/spec/core_ext/time_spec.rb +151 -0
  1016. data/spec/gui/line_graph/line_clip_spec.rb +322 -0
  1017. data/spec/install/config/system/system.txt +33 -0
  1018. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -0
  1019. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  1020. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  1021. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -0
  1022. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -0
  1023. data/spec/install/config/targets/COSMOS/target.txt +5 -0
  1024. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -0
  1025. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -0
  1026. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -0
  1027. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -0
  1028. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -0
  1029. data/spec/install/config/targets/INST/lib/sim_inst.rb +294 -0
  1030. data/spec/install/config/targets/INST/target.txt +10 -0
  1031. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -0
  1032. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -0
  1033. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  1034. data/spec/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +1 -0
  1035. data/spec/install/lib/README.txt +1 -0
  1036. data/spec/install/userpath.txt +1 -0
  1037. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -0
  1038. data/spec/interfaces/interface_spec.rb +128 -0
  1039. data/spec/interfaces/linc_interface_spec.rb +199 -0
  1040. data/spec/interfaces/serial_interface_spec.rb +56 -0
  1041. data/spec/interfaces/simulated_target_interface_spec.rb +128 -0
  1042. data/spec/interfaces/stream_interface_spec.rb +157 -0
  1043. data/spec/interfaces/tcpip_client_interface_spec.rb +54 -0
  1044. data/spec/interfaces/tcpip_server_interface_spec.rb +151 -0
  1045. data/spec/interfaces/udp_interface_spec.rb +175 -0
  1046. data/spec/io/buffered_file_spec.rb +113 -0
  1047. data/spec/io/io_multiplexer_spec.rb +94 -0
  1048. data/spec/io/json_drb_object_spec.rb +93 -0
  1049. data/spec/io/json_drb_spec.rb +293 -0
  1050. data/spec/io/json_rpc_spec.rb +264 -0
  1051. data/spec/io/raw_logger_pair_spec.rb +76 -0
  1052. data/spec/io/raw_logger_spec.rb +133 -0
  1053. data/spec/io/serial_driver_spec.rb +61 -0
  1054. data/spec/io/stderr_spec.rb +32 -0
  1055. data/spec/io/stdout_spec.rb +32 -0
  1056. data/spec/io/tcpip_server_spec.rb +322 -0
  1057. data/spec/io/udp_sockets_spec.rb +94 -0
  1058. data/spec/io/win32_serial_driver_spec.rb +88 -0
  1059. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -0
  1060. data/spec/packet_logs/packet_log_reader_spec.rb +408 -0
  1061. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -0
  1062. data/spec/packet_logs/packet_log_writer_spec.rb +209 -0
  1063. data/spec/packets/binary_accessor_spec.rb +2073 -0
  1064. data/spec/packets/commands_spec.rb +369 -0
  1065. data/spec/packets/limits_response_spec.rb +25 -0
  1066. data/spec/packets/limits_spec.rb +326 -0
  1067. data/spec/packets/packet_config_spec.rb +1620 -0
  1068. data/spec/packets/packet_item_limits_spec.rb +161 -0
  1069. data/spec/packets/packet_item_spec.rb +386 -0
  1070. data/spec/packets/packet_spec.rb +949 -0
  1071. data/spec/packets/structure_item_spec.rb +195 -0
  1072. data/spec/packets/structure_spec.rb +419 -0
  1073. data/spec/packets/telemetry_spec.rb +535 -0
  1074. data/spec/processors/new_packet_log_processor_spec.rb +39 -0
  1075. data/spec/processors/processor_spec.rb +55 -0
  1076. data/spec/processors/statistics_processor_spec.rb +60 -0
  1077. data/spec/processors/watermark_processor_spec.rb +51 -0
  1078. data/spec/script/script_spec.rb +650 -0
  1079. data/spec/spec_helper.rb +138 -0
  1080. data/spec/streams/burst_stream_protocol_spec.rb +32 -0
  1081. data/spec/streams/fixed_stream_protocol_spec.rb +110 -0
  1082. data/spec/streams/length_stream_protocol_spec.rb +297 -0
  1083. data/spec/streams/preidentified_stream_protocol_spec.rb +118 -0
  1084. data/spec/streams/serial_stream_spec.rb +105 -0
  1085. data/spec/streams/stream_protocol_spec.rb +332 -0
  1086. data/spec/streams/stream_spec.rb +29 -0
  1087. data/spec/streams/tcpip_client_stream_spec.rb +54 -0
  1088. data/spec/streams/tcpip_socket_stream_spec.rb +146 -0
  1089. data/spec/streams/template_stream_protocol_spec.rb +151 -0
  1090. data/spec/streams/terminated_stream_protocol_spec.rb +123 -0
  1091. data/spec/system/system_spec.rb +645 -0
  1092. data/spec/system/target_spec.rb +248 -0
  1093. data/spec/tools/cmd_tlm_server/api_spec.rb +1090 -0
  1094. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -0
  1095. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +82 -0
  1096. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +406 -0
  1097. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +418 -0
  1098. data/spec/tools/cmd_tlm_server/commanding_spec.rb +123 -0
  1099. data/spec/tools/cmd_tlm_server/connections_spec.rb +147 -0
  1100. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +317 -0
  1101. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +228 -0
  1102. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -0
  1103. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +104 -0
  1104. data/spec/tools/cmd_tlm_server/routers_spec.rb +196 -0
  1105. data/spec/top_level/top_level_spec.rb +320 -0
  1106. data/spec/utilities/crc_spec.rb +45 -0
  1107. data/spec/utilities/csv_spec.rb +97 -0
  1108. data/spec/utilities/logger_spec.rb +102 -0
  1109. data/spec/utilities/message_log_spec.rb +89 -0
  1110. data/spec/utilities/quaternion_spec.rb +107 -0
  1111. data/spec/utilities/ruby_lex_utils_spec.rb +86 -0
  1112. data/tasks/manifest.rake +22 -0
  1113. data/tasks/spec.rake +23 -0
  1114. metadata +1566 -0
@@ -0,0 +1,1065 @@
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
+ Cosmos.catch_fatal_exception do
13
+ require 'cosmos/gui/qt_tool'
14
+ require 'cosmos/gui/dialogs/progress_dialog'
15
+ require 'cosmos/tools/table_manager/table_config'
16
+ require 'cosmos/tools/table_manager/table_manager_core'
17
+ require 'cosmos/gui/dialogs/tlm_details_dialog'
18
+ end
19
+
20
+ class Qt::ComboBox
21
+ def wheelEvent(param)
22
+ self.nativeParentWidget.wheelEvent(param)
23
+ end
24
+ end
25
+
26
+ # Override the default COSMOS setting which makes table cells read only
27
+ Cosmos.disable_warnings do
28
+ class Qt::TableWidgetItem
29
+ def initialize(string = "")
30
+ super(string)
31
+ end
32
+ end
33
+ end
34
+
35
+ module Cosmos
36
+
37
+ class ComboBoxItemDelegate < Qt::StyledItemDelegate
38
+ def initialize(parent)
39
+ @table = parent
40
+ super(parent)
41
+ end
42
+
43
+ def createEditor(parent, option, index)
44
+ table = TableManager.instance.core.table_def.get_table(TableManager.instance.currently_displayed_table_name)
45
+ gui_table = TableManager.instance.gui_tables[TableManager.instance.currently_displayed_table_name]
46
+ if table.type == :TWO_DIMENSIONAL
47
+ item_name = gui_table.horizontalHeaderItem(index.column).text + index.row.to_s
48
+ item = table.get_item(item_name)
49
+ else
50
+ item_name = gui_table.verticalHeaderItem(index.row).text
51
+ item = table.get_item(item_name)
52
+ end
53
+ if item.display_type == :STATE and item.editable
54
+ combo = Qt::ComboBox.new(parent)
55
+ combo.addItems(item.states.keys.sort)
56
+ combo.setCurrentText(table.read(item.name).to_s)
57
+ connect(combo, SIGNAL('activated(int)')) do
58
+ emit commitData(combo)
59
+ gui_table.closeEditor(combo, 0)
60
+ end
61
+ return combo
62
+ else
63
+ return super(parent, option, index)
64
+ end
65
+ end
66
+
67
+ def setModelData(editor, model, index)
68
+ if Qt::ComboBox === editor
69
+ model.setData(index, Qt::Variant.new(editor.currentText), Qt::EditRole)
70
+ else
71
+ super(editor, model, index)
72
+ end
73
+ end
74
+
75
+ def setEditorData(editor, index)
76
+ if Qt::ComboBox === editor
77
+ v = index.data(Qt::EditRole)
78
+ combo_index = editor.findText(v.toString)
79
+ if combo_index >= 0
80
+ editor.setCurrentIndex(combo_index)
81
+ else
82
+ editor.setCurrentIndex(0)
83
+ end
84
+ else
85
+ super(editor, index)
86
+ end
87
+ end
88
+ end
89
+
90
+ # A dialog box containing a text field and ok button
91
+ class TextDialog < Qt::Dialog
92
+ def initialize(parent)
93
+ super(parent)
94
+
95
+ layout = Qt::VBoxLayout.new
96
+
97
+ @text = Qt::PlainTextEdit.new
98
+ if Kernel.is_windows?
99
+ @text.setFont(Cosmos.getFont('courier', 10))
100
+ else
101
+ @text.setFont(Cosmos.getFont('courier', 14))
102
+ end
103
+ @text.setReadOnly(true)
104
+
105
+ layout.addWidget(@text)
106
+
107
+ button_layout = Qt::HBoxLayout.new
108
+ ok_button = Qt::PushButton.new('OK')
109
+ ok_button.connect(SIGNAL('clicked()')) { self.accept }
110
+ button_layout.addStretch
111
+ button_layout.addWidget(ok_button)
112
+ button_layout.addStretch
113
+
114
+ layout.addLayout(button_layout)
115
+ setLayout(layout)
116
+ end
117
+
118
+ # Set the title of the dialog box and the text contents
119
+ def set_title_and_text(title, text)
120
+ self.setWindowTitle(title)
121
+ @text.setPlainText(text)
122
+ end
123
+
124
+ # Set the size of the dialog box
125
+ def set_size(width, height)
126
+ resize(width, height)
127
+ end
128
+ end
129
+
130
+ class ProgressDialog
131
+ def progress=(increment)
132
+ set_overall_progress(increment / 100.0)
133
+ end
134
+ end
135
+
136
+ # TableManager uses text based configuration files (see TableConfig) to define both
137
+ # the structure of the binary file and how it should be displayed. It takes this configuration
138
+ # information to dynamically build a tabbed GUI containing the visual representation of the binary data.
139
+ # In addition to displaying binary data it can also create the binary representation given
140
+ # the text configuration file. It can display the binary data as a hex dump and creates
141
+ # human readable reports of the given data.
142
+ class TableManager < QtTool
143
+ slots 'handle_tab_change(int)'
144
+ slots 'mouse_over(int, int)'
145
+ slots 'click_callback(QTableWidgetItem*)'
146
+ slots 'context_menu(const QPoint&)'
147
+
148
+ attr_reader :core
149
+
150
+ # Hash of all the created tables with the table name as the key value
151
+ attr_reader :gui_tables
152
+
153
+ # Array of all the created tables ordered by the way they were created.
154
+ # Thus they are ordered the same as the text configuration file.
155
+ attr_reader :ordered_gui_table_names
156
+
157
+ # Place holder for the current table
158
+ attr_reader :table
159
+
160
+ # The currently displayed table name
161
+ attr_reader :currently_displayed_table_name
162
+
163
+ # Label containing the full path name of the table definition file
164
+ attr_reader :table_def_label
165
+
166
+ # Label containing the full path name of the table binary file
167
+ attr_reader :table_bin_label
168
+
169
+ # Top vertical layout where subclasses can put their own widgets
170
+ attr_accessor :top_layout
171
+
172
+ # File name of the png icon to use for the application.
173
+ # The application looks in the COSMOS PATH and USERPATH directories for the icon.
174
+ # This must be overloaded before calling super() in the intialize
175
+ # function to allow Table Manager to use the new file name.
176
+ attr_accessor :app_icon_filename
177
+
178
+ # Create a TableManager instance by initializing the globals,
179
+ # setting the program icon, creating the menu, and laying out the GUI elements.
180
+ def initialize(options)
181
+ super(options) # MUST BE FIRST - All code before super is executed twice in RubyQt Based classes
182
+ @app_icon_filename = 'table_manager.png'
183
+ Cosmos.load_cosmos_icon(@app_icon_filename)
184
+
185
+ initialize_actions(options.no_tables)
186
+ initialize_menus(options.no_tables)
187
+ initialize_central_widget()
188
+ complete_initialize()
189
+ setMinimumSize(500, 300)
190
+
191
+ statusBar.showMessage(tr("Ready")) # Show message to initialize status bar
192
+
193
+ @def_path = File.join(::Cosmos::USERPATH, %w(config tools table_manager))
194
+ @bin_path = System.paths['TABLES']
195
+ @gui_tables = Hash.new
196
+ @ordered_gui_table_names = Array.new
197
+ @currently_displayed_table_name = ""
198
+ @core = TableManagerCore.new
199
+ @@instance = self
200
+ end
201
+
202
+ def self.instance
203
+ @@instance
204
+ end
205
+
206
+ def initialize_actions(no_tables = false)
207
+ super()
208
+
209
+ # File Menu Actions
210
+ @file_new = Qt::Action.new(Cosmos.get_icon('file.png'), tr('&New File'), self)
211
+ @file_new_keyseq = Qt::KeySequence.new(Qt::KeySequence::New)
212
+ @file_new.shortcut = @file_new_keyseq
213
+ @file_new.statusTip = tr('Create new binary file based on definition')
214
+ @file_new.connect(SIGNAL('triggered()')) { file_new() }
215
+
216
+ @file_open = Qt::Action.new(Cosmos.get_icon('open.png'), tr('&Open File'), self)
217
+ @file_open_keyseq = Qt::KeySequence.new(Qt::KeySequence::Open)
218
+ @file_open.shortcut = @file_open_keyseq
219
+ @file_open.statusTip = tr('Open binary file for display and editing')
220
+ @file_open.connect(SIGNAL('triggered()')) { file_open() }
221
+
222
+ @file_save = Qt::Action.new(Cosmos.get_icon('save.png'), tr('&Save File'), self)
223
+ @file_save_keyseq = Qt::KeySequence.new(Qt::KeySequence::Save)
224
+ @file_save.shortcut = @file_save_keyseq
225
+ @file_save.statusTip = tr('Save the displayed data back to the binary file')
226
+ @file_save.connect(SIGNAL('triggered()')) { file_save(false) }
227
+
228
+ @file_save_as = Qt::Action.new(Cosmos.get_icon('save_as.png'), tr('Save File &As'), self)
229
+ @file_save_as_keyseq = Qt::KeySequence.new(Qt::KeySequence::SaveAs)
230
+ @file_save_as.shortcut = @file_save_as_keyseq
231
+ @file_save_as.statusTip = tr('Save the displayed data to a new binary file')
232
+ @file_save_as.connect(SIGNAL('triggered()')) { file_save(true) }
233
+
234
+ @file_check = Qt::Action.new(Cosmos.get_icon('checkmark.png'), tr('&Check All'), self)
235
+ @file_check_keyseq = Qt::KeySequence.new(tr('Ctrl+K'))
236
+ @file_check.shortcut = @file_check_keyseq
237
+ @file_check.statusTip = tr('Check each data value against verification criteria')
238
+ @file_check.connect(SIGNAL('triggered()')) { file_check() }
239
+
240
+ @file_hex = Qt::Action.new(tr('&Hex Dump'), self)
241
+ @file_hex_keyseq = Qt::KeySequence.new(tr('Ctrl+H'))
242
+ @file_hex.shortcut = @file_hex_keyseq
243
+ @file_hex.statusTip = tr('Display a hex representation of the binary file')
244
+ @file_hex.connect(SIGNAL('triggered()')) { display_hex(:file) }
245
+
246
+ @file_report = Qt::Action.new(tr('Create &Report'), self)
247
+ @file_report_keyseq = Qt::KeySequence.new(tr('Ctrl+R'))
248
+ @file_report.shortcut = @file_report_keyseq
249
+ @file_report.statusTip = tr('Create a text file report describing the binary data')
250
+ @file_report.connect(SIGNAL('triggered()')) { file_report() }
251
+
252
+ unless no_tables
253
+ # Table Menu Actions
254
+ @table_check = Qt::Action.new(Cosmos.get_icon('checkmark.png'), tr('&Check'), self)
255
+ @table_check.statusTip = tr('Check each data value against verification criteria')
256
+ @table_check.connect(SIGNAL('triggered()')) { table_check() }
257
+
258
+ @table_default = Qt::Action.new(tr('&Default'), self)
259
+ @table_default_keyseq = Qt::KeySequence.new(tr('Ctrl+D'))
260
+ @table_default.shortcut = @table_default_keyseq
261
+ @table_default.statusTip = tr('Revert all data values to their defaults')
262
+ @table_default.connect(SIGNAL('triggered()')) { table_default() }
263
+
264
+ @table_hex = Qt::Action.new(tr('&Hex Dump'), self)
265
+ @table_hex.statusTip = tr('Display a hex representation of the table')
266
+ @table_hex.connect(SIGNAL('triggered()')) { display_hex(:table) }
267
+
268
+ @table_save = Qt::Action.new(tr('&Save Table Binary'), self)
269
+ @table_save.statusTip = tr('Save the current table to a stand alone binary file')
270
+ @table_save.connect(SIGNAL('triggered()')) { table_save() }
271
+
272
+ @table_commit = Qt::Action.new(tr('Commit to Existing &File'), self)
273
+ @table_commit.statusTip = tr('Incorporate the current table data into a binary file which already contains the table')
274
+ @table_commit.connect(SIGNAL('triggered()')) { table_commit() }
275
+
276
+ @table_update = Qt::Action.new(tr('&Update Definition'), self)
277
+ @table_update.statusTip = tr('Change the defaults in the definition file to the displayed table data')
278
+ @table_update.connect(SIGNAL('triggered()')) { table_update() }
279
+ end
280
+ end
281
+
282
+ def initialize_menus(no_tables = false)
283
+ # File Menu
284
+ file_menu = menuBar.addMenu(tr('&File'))
285
+ file_menu.addAction(@file_new)
286
+ file_menu.addAction(@file_open)
287
+ file_menu.addAction(@file_save)
288
+ file_menu.addAction(@file_save_as)
289
+ file_menu.addSeparator()
290
+ file_menu.addAction(@file_check)
291
+ file_menu.addAction(@file_hex)
292
+ file_menu.addAction(@file_report)
293
+ file_menu.addSeparator()
294
+ file_menu.addAction(@exit_action)
295
+
296
+ unless no_tables
297
+ # Table Menu
298
+ table_menu = menuBar.addMenu(tr('&Table'))
299
+ table_menu.addAction(@table_check)
300
+ table_menu.addAction(@table_default)
301
+ table_menu.addAction(@table_hex)
302
+ table_menu.addSeparator()
303
+ table_menu.addAction(@table_save)
304
+ table_menu.addAction(@table_commit)
305
+ table_menu.addAction(@table_update)
306
+ end
307
+
308
+ # Help Menu
309
+ @about_string = "TableManager is a generic binary file editor. "
310
+ @about_string << "It features a text file driven interface to define binary files and their preferred display type. "
311
+ @about_string << "This text file is then used to dynamically construct a spreadsheet type interface to "
312
+ @about_string << "allow easy editing of the underlying binary structure."
313
+
314
+ initialize_help_menu()
315
+ end
316
+
317
+ def initialize_central_widget
318
+ # Create the central widget
319
+ @central_widget = Qt::Widget.new
320
+ setCentralWidget(@central_widget)
321
+
322
+ # Create the top level vertical layout
323
+ @top_layout = Qt::VBoxLayout.new(@central_widget)
324
+
325
+ # Create the information pane with the filenames
326
+ @filename_layout = Qt::FormLayout.new
327
+ @table_def_label = Qt::Label.new("")
328
+ @filename_layout.addRow(tr("Definition File:"), @table_def_label)
329
+ @table_bin_label = Qt::Label.new("")
330
+ @filename_layout.addRow(tr("Binary File:"), @table_bin_label)
331
+ @top_layout.addLayout(@filename_layout)
332
+
333
+ # Separator before editor
334
+ @sep1 = Qt::Frame.new(@central_widget)
335
+ @sep1.setFrameStyle(Qt::Frame::HLine | Qt::Frame::Sunken)
336
+ @top_layout.addWidget(@sep1)
337
+
338
+ @tabbook = Qt::TabWidget.new
339
+ connect(@tabbook, SIGNAL('currentChanged(int)'), self, SLOT('handle_tab_change(int)'))
340
+ @top_layout.addWidget(@tabbook)
341
+
342
+ @check_icons = []
343
+ @check_icons << Cosmos.get_icon("CheckBoxEmpty.gif")
344
+ @check_icons << Cosmos.get_icon("CheckBoxCheck.gif")
345
+ end
346
+
347
+ # Menu option to check every table tab's values against their allowable ranges
348
+ def file_check
349
+ begin
350
+ result = ""
351
+ @ordered_gui_table_names.each do |name|
352
+ save_result = save_gui_data(name)
353
+ check_result = @core.table_check(name)
354
+ if not save_result.nil? or not check_result.empty?
355
+ result << "Error(s) in #{name}:\n" << save_result.to_s << check_result.to_s
356
+ end
357
+ end
358
+ if result.empty?
359
+ result = "All parameters are within their constraints."
360
+ end
361
+ Qt::MessageBox.information(self, "File Check", result)
362
+ rescue => err
363
+ ExceptionDialog.new(self, err, "File Check Errors", false)
364
+ end
365
+ end
366
+
367
+ # Menu option to check the table values against their allowable ranges
368
+ def table_check
369
+ begin
370
+ save_result = save_gui_data(@currently_displayed_table_name)
371
+ check_result = @core.table_check(@currently_displayed_table_name)
372
+ if save_result.nil? and check_result.empty?
373
+ result = "All parameters are within their constraints."
374
+ elsif save_result.nil?
375
+ result = check_result
376
+ elsif check_result.nil?
377
+ result = save_result
378
+ else
379
+ result = save_result << check_result
380
+ end
381
+
382
+ Qt::MessageBox.information(self, "Table Check", result)
383
+ rescue => err
384
+ ExceptionDialog.new(self, err, "Table Check Errors", false)
385
+ end
386
+ end
387
+
388
+ # Menu option to set all the table items to their default values
389
+ def table_default
390
+ begin
391
+ @core.table_default(@currently_displayed_table_name)
392
+ rescue => err
393
+ ExceptionDialog.new(self, err, "Table Default Errors", false)
394
+ end
395
+ begin
396
+ display_gui_data(@currently_displayed_table_name)
397
+ rescue => err
398
+ ExceptionDialog.new(self, err, "Table Default Errors", false)
399
+ end
400
+ end
401
+
402
+ # Menu option to create a text file report of all the table data
403
+ def file_report
404
+ begin
405
+ @ordered_gui_table_names.each do |name|
406
+ save_gui_data(name)
407
+ end
408
+
409
+ @core.file_report
410
+ statusBar.showMessage(tr("File Report Created Successfully"))
411
+ rescue => err
412
+ ExceptionDialog.new(self, err, "File Report Errors", false)
413
+ end
414
+ end
415
+
416
+ # Saves the binary data to a file.
417
+ # It first commits the GUI data to the internal data structures and checks
418
+ # for errors. If none are found, it saves the data to the table binary file.
419
+ def file_save(save_as = false)
420
+ begin
421
+ @ordered_gui_table_names.each do |name|
422
+ save_gui_data(name)
423
+ end
424
+
425
+ filename = @table_bin_label.text
426
+ if save_as
427
+ filename = Qt::FileDialog.getSaveFileName(self,
428
+ "File Save",
429
+ @table_bin_label.text,
430
+ "Binary File (*.bin *.dat);;All Files (*)")
431
+
432
+ # Check for an empty string which indicates the user clicked "Cancel" on the dialog
433
+ return if filename.to_s.empty?
434
+ @table_bin_label.text = filename
435
+ end
436
+
437
+ begin
438
+ @core.file_save(filename)
439
+ rescue => error
440
+ Qt::MessageBox.information(self, "File Save Errors", error.message)
441
+ return
442
+ end
443
+
444
+ @ordered_gui_table_names.each do |name|
445
+ display_gui_data(name)
446
+ end
447
+
448
+ statusBar.showMessage(tr("File Saved Successfully"))
449
+ rescue => err
450
+ ExceptionDialog.new(self, err, "File Save Errors", false)
451
+ end
452
+ end
453
+
454
+ # Menu option to display a dialog containing a hex dump of all table values
455
+ def display_hex(type)
456
+ begin
457
+ dialog = TextDialog.new(self)
458
+ if type == :file
459
+ str = @core.file_hex()
460
+ title = File.basename(@table_bin_label.text)
461
+ else
462
+ str = @core.table_hex(@currently_displayed_table_name)
463
+ title = @currently_displayed_table_name
464
+ end
465
+ dialog.set_title_and_text("#{title} Hex Dump", str)
466
+ dialog.set_size(550, 400)
467
+ dialog.exec
468
+ dialog.dispose
469
+ rescue => err
470
+ ExceptionDialog.new(self, err, "Display Hex Errors", false)
471
+ end
472
+ end
473
+
474
+ # Menu option to save the currently displayed table to an existing table binary file
475
+ # containing that table.
476
+ def table_commit
477
+ begin
478
+ save_gui_data(@currently_displayed_table_name)
479
+
480
+ # Ask for the file to save the current table to
481
+ bin_file, def_file = get_binary_and_definition_file_paths()
482
+ if bin_file.nil? or def_file.nil? then return 1 end
483
+
484
+ @core.table_commit(@currently_displayed_table_name, bin_file, def_file)
485
+
486
+ # Update the labels
487
+ @table_bin_label.text = bin_file
488
+ @table_def_label.text = def_file
489
+
490
+ # Display the new table
491
+ delete_tabs()
492
+ @core.table_def.get_all_tables.each do |table|
493
+ create_table_tab(table)
494
+ display_gui_data(table.name)
495
+ end
496
+ @currently_displayed_table_name = @ordered_gui_table_names[0]
497
+ @currently_displayed_table_name ||= '' # ensure it's not nil
498
+ rescue => err
499
+ ExceptionDialog.new(self, err, "Table Commit Errors", false)
500
+ end
501
+ end
502
+
503
+ # Menu option to save the currently displayed table as a stand alone binary file
504
+ def table_save
505
+ begin
506
+ save_gui_data(@currently_displayed_table_name)
507
+
508
+ filename = Qt::FileDialog.getSaveFileName(self,
509
+ "File Save",
510
+ File.join(@bin_path, "#{@currently_displayed_table_name.gsub(/\s/,'')}.dat"),
511
+ "Binary File (*.bin *.dat);;All Files (*)")
512
+ # Check for a 0 length string which indicates the user clicked "Cancel" on the dialog
513
+ if filename.to_s.strip.length != 0
514
+ @bin_path = File.dirname(filename)
515
+ @core.table_save(@currently_displayed_table_name, filename)
516
+ end
517
+ rescue => err
518
+ ExceptionDialog.new(self, err, "Table Save Errors", false)
519
+ end
520
+ end
521
+
522
+ # Menu option to update the definition file defaults with the currently
523
+ # displayed table values
524
+ def table_update
525
+ begin
526
+ save_gui_data(@currently_displayed_table_name)
527
+
528
+ result = Qt::MessageBox.question(self, "Update Table Definition File",
529
+ "Are you sure you want to update the table definition file. This action is irreversable!",
530
+ Qt::MessageBox::Yes | Qt::MessageBox::No, Qt::MessageBox::Yes)
531
+ if result == Qt::MessageBox::Yes
532
+ @core.table_update_def(@currently_displayed_table_name)
533
+ end # end if result == MBOX_CLICKED_YES
534
+ rescue => err
535
+ ExceptionDialog.new(self, err, "Table Update Errors", false)
536
+ end
537
+ end
538
+
539
+ # Menu option that opens a dialog to allows the user to select a table binary
540
+ # file named XXX.dat. The associated table definition file (XXX_def.txt)
541
+ # is then opened and parsed to determine how to display the binary file in the gui.
542
+ def file_open(bin_file = nil, def_file = nil)
543
+ begin
544
+ unless bin_file and def_file
545
+ bin_file, def_file = get_binary_and_definition_file_paths()
546
+ end
547
+
548
+ # Do nothing if the binary or definition files are not found
549
+ if bin_file.nil? or def_file.nil? then return end
550
+
551
+ # Update the labels
552
+ @table_bin_label.text = bin_file
553
+ @table_def_label.text = def_file
554
+
555
+ # open the file
556
+ begin
557
+ @core.file_open(def_file, bin_file)
558
+ rescue => err
559
+ if err.message.include?("Binary")
560
+ Qt::MessageBox.information(self, "Table Open Error", err.message)
561
+ else
562
+ ExceptionDialog.new(self, err, "Table Open Errors", false)
563
+ end
564
+ end
565
+
566
+ Qt::Application.setOverrideCursor(Qt::Cursor.new(Qt::WaitCursor))
567
+
568
+ # display the file
569
+ delete_tabs()
570
+ @core.table_def.get_all_tables.each do |table|
571
+ create_table_tab(table)
572
+ display_gui_data(table.name)
573
+ end
574
+ @currently_displayed_table_name = @ordered_gui_table_names[0]
575
+ @currently_displayed_table_name ||= '' # ensure it's not nil
576
+
577
+ Qt::Application.restoreOverrideCursor()
578
+ rescue => err
579
+ ExceptionDialog.new(self, err, "File Open Errors", false)
580
+ end
581
+ end
582
+
583
+ # Menu option to close the open table
584
+ def file_close
585
+ begin
586
+ @core.reset
587
+ @table_bin_label.text = ''
588
+ @table_def_label.text = ''
589
+ delete_tabs()
590
+ rescue => err
591
+ ExceptionDialog.new(self, err, "File New Errors", false)
592
+ end
593
+ end
594
+
595
+ # Menu option to create a new table binary file based on a table definition file.
596
+ def file_new
597
+ if !@currently_displayed_table_name.empty?
598
+ result = Qt::MessageBox.question(self, "File New",
599
+ "Creating new files will close the currently open file. Are you sure?",
600
+ Qt::MessageBox::Yes | Qt::MessageBox::No, Qt::MessageBox::Yes)
601
+ if result != Qt::MessageBox::Yes
602
+ return
603
+ end
604
+ end
605
+
606
+ begin
607
+ success = nil
608
+ bin_files = []
609
+ filenames = Qt::FileDialog.getOpenFileNames(self,
610
+ "Open Binary Definition Text File(s)",
611
+ @def_path,
612
+ "Config File (*.txt)\nAll Files (*)")
613
+
614
+ # Check for a 0 length string which indicates the user clicked "Cancel" on the dialog
615
+ if filenames and filenames.length != 0
616
+ @def_path = File.dirname(filenames[0])
617
+ file_close()
618
+ output_dir = Qt::FileDialog.getExistingDirectory(self, "Select Output Directory", @bin_path)
619
+ if output_dir
620
+ @bin_path = output_dir
621
+ filenames.each do |def_file|
622
+ if File.basename(def_file) =~ /_def\.txt/
623
+ basename = File.basename(def_file)[0...-8] # Get the basename without the _def.txt
624
+ else
625
+ basename = File.basename(def_file).split('.')[0...-1].join('.') # Get the basename without the extension
626
+ end
627
+
628
+ # Set the current_bin so the file_report function works correctly
629
+ output_filename = File.join(output_dir, "#{basename}.dat")
630
+ if File.exist?(output_filename)
631
+ result = Qt::MessageBox.question(self, "File New",
632
+ "File: #{output_filename} already exists. Overwrite?",
633
+ Qt::MessageBox::Yes | Qt::MessageBox::No, Qt::MessageBox::Yes)
634
+ if result != Qt::MessageBox::Yes
635
+ return
636
+ end
637
+ end
638
+ end
639
+
640
+ ProgressDialog.execute(self, 'Create New Files', 500, 50, true, false, false, false, false) do |dialog|
641
+ # create the file
642
+ begin
643
+ bin_files = @core.file_new(filenames, output_dir, dialog)
644
+ success = true
645
+ dialog.close_done
646
+ rescue => err
647
+ Qt.execute_in_main_thread(true) {|| ExceptionDialog.new(self, err, "File New Errors", false)}
648
+ dialog.close_done
649
+ end
650
+ end
651
+ end # end output_dir.nil? (user did NOT click cancel on dialog)
652
+ file_open(bin_files[0] ,filenames[0]) if success
653
+ end # end filename != 0 (user did NOT click cancel on dialog)
654
+ rescue => err
655
+ ExceptionDialog.new(self, err, "File New Errors", false)
656
+ end
657
+ end
658
+
659
+ # Called when the user selects another tab in the gui
660
+ def handle_tab_change(index)
661
+ @currently_displayed_table_name = @ordered_gui_table_names[index]
662
+ @currently_displayed_table_name ||= '' # ensure it's not nil
663
+ end
664
+
665
+ def mouse_over(row, col)
666
+ return if @currently_displayed_table_name.empty?
667
+ table = @core.table_def.get_table(@currently_displayed_table_name)
668
+ gui_table = @gui_tables[@currently_displayed_table_name]
669
+ if table and gui_table
670
+ if table.type == :TWO_DIMENSIONAL
671
+ item_name = gui_table.horizontalHeaderItem(col).text + row.to_s
672
+ item = table.get_item(item_name)
673
+ statusBar.showMessage(item.description)
674
+ else
675
+ item_name = gui_table.verticalHeaderItem(row).text
676
+ item = table.get_item(item_name)
677
+ statusBar.showMessage(item.description)
678
+ end
679
+ end
680
+ end
681
+
682
+ def click_callback(item)
683
+ table = @core.table_def.get_table(@currently_displayed_table_name)
684
+ gui_table = @gui_tables[@currently_displayed_table_name]
685
+ gui_table.editItem(item) if (item.flags & Qt::ItemIsEditable) != 0
686
+ end
687
+
688
+ def context_menu(point)
689
+ begin
690
+ table = @core.table_def.get_table(@currently_displayed_table_name)
691
+ gui_table = @gui_tables[@currently_displayed_table_name]
692
+ if table and gui_table
693
+ table_item = gui_table.itemAt(point)
694
+ if table_item
695
+ menu = Qt::Menu.new()
696
+
697
+ if table.type == :TWO_DIMENSIONAL
698
+ item_name = gui_table.horizontalHeaderItem(table_item.column).text + table_item.row.to_s
699
+ else
700
+ item_name = gui_table.verticalHeaderItem(table_item.row).text
701
+ end
702
+ details_action = Qt::Action.new(tr("Details"), self)
703
+ details_action.statusTip = tr("Popup details about #{@currently_displayed_table_name} #{item_name}")
704
+ details_action.connect(SIGNAL('triggered()')) do
705
+ TlmDetailsDialog.new(nil,
706
+ 'TABLE',
707
+ @currently_displayed_table_name.upcase,
708
+ item_name,
709
+ table)
710
+ end
711
+ menu.addAction(details_action)
712
+
713
+ default_action = Qt::Action.new(tr("Default"), self)
714
+ default_action.statusTip = tr("Set item to default value")
715
+ default_action.connect(SIGNAL('triggered()')) do
716
+ item = table.get_item(item_name)
717
+ table.write(item.name, item.default)
718
+ update_gui_item(@currently_displayed_table_name, table, item, table_item.row, table_item.column)
719
+ end
720
+ menu.addAction(default_action)
721
+
722
+ global_point = gui_table.mapToGlobal(point)
723
+ global_point.x += gui_table.verticalHeader.width
724
+ menu.exec(global_point)
725
+ menu.dispose
726
+ end
727
+ end
728
+ rescue => err
729
+ ExceptionDialog.new(self, err, "context_menu Errors", false)
730
+ end
731
+ end
732
+
733
+ # Creates a tab in the table manager gui
734
+ def create_table_tab(table_definition)
735
+ begin
736
+ # Table
737
+ @table = Qt::TableWidget.new(self)
738
+ delegate = ComboBoxItemDelegate.new(@table)
739
+ @table.setItemDelegate(delegate)
740
+ @table.setEditTriggers(Qt::AbstractItemView::AllEditTriggers)
741
+ @table.setSelectionMode(Qt::AbstractItemView::NoSelection)
742
+ #@table.setAlternatingRowColors(true)
743
+ @gui_tables[table_definition.name] = @table
744
+ @ordered_gui_table_names << table_definition.name
745
+ @tabbook.addTab(@table, table_definition.name)
746
+
747
+ @table.setRowCount(table_definition.num_rows)
748
+ @table.setColumnCount(table_definition.num_columns)
749
+ @table.setMouseTracking(true)
750
+ connect(@table, SIGNAL('cellEntered(int, int)'), self, SLOT('mouse_over(int, int)'))
751
+ connect(@table, SIGNAL('itemClicked(QTableWidgetItem*)'), self, SLOT('click_callback(QTableWidgetItem*)'))
752
+ @table.setContextMenuPolicy(Qt::CustomContextMenu)
753
+ connect(@table, SIGNAL('customContextMenuRequested(const QPoint&)'), self, SLOT('context_menu(const QPoint&)'))
754
+ rescue => err
755
+ ExceptionDialog.new(self, err, "create_table_tab Errors", false)
756
+ end
757
+ end
758
+
759
+ # Saves all the information in the given gui table name to the underlying
760
+ # binary structure (although it does not commit it to disk).
761
+ def save_gui_data(name)
762
+ gui_table = @gui_tables[name]
763
+ table = @core.table_def.get_table(name)
764
+ result = ""
765
+
766
+ # Cancel any table selections so the text will be visible when it is refreshed
767
+ gui_table.clearSelection
768
+
769
+ # don't do anything if we can't find the table
770
+ if gui_table.nil? or table.nil? then return end
771
+
772
+ # First go through the gui and set the underlying data to what is displayed
773
+ (0...table.num_rows).each do |r|
774
+ (0...table.num_columns).each do |c|
775
+ if table.type == :TWO_DIMENSIONAL
776
+ # get the table item definition so we know how to save it
777
+ item_def = table.get_item("#{gui_table.horizontalHeaderItem(c).text}#{r}")
778
+ else # table is ONE_DIMENSIONAL
779
+ # get the table item definition so we know how to save it
780
+ item_def = table.get_item(gui_table.verticalHeaderItem(r).text)
781
+ end
782
+
783
+ # determine how to convert the display value to the actual value
784
+ begin
785
+ case item_def.display_type
786
+ when :DEC
787
+ if item_def.data_type == :FLOAT
788
+ x = Float(gui_table.item(r,c).text)
789
+ else
790
+ x = Integer(gui_table.item(r,c).text)
791
+ end
792
+
793
+ when :HEX
794
+ x = Integer(gui_table.item(r,c).text)
795
+
796
+ when :CHECK
797
+ # the ItemData will be 0 for unchecked (corresponds with min value),
798
+ # and 1 for checked (corresponds with max value)
799
+ if gui_table.item(r,c).checkState == Qt::Checked
800
+ x = item_def.range.end.to_i
801
+ else
802
+ x = item_def.range.begin.to_i
803
+ end
804
+
805
+ when :STATE
806
+ x = item_def.states[gui_table.item(r,c).text]
807
+ end
808
+
809
+ # If there is a read conversion we first read the converted value before writing.
810
+ # This is to prevent writing the displayed value (which has the conversion applied)
811
+ # back to the binary data if they are already equal.
812
+ if item_def.read_conversion
813
+ converted = table.read(item_def.name, :CONVERTED)
814
+ table.write(item_def.name, x) if converted != x
815
+ else
816
+ table.write(item_def.name, x)
817
+ end
818
+
819
+ # if we have a problem casting the value it probably means the user put in garbage
820
+ # in this case force the range check to fail
821
+ rescue => error
822
+ text = gui_table.item(r,c).text
823
+ result << "Error saving #{item_def.name} value of #{text} due to #{error.message}.\nReverting to default of #{item_def.default}\n"
824
+ table.write(item_def.name, item_def.default)
825
+ update_gui_item(name, table, item_def, r, c)
826
+ end
827
+ end # end each table column
828
+ end # end each table row
829
+ if result == ""
830
+ result = nil
831
+ end
832
+ result
833
+ end
834
+
835
+ # Determines how to display all the binary table data based on
836
+ # the table definition and displays it using the various gui elements.
837
+ def display_gui_data(name)
838
+ table_def = @core.table_def.get_table(name)
839
+ gui_table = @gui_tables[name]
840
+
841
+ # Cancel any table selections so the text will be visible when it is refreshed
842
+ gui_table.clearSelection
843
+
844
+ # if we can't find the table do nothing
845
+ if table_def.nil? or gui_table.nil? then return end
846
+
847
+ items = table_def.sorted_items
848
+
849
+ if table_def.type == :TWO_DIMENSIONAL
850
+ row_headers = []
851
+ (0...table_def.num_rows).each {|i| row_headers << "#{i+1}" }
852
+ gui_table.setVerticalHeaderLabels(row_headers)
853
+
854
+ column_headers = []
855
+ (0...table_def.num_columns).each {|i| column_headers << items[i].name[0...-1] }
856
+ gui_table.setHorizontalHeaderLabels(column_headers)
857
+ else
858
+ row_headers = []
859
+ items.each {|item_def| row_headers << item_def.name }
860
+ gui_table.setVerticalHeaderLabels(row_headers)
861
+ gui_table.setHorizontalHeaderLabels(["Value"])
862
+ end
863
+
864
+ table_row = 0
865
+ table_column = 0
866
+
867
+ items.each do |item_def|
868
+ update_gui_item(name, table_def, item_def, table_row, table_column)
869
+
870
+ if table_def.type == :TWO_DIMENSIONAL
871
+ # only increment our row when we've processed all the columns
872
+ if table_column == table_def.num_columns - 1
873
+ table_row += 1
874
+ table_column = 0
875
+ else
876
+ table_column += 1
877
+ end
878
+ else
879
+ table_row += 1
880
+ end
881
+ end
882
+
883
+ gui_table.resizeColumnsToContents()
884
+ gui_table.resizeRowsToContents()
885
+ end
886
+
887
+ # Updates the table by setting the value in the table to the properly formatted value.
888
+ def update_gui_item(table_name, table_def, item_def, table_row, table_column)
889
+ gui_table = @gui_tables[table_name]
890
+
891
+ case item_def.display_type
892
+ when :STATE
893
+ gui_table.setItem(table_row, table_column, Qt::TableWidgetItem.new(table_def.read(item_def.name)))
894
+ if item_def.editable
895
+ gui_table.item(table_row, table_column).setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable)
896
+ else
897
+ gui_table.item(table_row, table_column).setFlags(Qt::NoItemFlags)
898
+ end
899
+
900
+ when :CHECK
901
+ gui_table.setItem(table_row, table_column, Qt::TableWidgetItem.new(table_def.read(item_def.name)))
902
+ # the ItemData will be 0 for unchecked (corresponds with min value),
903
+ # and 1 for checked (corresponds with max value)
904
+ if table_def.read(item_def.name) == item_def.range.begin
905
+ gui_table.item(table_row, table_column).setCheckState(Qt::Unchecked)
906
+ else
907
+ gui_table.item(table_row, table_column).setCheckState(Qt::Checked)
908
+ end
909
+ if item_def.editable
910
+ gui_table.item(table_row, table_column).setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable)
911
+ else
912
+ gui_table.item(table_row, table_column).setFlags(Qt::NoItemFlags)
913
+ end
914
+
915
+ when :DEC
916
+ gui_table.setItem(table_row, table_column, Qt::TableWidgetItem.new(tr(table_def.read(item_def.name).to_s)))
917
+ if item_def.editable
918
+ gui_table.item(table_row, table_column).setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled)
919
+ else
920
+ gui_table.item(table_row, table_column).setFlags(Qt::NoItemFlags)
921
+ end
922
+
923
+ when :HEX
924
+ case item_def.bit_size
925
+ when 8
926
+ x = sprintf("%02X", table_def.read(item_def.name).to_s)
927
+ # if the number was negative x will have .. and possibly another
928
+ # F in the string which we remove by taking the last 4 digits
929
+ x = /\w{2}$/.match(x)[0]
930
+ when 16
931
+ x = sprintf("%04X", table_def.read(item_def.name).to_s)
932
+ # if the number was negative x will have .. and possibly another
933
+ # F in the string which we remove by taking the last 4 digits
934
+ x = /\w{4}$/.match(x)[0]
935
+ else
936
+ x = sprintf("%08X", table_def.read(item_def.name).to_s)
937
+ # if the number was negative x will have .. and possibly another
938
+ # F in the string which we remove by taking the last 8 digits
939
+ x = /\w{8}$/.match(x)[0]
940
+ end
941
+ x = Integer("0x#{x}") # convert to Integer
942
+ gui_table.setItem(table_row, table_column, Qt::TableWidgetItem.new(tr("0x%X" % x)))
943
+ if item_def.editable
944
+ gui_table.item(table_row, table_column).setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled)
945
+ else
946
+ gui_table.item(table_row, table_column).setFlags(Qt::NoItemFlags)
947
+ end
948
+ end
949
+ end
950
+
951
+ # Looks in a directory for a definition file for the given binary file.
952
+ # The definition file name up to the _def.txt must be fully contained in
953
+ # the given binary file. For example: XXX_YYY1_def.txt will be returned for
954
+ # a binary file name of XXX_YYY1_Extra.bin. A binary file of XXX_YYY2.bin
955
+ # will not match.
956
+ #
957
+ # @return [String|nil] Path to the best definition file or nil
958
+ def get_best_definition_file(path, bin_file)
959
+ def_file = nil
960
+
961
+ # compare the filename with all possibilities in the directory
962
+ Dir.foreach(path) do |possible_def_file|
963
+ # only bother checking definition files
964
+ index = possible_def_file.index('_def.txt')
965
+ next unless index
966
+
967
+ base_name = possible_def_file[0...index]
968
+ if bin_file.index(base_name)
969
+ # If we've already found a def_file and now found another match we
970
+ # clear the first and stop the search. Force the user to decide.
971
+ if def_file
972
+ def_file = nil
973
+ break
974
+ end
975
+ def_file = File.join(path, possible_def_file)
976
+ end
977
+ end # each file in the directory
978
+
979
+ return def_file
980
+ end
981
+
982
+ # Prompts the user to select a binary table file to open.
983
+ # (e.g. MyBinary_TC2.dat or MyBinaryJMT = MyBinary_def.dat)
984
+ # Returns both the path to the binary file and the table definition file or
985
+ # nil for both if either can not be found.
986
+ def get_binary_and_definition_file_paths
987
+ bin_file = nil
988
+ def_file = nil
989
+
990
+ bin_file = Qt::FileDialog.getOpenFileName(
991
+ self, "Open Binary", @bin_path, "Binary File (*.bin *.dat);;All Files (*)")
992
+ unless bin_file.nil? or bin_file.empty?
993
+ @bin_path = File.dirname(bin_file)
994
+ bin_file_base = File.basename(bin_file).split('.')[0]
995
+
996
+ # Look in the binary file's base directory
997
+ def_file = get_best_definition_file(File.dirname(bin_file), bin_file_base)
998
+ def_found = !def_file.nil?
999
+
1000
+ if not def_found
1001
+ # Look in the stored definition file directory
1002
+ def_file = get_best_definition_file(@def_path, bin_file_base)
1003
+ def_found = !def_file.nil?
1004
+ end
1005
+
1006
+ if def_found # if the definition file was automatically found
1007
+ return bin_file, def_file
1008
+ else # the definition file was not automatically found
1009
+ result = Qt::MessageBox.question(self, "Manually Open Definition File",
1010
+ "The definition text file for #{File.basename(bin_file)} could not be found.\nWould you like to manually locate it?",
1011
+ Qt::MessageBox::Yes | Qt::MessageBox::No | Qt::MessageBox::Cancel, Qt::MessageBox::Yes)
1012
+ if result == Qt::MessageBox::Yes
1013
+ def_file = Qt::FileDialog.getOpenFileName(self,
1014
+ "Open Definition File",
1015
+ @def_path,
1016
+ "Definition File (*.txt)\nAll Files (*)")
1017
+ unless def_file.nil? or def_file.empty?
1018
+ if File.basename(def_file) =~ /\.txt/
1019
+ @def_path = File.dirname(def_file)
1020
+ return bin_file, def_file
1021
+ else
1022
+ Qt::MessageBox.information(self, "Open Definition File Errors",
1023
+ "Definition file #{File.basename(def_file)} does not have .txt extension")
1024
+ end
1025
+ end # the user clicked Cancel on the File Open dialog
1026
+ end # the user clicked No when prompted to find the definition file
1027
+ end # end if the definition file wasn't found
1028
+ end # end if the user did not click Cancel on the Open dialog
1029
+ return nil, nil
1030
+ end
1031
+
1032
+ # Delete all the tabs in the table manager gui and initialize globals to
1033
+ # prepare for the next table to load.
1034
+ def delete_tabs
1035
+ @gui_tables = Hash.new
1036
+ @ordered_gui_table_names = Array.new
1037
+ @currently_displayed_table_name = ""
1038
+
1039
+ @tabbook.tabs.each_with_index do |tab, index|
1040
+ tab.dispose
1041
+ @tabbook.removeTab(index)
1042
+ end
1043
+ end
1044
+
1045
+ def self.run(option_parser = nil, options = nil)
1046
+ Cosmos.catch_fatal_exception do
1047
+ unless option_parser and options
1048
+ option_parser, options = create_default_options()
1049
+ options.width = 800
1050
+ options.height = 600
1051
+ options.title = "Table Manager"
1052
+ options.auto_size = false
1053
+ options.no_tables = false
1054
+ option_parser.separator "Table Manager Specific Options:"
1055
+ option_parser.on("-n", "--notables", "Do not include table file editing options. This will remove the 'Table' menu.") do
1056
+ options.no_tables = true
1057
+ end
1058
+ end
1059
+
1060
+ super(option_parser, options)
1061
+ end
1062
+ end
1063
+ end
1064
+
1065
+ end # module Cosmos