cosmos 4.0.3-java

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 (1491) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitattributes +3 -0
  4. data/.gitignore +48 -0
  5. data/.rubocop.yml +23 -0
  6. data/.travis.yml +10 -0
  7. data/.yardopts +3 -0
  8. data/CONTRIBUTING.txt +50 -0
  9. data/Gemfile +10 -0
  10. data/Guardfile +27 -0
  11. data/LICENSE.txt +879 -0
  12. data/Manifest.txt +1549 -0
  13. data/README.md +111 -0
  14. data/Rakefile +264 -0
  15. data/autohotkey/config/data/attitude.bin +0 -0
  16. data/autohotkey/config/data/diamond.STL +58 -0
  17. data/autohotkey/config/data/groundoff.gif +0 -0
  18. data/autohotkey/config/data/groundon.gif +0 -0
  19. data/autohotkey/config/data/position.bin +0 -0
  20. data/autohotkey/config/data/satellite.gif +0 -0
  21. data/autohotkey/config/data/tada.wav +0 -0
  22. data/autohotkey/config/system/system.txt +29 -0
  23. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +126 -0
  24. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -0
  25. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -0
  26. data/autohotkey/config/targets/INST/doc/README.txt +1 -0
  27. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -0
  28. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -0
  29. data/autohotkey/config/targets/INST/screens/_footer.txt +4 -0
  30. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -0
  31. data/autohotkey/config/targets/INST/screens/array.txt +7 -0
  32. data/autohotkey/config/targets/INST/screens/block.txt +8 -0
  33. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -0
  34. data/autohotkey/config/targets/INST/screens/extra.txt +19 -0
  35. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -0
  36. data/autohotkey/config/targets/INST/screens/ground.txt +25 -0
  37. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -0
  38. data/autohotkey/config/targets/INST/screens/hs.txt +46 -0
  39. data/autohotkey/config/targets/INST/screens/image.txt +21 -0
  40. data/autohotkey/config/targets/INST/screens/latest.txt +23 -0
  41. data/autohotkey/config/targets/INST/screens/mech.txt +25 -0
  42. data/autohotkey/config/targets/INST/screens/other.txt +25 -0
  43. data/autohotkey/config/targets/INST/screens/params.txt +25 -0
  44. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -0
  45. data/autohotkey/config/targets/INST/sequences/run_sequence.txt +1 -0
  46. data/autohotkey/config/targets/INST/target.txt +27 -0
  47. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -0
  48. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -0
  49. data/autohotkey/config/targets/META/screens/data.txt +12 -0
  50. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  51. data/autohotkey/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  52. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  53. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  54. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -0
  55. data/autohotkey/config/targets/SYSTEM/screens/limits_change.txt +14 -0
  56. data/autohotkey/config/targets/SYSTEM/screens/meta.txt +14 -0
  57. data/autohotkey/config/targets/SYSTEM/target.txt +12 -0
  58. data/autohotkey/config/tools/cmd_sender/cmd_sender.txt +1 -0
  59. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -0
  60. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -0
  61. data/autohotkey/config/tools/handbook_creator/default_toc.xsl +59 -0
  62. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -0
  63. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  64. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  65. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  66. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -0
  67. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  68. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  69. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  70. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  71. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  72. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  73. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  74. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  75. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -0
  76. data/autohotkey/config/tools/launcher/launcher.txt +38 -0
  77. data/autohotkey/config/tools/limits_monitor/README.txt +1 -0
  78. data/autohotkey/config/tools/opengl_builder/error.txt +1 -0
  79. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -0
  80. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -0
  81. data/autohotkey/config/tools/table_manager/OldOneDimensionalTable_def.txt +19 -0
  82. data/autohotkey/config/tools/table_manager/OldTwoDimensionalTable_def.txt +248 -0
  83. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +31 -0
  84. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +28 -0
  85. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -0
  86. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -0
  87. data/autohotkey/config/tools/test_runner/test_runner3.txt +7 -0
  88. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -0
  89. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +14 -0
  90. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -0
  91. data/autohotkey/config/tools/tlm_grapher/README.txt +1 -0
  92. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -0
  93. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -0
  94. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -0
  95. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -0
  96. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -0
  97. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -0
  98. data/autohotkey/lib/example_background_task.rb +42 -0
  99. data/autohotkey/lib/user_version.rb +3 -0
  100. data/autohotkey/procedures/clear_util.rb +7 -0
  101. data/autohotkey/procedures/collect.rb +18 -0
  102. data/autohotkey/procedures/collect_util.rb +14 -0
  103. data/autohotkey/procedures/example_test.rb +71 -0
  104. data/autohotkey/procedures/example_test2.rb +74 -0
  105. data/autohotkey/procedures/script_test.rb +21 -0
  106. data/autohotkey/procedures/syntax_error.rb +18 -0
  107. data/autohotkey/tools/CmdExtractorAHK +16 -0
  108. data/autohotkey/tools/CmdSender +14 -0
  109. data/autohotkey/tools/CmdSenderAHK +18 -0
  110. data/autohotkey/tools/CmdSequence +14 -0
  111. data/autohotkey/tools/CmdSequenceAHK +23 -0
  112. data/autohotkey/tools/CmdSequenceAHK2 +16 -0
  113. data/autohotkey/tools/CmdTlmServer +14 -0
  114. data/autohotkey/tools/CmdTlmServerAHK +28 -0
  115. data/autohotkey/tools/CmdTlmServerAHK2 +17 -0
  116. data/autohotkey/tools/ConfigEditor +16 -0
  117. data/autohotkey/tools/DataViewer +14 -0
  118. data/autohotkey/tools/DataViewerAHK +17 -0
  119. data/autohotkey/tools/HandbookCreatorAHK +20 -0
  120. data/autohotkey/tools/LauncherAHK +17 -0
  121. data/autohotkey/tools/LimitsMonitorAHK +20 -0
  122. data/autohotkey/tools/OpenGLBuilderAHK +24 -0
  123. data/autohotkey/tools/PacketViewer +14 -0
  124. data/autohotkey/tools/PacketViewerAHK +18 -0
  125. data/autohotkey/tools/PacketViewerAHK2 +17 -0
  126. data/autohotkey/tools/Replay +14 -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 +25 -0
  133. data/autohotkey/tools/TableManagerAHK2 +18 -0
  134. data/autohotkey/tools/TableManagerAHK3 +18 -0
  135. data/autohotkey/tools/TableManagerAHK4 +24 -0
  136. data/autohotkey/tools/TestRunner +15 -0
  137. data/autohotkey/tools/TestRunnerAHK +17 -0
  138. data/autohotkey/tools/TestRunnerAHK2 +17 -0
  139. data/autohotkey/tools/TestRunnerAHK3 +17 -0
  140. data/autohotkey/tools/TestRunnerAHK4 +17 -0
  141. data/autohotkey/tools/TestRunnerAHK5 +17 -0
  142. data/autohotkey/tools/TestRunnerAHK6 +17 -0
  143. data/autohotkey/tools/TlmExtractor +15 -0
  144. data/autohotkey/tools/TlmExtractorAHK +19 -0
  145. data/autohotkey/tools/TlmExtractorAHK2 +16 -0
  146. data/autohotkey/tools/TlmExtractorAHK3 +16 -0
  147. data/autohotkey/tools/TlmGrapher +14 -0
  148. data/autohotkey/tools/TlmGrapherAHK +19 -0
  149. data/autohotkey/tools/TlmGrapherAHK2 +23 -0
  150. data/autohotkey/tools/TlmGrapherAHK3 +17 -0
  151. data/autohotkey/tools/TlmGrapherAHK4 +17 -0
  152. data/autohotkey/tools/TlmViewer +14 -0
  153. data/autohotkey/tools/TlmViewerAHK +28 -0
  154. data/autohotkey/tools/TlmViewerAHK2 +22 -0
  155. data/autohotkey/tools/TlmViewerAHK3 +23 -0
  156. data/autohotkey/tools/TlmViewerAHK4 +22 -0
  157. data/autohotkey/tools/TlmViewerAHK5 +18 -0
  158. data/autohotkey/tools/autohotkey.rb +38 -0
  159. data/autohotkey/tools/cmd_extractor.ahk +50 -0
  160. data/autohotkey/tools/cmd_sender.ahk +180 -0
  161. data/autohotkey/tools/cmd_sequence.ahk +215 -0
  162. data/autohotkey/tools/cmd_sequence2.ahk +23 -0
  163. data/autohotkey/tools/cmd_tlm_server.ahk +90 -0
  164. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -0
  165. data/autohotkey/tools/data_viewer.ahk +140 -0
  166. data/autohotkey/tools/handbook_creator.ahk +32 -0
  167. data/autohotkey/tools/launcher.ahk +41 -0
  168. data/autohotkey/tools/limits_monitor.ahk +121 -0
  169. data/autohotkey/tools/open_gl_builder.ahk +133 -0
  170. data/autohotkey/tools/packet_viewer.ahk +217 -0
  171. data/autohotkey/tools/packet_viewer2.ahk +9 -0
  172. data/autohotkey/tools/replay.ahk +103 -0
  173. data/autohotkey/tools/script_runner.ahk +588 -0
  174. data/autohotkey/tools/script_runner2.ahk +50 -0
  175. data/autohotkey/tools/table_manager.ahk +291 -0
  176. data/autohotkey/tools/test_runner.ahk +262 -0
  177. data/autohotkey/tools/test_runner2.ahk +49 -0
  178. data/autohotkey/tools/test_runner3.ahk +11 -0
  179. data/autohotkey/tools/test_runner5.ahk +8 -0
  180. data/autohotkey/tools/test_runner6.ahk +5 -0
  181. data/autohotkey/tools/tlm_extractor.ahk +357 -0
  182. data/autohotkey/tools/tlm_grapher.ahk +658 -0
  183. data/autohotkey/tools/tlm_grapher2.ahk +115 -0
  184. data/autohotkey/tools/tlm_grapher3.ahk +23 -0
  185. data/autohotkey/tools/tlm_viewer.ahk +140 -0
  186. data/autohotkey/tools/tlm_viewer2.ahk +49 -0
  187. data/autohotkey/tools/tlm_viewer4.ahk +4 -0
  188. data/autohotkey/tools/tlm_viewer5.ahk +19 -0
  189. data/autohotkey/tools/tool_launch.rb +38 -0
  190. data/bin/cosmos +266 -0
  191. data/bin/cstol_converter +1166 -0
  192. data/bin/exchndl20-x64.dll +0 -0
  193. data/bin/exchndl20.dll +0 -0
  194. data/bin/exchndl21-x64.dll +0 -0
  195. data/bin/exchndl21.dll +0 -0
  196. data/bin/exchndl22-x64.dll +0 -0
  197. data/bin/exchndl22.dll +0 -0
  198. data/bin/mgwhelp-x64.dll +0 -0
  199. data/bin/mgwhelp.dll +0 -0
  200. data/bin/rubysloc +85 -0
  201. data/bin/xtce_converter +83 -0
  202. data/cosmos.gemspec +109 -0
  203. data/data/COSMOS_64x64.bmp +0 -0
  204. data/data/COSMOS_64x64.ico +0 -0
  205. data/data/COSMOS_64x64.png +0 -0
  206. data/data/COSMOS_Architecture.png +0 -0
  207. data/data/CheckBoxCheck.gif +0 -0
  208. data/data/CheckBoxEmpty.gif +0 -0
  209. data/data/Earthmap1024x512.gif +0 -0
  210. data/data/about.txt +4 -0
  211. data/data/add_database.png +0 -0
  212. data/data/add_plot.png +0 -0
  213. data/data/add_tab.png +0 -0
  214. data/data/blank.png +0 -0
  215. data/data/bug.png +0 -0
  216. data/data/checkmark.png +0 -0
  217. data/data/close.png +0 -0
  218. data/data/cmd_extractor.png +0 -0
  219. data/data/cmd_sender.png +0 -0
  220. data/data/cmd_sequence.png +0 -0
  221. data/data/config/_array_params.yaml +23 -0
  222. data/data/config/_id_items.yaml +24 -0
  223. data/data/config/_id_params.yaml +58 -0
  224. data/data/config/_interfaces.yaml +206 -0
  225. data/data/config/_items.yaml +20 -0
  226. data/data/config/_params.yaml +58 -0
  227. data/data/config/cmd_tlm_server.yaml +124 -0
  228. data/data/config/command.yaml +40 -0
  229. data/data/config/command_modifiers.yaml +145 -0
  230. data/data/config/command_telemetry.yaml +3 -0
  231. data/data/config/data_viewer.yaml +43 -0
  232. data/data/config/handbook_creator.yaml +23 -0
  233. data/data/config/housekeeping_params.yaml +71 -0
  234. data/data/config/interface_modifiers.yaml +44 -0
  235. data/data/config/item_modifiers.yaml +211 -0
  236. data/data/config/launcher.yaml +117 -0
  237. data/data/config/limits_monitor.yaml +53 -0
  238. data/data/config/linegraph_params.yaml +30 -0
  239. data/data/config/linegraph_plot.yaml +106 -0
  240. data/data/config/page_modifiers.yaml +128 -0
  241. data/data/config/param_item_modifiers.yaml +46 -0
  242. data/data/config/parameter_modifiers.yaml +180 -0
  243. data/data/config/protocols.yaml +273 -0
  244. data/data/config/screen.yaml +151 -0
  245. data/data/config/script_runner.yaml +15 -0
  246. data/data/config/system.yaml +247 -0
  247. data/data/config/table_manager.yaml +76 -0
  248. data/data/config/table_parameter_modifiers.yaml +9 -0
  249. data/data/config/target.yaml +80 -0
  250. data/data/config/telemetry.yaml +80 -0
  251. data/data/config/telemetry_modifiers.yaml +142 -0
  252. data/data/config/test_runner.yaml +118 -0
  253. data/data/config/tlm_extractor.yaml +109 -0
  254. data/data/config/tlm_grapher.yaml +78 -0
  255. data/data/config/tlm_viewer.yaml +112 -0
  256. data/data/config/unknown.yaml +3 -0
  257. data/data/config/widgets.yaml +1339 -0
  258. data/data/config/xy_params.yaml +50 -0
  259. data/data/config/xy_plot.yaml +12 -0
  260. data/data/config_editor.png +0 -0
  261. data/data/copy.png +0 -0
  262. data/data/cosmos.xcf +0 -0
  263. data/data/cosmos_word.gif +0 -0
  264. data/data/crc.txt +351 -0
  265. data/data/critical.wav +0 -0
  266. data/data/cts.png +0 -0
  267. data/data/cut.png +0 -0
  268. data/data/data_viewer.png +0 -0
  269. data/data/delete.png +0 -0
  270. data/data/delete_database.png +0 -0
  271. data/data/delete_plot.png +0 -0
  272. data/data/delete_tab.png +0 -0
  273. data/data/diamond.STL +58 -0
  274. data/data/disconnected.png +0 -0
  275. data/data/edit.png +0 -0
  276. data/data/edit_database.png +0 -0
  277. data/data/edit_plot.png +0 -0
  278. data/data/edit_tab.png +0 -0
  279. data/data/end-26.png +0 -0
  280. data/data/fast_forward-26.png +0 -0
  281. data/data/file.png +0 -0
  282. data/data/handbook_creator.png +0 -0
  283. data/data/help.png +0 -0
  284. data/data/html-32.png +0 -0
  285. data/data/information.wav +0 -0
  286. data/data/input.wav +0 -0
  287. data/data/launcher.png +0 -0
  288. data/data/legal.gif +0 -0
  289. data/data/legal.txt +8 -0
  290. data/data/limits_monitor.png +0 -0
  291. data/data/message.wav +0 -0
  292. data/data/moonmap1k.gif +0 -0
  293. data/data/multi.png +0 -0
  294. data/data/open.png +0 -0
  295. data/data/open_in_browser-32.png +0 -0
  296. data/data/opengl_builder.png +0 -0
  297. data/data/packet_viewer.png +0 -0
  298. data/data/pdf-32.png +0 -0
  299. data/data/play-26.png +0 -0
  300. data/data/question.wav +0 -0
  301. data/data/redo.png +0 -0
  302. data/data/replay.png +0 -0
  303. data/data/reverse-play-26.png +0 -0
  304. data/data/rewind-26.png +0 -0
  305. data/data/running.png +0 -0
  306. data/data/save.png +0 -0
  307. data/data/save_as.png +0 -0
  308. data/data/screenshot.png +0 -0
  309. data/data/script_runner.png +0 -0
  310. data/data/search-14.png +0 -0
  311. data/data/search.png +0 -0
  312. data/data/send_file.png +0 -0
  313. data/data/skip_to_start-26.png +0 -0
  314. data/data/spinner.gif +0 -0
  315. data/data/splash.gif +0 -0
  316. data/data/stop-26.png +0 -0
  317. data/data/table_manager.png +0 -0
  318. data/data/test_runner.png +0 -0
  319. data/data/tlm_extractor.png +0 -0
  320. data/data/tlm_grapher.png +0 -0
  321. data/data/tlm_viewer.png +0 -0
  322. data/data/undo.png +0 -0
  323. data/data/warning.wav +0 -0
  324. data/demo/Gemfile +10 -0
  325. data/demo/Launcher +16 -0
  326. data/demo/Launcher.bat +9 -0
  327. data/demo/Rakefile +77 -0
  328. data/demo/config/data/attitude.bin +0 -0
  329. data/demo/config/data/crc.txt +258 -0
  330. data/demo/config/data/diamond.STL +58 -0
  331. data/demo/config/data/groundoff.gif +0 -0
  332. data/demo/config/data/groundon.gif +0 -0
  333. data/demo/config/data/hselectoff.gif +0 -0
  334. data/demo/config/data/hselecton.gif +0 -0
  335. data/demo/config/data/hswitchoff.gif +0 -0
  336. data/demo/config/data/hswitchon.gif +0 -0
  337. data/demo/config/data/meta_init.txt +1 -0
  338. data/demo/config/data/position.bin +0 -0
  339. data/demo/config/data/poweroff.gif +0 -0
  340. data/demo/config/data/poweron.gif +0 -0
  341. data/demo/config/data/satellite.gif +0 -0
  342. data/demo/config/data/tada.wav +0 -0
  343. data/demo/config/data/vswitchoff.gif +0 -0
  344. data/demo/config/data/vswitchon.gif +0 -0
  345. data/demo/config/system/system.txt +47 -0
  346. data/demo/config/system/system2.txt +43 -0
  347. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -0
  348. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -0
  349. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -0
  350. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +18 -0
  351. data/demo/config/targets/EXAMPLE/target.txt +9 -0
  352. data/demo/config/targets/INST/cmd_tlm/_ccsds_cmd.txt +9 -0
  353. data/demo/config/targets/INST/cmd_tlm/_ccsds_tlm.txt +19 -0
  354. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +57 -0
  355. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +164 -0
  356. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -0
  357. data/demo/config/targets/INST/doc/README.txt +1 -0
  358. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -0
  359. data/demo/config/targets/INST/lib/inst_dump_component.rb +34 -0
  360. data/demo/config/targets/INST/lib/sim_inst.rb +321 -0
  361. data/demo/config/targets/INST/procedures/checks.rb +11 -0
  362. data/demo/config/targets/INST/procedures/collect.rb +18 -0
  363. data/demo/config/targets/INST/procedures/disconnect.rb +29 -0
  364. data/demo/config/targets/INST/procedures/utilities/clear.rb +7 -0
  365. data/demo/config/targets/INST/procedures/utilities/collect.rb +14 -0
  366. data/demo/config/targets/INST/screens/_footer.txt +4 -0
  367. data/demo/config/targets/INST/screens/adcs.txt +70 -0
  368. data/demo/config/targets/INST/screens/array.txt +15 -0
  369. data/demo/config/targets/INST/screens/block.txt +8 -0
  370. data/demo/config/targets/INST/screens/commanding.txt +37 -0
  371. data/demo/config/targets/INST/screens/graphs.txt +14 -0
  372. data/demo/config/targets/INST/screens/ground.txt +25 -0
  373. data/demo/config/targets/INST/screens/hs.txt +42 -0
  374. data/demo/config/targets/INST/screens/latest.txt +23 -0
  375. data/demo/config/targets/INST/screens/limits.txt +43 -0
  376. data/demo/config/targets/INST/screens/other.txt +24 -0
  377. data/demo/config/targets/INST/screens/spacing_box.txt +44 -0
  378. data/demo/config/targets/INST/screens/spacing_grid.txt +78 -0
  379. data/demo/config/targets/INST/screens/tabs.txt +68 -0
  380. data/demo/config/targets/INST/sequences/sequence.tsv +3 -0
  381. data/demo/config/targets/INST/tables/EventAction.csv +9 -0
  382. data/demo/config/targets/INST/tables/EventAction.dat +0 -0
  383. data/demo/config/targets/INST/tables/McConfigTable.csv +20 -0
  384. data/demo/config/targets/INST/tables/McConfigTable.dat +0 -0
  385. data/demo/config/targets/INST/target.txt +37 -0
  386. data/demo/config/targets/INST/tools/data_viewer/data_viewer.txt +2 -0
  387. data/demo/config/targets/INST/tools/data_viewer/data_viewer2.txt +2 -0
  388. data/demo/config/targets/INST/tools/table_manager/EventAction_def.txt +6 -0
  389. data/demo/config/targets/INST/tools/table_manager/McConfigTable_def.txt +38 -0
  390. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +6 -0
  391. data/demo/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +10 -0
  392. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -0
  393. data/demo/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  394. data/demo/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  395. data/demo/config/targets/SYSTEM/cmd_tlm_server.txt +6 -0
  396. data/demo/config/targets/SYSTEM/lib/limits_groups.rb +55 -0
  397. data/demo/config/targets/SYSTEM/screens/status.txt +12 -0
  398. data/demo/config/targets/SYSTEM/target.txt +12 -0
  399. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -0
  400. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -0
  401. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -0
  402. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +59 -0
  403. data/demo/config/targets/TEMPLATED/target.txt +8 -0
  404. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +49 -0
  405. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +42 -0
  406. data/demo/config/tools/data_viewer/data_viewer.txt +20 -0
  407. data/demo/config/tools/example_application.css +58 -0
  408. data/demo/config/tools/handbook_creator/default_toc.xsl +59 -0
  409. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -0
  410. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -0
  411. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  412. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  413. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -0
  414. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  415. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  416. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  417. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  418. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  419. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  420. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -0
  421. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  422. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -0
  423. data/demo/config/tools/launcher/launcher.css +7 -0
  424. data/demo/config/tools/launcher/launcher.txt +48 -0
  425. data/demo/config/tools/launcher/launcher2.css +10 -0
  426. data/demo/config/tools/launcher/launcher2.txt +48 -0
  427. data/demo/config/tools/launcher/launcher_mini.txt +45 -0
  428. data/demo/config/tools/limits_monitor/README.txt +1 -0
  429. data/demo/config/tools/opengl_builder/README.txt +1 -0
  430. data/demo/config/tools/script_runner/script_runner.txt +3 -0
  431. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -0
  432. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  433. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +37 -0
  434. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +34 -0
  435. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +9 -0
  436. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +31 -0
  437. data/demo/config/tools/test_runner/test_runner.css +45 -0
  438. data/demo/config/tools/test_runner/test_runner.txt +17 -0
  439. data/demo/config/tools/tlm_extractor/_adcs_time.txt +2 -0
  440. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  441. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  442. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  443. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  444. data/demo/config/tools/tlm_grapher/README.txt +1 -0
  445. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -0
  446. data/demo/lib/example_background_task.rb +55 -0
  447. data/demo/lib/example_target.rb +103 -0
  448. data/demo/lib/scpi_target.rb +68 -0
  449. data/demo/lib/user_version.rb +3 -0
  450. data/demo/procedures/cosmos_api_test.rb +310 -0
  451. data/demo/procedures/example_test.rb +192 -0
  452. data/demo/procedures/plot_test.rb +8 -0
  453. data/demo/procedures/run_example_test.rb +3 -0
  454. data/demo/procedures/test.rb +51 -0
  455. data/demo/tools/CmdExtractor +16 -0
  456. data/demo/tools/CmdExtractor.bat +9 -0
  457. data/demo/tools/CmdSender +16 -0
  458. data/demo/tools/CmdSender.bat +9 -0
  459. data/demo/tools/CmdSequence +16 -0
  460. data/demo/tools/CmdSequence.bat +9 -0
  461. data/demo/tools/CmdTlmServer +16 -0
  462. data/demo/tools/CmdTlmServer.bat +9 -0
  463. data/demo/tools/ConfigEditor +16 -0
  464. data/demo/tools/ConfigEditor.bat +9 -0
  465. data/demo/tools/DataViewer +16 -0
  466. data/demo/tools/DataViewer.bat +9 -0
  467. data/demo/tools/ExampleTarget +16 -0
  468. data/demo/tools/ExampleTarget.bat +9 -0
  469. data/demo/tools/HandbookCreator +16 -0
  470. data/demo/tools/HandbookCreator.bat +9 -0
  471. data/demo/tools/Launcher +16 -0
  472. data/demo/tools/Launcher.bat +9 -0
  473. data/demo/tools/LimitsMonitor +16 -0
  474. data/demo/tools/LimitsMonitor.bat +9 -0
  475. data/demo/tools/OpenGLBuilder +16 -0
  476. data/demo/tools/OpenGLBuilder.bat +9 -0
  477. data/demo/tools/PacketViewer +16 -0
  478. data/demo/tools/PacketViewer.bat +9 -0
  479. data/demo/tools/Replay +16 -0
  480. data/demo/tools/Replay.bat +9 -0
  481. data/demo/tools/ScpiTarget +16 -0
  482. data/demo/tools/ScpiTarget.bat +9 -0
  483. data/demo/tools/ScriptRunner +16 -0
  484. data/demo/tools/ScriptRunner.bat +9 -0
  485. data/demo/tools/TableManager +16 -0
  486. data/demo/tools/TableManager.bat +9 -0
  487. data/demo/tools/TestRunner +16 -0
  488. data/demo/tools/TestRunner.bat +9 -0
  489. data/demo/tools/TlmExtractor +16 -0
  490. data/demo/tools/TlmExtractor.bat +9 -0
  491. data/demo/tools/TlmGrapher +16 -0
  492. data/demo/tools/TlmGrapher.bat +9 -0
  493. data/demo/tools/TlmViewer +16 -0
  494. data/demo/tools/TlmViewer.bat +9 -0
  495. data/demo/tools/ToolLaunch.bat +72 -0
  496. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  497. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -0
  498. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -0
  499. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  500. data/demo/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  501. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  502. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -0
  503. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -0
  504. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  505. data/demo/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  506. data/demo/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  507. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  508. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  509. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  510. data/demo/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  511. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  512. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -0
  513. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -0
  514. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  515. data/demo/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  516. data/demo/tools/mac/ConfigEditor.app/Contents/Info.plist +38 -0
  517. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/ConfigEditor.rb +16 -0
  518. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +10 -0
  519. data/demo/tools/mac/ConfigEditor.app/Contents/MacOS/tool_launch.rb +38 -0
  520. data/demo/tools/mac/ConfigEditor.app/Contents/Resources/appIcon.icns +0 -0
  521. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  522. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -0
  523. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -0
  524. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  525. data/demo/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  526. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  527. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -0
  528. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -0
  529. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  530. data/demo/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  531. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  532. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -0
  533. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -0
  534. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  535. data/demo/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  536. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  537. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -0
  538. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -0
  539. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  540. data/demo/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  541. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  542. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -0
  543. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -0
  544. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  545. data/demo/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  546. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  547. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -0
  548. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -0
  549. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  550. data/demo/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  551. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -0
  552. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -0
  553. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -0
  554. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  555. data/demo/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  556. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  557. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -0
  558. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -0
  559. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  560. data/demo/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  561. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  562. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -0
  563. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -0
  564. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  565. data/demo/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  566. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  567. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -0
  568. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -0
  569. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  570. data/demo/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  571. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  572. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -0
  573. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -0
  574. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  575. data/demo/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  576. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  577. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -0
  578. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -0
  579. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  580. data/demo/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  581. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  582. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -0
  583. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -0
  584. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  585. data/demo/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  586. data/demo/tools/tool_launch.rb +38 -0
  587. data/ext/cosmos/ext/array/array.c +111 -0
  588. data/ext/cosmos/ext/array/extconf.rb +13 -0
  589. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -0
  590. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -0
  591. data/ext/cosmos/ext/config_parser/config_parser.c +237 -0
  592. data/ext/cosmos/ext/config_parser/extconf.rb +13 -0
  593. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -0
  594. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -0
  595. data/ext/cosmos/ext/crc/crc.c +341 -0
  596. data/ext/cosmos/ext/crc/extconf.rb +13 -0
  597. data/ext/cosmos/ext/line_graph/extconf.rb +13 -0
  598. data/ext/cosmos/ext/line_graph/line_graph.c +501 -0
  599. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +13 -0
  600. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -0
  601. data/ext/cosmos/ext/packet/extconf.rb +13 -0
  602. data/ext/cosmos/ext/packet/packet.c +350 -0
  603. data/ext/cosmos/ext/platform/extconf.rb +13 -0
  604. data/ext/cosmos/ext/platform/platform.c +101 -0
  605. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -0
  606. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -0
  607. data/ext/cosmos/ext/string/extconf.rb +13 -0
  608. data/ext/cosmos/ext/string/string.c +49 -0
  609. data/ext/cosmos/ext/structure/structure.c +1433 -0
  610. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -0
  611. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -0
  612. data/ext/cosmos/ext/telemetry/extconf.rb +13 -0
  613. data/ext/cosmos/ext/telemetry/telemetry.c +307 -0
  614. data/ext/mkrf_conf.rb +40 -0
  615. data/install/Gemfile +10 -0
  616. data/install/Launcher +16 -0
  617. data/install/Launcher.bat +9 -0
  618. data/install/Rakefile +77 -0
  619. data/install/config/data/README.txt +1 -0
  620. data/install/config/data/crc.txt +160 -0
  621. data/install/config/system/system.txt +39 -0
  622. data/install/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +9 -0
  623. data/install/config/targets/SYSTEM/target.txt +12 -0
  624. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -0
  625. data/install/config/tools/data_viewer/data_viewer.txt +4 -0
  626. data/install/config/tools/handbook_creator/default_toc.xsl +59 -0
  627. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -0
  628. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  629. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  630. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  631. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -0
  632. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  633. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  634. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  635. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  636. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  637. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  638. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  639. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  640. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -0
  641. data/install/config/tools/launcher/launcher.txt +40 -0
  642. data/install/config/tools/limits_monitor/README.txt +1 -0
  643. data/install/config/tools/opengl_builder/README.txt +1 -0
  644. data/install/config/tools/script_runner/script_runner.txt +3 -0
  645. data/install/config/tools/table_manager/README.txt +1 -0
  646. data/install/config/tools/test_runner/test_runner.txt +8 -0
  647. data/install/config/tools/tlm_extractor/README.txt +1 -0
  648. data/install/config/tools/tlm_grapher/README.txt +1 -0
  649. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -0
  650. data/install/lib/user_version.rb +3 -0
  651. data/install/procedures/README.txt +1 -0
  652. data/install/tools/CmdExtractor +16 -0
  653. data/install/tools/CmdExtractor.bat +9 -0
  654. data/install/tools/CmdSender +16 -0
  655. data/install/tools/CmdSender.bat +9 -0
  656. data/install/tools/CmdSequence +16 -0
  657. data/install/tools/CmdSequence.bat +9 -0
  658. data/install/tools/CmdTlmServer +16 -0
  659. data/install/tools/CmdTlmServer.bat +9 -0
  660. data/install/tools/ConfigEditor +16 -0
  661. data/install/tools/ConfigEditor.bat +9 -0
  662. data/install/tools/DataViewer +16 -0
  663. data/install/tools/DataViewer.bat +9 -0
  664. data/install/tools/HandbookCreator +16 -0
  665. data/install/tools/HandbookCreator.bat +9 -0
  666. data/install/tools/Launcher +16 -0
  667. data/install/tools/Launcher.bat +9 -0
  668. data/install/tools/LimitsMonitor +16 -0
  669. data/install/tools/LimitsMonitor.bat +9 -0
  670. data/install/tools/OpenGLBuilder +16 -0
  671. data/install/tools/OpenGLBuilder.bat +9 -0
  672. data/install/tools/PacketViewer +16 -0
  673. data/install/tools/PacketViewer.bat +9 -0
  674. data/install/tools/Replay +16 -0
  675. data/install/tools/Replay.bat +9 -0
  676. data/install/tools/ScriptRunner +16 -0
  677. data/install/tools/ScriptRunner.bat +9 -0
  678. data/install/tools/TableManager +16 -0
  679. data/install/tools/TableManager.bat +9 -0
  680. data/install/tools/TestRunner +16 -0
  681. data/install/tools/TestRunner.bat +9 -0
  682. data/install/tools/TlmExtractor +16 -0
  683. data/install/tools/TlmExtractor.bat +9 -0
  684. data/install/tools/TlmGrapher +16 -0
  685. data/install/tools/TlmGrapher.bat +9 -0
  686. data/install/tools/TlmViewer +16 -0
  687. data/install/tools/TlmViewer.bat +9 -0
  688. data/install/tools/ToolLaunch.bat +72 -0
  689. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  690. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -0
  691. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -0
  692. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  693. data/install/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  694. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  695. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -0
  696. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -0
  697. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -0
  698. data/install/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  699. data/install/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  700. data/install/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  701. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  702. data/install/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  703. data/install/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  704. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  705. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -0
  706. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -0
  707. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -0
  708. data/install/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  709. data/install/tools/mac/ConfigEditor.app/Contents/Info.plist +38 -0
  710. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/ConfigEditor.rb +16 -0
  711. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/main.sh +10 -0
  712. data/install/tools/mac/ConfigEditor.app/Contents/MacOS/tool_launch.rb +38 -0
  713. data/install/tools/mac/ConfigEditor.app/Contents/Resources/appIcon.icns +0 -0
  714. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  715. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -0
  716. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -0
  717. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  718. data/install/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  719. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  720. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -0
  721. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -0
  722. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -0
  723. data/install/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  724. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  725. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -0
  726. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -0
  727. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -0
  728. data/install/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  729. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  730. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -0
  731. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -0
  732. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -0
  733. data/install/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  734. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  735. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -0
  736. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -0
  737. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -0
  738. data/install/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  739. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  740. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -0
  741. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -0
  742. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  743. data/install/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  744. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -0
  745. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -0
  746. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -0
  747. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -0
  748. data/install/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  749. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  750. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -0
  751. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -0
  752. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  753. data/install/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  754. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  755. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -0
  756. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -0
  757. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -0
  758. data/install/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  759. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  760. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -0
  761. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -0
  762. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -0
  763. data/install/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  764. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  765. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -0
  766. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -0
  767. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -0
  768. data/install/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  769. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  770. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -0
  771. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -0
  772. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -0
  773. data/install/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  774. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  775. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -0
  776. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -0
  777. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -0
  778. data/install/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  779. data/install/tools/tool_launch.rb +38 -0
  780. data/lib/cosmos.rb +63 -0
  781. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -0
  782. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -0
  783. data/lib/cosmos/config/config_parser.rb +508 -0
  784. data/lib/cosmos/config/meta_config_parser.rb +57 -0
  785. data/lib/cosmos/conversions.rb +13 -0
  786. data/lib/cosmos/conversions/conversion.rb +52 -0
  787. data/lib/cosmos/conversions/generic_conversion.rb +67 -0
  788. data/lib/cosmos/conversions/new_packet_log_conversion.rb +52 -0
  789. data/lib/cosmos/conversions/polynomial_conversion.rb +79 -0
  790. data/lib/cosmos/conversions/processor_conversion.rb +56 -0
  791. data/lib/cosmos/conversions/received_count_conversion.rb +33 -0
  792. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -0
  793. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -0
  794. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +139 -0
  795. data/lib/cosmos/conversions/unix_time_conversion.rb +57 -0
  796. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -0
  797. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -0
  798. data/lib/cosmos/core_ext.rb +18 -0
  799. data/lib/cosmos/core_ext/array.rb +397 -0
  800. data/lib/cosmos/core_ext/class.rb +53 -0
  801. data/lib/cosmos/core_ext/cosmos_io.rb +45 -0
  802. data/lib/cosmos/core_ext/exception.rb +52 -0
  803. data/lib/cosmos/core_ext/file.rb +76 -0
  804. data/lib/cosmos/core_ext/hash.rb +28 -0
  805. data/lib/cosmos/core_ext/io.rb +93 -0
  806. data/lib/cosmos/core_ext/kernel.rb +33 -0
  807. data/lib/cosmos/core_ext/math.rb +119 -0
  808. data/lib/cosmos/core_ext/matrix.rb +149 -0
  809. data/lib/cosmos/core_ext/objectspace.rb +27 -0
  810. data/lib/cosmos/core_ext/range.rb +18 -0
  811. data/lib/cosmos/core_ext/socket.rb +32 -0
  812. data/lib/cosmos/core_ext/string.rb +351 -0
  813. data/lib/cosmos/core_ext/stringio.rb +24 -0
  814. data/lib/cosmos/core_ext/time.rb +481 -0
  815. data/lib/cosmos/ext/.keep +0 -0
  816. data/lib/cosmos/gui/choosers/combobox_chooser.rb +141 -0
  817. data/lib/cosmos/gui/choosers/file_chooser.rb +85 -0
  818. data/lib/cosmos/gui/choosers/float_chooser.rb +67 -0
  819. data/lib/cosmos/gui/choosers/integer_chooser.rb +69 -0
  820. data/lib/cosmos/gui/choosers/string_chooser.rb +35 -0
  821. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -0
  822. data/lib/cosmos/gui/choosers/value_chooser.rb +67 -0
  823. data/lib/cosmos/gui/dialogs/about_dialog.rb +166 -0
  824. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +140 -0
  825. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +51 -0
  826. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +163 -0
  827. data/lib/cosmos/gui/dialogs/details_dialog.rb +190 -0
  828. data/lib/cosmos/gui/dialogs/exception_dialog.rb +106 -0
  829. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +60 -0
  830. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +272 -0
  831. data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +143 -0
  832. data/lib/cosmos/gui/dialogs/legal_dialog.rb +183 -0
  833. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +97 -0
  834. data/lib/cosmos/gui/dialogs/progress_dialog.rb +313 -0
  835. data/lib/cosmos/gui/dialogs/pry_dialog.rb +169 -0
  836. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +51 -0
  837. data/lib/cosmos/gui/dialogs/select_dialog.rb +59 -0
  838. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +159 -0
  839. data/lib/cosmos/gui/dialogs/splash.rb +145 -0
  840. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +201 -0
  841. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +79 -0
  842. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +108 -0
  843. data/lib/cosmos/gui/line_graph/line_graph.rb +482 -0
  844. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +36 -0
  845. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +521 -0
  846. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +112 -0
  847. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +452 -0
  848. data/lib/cosmos/gui/line_graph/line_graph_script.rb +81 -0
  849. data/lib/cosmos/gui/line_graph/lines.rb +304 -0
  850. data/lib/cosmos/gui/line_graph/overview_graph.rb +474 -0
  851. data/lib/cosmos/gui/opengl/earth_model.rb +25 -0
  852. data/lib/cosmos/gui/opengl/gl_bounds.rb +55 -0
  853. data/lib/cosmos/gui/opengl/gl_light.rb +38 -0
  854. data/lib/cosmos/gui/opengl/gl_material.rb +28 -0
  855. data/lib/cosmos/gui/opengl/gl_scene.rb +78 -0
  856. data/lib/cosmos/gui/opengl/gl_shape.rb +150 -0
  857. data/lib/cosmos/gui/opengl/gl_viewer.rb +712 -0
  858. data/lib/cosmos/gui/opengl/gl_viewport.rb +34 -0
  859. data/lib/cosmos/gui/opengl/moon_model.rb +25 -0
  860. data/lib/cosmos/gui/opengl/opengl.rb +8 -0
  861. data/lib/cosmos/gui/opengl/stl_reader.rb +210 -0
  862. data/lib/cosmos/gui/opengl/stl_shape.rb +127 -0
  863. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -0
  864. data/lib/cosmos/gui/qt.rb +841 -0
  865. data/lib/cosmos/gui/qt_tool.rb +489 -0
  866. data/lib/cosmos/gui/text/completion.rb +402 -0
  867. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -0
  868. data/lib/cosmos/gui/text/completion_text_edit.rb +194 -0
  869. data/lib/cosmos/gui/text/ruby_editor.rb +463 -0
  870. data/lib/cosmos/gui/utilities/analyze_log.rb +153 -0
  871. data/lib/cosmos/gui/utilities/screenshot.rb +33 -0
  872. data/lib/cosmos/gui/utilities/script_module_gui.rb +364 -0
  873. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +171 -0
  874. data/lib/cosmos/gui/widgets/packet_log_frame.rb +344 -0
  875. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -0
  876. data/lib/cosmos/interfaces.rb +21 -0
  877. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +134 -0
  878. data/lib/cosmos/interfaces/interface.rb +449 -0
  879. data/lib/cosmos/interfaces/linc_interface.rb +459 -0
  880. data/lib/cosmos/interfaces/protocols/burst_protocol.rb +173 -0
  881. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +141 -0
  882. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +114 -0
  883. data/lib/cosmos/interfaces/protocols/length_protocol.rb +147 -0
  884. data/lib/cosmos/interfaces/protocols/override_protocol.rb +52 -0
  885. data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +141 -0
  886. data/lib/cosmos/interfaces/protocols/protocol.rb +60 -0
  887. data/lib/cosmos/interfaces/protocols/template_protocol.rb +240 -0
  888. data/lib/cosmos/interfaces/protocols/terminated_protocol.rb +81 -0
  889. data/lib/cosmos/interfaces/serial_interface.rb +81 -0
  890. data/lib/cosmos/interfaces/simulated_target_interface.rb +140 -0
  891. data/lib/cosmos/interfaces/stream_interface.rb +64 -0
  892. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -0
  893. data/lib/cosmos/interfaces/tcpip_server_interface.rb +625 -0
  894. data/lib/cosmos/interfaces/udp_interface.rb +141 -0
  895. data/lib/cosmos/io/buffered_file.rb +101 -0
  896. data/lib/cosmos/io/cosmos_snmp.rb +50 -0
  897. data/lib/cosmos/io/io_multiplexer.rb +71 -0
  898. data/lib/cosmos/io/json_drb.rb +386 -0
  899. data/lib/cosmos/io/json_drb_object.rb +201 -0
  900. data/lib/cosmos/io/json_rpc.rb +365 -0
  901. data/lib/cosmos/io/posix_serial_driver.rb +147 -0
  902. data/lib/cosmos/io/raw_logger.rb +170 -0
  903. data/lib/cosmos/io/raw_logger_pair.rb +71 -0
  904. data/lib/cosmos/io/serial_driver.rb +94 -0
  905. data/lib/cosmos/io/stderr.rb +36 -0
  906. data/lib/cosmos/io/stdout.rb +36 -0
  907. data/lib/cosmos/io/udp_sockets.rb +152 -0
  908. data/lib/cosmos/io/win32_serial_driver.rb +165 -0
  909. data/lib/cosmos/packet_logs.rb +6 -0
  910. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -0
  911. data/lib/cosmos/packet_logs/packet_log_reader.rb +461 -0
  912. data/lib/cosmos/packet_logs/packet_log_writer.rb +341 -0
  913. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -0
  914. data/lib/cosmos/packets/binary_accessor.rb +1201 -0
  915. data/lib/cosmos/packets/commands.rb +318 -0
  916. data/lib/cosmos/packets/limits.rb +264 -0
  917. data/lib/cosmos/packets/limits_response.rb +42 -0
  918. data/lib/cosmos/packets/packet.rb +994 -0
  919. data/lib/cosmos/packets/packet_config.rb +1393 -0
  920. data/lib/cosmos/packets/packet_item.rb +585 -0
  921. data/lib/cosmos/packets/packet_item_limits.rb +140 -0
  922. data/lib/cosmos/packets/parsers/format_string_parser.rb +59 -0
  923. data/lib/cosmos/packets/parsers/limits_parser.rb +147 -0
  924. data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -0
  925. data/lib/cosmos/packets/parsers/macro_parser.rb +118 -0
  926. data/lib/cosmos/packets/parsers/packet_item_parser.rb +234 -0
  927. data/lib/cosmos/packets/parsers/packet_parser.rb +131 -0
  928. data/lib/cosmos/packets/parsers/processor_parser.rb +63 -0
  929. data/lib/cosmos/packets/parsers/state_parser.rb +119 -0
  930. data/lib/cosmos/packets/structure.rb +508 -0
  931. data/lib/cosmos/packets/structure_item.rb +292 -0
  932. data/lib/cosmos/packets/telemetry.rb +444 -0
  933. data/lib/cosmos/processors.rb +6 -0
  934. data/lib/cosmos/processors/new_packet_log_processor.rb +39 -0
  935. data/lib/cosmos/processors/processor.rb +76 -0
  936. data/lib/cosmos/processors/statistics_processor.rb +70 -0
  937. data/lib/cosmos/processors/watermark_processor.rb +49 -0
  938. data/lib/cosmos/script.rb +9 -0
  939. data/lib/cosmos/script/api_shared.rb +972 -0
  940. data/lib/cosmos/script/cmd_tlm_server.rb +138 -0
  941. data/lib/cosmos/script/commands.rb +189 -0
  942. data/lib/cosmos/script/extract.rb +139 -0
  943. data/lib/cosmos/script/limits.rb +116 -0
  944. data/lib/cosmos/script/script.rb +76 -0
  945. data/lib/cosmos/script/scripting.rb +144 -0
  946. data/lib/cosmos/script/telemetry.rb +216 -0
  947. data/lib/cosmos/script/tools.rb +97 -0
  948. data/lib/cosmos/streams/serial_stream.rb +150 -0
  949. data/lib/cosmos/streams/stream.rb +54 -0
  950. data/lib/cosmos/streams/tcpip_client_stream.rb +113 -0
  951. data/lib/cosmos/streams/tcpip_socket_stream.rb +186 -0
  952. data/lib/cosmos/system.rb +4 -0
  953. data/lib/cosmos/system/system.rb +778 -0
  954. data/lib/cosmos/system/target.rb +228 -0
  955. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +268 -0
  956. data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +78 -0
  957. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +773 -0
  958. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -0
  959. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +652 -0
  960. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +510 -0
  961. data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +194 -0
  962. data/lib/cosmos/tools/cmd_tlm_server/api.rb +1337 -0
  963. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +54 -0
  964. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +77 -0
  965. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +537 -0
  966. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +274 -0
  967. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +480 -0
  968. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +121 -0
  969. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -0
  970. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +213 -0
  971. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -0
  972. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +151 -0
  973. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +255 -0
  974. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +85 -0
  975. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +274 -0
  976. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +153 -0
  977. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +122 -0
  978. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +161 -0
  979. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -0
  980. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +134 -0
  981. data/lib/cosmos/tools/config_editor/config_editor.rb +728 -0
  982. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +690 -0
  983. data/lib/cosmos/tools/data_viewer/data_viewer.rb +633 -0
  984. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +120 -0
  985. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -0
  986. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -0
  987. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -0
  988. data/lib/cosmos/tools/launcher/launcher.rb +194 -0
  989. data/lib/cosmos/tools/launcher/launcher_config.rb +256 -0
  990. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -0
  991. data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -0
  992. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +972 -0
  993. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -0
  994. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -0
  995. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +608 -0
  996. data/lib/cosmos/tools/replay/replay.rb +517 -0
  997. data/lib/cosmos/tools/replay/replay_server.rb +91 -0
  998. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -0
  999. data/lib/cosmos/tools/script_runner/script_runner.rb +979 -0
  1000. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -0
  1001. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1838 -0
  1002. data/lib/cosmos/tools/table_manager/table.rb +61 -0
  1003. data/lib/cosmos/tools/table_manager/table_config.rb +189 -0
  1004. data/lib/cosmos/tools/table_manager/table_item.rb +58 -0
  1005. data/lib/cosmos/tools/table_manager/table_item_parser.rb +46 -0
  1006. data/lib/cosmos/tools/table_manager/table_manager.rb +1152 -0
  1007. data/lib/cosmos/tools/table_manager/table_manager_core.rb +321 -0
  1008. data/lib/cosmos/tools/table_manager/table_parser.rb +75 -0
  1009. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -0
  1010. data/lib/cosmos/tools/test_runner/test.rb +539 -0
  1011. data/lib/cosmos/tools/test_runner/test_runner.rb +1271 -0
  1012. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -0
  1013. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -0
  1014. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1152 -0
  1015. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +441 -0
  1016. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -0
  1017. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +92 -0
  1018. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -0
  1019. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -0
  1020. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -0
  1021. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +222 -0
  1022. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -0
  1023. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -0
  1024. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -0
  1025. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -0
  1026. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +422 -0
  1027. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -0
  1028. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -0
  1029. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +325 -0
  1030. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +191 -0
  1031. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -0
  1032. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -0
  1033. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -0
  1034. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +173 -0
  1035. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -0
  1036. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -0
  1037. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +209 -0
  1038. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -0
  1039. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -0
  1040. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -0
  1041. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -0
  1042. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +451 -0
  1043. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -0
  1044. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -0
  1045. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -0
  1046. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -0
  1047. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -0
  1048. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -0
  1049. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +103 -0
  1050. data/lib/cosmos/tools/tlm_viewer/screen.rb +502 -0
  1051. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +571 -0
  1052. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +293 -0
  1053. data/lib/cosmos/tools/tlm_viewer/widgets.rb +61 -0
  1054. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -0
  1055. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -0
  1056. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -0
  1057. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -0
  1058. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +33 -0
  1059. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +70 -0
  1060. data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +77 -0
  1061. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +43 -0
  1062. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +59 -0
  1063. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +44 -0
  1064. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +54 -0
  1065. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +53 -0
  1066. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +63 -0
  1067. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +123 -0
  1068. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +38 -0
  1069. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -0
  1070. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +31 -0
  1071. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -0
  1072. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -0
  1073. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -0
  1074. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -0
  1075. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -0
  1076. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -0
  1077. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -0
  1078. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -0
  1079. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +57 -0
  1080. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -0
  1081. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -0
  1082. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +38 -0
  1083. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -0
  1084. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +39 -0
  1085. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -0
  1086. data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +113 -0
  1087. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +116 -0
  1088. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +102 -0
  1089. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +116 -0
  1090. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +63 -0
  1091. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +58 -0
  1092. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -0
  1093. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -0
  1094. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +38 -0
  1095. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +65 -0
  1096. data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +65 -0
  1097. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -0
  1098. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -0
  1099. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -0
  1100. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +55 -0
  1101. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -0
  1102. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -0
  1103. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -0
  1104. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -0
  1105. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +91 -0
  1106. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -0
  1107. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -0
  1108. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -0
  1109. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -0
  1110. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -0
  1111. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +37 -0
  1112. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -0
  1113. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +37 -0
  1114. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +36 -0
  1115. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +38 -0
  1116. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -0
  1117. data/lib/cosmos/top_level.rb +790 -0
  1118. data/lib/cosmos/utilities.rb +11 -0
  1119. data/lib/cosmos/utilities/crc.rb +268 -0
  1120. data/lib/cosmos/utilities/csv.rb +137 -0
  1121. data/lib/cosmos/utilities/logger.rb +137 -0
  1122. data/lib/cosmos/utilities/low_fragmentation_array.rb +19 -0
  1123. data/lib/cosmos/utilities/message_log.rb +79 -0
  1124. data/lib/cosmos/utilities/quaternion.rb +258 -0
  1125. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -0
  1126. data/lib/cosmos/utilities/simulated_target.rb +100 -0
  1127. data/lib/cosmos/utilities/sleeper.rb +44 -0
  1128. data/lib/cosmos/version.rb +12 -0
  1129. data/lib/cosmos/win32/excel.rb +66 -0
  1130. data/lib/cosmos/win32/win32.rb +387 -0
  1131. data/lib/cosmos/win32/win32_main.rb +325 -0
  1132. data/roodi.yml +24 -0
  1133. data/run_gui_tests.bat +44 -0
  1134. data/spec/ccsds/ccsds_packet_spec.rb +67 -0
  1135. data/spec/ccsds/ccsds_parser_spec.rb +148 -0
  1136. data/spec/config/config_parser_spec.rb +353 -0
  1137. data/spec/conversions/conversion_spec.rb +31 -0
  1138. data/spec/conversions/generic_conversion_spec.rb +45 -0
  1139. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -0
  1140. data/spec/conversions/polynomial_conversion_spec.rb +40 -0
  1141. data/spec/conversions/processor_conversion_spec.rb +45 -0
  1142. data/spec/conversions/received_count_conversion_spec.rb +43 -0
  1143. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -0
  1144. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -0
  1145. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -0
  1146. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -0
  1147. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -0
  1148. data/spec/core_ext/array_spec.rb +247 -0
  1149. data/spec/core_ext/class_spec.rb +36 -0
  1150. data/spec/core_ext/cosmos_io_spec.rb +77 -0
  1151. data/spec/core_ext/exception_spec.rb +91 -0
  1152. data/spec/core_ext/file_spec.rb +72 -0
  1153. data/spec/core_ext/hash_spec.rb +24 -0
  1154. data/spec/core_ext/io_spec.rb +46 -0
  1155. data/spec/core_ext/kernel_spec.rb +54 -0
  1156. data/spec/core_ext/math_spec.rb +116 -0
  1157. data/spec/core_ext/matrix_spec.rb +127 -0
  1158. data/spec/core_ext/objectspace_spec.rb +32 -0
  1159. data/spec/core_ext/range_spec.rb +21 -0
  1160. data/spec/core_ext/socket_spec.rb +32 -0
  1161. data/spec/core_ext/string_spec.rb +239 -0
  1162. data/spec/core_ext/stringio_spec.rb +21 -0
  1163. data/spec/core_ext/time_spec.rb +220 -0
  1164. data/spec/gui/line_graph/line_clip_spec.rb +324 -0
  1165. data/spec/gui/qt_spec.rb +104 -0
  1166. data/spec/install/config/system/system.txt +27 -0
  1167. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -0
  1168. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -0
  1169. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -0
  1170. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -0
  1171. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -0
  1172. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -0
  1173. data/spec/install/config/targets/INST/target.txt +10 -0
  1174. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -0
  1175. data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_tlm.txt +10 -0
  1176. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_cmds.txt +41 -0
  1177. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  1178. data/spec/install/config/targets/SYSTEM/cmd_tlm_server.txt +6 -0
  1179. data/spec/install/config/targets/SYSTEM/screens/status.txt +12 -0
  1180. data/spec/install/config/targets/SYSTEM/target.txt +12 -0
  1181. data/spec/install/lib/README.txt +1 -0
  1182. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +146 -0
  1183. data/spec/interfaces/interface_spec.rb +514 -0
  1184. data/spec/interfaces/linc_interface_spec.rb +248 -0
  1185. data/spec/interfaces/protocols/burst_protocol_spec.rb +300 -0
  1186. data/spec/interfaces/protocols/crc_protocol_spec.rb +709 -0
  1187. data/spec/interfaces/protocols/fixed_protocol_spec.rb +119 -0
  1188. data/spec/interfaces/protocols/length_protocol_spec.rb +499 -0
  1189. data/spec/interfaces/protocols/override_protocol_spec.rb +158 -0
  1190. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +149 -0
  1191. data/spec/interfaces/protocols/template_protocol_spec.rb +322 -0
  1192. data/spec/interfaces/protocols/terminated_protocol_spec.rb +174 -0
  1193. data/spec/interfaces/serial_interface_spec.rb +57 -0
  1194. data/spec/interfaces/simulated_target_interface_spec.rb +128 -0
  1195. data/spec/interfaces/tcpip_client_interface_spec.rb +60 -0
  1196. data/spec/interfaces/tcpip_server_interface_spec.rb +157 -0
  1197. data/spec/interfaces/udp_interface_spec.rb +246 -0
  1198. data/spec/io/buffered_file_spec.rb +113 -0
  1199. data/spec/io/io_multiplexer_spec.rb +102 -0
  1200. data/spec/io/json_drb_object_spec.rb +119 -0
  1201. data/spec/io/json_drb_spec.rb +297 -0
  1202. data/spec/io/json_rpc_spec.rb +264 -0
  1203. data/spec/io/raw_logger_pair_spec.rb +76 -0
  1204. data/spec/io/raw_logger_spec.rb +137 -0
  1205. data/spec/io/serial_driver_spec.rb +62 -0
  1206. data/spec/io/stderr_spec.rb +32 -0
  1207. data/spec/io/stdout_spec.rb +32 -0
  1208. data/spec/io/udp_sockets_spec.rb +99 -0
  1209. data/spec/io/win32_serial_driver_spec.rb +91 -0
  1210. data/spec/packet_logs/packet_log_reader_spec.rb +553 -0
  1211. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -0
  1212. data/spec/packet_logs/packet_log_writer_spec.rb +227 -0
  1213. data/spec/packets/binary_accessor_spec.rb +2326 -0
  1214. data/spec/packets/commands_spec.rb +379 -0
  1215. data/spec/packets/limits_response_spec.rb +25 -0
  1216. data/spec/packets/limits_spec.rb +344 -0
  1217. data/spec/packets/packet_config_spec.rb +960 -0
  1218. data/spec/packets/packet_item_limits_spec.rb +188 -0
  1219. data/spec/packets/packet_item_spec.rb +386 -0
  1220. data/spec/packets/packet_spec.rb +1456 -0
  1221. data/spec/packets/parsers/format_string_parser_spec.rb +133 -0
  1222. data/spec/packets/parsers/limits_parser_spec.rb +293 -0
  1223. data/spec/packets/parsers/limits_response_parser_spec.rb +149 -0
  1224. data/spec/packets/parsers/macro_parser_spec.rb +220 -0
  1225. data/spec/packets/parsers/packet_item_parser_spec.rb +366 -0
  1226. data/spec/packets/parsers/packet_parser_spec.rb +99 -0
  1227. data/spec/packets/parsers/processor_parser_spec.rb +114 -0
  1228. data/spec/packets/parsers/state_parser_spec.rb +189 -0
  1229. data/spec/packets/structure_item_spec.rb +213 -0
  1230. data/spec/packets/structure_spec.rb +565 -0
  1231. data/spec/packets/telemetry_spec.rb +578 -0
  1232. data/spec/processors/new_packet_log_processor_spec.rb +39 -0
  1233. data/spec/processors/processor_spec.rb +55 -0
  1234. data/spec/processors/statistics_processor_spec.rb +60 -0
  1235. data/spec/processors/watermark_processor_spec.rb +51 -0
  1236. data/spec/script/cmd_tlm_server_spec.rb +176 -0
  1237. data/spec/script/commands_disconnect_spec.rb +270 -0
  1238. data/spec/script/commands_spec.rb +303 -0
  1239. data/spec/script/extract_spec.rb +158 -0
  1240. data/spec/script/limits_spec.rb +153 -0
  1241. data/spec/script/script_spec.rb +90 -0
  1242. data/spec/script/scripting_spec.rb +745 -0
  1243. data/spec/script/telemetry_spec.rb +176 -0
  1244. data/spec/script/tools_spec.rb +134 -0
  1245. data/spec/spec_helper.rb +225 -0
  1246. data/spec/streams/serial_stream_spec.rb +122 -0
  1247. data/spec/streams/stream_spec.rb +30 -0
  1248. data/spec/streams/tcpip_client_stream_spec.rb +65 -0
  1249. data/spec/streams/tcpip_socket_stream_spec.rb +226 -0
  1250. data/spec/system/system_spec.rb +891 -0
  1251. data/spec/system/target_spec.rb +304 -0
  1252. data/spec/tools/cmd_tlm_server/api_spec.rb +1123 -0
  1253. data/spec/tools/cmd_tlm_server/background_task_spec.rb +44 -0
  1254. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +227 -0
  1255. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +610 -0
  1256. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +431 -0
  1257. data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -0
  1258. data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -0
  1259. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +401 -0
  1260. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -0
  1261. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +145 -0
  1262. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -0
  1263. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +191 -0
  1264. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -0
  1265. data/spec/tools/launcher/launcher_config_spec.rb +474 -0
  1266. data/spec/tools/table_manager/table_config_spec.rb +226 -0
  1267. data/spec/tools/table_manager/table_item_parser_spec.rb +61 -0
  1268. data/spec/tools/table_manager/table_item_spec.rb +57 -0
  1269. data/spec/tools/table_manager/table_parser_spec.rb +96 -0
  1270. data/spec/tools/table_manager/table_spec.rb +90 -0
  1271. data/spec/tools/table_manager/tablemanager_core_spec.rb +556 -0
  1272. data/spec/top_level/top_level_spec.rb +373 -0
  1273. data/spec/utilities/crc_spec.rb +45 -0
  1274. data/spec/utilities/csv_spec.rb +139 -0
  1275. data/spec/utilities/logger_spec.rb +102 -0
  1276. data/spec/utilities/message_log_spec.rb +89 -0
  1277. data/spec/utilities/quaternion_spec.rb +107 -0
  1278. data/spec/utilities/ruby_lex_utils_spec.rb +86 -0
  1279. data/tasks/gemfile_stats.rake +79 -0
  1280. data/tasks/manifest.rake +22 -0
  1281. data/tasks/spec.rake +23 -0
  1282. data/test/benchmarks/binary_accessor_benchmark.rb +14 -0
  1283. data/test/benchmarks/gsub_benchmark.rb +152 -0
  1284. data/test/benchmarks/is_a_benchmark.rb +34 -0
  1285. data/test/performance/PACKETS.bat +1 -0
  1286. data/test/performance/Rakefile +77 -0
  1287. data/test/performance/THREADS.bat +1 -0
  1288. data/test/performance/config/data/attitude.bin +0 -0
  1289. data/test/performance/config/data/crc.txt +196 -0
  1290. data/test/performance/config/data/diamond.STL +58 -0
  1291. data/test/performance/config/data/groundoff.gif +0 -0
  1292. data/test/performance/config/data/groundon.gif +0 -0
  1293. data/test/performance/config/data/hselectoff.gif +0 -0
  1294. data/test/performance/config/data/hselecton.gif +0 -0
  1295. data/test/performance/config/data/hswitchoff.gif +0 -0
  1296. data/test/performance/config/data/hswitchon.gif +0 -0
  1297. data/test/performance/config/data/meta_init.txt +4 -0
  1298. data/test/performance/config/data/position.bin +0 -0
  1299. data/test/performance/config/data/poweroff.gif +0 -0
  1300. data/test/performance/config/data/poweron.gif +0 -0
  1301. data/test/performance/config/data/satellite.gif +0 -0
  1302. data/test/performance/config/data/tada.wav +0 -0
  1303. data/test/performance/config/data/vswitchoff.gif +0 -0
  1304. data/test/performance/config/data/vswitchon.gif +0 -0
  1305. data/test/performance/config/system/system_packets.txt +38 -0
  1306. data/test/performance/config/system/system_threads.txt +58 -0
  1307. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -0
  1308. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -0
  1309. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -0
  1310. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -0
  1311. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -0
  1312. data/test/performance/config/targets/COSMOS/target.txt +11 -0
  1313. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -0
  1314. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -0
  1315. data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -0
  1316. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -0
  1317. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -0
  1318. data/test/performance/config/targets/PACKET/screens/status.txt +25 -0
  1319. data/test/performance/config/targets/PACKET/target.txt +28 -0
  1320. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -0
  1321. data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -0
  1322. data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -0
  1323. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -0
  1324. data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -0
  1325. data/test/performance/config/targets/THREAD/screens/status.txt +25 -0
  1326. data/test/performance/config/targets/THREAD/target.txt +7 -0
  1327. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -0
  1328. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -0
  1329. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -0
  1330. data/test/performance/config/tools/handbook_creator/default_toc.xsl +59 -0
  1331. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -0
  1332. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -0
  1333. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -0
  1334. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -0
  1335. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -0
  1336. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -0
  1337. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -0
  1338. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -0
  1339. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -0
  1340. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -0
  1341. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -0
  1342. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -0
  1343. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -0
  1344. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -0
  1345. data/test/performance/config/tools/launcher/launcher_packets.txt +34 -0
  1346. data/test/performance/config/tools/launcher/launcher_threads.txt +83 -0
  1347. data/test/performance/config/tools/limits_monitor/README.txt +1 -0
  1348. data/test/performance/config/tools/opengl_builder/README.txt +1 -0
  1349. data/test/performance/config/tools/script_runner/script_runner.txt +3 -0
  1350. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -0
  1351. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -0
  1352. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -0
  1353. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -0
  1354. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -0
  1355. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -0
  1356. data/test/performance/config/tools/test_runner/test_runner.txt +17 -0
  1357. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -0
  1358. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -0
  1359. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -0
  1360. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -0
  1361. data/test/performance/config/tools/tlm_grapher/README.txt +1 -0
  1362. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -0
  1363. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -0
  1364. data/test/performance/lib/packet_target.rb +126 -0
  1365. data/test/performance/lib/thread_target.rb +120 -0
  1366. data/test/performance/lib/user_version.rb +3 -0
  1367. data/test/performance/outputs/handbooks/README.txt +1 -0
  1368. data/test/performance/outputs/logs/README.txt +1 -0
  1369. data/test/performance/outputs/saved_config/README.txt +1 -0
  1370. data/test/performance/outputs/tables/README.txt +1 -0
  1371. data/test/performance/outputs/tmp/README.txt +1 -0
  1372. data/test/performance/procedures/checks.rb +11 -0
  1373. data/test/performance/procedures/clear_util.rb +7 -0
  1374. data/test/performance/procedures/collect.rb +18 -0
  1375. data/test/performance/procedures/collect_util.rb +14 -0
  1376. data/test/performance/procedures/cosmos_api_test.rb +293 -0
  1377. data/test/performance/procedures/disconnect.rb +29 -0
  1378. data/test/performance/procedures/example_test.rb +182 -0
  1379. data/test/performance/procedures/plot_test.rb +8 -0
  1380. data/test/performance/procedures/procedure.rb +3 -0
  1381. data/test/performance/procedures/run_example_test.rb +3 -0
  1382. data/test/performance/procedures/test.rb +51 -0
  1383. data/test/performance/tools/CmdExtractor +14 -0
  1384. data/test/performance/tools/CmdExtractor.bat +59 -0
  1385. data/test/performance/tools/CmdSender +14 -0
  1386. data/test/performance/tools/CmdSender.bat +59 -0
  1387. data/test/performance/tools/CmdTlmServer +16 -0
  1388. data/test/performance/tools/CmdTlmServer.bat +59 -0
  1389. data/test/performance/tools/CmdTlmServerMemProf +20 -0
  1390. data/test/performance/tools/CmdTlmServerMemProf.bat +59 -0
  1391. data/test/performance/tools/DataViewer +14 -0
  1392. data/test/performance/tools/DataViewer.bat +59 -0
  1393. data/test/performance/tools/HandbookCreator +14 -0
  1394. data/test/performance/tools/HandbookCreator.bat +61 -0
  1395. data/test/performance/tools/Launcher +14 -0
  1396. data/test/performance/tools/Launcher.bat +59 -0
  1397. data/test/performance/tools/LimitsMonitor +14 -0
  1398. data/test/performance/tools/LimitsMonitor.bat +59 -0
  1399. data/test/performance/tools/OpenGLBuilder +14 -0
  1400. data/test/performance/tools/OpenGLBuilder.bat +59 -0
  1401. data/test/performance/tools/PacketTarget +14 -0
  1402. data/test/performance/tools/PacketTarget.bat +59 -0
  1403. data/test/performance/tools/PacketViewer +14 -0
  1404. data/test/performance/tools/PacketViewer.bat +59 -0
  1405. data/test/performance/tools/Replay +14 -0
  1406. data/test/performance/tools/Replay.bat +59 -0
  1407. data/test/performance/tools/ScpiTarget +14 -0
  1408. data/test/performance/tools/ScpiTarget.bat +59 -0
  1409. data/test/performance/tools/ScriptRunner +14 -0
  1410. data/test/performance/tools/ScriptRunner.bat +59 -0
  1411. data/test/performance/tools/TableManager +14 -0
  1412. data/test/performance/tools/TableManager.bat +59 -0
  1413. data/test/performance/tools/TestRunner +14 -0
  1414. data/test/performance/tools/TestRunner.bat +59 -0
  1415. data/test/performance/tools/ThreadTarget +14 -0
  1416. data/test/performance/tools/ThreadTarget.bat +59 -0
  1417. data/test/performance/tools/TlmExtractor +14 -0
  1418. data/test/performance/tools/TlmExtractor.bat +59 -0
  1419. data/test/performance/tools/TlmGrapher +14 -0
  1420. data/test/performance/tools/TlmGrapher.bat +59 -0
  1421. data/test/performance/tools/TlmGrapherMemProf +19 -0
  1422. data/test/performance/tools/TlmGrapherMemProf.bat +59 -0
  1423. data/test/performance/tools/TlmViewer +14 -0
  1424. data/test/performance/tools/TlmViewer.bat +59 -0
  1425. data/test/performance/tools/TlmViewerMemProf +19 -0
  1426. data/test/performance/tools/TlmViewerMemProf.bat +59 -0
  1427. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -0
  1428. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -0
  1429. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -0
  1430. data/test/performance/tools/mac/CmdExtractor.app/Contents/Resources/appIcon.icns +0 -0
  1431. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -0
  1432. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -0
  1433. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -0
  1434. data/test/performance/tools/mac/CmdSender.app/Contents/Resources/appIcon.icns +0 -0
  1435. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -0
  1436. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -0
  1437. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -0
  1438. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Resources/appIcon.icns +0 -0
  1439. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -0
  1440. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -0
  1441. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -0
  1442. data/test/performance/tools/mac/DataViewer.app/Contents/Resources/appIcon.icns +0 -0
  1443. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -0
  1444. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -0
  1445. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -0
  1446. data/test/performance/tools/mac/HandbookCreator.app/Contents/Resources/appIcon.icns +0 -0
  1447. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -0
  1448. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -0
  1449. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -0
  1450. data/test/performance/tools/mac/Launcher.app/Contents/Resources/appIcon.icns +0 -0
  1451. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -0
  1452. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -0
  1453. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -0
  1454. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Resources/appIcon.icns +0 -0
  1455. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -0
  1456. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -0
  1457. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -0
  1458. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Resources/appIcon.icns +0 -0
  1459. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -0
  1460. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -0
  1461. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -0
  1462. data/test/performance/tools/mac/PacketViewer.app/Contents/Resources/appIcon.icns +0 -0
  1463. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -0
  1464. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -0
  1465. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -0
  1466. data/test/performance/tools/mac/Replay.app/Contents/Resources/appIcon.icns +0 -0
  1467. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -0
  1468. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -0
  1469. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -0
  1470. data/test/performance/tools/mac/ScriptRunner.app/Contents/Resources/appIcon.icns +0 -0
  1471. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -0
  1472. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -0
  1473. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -0
  1474. data/test/performance/tools/mac/TableManager.app/Contents/Resources/appIcon.icns +0 -0
  1475. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -0
  1476. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -0
  1477. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -0
  1478. data/test/performance/tools/mac/TestRunner.app/Contents/Resources/appIcon.icns +0 -0
  1479. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -0
  1480. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -0
  1481. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -0
  1482. data/test/performance/tools/mac/TlmExtractor.app/Contents/Resources/appIcon.icns +0 -0
  1483. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -0
  1484. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -0
  1485. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -0
  1486. data/test/performance/tools/mac/TlmGrapher.app/Contents/Resources/appIcon.icns +0 -0
  1487. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -0
  1488. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -0
  1489. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -0
  1490. data/test/performance/tools/mac/TlmViewer.app/Contents/Resources/appIcon.icns +0 -0
  1491. metadata +1964 -0
@@ -0,0 +1,61 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos'
12
+ require 'cosmos/tools/table_manager/table_item'
13
+
14
+ module Cosmos
15
+ # Table extends Packet by adding more attributes relative to
16
+ # displaying binary data in a gui.
17
+ class Table < Packet
18
+ # Define the target for tables as 'TABLE' since there is no target
19
+ TARGET = 'TABLE'
20
+ # @return [Symbol] Either :ONE_DIMENSIONAL or :TWO_DIMENSIONAL
21
+ attr_reader :type
22
+ # @return [String] File which contains the table definition
23
+ attr_reader :filename
24
+ # @return [Integer] Number of columns in the table
25
+ attr_accessor :num_columns
26
+
27
+ alias table_name packet_name
28
+
29
+ # Constructor for a TableDefinition
30
+ def initialize(name, endianness, type, description, filename)
31
+ super(TARGET, name, endianness, description, '', TableItem)
32
+ if type != :ONE_DIMENSIONAL && type != :TWO_DIMENSIONAL
33
+ raise ArgumentError, "Invalid type '#{type}' for table '#{name}'. Must be ONE_DIMENSIONAL or TWO_DIMENSIONAL"
34
+ end
35
+ @type = type
36
+ @filename = filename
37
+ @num_rows = 0
38
+ @num_columns = (@type == :ONE_DIMENSIONAL) ? 1 : 0
39
+ end
40
+
41
+ # @param num_rows [Integer] Set the number of rows in a TWO_DIMENSIONAL table
42
+ def num_rows=(num_rows)
43
+ case @type
44
+ when :ONE_DIMENSIONAL
45
+ raise "Rows are fixed in a ONE_DIMENSIONAL table"
46
+ when :TWO_DIMENSIONAL
47
+ @num_rows = num_rows
48
+ end
49
+ end
50
+
51
+ # @return [Integer] Number of rows in the table
52
+ def num_rows
53
+ case @type
54
+ when :ONE_DIMENSIONAL
55
+ @sorted_items.count {|item| !item.hidden }
56
+ when :TWO_DIMENSIONAL
57
+ @num_rows
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,189 @@
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/config/config_parser'
12
+ require 'cosmos/packets/packet_config'
13
+ require 'cosmos/tools/table_manager/table'
14
+ require 'cosmos/tools/table_manager/table_parser'
15
+ require 'cosmos/tools/table_manager/table_item_parser'
16
+
17
+ module Cosmos
18
+ # Processes the Table Manager configuration files which define tables. Since
19
+ # this class inherits from {PacketConfig} it only needs to implement Table
20
+ # Manager specific keywords. All tables are accessed through the table
21
+ # and tables methods.
22
+ class TableConfig < PacketConfig
23
+ # @return [String] Table configuration filename
24
+ attr_reader :filename
25
+
26
+ # Create the table configuration
27
+ def initialize
28
+ super
29
+ # Override commands with the Table::TARGET name to store tables
30
+ @commands[Table::TARGET] = {}
31
+ end
32
+
33
+ # @return [Array<Table>] All tables defined in the configuration file
34
+ def tables
35
+ @commands[Table::TARGET]
36
+ end
37
+
38
+ # @return [Array<String>] All the table names
39
+ def table_names
40
+ tables.keys
41
+ end
42
+
43
+ # @param table_name [String] Table name to return
44
+ # @return [Table]
45
+ def table(table_name)
46
+ tables[table_name.upcase]
47
+ end
48
+
49
+ # Processes a COSMOS table configuration file and uses the keywords to build up
50
+ # knowledge of the tables.
51
+ #
52
+ # @param filename [String] The name of the configuration file
53
+ def process_file(filename)
54
+ # Partial files are included into another file and thus aren't directly processed
55
+ return if File.basename(filename)[0] == '_' # Partials start with underscore
56
+ @filename = filename
57
+ @converted_type = nil
58
+ @converted_bit_size = nil
59
+ @proc_text = ''
60
+ @building_generic_conversion = false
61
+
62
+ parser = ConfigParser.new("http://cosmosrb.com/docs/tools/#table-manager-configuration-cosmos--39")
63
+ parser.parse_file(filename) do |keyword, params|
64
+ if @building_generic_conversion
65
+ case keyword
66
+ # Complete a generic conversion
67
+ when 'GENERIC_READ_CONVERSION_END', 'GENERIC_WRITE_CONVERSION_END'
68
+ parser.verify_num_parameters(0, 0, keyword)
69
+ @current_item.read_conversion =
70
+ GenericConversion.new(@proc_text,
71
+ @converted_type,
72
+ @converted_bit_size) if keyword.include? "READ"
73
+ @current_item.write_conversion =
74
+ GenericConversion.new(@proc_text,
75
+ @converted_type,
76
+ @converted_bit_size) if keyword.include? "WRITE"
77
+ @building_generic_conversion = false
78
+ # Add the current config.line to the conversion being built
79
+ else
80
+ @proc_text << parser.line << "\n"
81
+ end # case keyword
82
+
83
+ else # not building generic conversion
84
+ case keyword
85
+ when 'TABLEFILE'
86
+ usage = "#{keyword} <File name>"
87
+ parser.verify_num_parameters(1, 1, usage)
88
+ filename = File.join(File.dirname(filename), params[0])
89
+ raise parser.error("Table file #{filename} not found", usage) unless File.exist?(filename)
90
+ process_file(filename)
91
+
92
+ when 'TABLE'
93
+ finish_packet()
94
+ @current_packet = TableParser.parse_table(parser, @commands, @warnings)
95
+ @current_cmd_or_tlm = COMMAND
96
+
97
+ # Select an existing table for editing
98
+ when 'SELECT_TABLE'
99
+ usage = "#{keyword} <TABLE NAME>"
100
+ finish_packet()
101
+ parser.verify_num_parameters(1, 1, usage)
102
+ table_name = params[0].upcase
103
+ @current_packet = table(table_name)
104
+ raise parser.error("Table #{table_name} not found", usage) unless @current_packet
105
+
106
+ #######################################################################
107
+ # All the following keywords must have a current packet defined
108
+ #######################################################################
109
+ when 'SELECT_PARAMETER', 'PARAMETER', 'ID_PARAMETER', 'ARRAY_PARAMETER',
110
+ 'APPEND_PARAMETER', 'APPEND_ID_PARAMETER', 'APPEND_ARRAY_PARAMETER',
111
+ 'ALLOW_SHORT', 'HAZARDOUS', 'PROCESSOR', 'META', 'DISABLE_MESSAGES', 'DISABLED'
112
+ raise parser.error("No current packet for #{keyword}") unless @current_packet
113
+ process_current_packet(parser, keyword, params)
114
+
115
+ #######################################################################
116
+ # All the following keywords must have a current item defined
117
+ #######################################################################
118
+ when 'STATE', 'READ_CONVERSION', 'WRITE_CONVERSION', 'POLY_READ_CONVERSION',
119
+ 'POLY_WRITE_CONVERSION', 'SEG_POLY_READ_CONVERSION', 'SEG_POLY_WRITE_CONVERSION',
120
+ 'GENERIC_READ_CONVERSION_START', 'GENERIC_WRITE_CONVERSION_START', 'REQUIRED',
121
+ 'LIMITS', 'LIMITS_RESPONSE', 'UNITS', 'FORMAT_STRING', 'DESCRIPTION', 'HIDDEN',
122
+ 'MINIMUM_VALUE', 'MAXIMUM_VALUE', 'DEFAULT_VALUE', 'OVERFLOW', 'UNEDITABLE'
123
+ raise parser.error("No current item for #{keyword}") unless @current_item
124
+ process_current_item(parser, keyword, params)
125
+
126
+ else
127
+ # blank config.lines will have a nil keyword and should not raise an exception
128
+ raise parser.error("Unknown keyword '#{keyword}'") if keyword
129
+ end # case keyword
130
+ end
131
+ end
132
+
133
+ # Complete the last defined packet
134
+ finish_packet()
135
+ end
136
+
137
+ # (see PacketConfig#process_current_packet)
138
+ def process_current_packet(parser, keyword, params)
139
+ super(parser, keyword, params)
140
+ rescue => err
141
+ if err.message.include?("not found")
142
+ raise parser.error("#{params[0]} not found in table #{@current_packet.table_name}", "SELECT_PARAMETER <PARAMETER NAME>")
143
+ else
144
+ raise err
145
+ end
146
+ end
147
+
148
+ # Overridden method to handle the unique table item parameters: UNEDITABLE
149
+ # and HIDDEN.
150
+ # (see PacketConfig#process_current_item)
151
+ def process_current_item(parser, keyword, params)
152
+ super(parser, keyword, params)
153
+ case keyword
154
+ when 'UNEDITABLE'
155
+ usage = "#{keyword}"
156
+ parser.verify_num_parameters(0, 0, usage)
157
+ @current_item.editable = false
158
+ when 'HIDDEN'
159
+ usage = "#{keyword}"
160
+ parser.verify_num_parameters(0, 0, usage)
161
+ @current_item.hidden = true
162
+ end
163
+ end
164
+
165
+ # (see PacketConfig#start_item)
166
+ def start_item(parser)
167
+ finish_item()
168
+ @current_item = TableItemParser.parse(parser, @current_packet)
169
+ end
170
+
171
+ # If the table is TWO_DIMENSIONAL all currently defined items are
172
+ # duplicated until the specified number of rows are created.
173
+ def finish_packet
174
+ if @current_packet
175
+ if @current_packet.type == :TWO_DIMENSIONAL
176
+ items = @current_packet.sorted_items.clone
177
+ (@current_packet.num_rows - 1).times do |row|
178
+ items.each do |item|
179
+ new_item = item.clone
180
+ new_item.name = "#{new_item.name[0...-1]}#{row + 1}"
181
+ @current_packet.append(new_item)
182
+ end
183
+ end
184
+ end
185
+ end
186
+ super()
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,58 @@
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
+
13
+ module Cosmos
14
+ # Implements the attributes that are unique to a TableItem such as editable
15
+ # and hidden. All other functionality is inherited from {PacketItem}.
16
+ class TableItem < PacketItem
17
+ # @return [Boolean] Whether this item is editable
18
+ attr_reader :editable
19
+ # @return [Boolean] Whether this item is hidden (not displayed)
20
+ attr_reader :hidden
21
+
22
+ # (see PacketItem#initialize)
23
+ def initialize(name, bit_offset, bit_size, data_type, endianness, array_size = nil, overflow = :ERROR)
24
+ super(name, bit_offset, bit_size, data_type, endianness, array_size, overflow)
25
+ @display_type = nil
26
+ @editable = true
27
+ @hidden = false
28
+ end
29
+
30
+ # @param editable [Boolean] Whether this item can be edited
31
+ def editable=(editable)
32
+ raise ArgumentError, "#{@name}: editable must be a boolean but is a #{editable.class}" unless !!editable == editable
33
+ @editable = editable
34
+ end
35
+
36
+ # @param hidden [Boolean] Whether this item should be hidden
37
+ def hidden=(hidden)
38
+ raise ArgumentError, "#{@name}: hidden must be a boolean but is a #{hidden.class}" unless !!hidden == hidden
39
+ @hidden = hidden
40
+ end
41
+
42
+ # Make a light weight clone of this item
43
+ def clone
44
+ item = super()
45
+ item.editable = self.editable
46
+ item
47
+ end
48
+ alias dup clone
49
+
50
+ # Create a hash of this item's attributes
51
+ def to_hash
52
+ hash = super()
53
+ hash['editable'] = self.editable
54
+ hash['hidden'] = self.hidden
55
+ hash
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,46 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos/packets/packet_config'
12
+ require 'cosmos/packets/packet_item'
13
+
14
+ module Cosmos
15
+ class TableItemParser < PacketItemParser
16
+ # @param parser [ConfigParser] Configuration parser
17
+ # @param table [Table] Table all parsed items should be added to
18
+ def self.parse(parser, table)
19
+ parser = TableItemParser.new(parser)
20
+ parser.verify_parameters(PacketConfig::COMMAND)
21
+ parser.create_table_item(table)
22
+ end
23
+
24
+ # @param table [Table] Table created items are added to
25
+ def create_table_item(table)
26
+ name = @parser.parameters[0]
27
+ if table.type == :TWO_DIMENSIONAL
28
+ name = "#{name}0"
29
+ table.num_columns += 1
30
+ end
31
+ item = TableItem.new(name, get_bit_offset(), get_bit_size(), get_data_type(),
32
+ get_endianness(table), get_array_size(), :ERROR) # overflow
33
+ item.range = get_range()
34
+ item.default = get_default()
35
+ item.description = get_description()
36
+ if append?
37
+ item = table.append(item)
38
+ else
39
+ item = table.define(item)
40
+ end
41
+ item
42
+ rescue => err
43
+ raise @parser.error(err, @usage)
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,1152 @@
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
+ # This class applies to all items in the table but its only purpose is to
37
+ # determine if table cells should be rendered as comboboxes. Any table items
38
+ # with states are rendered as comboboxes.
39
+ class ComboBoxItemDelegate < Qt::StyledItemDelegate
40
+ # Create the combobox widget to display the values
41
+ # @param parent [Qt::Widget] Parent to created widget
42
+ # @param option [Qt::StyleOptionViewItem] Style options (not used)
43
+ # @param index [Qt::ModelIndex] Indicates which table item is active
44
+ def createEditor(parent, option, index)
45
+ table = TableManager.instance.core.config.table(TableManager.instance.current_table_name)
46
+ gui_table = TableManager.instance.tabbook.tab(TableManager.instance.current_table_name)
47
+ if table.type == :TWO_DIMENSIONAL
48
+ item_name = gui_table.horizontalHeaderItem(index.column).text + index.row.to_s
49
+ item = table.get_item(item_name)
50
+ else
51
+ item_name = gui_table.verticalHeaderItem(index.row).text
52
+ item = table.get_item(item_name)
53
+ end
54
+ if item.states && item.editable
55
+ combo = Qt::ComboBox.new(parent)
56
+ combo.addItems(item.states.keys.sort)
57
+ combo.setCurrentText(table.read(item.name).to_s)
58
+ connect(combo, SIGNAL('activated(int)')) do
59
+ emit commitData(combo)
60
+ gui_table.closeEditor(combo, 0)
61
+ end
62
+ return combo
63
+ else
64
+ return super(parent, option, index)
65
+ end
66
+ end
67
+
68
+ # Gets the current item from the combobox if it exists and writes it back
69
+ # to the model.
70
+ # @param editor [Qt::Widget] Editor widget
71
+ # @param model [Qt::AbstractItemModel] Model to write the gui data to
72
+ # @param index [Qt::ModelIndex] Where in the model to update the data
73
+ def setModelData(editor, model, index)
74
+ if Qt::ComboBox === editor
75
+ model.setData(index, Qt::Variant.new(editor.currentText), Qt::EditRole)
76
+ else
77
+ super(editor, model, index)
78
+ end
79
+ end
80
+
81
+ # Sets the current item in the combobox based on the model data
82
+ # @param editor [Qt::Widget] Editor widget
83
+ # @param index [Qt::ModelIndex] Where in the model to grab the data
84
+ def setEditorData(editor, index)
85
+ if Qt::ComboBox === editor
86
+ v = index.data(Qt::EditRole)
87
+ combo_index = editor.findText(v.toString)
88
+ if combo_index >= 0
89
+ editor.setCurrentIndex(combo_index)
90
+ else
91
+ editor.setCurrentIndex(0)
92
+ end
93
+ else
94
+ super(editor, index)
95
+ end
96
+ end
97
+ end
98
+
99
+ # A dialog box containing a text field and ok button
100
+ class HexDumpDialog < Qt::Dialog
101
+ # @param parent [Qt::Widget] Dialog parent
102
+ def initialize(parent)
103
+ super(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
104
+ setWindowTitle("Hex Dump")
105
+
106
+ @text = Qt::PlainTextEdit.new
107
+ @text.setWordWrapMode(Qt::TextOption::NoWrap)
108
+ if Kernel.is_windows?
109
+ @text.setFont(Cosmos.getFont('courier', 10))
110
+ else
111
+ @text.setFont(Cosmos.getFont('courier', 14))
112
+ end
113
+ @text.setReadOnly(true)
114
+
115
+ layout = Qt::VBoxLayout.new
116
+ layout.addWidget(@text)
117
+
118
+ button_layout = Qt::HBoxLayout.new
119
+ ok_button = Qt::PushButton.new('OK')
120
+ ok_button.connect(SIGNAL('clicked()')) { self.accept }
121
+ button_layout.addStretch
122
+ button_layout.addWidget(ok_button)
123
+ button_layout.addStretch
124
+
125
+ layout.addLayout(button_layout)
126
+ setLayout(layout)
127
+ resize(650, 250)
128
+ end
129
+
130
+ # @param title [String] Dialog title
131
+ # @param text [String] Dialog text box is overwritten with this string
132
+ def set_title_and_text(title, text)
133
+ self.setWindowTitle(title)
134
+ @text.setPlainText(text)
135
+ end
136
+
137
+ # @param width [Integer]
138
+ # @param height [Integer]
139
+ def set_size(width, height)
140
+ resize(width, height)
141
+ end
142
+ end
143
+
144
+ class ProgressDialog
145
+ def progress=(increment)
146
+ set_overall_progress(increment / 100.0)
147
+ end
148
+ end
149
+
150
+ # TableManager uses text based configuration files (see TableConfig) to define
151
+ # both the structure of the binary file and how it should be displayed. It
152
+ # takes this this configuration information to dynamically build a tabbed GUI
153
+ # containing the visual representation of the binary data.
154
+ # In addition to displaying binary data it can also create the binary
155
+ # representation given the text configuration file. It can display the binary
156
+ # data as a hex dump and creates human readable reports of the given data.
157
+ class TableManager < QtTool
158
+ # Error raised when there is a problem saving a table
159
+ class SaveError < StandardError; end
160
+ # Error raised when there is a problem displaying a table
161
+ class DisplayError < StandardError; end
162
+
163
+ # @return [TableManagerCore] TableManagerCore instance
164
+ attr_reader :core
165
+ # @return [Qt::TabWidget] TabWidget which holds the table tabs
166
+ attr_reader :tabbook
167
+
168
+ # @return [TableManager] Instance of the TableManager class
169
+ def self.instance
170
+ @@instance
171
+ end
172
+
173
+ # Entry point into the application
174
+ #
175
+ # @param option_parser [OptionParser] Parses the command line options
176
+ # @param options [OpenStruct] Contains all the parsed options
177
+ def self.run(option_parser = nil, options = nil)
178
+ Cosmos.catch_fatal_exception do
179
+ unless option_parser && options
180
+ option_parser, options = create_default_options()
181
+ options.width = 800
182
+ options.height = 600
183
+ options.title = "Table Manager"
184
+ options.auto_size = false
185
+ options.no_tables = false
186
+ option_parser.separator "Table Manager Specific Options:"
187
+ option_parser.on("-n", "--notables", "Do not include table file editing options. This will remove the 'Table' menu.") do
188
+ options.no_tables = true
189
+ end
190
+ option_parser.on("-c", "--create FILE", "Use the specified definition file to create the table") do |arg|
191
+ options.create = arg
192
+ end
193
+ option_parser.on("-o", "--output DIRECTORY", "Create files in the specified directory") do |arg|
194
+ options.output_dir = File.expand_path(arg)
195
+ end
196
+ option_parser.on("--convert FILE", "Convert the specified configuration file to the new format") do |arg|
197
+ options.convert = arg
198
+ end
199
+ end
200
+ super(option_parser, options)
201
+ end
202
+ end
203
+
204
+ # Called after parsing all the command line options passed to the
205
+ # application. Returns false to operate without a GUI when certain command
206
+ # line options are specified.
207
+ #
208
+ # @param options [OpenStruct] The application options as configured in the
209
+ # command line
210
+ # @return [Boolean] Whether to contine running the application
211
+ def self.post_options_parsed_hook(options)
212
+ if options.create
213
+ core = TableManagerCore.new
214
+ core.file_new(options.create, options.output_dir)
215
+ return false
216
+ end
217
+ if options.convert
218
+ if options.convert.include?("/")
219
+ parts = options.convert.split("/")
220
+ else
221
+ parts = options.convert.split("\\")
222
+ end
223
+ parts[-1] = "converted_#{parts[-1]}"
224
+ filename = parts.join(File::SEPARATOR)
225
+ File.open(filename, 'w') do |out|
226
+ config = File.read(options.convert).split("\n")
227
+ config.each do |line|
228
+ /TABLE\s+(\".*\")\s+(\".*\")\s+(ONE_DIMENSIONAL)\s+(.*_ENDIAN)/.match(line) do |m|
229
+ out.puts "TABLE #{m[1]} #{m[4]} #{m[3]} #{m[2]}"
230
+ end
231
+ /TABLE\s+(\".*\")\s+(\".*\")\s+(TWO_DIMENSIONAL)\s+(.*_ENDIAN)/.match(line) do |m|
232
+ rows = config.select {|item| item.strip =~ /^DEFAULT/ }.length
233
+ out.puts "TABLE #{m[1]} #{m[4]} #{m[3]} #{rows} #{m[2]}"
234
+ end
235
+ /PARAMETER\s+(\".*\")\s+(\".*\")\s+(.*)\s+(\d+)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s?/.match(line) do |m|
236
+ out.puts " APPEND_PARAMETER #{m[1]} #{m[4]} #{m[3]} #{m[6]} #{m[7]} #{m[8]} #{m[2]}"
237
+ if m[5].include?('CHECK')
238
+ out.puts " STATE UNCHECKED #{m[6]}"
239
+ out.puts " STATE CHECKED #{m[7]}"
240
+ end
241
+ if m[5].include?('HEX')
242
+ out.puts ' FORMAT_STRING "0x%0X"'
243
+ end
244
+ if m[5].include?('-U')
245
+ out.puts ' UNEDITABLE'
246
+ end
247
+ end
248
+ if line.strip !~ /^(TABLE|PARAMETER|DEFAULT)/
249
+ out.puts line
250
+ end
251
+ end
252
+ end
253
+ puts "Created #{filename}"
254
+ return false
255
+ end
256
+ true
257
+ end
258
+
259
+ # Create a TableManager instance by initializing the globals,
260
+ # setting the program icon, creating the menu, and laying out the GUI elements.
261
+ def initialize(options)
262
+ super(options) # MUST BE FIRST - All code before super is executed twice in RubyQt Based classes
263
+ @app_title = options.title
264
+ @app_icon_filename = 'table_manager.png'
265
+ Cosmos.load_cosmos_icon(@app_icon_filename)
266
+
267
+ @system_def_path = File.join(::Cosmos::USERPATH, %w(config tools table_manager))
268
+ @system_bin_path = System.paths['TABLES']
269
+ @def_path = @system_def_path
270
+ @bin_path = @system_bin_path
271
+ @core = TableManagerCore.new
272
+ @@instance = self
273
+
274
+ initialize_actions(options.no_tables)
275
+ initialize_menus(options.no_tables)
276
+ initialize_central_widget()
277
+ complete_initialize()
278
+ setMinimumSize(400, 250)
279
+
280
+ statusBar.showMessage(tr("Ready")) # Show message to initialize status bar
281
+ end
282
+
283
+ def initialize_actions(no_tables = false)
284
+ super()
285
+
286
+ # File Menu Actions
287
+ new_action = Qt::Action.new(self)
288
+ new_action.shortcut = Qt::KeySequence.new(Qt::KeySequence::New)
289
+ new_action.connect(SIGNAL('triggered()')) { file_new(@def_path) }
290
+ self.addAction(new_action) # Add it to the application
291
+
292
+ open_action = Qt::Action.new(self)
293
+ open_action.shortcut = Qt::KeySequence.new(Qt::KeySequence::Open)
294
+ open_action.connect(SIGNAL('triggered()')) { file_open(@bin_path) }
295
+ self.addAction(open_action) # Add it to the application
296
+
297
+ @file_open_both = Qt::Action.new(Cosmos.get_icon('open.png'), tr('Open &Both'), self)
298
+ @file_open_both.statusTip = tr('Specify both the binary file and the definition file to open')
299
+ @file_open_both.connect(SIGNAL('triggered()')) { file_open_both() }
300
+
301
+ @file_save = Qt::Action.new(Cosmos.get_icon('save.png'), tr('&Save File'), self)
302
+ @file_save_keyseq = Qt::KeySequence.new(Qt::KeySequence::Save)
303
+ @file_save.shortcut = @file_save_keyseq
304
+ @file_save.statusTip = tr('Save the displayed data back to the binary file')
305
+ @file_save.connect(SIGNAL('triggered()')) { file_save() }
306
+
307
+ @file_save_as = Qt::Action.new(Cosmos.get_icon('save_as.png'), tr('Save File &As'), self)
308
+ @file_save_as_keyseq = Qt::KeySequence.new(Qt::KeySequence::SaveAs)
309
+ @file_save_as.shortcut = @file_save_as_keyseq
310
+ @file_save_as.statusTip = tr('Save the displayed data to a new binary file')
311
+ @file_save_as.connect(SIGNAL('triggered()')) { file_save(true) }
312
+
313
+ @file_close = Qt::Action.new(Cosmos.get_icon('close.png'), tr('&Close File'), self)
314
+ @file_close_keyseq = Qt::KeySequence.new(tr("Ctrl+W")) # Qt::KeySequence::Close is Alt-F4 on Windows
315
+ @file_close.shortcut = @file_close_keyseq
316
+ @file_close.statusTip = tr('Close the current file')
317
+ @file_close.connect(SIGNAL('triggered()')) { file_close() }
318
+
319
+ @file_check = Qt::Action.new(Cosmos.get_icon('checkmark.png'), tr('&Check All'), self)
320
+ @file_check_keyseq = Qt::KeySequence.new(tr('Ctrl+K'))
321
+ @file_check.shortcut = @file_check_keyseq
322
+ @file_check.statusTip = tr('Check each data value against verification criteria')
323
+ @file_check.connect(SIGNAL('triggered()')) { file_check() }
324
+
325
+ @file_hex = Qt::Action.new(tr('&Hex Dump'), self)
326
+ @file_hex_keyseq = Qt::KeySequence.new(tr('Ctrl+H'))
327
+ @file_hex.shortcut = @file_hex_keyseq
328
+ @file_hex.statusTip = tr('Display a hex representation of the binary file')
329
+ @file_hex.connect(SIGNAL('triggered()')) { display_hex(:file) }
330
+
331
+ @file_report = Qt::Action.new(tr('Create &Report'), self)
332
+ @file_report_keyseq = Qt::KeySequence.new(tr('Ctrl+R'))
333
+ @file_report.shortcut = @file_report_keyseq
334
+ @file_report.statusTip = tr('Create a text file report describing the binary data')
335
+ @file_report.connect(SIGNAL('triggered()')) { file_report() }
336
+
337
+ unless no_tables
338
+ # Table Menu Actions
339
+ @table_check = Qt::Action.new(Cosmos.get_icon('checkmark.png'), tr('&Check'), self)
340
+ @table_check.statusTip = tr('Check each data value against verification criteria')
341
+ @table_check.connect(SIGNAL('triggered()')) { table_check() }
342
+
343
+ @table_default = Qt::Action.new(tr('&Default'), self)
344
+ @table_default_keyseq = Qt::KeySequence.new(tr('Ctrl+D'))
345
+ @table_default.shortcut = @table_default_keyseq
346
+ @table_default.statusTip = tr('Revert all data values to their defaults')
347
+ @table_default.connect(SIGNAL('triggered()')) { table_default() }
348
+
349
+ @table_hex = Qt::Action.new(tr('&Hex Dump'), self)
350
+ @table_hex.statusTip = tr('Display a hex representation of the table')
351
+ @table_hex.connect(SIGNAL('triggered()')) { display_hex(:table) }
352
+
353
+ @table_save = Qt::Action.new(tr('&Save Table Binary'), self)
354
+ @table_save.statusTip = tr('Save the current table to a stand alone binary file')
355
+ @table_save.connect(SIGNAL('triggered()')) { table_save() }
356
+
357
+ @table_commit = Qt::Action.new(tr('Commit to Existing &File'), self)
358
+ @table_commit.statusTip = tr('Incorporate the current table data into a binary file which already contains the table')
359
+ @table_commit.connect(SIGNAL('triggered()')) { table_commit() }
360
+
361
+ #@table_update = Qt::Action.new(tr('&Update Definition'), self)
362
+ #@table_update.statusTip = tr('Change the defaults in the definition file to the displayed table data')
363
+ #@table_update.connect(SIGNAL('triggered()')) { table_update() }
364
+ end
365
+ end
366
+
367
+ def initialize_menus(no_tables = false)
368
+ file_menu = menuBar.addMenu(tr('&File'))
369
+
370
+ file_new = file_menu.addMenu(Cosmos.get_icon('file.png'), tr("&New File")) # \tCtrl-N displays shortcut
371
+ target_dirs_action(file_new, @system_def_path, 'tools/table_manager', method(:file_new))
372
+
373
+ file_open = file_menu.addMenu(Cosmos.get_icon('open.png'), tr("&Open")) # \tCtrl-O displays shortcut
374
+ target_dirs_action(file_open, @system_bin_path, 'tables', method(:file_open))
375
+
376
+ file_menu.addAction(@file_open_both)
377
+ file_menu.addAction(@file_close)
378
+ file_menu.addAction(@file_save)
379
+ file_menu.addAction(@file_save_as)
380
+ file_menu.addSeparator()
381
+ file_menu.addAction(@file_check)
382
+ file_menu.addAction(@file_hex)
383
+ file_menu.addAction(@file_report)
384
+ file_menu.addSeparator()
385
+ file_menu.addAction(@exit_action)
386
+
387
+ unless no_tables
388
+ table_menu = menuBar.addMenu(tr('&Table'))
389
+ table_menu.addAction(@table_check)
390
+ table_menu.addAction(@table_default)
391
+ table_menu.addAction(@table_hex)
392
+ table_menu.addSeparator()
393
+ table_menu.addAction(@table_save)
394
+ table_menu.addAction(@table_commit)
395
+ #table_menu.addAction(@table_update)
396
+ end
397
+
398
+ # Help Menu
399
+ @about_string = "TableManager is a generic binary file editor. "
400
+ @about_string << "It features a text file driven interface to define binary files and their preferred display type. "
401
+ @about_string << "This text file is then used to dynamically construct a spreadsheet type interface to "
402
+ @about_string << "allow easy editing of the underlying binary structure."
403
+
404
+ initialize_help_menu()
405
+ end
406
+
407
+ def initialize_central_widget
408
+ central_widget = Qt::Widget.new
409
+ setCentralWidget(central_widget)
410
+ top_layout = Qt::VBoxLayout.new(central_widget)
411
+
412
+ # Create the information pane with the filenames
413
+ filename_layout = Qt::FormLayout.new
414
+ @table_def_label = Qt::Label.new("")
415
+ filename_layout.addRow(tr("Definition File:"), @table_def_label)
416
+ @table_bin_label = Qt::Label.new("")
417
+ filename_layout.addRow(tr("Binary File:"), @table_bin_label)
418
+ top_layout.addLayout(filename_layout)
419
+
420
+ # Separator before editor
421
+ sep1 = Qt::Frame.new(central_widget)
422
+ sep1.setFrameStyle(Qt::Frame::HLine | Qt::Frame::Sunken)
423
+ top_layout.addWidget(sep1)
424
+
425
+ @tabbook = Qt::TabWidget.new
426
+ top_layout.addWidget(@tabbook)
427
+
428
+ @check_icons = []
429
+ @check_icons << Cosmos.get_icon("CheckBoxEmpty.gif")
430
+ @check_icons << Cosmos.get_icon("CheckBoxCheck.gif")
431
+ end
432
+
433
+ # Menu option to create a new table binary file based on a table definition file.
434
+ #
435
+ # @param def_path [String] Path to a directory containing definition files
436
+ def file_new(def_path)
437
+ return if abort_on_modified()
438
+
439
+ filenames = Qt::FileDialog.getOpenFileNames(self, "Open Binary Definition Text File(s)",
440
+ def_path, "Config File (*.txt)\nAll Files (*)")
441
+ return if filenames.length == 0 # User cancelled dialog
442
+
443
+ bin_path = bin_path_from_def_path(File.dirname(filenames[0]))
444
+ output_path = Qt::FileDialog.getExistingDirectory(self, "Select Output Directory", bin_path)
445
+ return unless output_path # User cancelled dialog
446
+
447
+ return if abort_on_check_for_existing(filenames, output_path)
448
+
449
+ success = false
450
+ bin_files = []
451
+ ProgressDialog.execute(self, 'Create New Files', 500, 50, true, false, false, false, false) do |dialog|
452
+ begin
453
+ filenames.each do |filename|
454
+ bin_files << @core.file_new(filename, output_path) do |progress|
455
+ dialog.set_overall_progress(progress)
456
+ end
457
+ end
458
+ success = true
459
+ dialog.close_done
460
+ rescue => err
461
+ Qt.execute_in_main_thread(true) {|| ExceptionDialog.new(self, err, "File New Errors", false)}
462
+ dialog.close_done
463
+ end
464
+ end
465
+ if success
466
+ file_close()
467
+ file_open(bin_files[0], filenames[0])
468
+ end
469
+ rescue TableManagerCore::CoreError => err
470
+ Qt::MessageBox.warning(self, "File New Errors", err.message)
471
+ rescue => err
472
+ ExceptionDialog.new(self, err, "File New Errors", false)
473
+ end
474
+
475
+ # Menu option that opens a binary file (and it's associated definition
476
+ # file) for display in the GUI.
477
+ #
478
+ # @param bin_path [String] Path to the binary file or a directory
479
+ # containing binary files
480
+ # @param def_path [String] Path to the definition file. If nil, the
481
+ # definition file will be looked up automatically.
482
+ # @param user_select_definition [Boolean] If true, the user will be
483
+ # required to select the definition file. It will not be automatically
484
+ # looked up.
485
+ def file_open(bin_path, def_path = nil, user_select_definition = false)
486
+ return if abort_on_modified()
487
+
488
+ if File.directory?(bin_path)
489
+ bin_path = Qt::FileDialog.getOpenFileName(self, "Open Binary", bin_path,
490
+ "Binary File (*.bin *.dat);;All Files (*)")
491
+ return unless bin_path
492
+ end
493
+
494
+ unless def_path
495
+ def_path = def_path_from_bin_path(bin_path)
496
+ def_path = get_best_def_path(def_path, bin_path) unless user_select_definition
497
+ end
498
+ if !def_path || !File.file?(def_path)
499
+ def_path = Qt::FileDialog.getOpenFileName(self, "Open Definition File", def_path,
500
+ "Definition File (*.txt);;All Files (*)")
501
+ end
502
+ return unless def_path
503
+
504
+ Qt::Application.setOverrideCursor(Qt::Cursor.new(Qt::WaitCursor))
505
+ begin
506
+ @core.file_open(bin_path, def_path)
507
+ rescue TableManagerCore::MismatchError => err
508
+ # Mismatch errors are recoverable so just warn the user
509
+ Qt::MessageBox.information(self, "Table Open Error", err.message)
510
+ end
511
+ @def_path = File.dirname(def_path)
512
+ @bin_path = File.dirname(bin_path)
513
+ display_all_gui_data()
514
+ @table_bin_label.text = bin_path
515
+ @table_def_label.text = def_path
516
+ Qt::Application.restoreOverrideCursor()
517
+ rescue TableManagerCore::CoreError => err
518
+ Qt::Application.restoreOverrideCursor()
519
+ Qt::MessageBox.warning(self, "File Open Errors", err.message)
520
+ rescue => err
521
+ Qt::Application.restoreOverrideCursor()
522
+ ExceptionDialog.new(self, err, "File Open Errors", false)
523
+ end
524
+
525
+ # Menu option to require the user to specify both the binary and the
526
+ # definition file to parse it
527
+ def file_open_both
528
+ file_open(@bin_path, nil, true)
529
+ end
530
+
531
+ # Menu option to close the open table
532
+ def file_close
533
+ return if abort_on_modified()
534
+ @core.reset
535
+ @table_bin_label.text = ''
536
+ @table_def_label.text = ''
537
+ reset_gui()
538
+ rescue TableManagerCore::CoreError => err
539
+ Qt::MessageBox.warning(self, "File Close Errors", err.message)
540
+ rescue => err
541
+ ExceptionDialog.new(self, err, "File Close Errors", false)
542
+ end
543
+
544
+ # Menu option to save the binary data to a file.
545
+ # It first commits the GUI data to the internal data structures and checks
546
+ # for errors. If none are found, it saves the data to the table binary file.
547
+ def file_save(save_as = false)
548
+ return unless file_check(false)
549
+ filename = @table_bin_label.text
550
+ if save_as
551
+ filename = Qt::FileDialog.getSaveFileName(self, "File Save", @table_bin_label.text,
552
+ "Binary File (*.bin *.dat);;All Files (*)")
553
+ return unless filename
554
+ @table_bin_label.text = filename
555
+ end
556
+
557
+ @core.file_save(filename)
558
+ @bin_path = File.dirname(filename)
559
+
560
+ display_all_gui_data()
561
+ @table_bin_label.text = filename
562
+ statusBar.showMessage(tr("File Saved Successfully"))
563
+ rescue TableManagerCore::CoreError, SaveError => err
564
+ Qt::MessageBox.warning(self, "File Save Errors", err.message)
565
+ rescue => err
566
+ ExceptionDialog.new(self, err, "File Save Errors", false)
567
+ end
568
+
569
+ # Menu option to check every table's values against their allowable ranges
570
+ #
571
+ # @param success_dialog [Boolean] Whether to display a dialog indicating
572
+ # success. If false simply return true.
573
+ # @return [Boolean] Whether the file check was successful
574
+ def file_check(success_dialog = true)
575
+ return false if abort_on_no_current_table()
576
+ save_all_gui_data()
577
+ Qt::MessageBox.information(self, "File Check", @core.file_check()) if success_dialog
578
+ true
579
+ rescue TableManagerCore::CoreError, SaveError => err
580
+ Qt::MessageBox.warning(self, "File Check Errors", err.message)
581
+ false
582
+ rescue => err
583
+ ExceptionDialog.new(self, err, "Unknown File Check Errors", false)
584
+ false
585
+ end
586
+
587
+ # Menu option to create a text file report of all the table data
588
+ def file_report
589
+ return unless file_check(false)
590
+ report_path = @core.file_report(@table_bin_label.text, @table_def_label.text)
591
+
592
+ dialog = Qt::Dialog.new(self, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
593
+ dialog.setWindowTitle("File Report")
594
+ dialog_layout = Qt::VBoxLayout.new
595
+ dialog_layout.addWidget(Qt::Label.new("Report file created: #{report_path}"))
596
+ button_layout = Qt::HBoxLayout.new
597
+ ok_button = Qt::PushButton.new('&Ok')
598
+ ok_button.connect(SIGNAL('clicked()')) { dialog.accept }
599
+ ok_button.setEnabled(true)
600
+ button_layout.addWidget(ok_button)
601
+ button_layout.addStretch(1)
602
+ open_button = Qt::PushButton.new('Open in &Editor')
603
+ open_button.connect(SIGNAL('clicked()')) { Cosmos.open_in_text_editor(report_path) }
604
+ button_layout.addWidget(open_button)
605
+ if Kernel.is_windows?
606
+ open_excel_button = Qt::PushButton.new('Open in E&xcel')
607
+ open_excel_button.connect(SIGNAL('clicked()')) { system("start Excel.exe \"#{report_path}\"") }
608
+ button_layout.addWidget(open_excel_button)
609
+ end
610
+ dialog_layout.addLayout(button_layout)
611
+ dialog.setLayout(dialog_layout)
612
+ dialog.exec
613
+ rescue TableManagerCore::CoreError, SaveError => err
614
+ Qt::MessageBox.warning(self, "File Report Errors", err.message)
615
+ rescue => err
616
+ ExceptionDialog.new(self, err, "File Report Errors", false)
617
+ end
618
+
619
+ # Menu option to display a dialog containing a hex dump of all table values
620
+ def display_hex(type)
621
+ return if abort_on_no_current_table()
622
+ dialog = HexDumpDialog.new(self)
623
+ if type == :file
624
+ str = @core.file_hex()
625
+ title = File.basename(@table_bin_label.text)
626
+ else # :table
627
+ str = @core.table_hex(current_table_name)
628
+ title = current_table_name
629
+ end
630
+ dialog.set_title_and_text("#{title} Hex Dump", str)
631
+ dialog.exec
632
+ dialog.dispose
633
+ rescue TableManagerCore::CoreError => err
634
+ Qt::MessageBox.warning(self, "Display Hex Errors", err.message)
635
+ rescue => err
636
+ ExceptionDialog.new(self, err, "Display Hex Errors", false)
637
+ end
638
+
639
+ # Menu option to check the table values against their allowable ranges
640
+ def table_check
641
+ return if abort_on_no_current_table()
642
+ save_gui_data(current_table_name)
643
+ result = @core.table_check(current_table_name)
644
+ if result.empty?
645
+ result = "All parameters are within their constraints."
646
+ end
647
+ Qt::MessageBox.information(self, "Table Check", result)
648
+ rescue TableManagerCore::CoreError, SaveError => err
649
+ Qt::MessageBox.warning(self, "Table Check Errors", err.message)
650
+ rescue => err
651
+ ExceptionDialog.new(self, err, "Table Check Errors", false)
652
+ end
653
+
654
+ # Menu option to set all the table items to their default values
655
+ def table_default
656
+ return if abort_on_no_current_table()
657
+ @core.table_default(current_table_name)
658
+ set_table_modified(true)
659
+ display_gui_data(current_table_name)
660
+ rescue TableManagerCore::CoreError, DisplayError => err
661
+ Qt::MessageBox.warning(self, "Table Default Errors", err.message)
662
+ rescue => err
663
+ ExceptionDialog.new(self, err, "Table Default Errors", false)
664
+ end
665
+
666
+ # Menu option to save the currently displayed table as a stand alone binary file
667
+ def table_save
668
+ return if abort_on_no_current_table()
669
+ save_gui_data(current_table_name)
670
+ filename = File.join(@bin_path, "#{current_table_name.split.collect(&:capitalize).join}Table.dat")
671
+ filename = Qt::FileDialog.getSaveFileName(self, "File Save", filename,
672
+ "Binary File (*.bin *.dat);;All Files (*)")
673
+ return unless filename
674
+ @core.table_save(current_table_name, filename)
675
+ rescue TableManagerCore::CoreError, SaveError => err
676
+ Qt::MessageBox.warning(self, "Table Save Errors", err.message)
677
+ rescue => err
678
+ ExceptionDialog.new(self, err, "Table Save Errors", false)
679
+ end
680
+
681
+ # Menu option to save the currently displayed table to an existing table binary file
682
+ # containing that table.
683
+ def table_commit
684
+ return if abort_on_no_current_table()
685
+ return if abort_on_modified()
686
+ save_gui_data(current_table_name)
687
+
688
+ bin_path = Qt::FileDialog.getOpenFileName(self, "Open Binary", @bin_path,
689
+ "Binary File (*.bin *.dat);;All Files (*)")
690
+ return unless bin_path
691
+ def_path = def_path_from_bin_path(bin_path)
692
+ def_path = get_best_def_path(def_path, bin_path)
693
+ if !def_path || !File.file?(def_path)
694
+ def_path = Qt::FileDialog.getOpenFileName(self, "Open Definition File", def_path,
695
+ "Definition File (*.txt);;All Files (*)")
696
+ end
697
+ return unless def_path
698
+
699
+ @core.table_commit(current_table_name, bin_path, def_path)
700
+ rescue TableManagerCore::CoreError, SaveError, DisplayError => err
701
+ Qt::MessageBox.warning(self, "Table Commit Errors", err.message)
702
+ rescue => err
703
+ ExceptionDialog.new(self, err, "Table Commit Errors", false)
704
+ end
705
+
706
+ def current_table_name
707
+ @tabbook.current_name
708
+ end
709
+
710
+ # Saves all the information in the given gui table name to the underlying
711
+ # binary structure (although it does not commit it to disk).
712
+ def save_gui_data(name)
713
+ table = @core.config.table(name)
714
+ gui_table = @tabbook.tab(name)
715
+ return unless table && gui_table
716
+
717
+ result = ""
718
+
719
+ # First go through the gui and set the underlying data to what is displayed
720
+ (0...table.num_rows).each do |r|
721
+ (0...table.num_columns).each do |c|
722
+ if table.type == :TWO_DIMENSIONAL
723
+ item = table.get_item("#{gui_table.horizontalHeaderItem(c).text}#{r}")
724
+ else # table is ONE_DIMENSIONAL
725
+ item = table.get_item(gui_table.verticalHeaderItem(r).text)
726
+ end
727
+ next if item.hidden
728
+
729
+ begin
730
+ value = get_item_value(item, gui_table.item(r, c))
731
+
732
+ # If there is a read conversion we first read the converted value before writing.
733
+ # This is to prevent writing the displayed value (which has the conversion applied)
734
+ # back to the binary data if they are already equal.
735
+ if item.read_conversion
736
+ converted = table.read(item.name, :CONVERTED)
737
+ table.write(item.name, value) if converted != value
738
+ else
739
+ table.write(item.name, value)
740
+ end
741
+ if item.range && !item.range.include?(table.read(item.name, :RAW))
742
+ if gui_table.item(r, c).text.upcase.start_with?("0X") # display as hex
743
+ min = "0x#{item.range.min.to_s(16).upcase}"
744
+ max = "0x#{item.range.max.to_s(16).upcase}"
745
+ else
746
+ min = item.range.min
747
+ max = item.range.max
748
+ end
749
+ raise "out of range. Minimum is #{min}. Maximum is #{max}"
750
+ end
751
+
752
+ # if we have a problem casting the value it probably means the user put in garbage
753
+ # in this case force the range check to fail
754
+ rescue => error
755
+ text = gui_table.item(r, c).text
756
+ if text.upcase.start_with?("0X") # display as hex
757
+ default = "0x#{item.default.to_s(16).upcase}"
758
+ else
759
+ default = item.default
760
+ end
761
+ result << "Error saving #{item.name} value of #{text} due to #{error.message}. Default value is #{default}.\n\n"
762
+ end
763
+ end # end each table column
764
+ end # end each table row
765
+ raise SaveError, result unless result.empty?
766
+ end
767
+
768
+ def closeEvent(event)
769
+ if abort_on_modified()
770
+ event.ignore()
771
+ else
772
+ super(event)
773
+ end
774
+ end
775
+
776
+ protected
777
+
778
+ # Determine the binary directory path given the definition directory path
779
+ #
780
+ # @param def_path [String] Path to the definition directory
781
+ def bin_path_from_def_path(def_path)
782
+ if def_path.include?('targets') # target directory path
783
+ bin_path = File.expand_path(File.join(def_path, '..', '..', 'tables'))
784
+ else
785
+ bin_path = @system_bin_path
786
+ end
787
+ end
788
+
789
+ # Determine the definition directory path given the binary directory path
790
+ #
791
+ # @param bin_path [String] Path to the binary directory
792
+ def def_path_from_bin_path(bin_path)
793
+ if bin_path.include?('targets') # target directory path
794
+ def_path = File.expand_path(File.join(File.dirname(bin_path), '..', 'tools', 'table_manager'))
795
+ else
796
+ def_path = @system_def_path
797
+ end
798
+ end
799
+
800
+ # Looks in a directory for a definition file for the given binary file.
801
+ # The definition file name up to the _def.txt must be fully contained in
802
+ # the given binary file. For example: XXX_YYY1_def.txt will be returned for
803
+ # a binary file name of XXX_YYY1_Extra.bin. A binary file of XXX_YYY2.bin
804
+ # will not match.
805
+ #
806
+ # @param def_path [String] Path to the definition files
807
+ # @param bin_path [String] Path to the binary file
808
+ # @return [String|nil] Path to the best definition file or nil
809
+ def get_best_def_path(def_path, bin_path)
810
+ return nil unless (File.exist?(def_path) && File.exist?(bin_path))
811
+ bin_path = File.basename(bin_path).split('.')[0]
812
+ def_file = nil
813
+
814
+ Dir.foreach(def_path) do |possible_def_file|
815
+ # only bother checking definition files
816
+ index = possible_def_file.index('_def.txt')
817
+ next unless index
818
+
819
+ base_name = possible_def_file[0...index]
820
+ if bin_path.index(base_name)
821
+ # If we've already found a def_file and now found another match we
822
+ # clear the first and stop the search. Force the user to decide.
823
+ if def_file
824
+ def_file = nil
825
+ break
826
+ end
827
+ def_file = File.join(def_path, possible_def_file)
828
+ end
829
+ end
830
+ # Return the original path if we couldn't find anything
831
+ def_file = def_path unless def_file
832
+ def_file
833
+ end
834
+
835
+ def abort_on_check_for_existing(filenames, output_path)
836
+ user_abort = false
837
+ filenames.each do |def_file|
838
+ if File.basename(def_file) =~ /_def\.txt/
839
+ basename = File.basename(def_file)[0...-8] # Get the basename without the _def.txt
840
+ else
841
+ basename = File.basename(def_file).split('.')[0...-1].join('.') # Get the basename without the extension
842
+ end
843
+
844
+ output_filename = File.join(output_path, "#{basename}.dat")
845
+ if abort_on_existing_file(output_filename)
846
+ user_abort = true
847
+ break # No need to continue processing
848
+ end
849
+ end
850
+ user_abort
851
+ end
852
+
853
+ def abort_on_existing_file(filename)
854
+ user_abort = false
855
+ if File.exist?(filename)
856
+ result = Qt::MessageBox.question(self, "File New",
857
+ "#{filename} already exists. Overwrite?",
858
+ Qt::MessageBox::Yes | Qt::MessageBox::No, Qt::MessageBox::Yes)
859
+ if result != Qt::MessageBox::Yes
860
+ user_abort = true
861
+ end
862
+ end
863
+ user_abort
864
+ end
865
+
866
+ def abort_on_modified
867
+ user_abort = false
868
+ if self.windowTitle.include?("*")
869
+ result = Qt::MessageBox.warning(self, "Table Modified",
870
+ "Table has been modified. Continue and discard all changes?",
871
+ Qt::MessageBox::Yes | Qt::MessageBox::No, Qt::MessageBox::No)
872
+ if result != Qt::MessageBox::Yes
873
+ user_abort = true
874
+ end
875
+ end
876
+ user_abort
877
+ end
878
+
879
+ def abort_on_no_current_table
880
+ user_abort = false
881
+ unless current_table_name
882
+ Qt::MessageBox.information(self, "No current table", "Please open a table.")
883
+ user_abort = true
884
+ end
885
+ user_abort
886
+ end
887
+
888
+ # Delete all the tabs in the table manager gui and initialize globals to
889
+ # prepare for the next table to load.
890
+ def reset_gui
891
+ set_table_modified(false)
892
+ @tabbook.tabs.each_with_index do |tab, index|
893
+ tab.dispose
894
+ @tabbook.removeTab(index)
895
+ end
896
+ end
897
+
898
+ def save_all_gui_data
899
+ result = ''
900
+ @core.config.tables.each do |table_name, table|
901
+ begin
902
+ save_gui_data(table_name)
903
+ rescue SaveError => err
904
+ result << "\nErrors in #{table_name}:\n#{err.message}"
905
+ end
906
+ end
907
+ raise SaveError, result.lstrip unless result.empty?
908
+ end
909
+
910
+ def display_all_gui_data
911
+ reset_gui()
912
+ @core.config.tables.each do |table_name, table|
913
+ create_table_tab(table)
914
+ display_gui_data(table_name)
915
+ end
916
+ end
917
+
918
+ def display_gui_data(table_name)
919
+ table = @core.config.table(table_name)
920
+ gui_table = @tabbook.tab(table_name)
921
+ return unless table && gui_table
922
+
923
+ gui_table.blockSignals(true) # block signals while we programatically update it
924
+ # Cancel any table selections so the text will be visible when it is refreshed
925
+ gui_table.clearSelection
926
+
927
+ set_table_headers(table, gui_table)
928
+
929
+ row = 0
930
+ column = 0
931
+ table.sorted_items.each do |item|
932
+ next if item.hidden
933
+ update_gui_item(table_name, table, gui_table, item, row, column)
934
+
935
+ if table.type == :TWO_DIMENSIONAL
936
+ # only increment our row when we've processed all the columns
937
+ if column == table.num_columns - 1
938
+ row += 1
939
+ column = 0
940
+ else
941
+ column += 1
942
+ end
943
+ else
944
+ row += 1
945
+ end
946
+ end
947
+
948
+ gui_table.resizeColumnsToContents()
949
+ gui_table.resizeRowsToContents()
950
+ gui_table.blockSignals(false)
951
+ end
952
+
953
+ # Updates the table by setting the value in the table to the properly formatted value.
954
+ def update_gui_item(table_name, table, gui_table, item, row, column)
955
+ value = table.read(item.name, :FORMATTED)
956
+ # Handle binary strings
957
+ value = "0x" + value.simple_formatted unless value.is_printable?
958
+
959
+ if item.states && item.states.keys.sort == %w(CHECKED UNCHECKED)
960
+ table_item = create_checkable_table_item(item, value)
961
+ else
962
+ table_item = create_table_item(item, value)
963
+ end
964
+ gui_table.setItem(row, column, table_item)
965
+ end
966
+
967
+ def get_item_value(item, gui_item)
968
+ value = nil
969
+ if (gui_item.flags & Qt::ItemIsUserCheckable) != 0
970
+ check_state = gui_item.checkState
971
+ case check_state
972
+ when Qt::Checked
973
+ value = item.states["CHECKED"]
974
+ when Qt::Unchecked
975
+ value = item.states["UNCHECKED"]
976
+ when Qt::PartiallyChecked
977
+ value = gui_item.text # convert_to_value?
978
+ end
979
+ else
980
+ if (item.data_type == :STRING || item.data_type == :BLOCK) && gui_item.text.upcase.start_with?("0X")
981
+ value = gui_item.text.hex_to_byte_string
982
+ else
983
+ text = gui_item.text
984
+ quotes_removed = text.remove_quotes
985
+ if text == quotes_removed
986
+ value = text.convert_to_value
987
+ else
988
+ value = quotes_removed
989
+ end
990
+ end
991
+ end
992
+ value
993
+ end
994
+
995
+ def set_table_modified(modified)
996
+ title = modified ? "#{@app_title} *" : @app_title
997
+ self.setWindowTitle(title)
998
+ end
999
+
1000
+ def table_item_changed(table_item)
1001
+ set_table_modified(true)
1002
+ # If there is a checkbox value that contains a value that doesn't map to
1003
+ # the checked or unchecked state, that value is displayed next to the
1004
+ # "PartiallyChecked" checkbox. Once the user clicks to check or uncheck,
1005
+ # the original value will disappear due to the following code:
1006
+ table = @core.config.table(current_table_name)
1007
+ gui_table = @tabbook.tab(current_table_name)
1008
+ if table.type == :TWO_DIMENSIONAL
1009
+ item_name = gui_table.horizontalHeaderItem(table_item.column).text + table_item.row.to_s
1010
+ else
1011
+ item_name = gui_table.verticalHeaderItem(table_item.row).text
1012
+ end
1013
+ item = table.get_item(item_name)
1014
+ if item.states && item.states.keys.sort == %w(CHECKED UNCHECKED)
1015
+ table_item.setText('')
1016
+ end
1017
+ end
1018
+
1019
+ def set_table_headers(table, gui_table)
1020
+ items = table.sorted_items
1021
+ if table.type == :TWO_DIMENSIONAL
1022
+ row_headers = []
1023
+ (0...table.num_rows).each {|i| row_headers << "#{i + 1}" }
1024
+ gui_table.setVerticalHeaderLabels(row_headers)
1025
+
1026
+ column_headers = []
1027
+ (0...table.num_columns).each {|i| column_headers << items[i].name[0...-1] unless items[i].hidden }
1028
+ gui_table.setHorizontalHeaderLabels(column_headers)
1029
+ else
1030
+ row_headers = []
1031
+ items.each {|item| row_headers << item.name unless item.hidden }
1032
+ gui_table.setVerticalHeaderLabels(row_headers)
1033
+ gui_table.setHorizontalHeaderLabels(["Value"])
1034
+ end
1035
+ end
1036
+
1037
+ def create_checkable_table_item(item, value)
1038
+ table_item = Qt::TableWidgetItem.new()
1039
+ if item.editable
1040
+ table_item.setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsTristate)
1041
+ else
1042
+ table_item.setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsTristate)
1043
+ end
1044
+ if value == "CHECKED"
1045
+ table_item.setCheckState(Qt::Checked)
1046
+ elsif value == "UNCHECKED"
1047
+ table_item.setCheckState(Qt::Unchecked)
1048
+ else # The value doesn't match our defined states
1049
+ table_item.setText(value) # Display the actual value
1050
+ table_item.setCheckState(Qt::PartiallyChecked) # Mark it partial since we can't tell
1051
+ end
1052
+ table_item
1053
+ end
1054
+
1055
+ def create_table_item(item, value)
1056
+ table_item = Qt::TableWidgetItem.new(value)
1057
+ if item.editable
1058
+ table_item.setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable)
1059
+ else
1060
+ table_item.setFlags(Qt::NoItemFlags)
1061
+ end
1062
+ table_item
1063
+ end
1064
+
1065
+ def context_menu(point)
1066
+ begin
1067
+ table = @core.config.table(current_table_name)
1068
+ gui_table = @tabbook.tab(current_table_name)
1069
+ if table && gui_table
1070
+ table_item = gui_table.itemAt(point)
1071
+ if table_item
1072
+ menu = Qt::Menu.new()
1073
+
1074
+ if table.type == :TWO_DIMENSIONAL
1075
+ item_name = gui_table.horizontalHeaderItem(table_item.column).text + table_item.row.to_s
1076
+ else
1077
+ item_name = gui_table.verticalHeaderItem(table_item.row).text
1078
+ end
1079
+ details_action = Qt::Action.new(tr("Details"), self)
1080
+ details_action.statusTip = tr("Popup details about #{current_table_name} #{item_name}")
1081
+ details_action.connect(SIGNAL('triggered()')) do
1082
+ TlmDetailsDialog.new(nil,
1083
+ 'TABLE',
1084
+ current_table_name.upcase,
1085
+ item_name,
1086
+ table)
1087
+ end
1088
+ menu.addAction(details_action)
1089
+
1090
+ default_action = Qt::Action.new(tr("Default"), self)
1091
+ default_action.statusTip = tr("Set item to default value")
1092
+ default_action.connect(SIGNAL('triggered()')) do
1093
+ item = table.get_item(item_name)
1094
+ table.write(item.name, item.default)
1095
+ update_gui_item(current_table_name, table, gui_table, item, table_item.row, table_item.column)
1096
+ end
1097
+ menu.addAction(default_action)
1098
+
1099
+ global_point = gui_table.mapToGlobal(point)
1100
+ global_point.x += gui_table.verticalHeader.width
1101
+ menu.exec(global_point)
1102
+ menu.dispose
1103
+ end
1104
+ end
1105
+ rescue => err
1106
+ ExceptionDialog.new(self, err, "context_menu Errors", false)
1107
+ end
1108
+ end
1109
+
1110
+ # Creates a tab in the table manager gui
1111
+ #
1112
+ # @param table [Table] Table to display
1113
+ def create_table_tab(table)
1114
+ @table = Qt::TableWidget.new(self)
1115
+ delegate = ComboBoxItemDelegate.new(@table)
1116
+ @table.setItemDelegate(delegate)
1117
+ @table.setEditTriggers(Qt::AbstractItemView::AllEditTriggers)
1118
+ @table.setSelectionMode(Qt::AbstractItemView::NoSelection)
1119
+ #@table.setAlternatingRowColors(true)
1120
+ @tabbook.addTab(@table, table.table_name)
1121
+
1122
+ @table.setRowCount(table.num_rows)
1123
+ @table.setColumnCount(table.num_columns)
1124
+ @table.setMouseTracking(true)
1125
+ @table.connect(SIGNAL('cellEntered(int, int)')) {|row, col| mouse_over(row, col) }
1126
+ @table.connect(SIGNAL('itemChanged(QTableWidgetItem*)')) {|item| table_item_changed(item) }
1127
+ @table.setContextMenuPolicy(Qt::CustomContextMenu)
1128
+ @table.connect(SIGNAL('customContextMenuRequested(const QPoint&)')) {|point| context_menu(point) }
1129
+ rescue => err
1130
+ ExceptionDialog.new(self, err, "Create New Table Tab Errors", false)
1131
+ end
1132
+
1133
+ def mouse_over(row, col)
1134
+ return unless current_table_name
1135
+ table = @core.config.table(current_table_name)
1136
+ gui_table = @tabbook.tab(current_table_name)
1137
+ if table && gui_table
1138
+ if table.type == :TWO_DIMENSIONAL
1139
+ item_name = gui_table.horizontalHeaderItem(col).text + row.to_s
1140
+ item = table.get_item(item_name)
1141
+ statusBar.showMessage(item.description)
1142
+ else
1143
+ item_name = gui_table.verticalHeaderItem(row).text
1144
+ item = table.get_item(item_name)
1145
+ statusBar.showMessage(item.description)
1146
+ end
1147
+ end
1148
+ rescue
1149
+ statusBar.showMessage('')
1150
+ end
1151
+ end
1152
+ end