cosmos 3.5.1 → 3.5.2

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 (1158) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -1
  3. data/.gitattributes +3 -3
  4. data/.gitignore +48 -48
  5. data/.travis.yml +8 -8
  6. data/CONTRIBUTING.txt +50 -50
  7. data/Gemfile +10 -10
  8. data/Guardfile +27 -27
  9. data/LICENSE.txt +879 -879
  10. data/Manifest.txt +1414 -1414
  11. data/README.md +111 -111
  12. data/Rakefile +218 -214
  13. data/autohotkey/config/data/diamond.STL +57 -57
  14. data/autohotkey/config/system/system.txt +34 -34
  15. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  16. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  17. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  18. data/autohotkey/config/targets/COSMOS/target.txt +5 -5
  19. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  20. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -270
  21. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
  22. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
  23. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -305
  24. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
  25. data/autohotkey/config/targets/INST/screens/array.txt +7 -7
  26. data/autohotkey/config/targets/INST/screens/block.txt +8 -8
  27. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
  28. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
  29. data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
  30. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
  31. data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
  32. data/autohotkey/config/targets/INST/screens/image.txt +21 -21
  33. data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
  34. data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
  35. data/autohotkey/config/targets/INST/screens/other.txt +25 -25
  36. data/autohotkey/config/targets/INST/screens/params.txt +25 -25
  37. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
  38. data/autohotkey/config/targets/INST/target.txt +26 -26
  39. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  40. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
  41. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  42. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
  43. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
  44. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
  45. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
  46. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  47. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  48. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  49. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
  50. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  51. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  52. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  53. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  54. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  55. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  56. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  57. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  58. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
  59. data/autohotkey/config/tools/launcher/launcher.txt +38 -38
  60. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
  61. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
  62. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
  63. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
  64. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
  65. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
  66. data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
  67. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  68. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  69. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
  70. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
  71. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
  72. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
  73. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
  74. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
  75. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
  76. data/autohotkey/lib/example_background_task.rb +42 -42
  77. data/autohotkey/lib/user_version.rb +3 -3
  78. data/autohotkey/procedures/clear_util.rb +7 -7
  79. data/autohotkey/procedures/collect_util.rb +14 -14
  80. data/autohotkey/procedures/example_test.rb +67 -67
  81. data/autohotkey/procedures/example_test2.rb +74 -74
  82. data/autohotkey/procedures/script_test.rb +17 -17
  83. data/autohotkey/procedures/syntax_error.rb +18 -18
  84. data/autohotkey/tools/CmdExtractorAHK +16 -16
  85. data/autohotkey/tools/CmdSender +14 -14
  86. data/autohotkey/tools/CmdSenderAHK +18 -18
  87. data/autohotkey/tools/CmdTlmServer +14 -14
  88. data/autohotkey/tools/CmdTlmServerAHK +28 -28
  89. data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
  90. data/autohotkey/tools/DataViewer +14 -14
  91. data/autohotkey/tools/DataViewerAHK +17 -17
  92. data/autohotkey/tools/HandbookCreatorAHK +20 -20
  93. data/autohotkey/tools/LauncherAHK +17 -17
  94. data/autohotkey/tools/LimitsMonitorAHK +20 -20
  95. data/autohotkey/tools/OpenGLBuilderAHK +24 -24
  96. data/autohotkey/tools/PacketViewer +14 -14
  97. data/autohotkey/tools/PacketViewerAHK +18 -18
  98. data/autohotkey/tools/PacketViewerAHK2 +17 -17
  99. data/autohotkey/tools/Replay +14 -14
  100. data/autohotkey/tools/ReplayAHK +17 -17
  101. data/autohotkey/tools/ScriptRunner +14 -14
  102. data/autohotkey/tools/ScriptRunnerAHK +20 -20
  103. data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
  104. data/autohotkey/tools/TableManager +14 -14
  105. data/autohotkey/tools/TableManagerAHK +30 -30
  106. data/autohotkey/tools/TestRunner +15 -15
  107. data/autohotkey/tools/TestRunnerAHK +17 -17
  108. data/autohotkey/tools/TestRunnerAHK2 +17 -17
  109. data/autohotkey/tools/TestRunnerAHK3 +17 -17
  110. data/autohotkey/tools/TestRunnerAHK4 +17 -17
  111. data/autohotkey/tools/TestRunnerAHK5 +17 -17
  112. data/autohotkey/tools/TestRunnerAHK6 +17 -17
  113. data/autohotkey/tools/TlmExtractor +15 -15
  114. data/autohotkey/tools/TlmExtractorAHK +19 -19
  115. data/autohotkey/tools/TlmExtractorAHK2 +16 -16
  116. data/autohotkey/tools/TlmExtractorAHK3 +16 -16
  117. data/autohotkey/tools/TlmGrapher +14 -14
  118. data/autohotkey/tools/TlmGrapherAHK +19 -19
  119. data/autohotkey/tools/TlmGrapherAHK2 +23 -23
  120. data/autohotkey/tools/TlmGrapherAHK3 +17 -17
  121. data/autohotkey/tools/TlmGrapherAHK4 +17 -17
  122. data/autohotkey/tools/TlmViewer +14 -14
  123. data/autohotkey/tools/TlmViewerAHK +28 -28
  124. data/autohotkey/tools/TlmViewerAHK2 +22 -22
  125. data/autohotkey/tools/TlmViewerAHK3 +23 -23
  126. data/autohotkey/tools/TlmViewerAHK4 +22 -22
  127. data/autohotkey/tools/TlmViewerAHK5 +18 -18
  128. data/autohotkey/tools/autohotkey.rb +37 -37
  129. data/autohotkey/tools/cmd_extractor.ahk +33 -33
  130. data/autohotkey/tools/cmd_sender.ahk +182 -182
  131. data/autohotkey/tools/cmd_tlm_server.ahk +90 -90
  132. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
  133. data/autohotkey/tools/data_viewer.ahk +141 -141
  134. data/autohotkey/tools/handbook_creator.ahk +32 -32
  135. data/autohotkey/tools/launcher.ahk +41 -41
  136. data/autohotkey/tools/limits_monitor.ahk +123 -123
  137. data/autohotkey/tools/open_gl_builder.ahk +134 -134
  138. data/autohotkey/tools/packet_viewer.ahk +196 -196
  139. data/autohotkey/tools/packet_viewer2.ahk +9 -9
  140. data/autohotkey/tools/replay.ahk +104 -104
  141. data/autohotkey/tools/script_runner.ahk +589 -589
  142. data/autohotkey/tools/script_runner2.ahk +38 -38
  143. data/autohotkey/tools/table_manager.ahk +220 -220
  144. data/autohotkey/tools/test_runner.ahk +262 -262
  145. data/autohotkey/tools/test_runner2.ahk +53 -53
  146. data/autohotkey/tools/test_runner3.ahk +13 -13
  147. data/autohotkey/tools/test_runner5.ahk +8 -8
  148. data/autohotkey/tools/test_runner6.ahk +5 -5
  149. data/autohotkey/tools/tlm_extractor.ahk +296 -296
  150. data/autohotkey/tools/tlm_grapher.ahk +660 -660
  151. data/autohotkey/tools/tlm_grapher2.ahk +115 -115
  152. data/autohotkey/tools/tlm_grapher3.ahk +24 -24
  153. data/autohotkey/tools/tlm_viewer.ahk +133 -133
  154. data/autohotkey/tools/tlm_viewer2.ahk +50 -50
  155. data/autohotkey/tools/tlm_viewer4.ahk +4 -4
  156. data/autohotkey/tools/tlm_viewer5.ahk +20 -20
  157. data/bin/cosmos +96 -96
  158. data/bin/cstol_converter +1166 -1166
  159. data/bin/rubysloc +85 -85
  160. data/cosmos.gemspec +99 -99
  161. data/data/about.txt +4 -4
  162. data/data/crc.txt +326 -326
  163. data/data/diamond.STL +57 -57
  164. data/data/legal.txt +9 -9
  165. data/demo/Gemfile +10 -10
  166. data/demo/Launcher +16 -16
  167. data/demo/Launcher.bat +0 -0
  168. data/demo/Rakefile +77 -77
  169. data/demo/config/data/crc.txt +224 -226
  170. data/demo/config/data/diamond.STL +57 -57
  171. data/demo/config/data/meta_init.txt +4 -4
  172. data/demo/config/system/system.txt +35 -35
  173. data/demo/config/system/system2.txt +33 -33
  174. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  175. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  176. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  177. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
  178. data/demo/config/targets/COSMOS/screens/version.txt +19 -19
  179. data/demo/config/targets/COSMOS/target.txt +11 -11
  180. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
  181. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -5
  182. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
  183. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
  184. data/demo/config/targets/EXAMPLE/target.txt +6 -6
  185. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  186. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  187. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
  188. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
  189. data/demo/config/targets/INST/lib/sim_inst.rb +305 -305
  190. data/demo/config/targets/INST/screens/adcs.txt +46 -46
  191. data/demo/config/targets/INST/screens/array.txt +15 -15
  192. data/demo/config/targets/INST/screens/block.txt +8 -8
  193. data/demo/config/targets/INST/screens/commanding.txt +30 -30
  194. data/demo/config/targets/INST/screens/graphs.txt +14 -14
  195. data/demo/config/targets/INST/screens/ground.txt +25 -25
  196. data/demo/config/targets/INST/screens/hs.txt +44 -44
  197. data/demo/config/targets/INST/screens/latest.txt +23 -23
  198. data/demo/config/targets/INST/screens/other.txt +29 -29
  199. data/demo/config/targets/INST/screens/tabs.txt +70 -70
  200. data/demo/config/targets/INST/target.txt +33 -33
  201. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  202. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
  203. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  204. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
  205. data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
  206. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -13
  207. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
  208. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
  209. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +56 -56
  210. data/demo/config/targets/TEMPLATED/target.txt +6 -6
  211. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +39 -39
  212. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +34 -34
  213. data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
  214. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
  215. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -88
  216. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  217. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  218. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
  219. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  220. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  221. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  222. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  223. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  224. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  225. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -82
  226. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  227. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
  228. data/demo/config/tools/launcher/launcher.txt +45 -45
  229. data/demo/config/tools/launcher/launcher2.txt +45 -45
  230. data/demo/config/tools/script_runner/script_runner.txt +3 -3
  231. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
  232. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  233. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  234. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  235. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  236. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  237. data/demo/config/tools/test_runner/test_runner.txt +17 -17
  238. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  239. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  240. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  241. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  242. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
  243. data/demo/lib/example_background_task.rb +57 -57
  244. data/demo/lib/example_target.rb +113 -113
  245. data/demo/lib/scpi_target.rb +74 -74
  246. data/demo/lib/user_version.rb +3 -3
  247. data/demo/procedures/checks.rb +11 -11
  248. data/demo/procedures/clear_util.rb +7 -7
  249. data/demo/procedures/collect.rb +18 -18
  250. data/demo/procedures/collect_util.rb +14 -14
  251. data/demo/procedures/cosmos_api_test.rb +293 -293
  252. data/demo/procedures/disconnect.rb +29 -29
  253. data/demo/procedures/example_test.rb +183 -183
  254. data/demo/procedures/plot_test.rb +8 -8
  255. data/demo/procedures/run_example_test.rb +3 -3
  256. data/demo/procedures/test.rb +51 -51
  257. data/demo/tools/CmdExtractor +16 -16
  258. data/demo/tools/CmdExtractor.bat +0 -0
  259. data/demo/tools/CmdSender +16 -16
  260. data/demo/tools/CmdSender.bat +0 -0
  261. data/demo/tools/CmdTlmServer +16 -16
  262. data/demo/tools/CmdTlmServer.bat +0 -0
  263. data/demo/tools/DataViewer +16 -16
  264. data/demo/tools/DataViewer.bat +0 -0
  265. data/demo/tools/ExampleTarget +16 -16
  266. data/demo/tools/ExampleTarget.bat +0 -0
  267. data/demo/tools/HandbookCreator +16 -16
  268. data/demo/tools/HandbookCreator.bat +0 -0
  269. data/demo/tools/Launcher +16 -16
  270. data/demo/tools/Launcher.bat +0 -0
  271. data/demo/tools/LimitsMonitor +16 -16
  272. data/demo/tools/LimitsMonitor.bat +0 -0
  273. data/demo/tools/OpenGLBuilder +16 -16
  274. data/demo/tools/OpenGLBuilder.bat +0 -0
  275. data/demo/tools/PacketViewer +16 -16
  276. data/demo/tools/PacketViewer.bat +0 -0
  277. data/demo/tools/Replay +16 -16
  278. data/demo/tools/Replay.bat +0 -0
  279. data/demo/tools/ScpiTarget +16 -16
  280. data/demo/tools/ScpiTarget.bat +0 -0
  281. data/demo/tools/ScriptRunner +16 -16
  282. data/demo/tools/ScriptRunner.bat +0 -0
  283. data/demo/tools/TableManager +16 -16
  284. data/demo/tools/TableManager.bat +0 -0
  285. data/demo/tools/TestRunner +16 -16
  286. data/demo/tools/TestRunner.bat +0 -0
  287. data/demo/tools/TlmExtractor +16 -16
  288. data/demo/tools/TlmExtractor.bat +0 -0
  289. data/demo/tools/TlmGrapher +16 -16
  290. data/demo/tools/TlmGrapher.bat +0 -0
  291. data/demo/tools/TlmViewer +16 -16
  292. data/demo/tools/TlmViewer.bat +0 -0
  293. data/demo/tools/ToolLaunch.bat +14 -5
  294. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  295. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  296. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  297. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  298. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  299. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  300. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  301. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  302. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  303. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  304. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  305. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  306. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  307. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  308. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  309. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  310. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  311. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  312. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  313. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  314. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  315. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  316. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  317. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  318. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  319. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  320. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  321. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  322. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  323. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  324. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  325. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  326. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  327. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  328. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  329. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  330. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
  331. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  332. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  333. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  334. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  335. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  336. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  337. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  338. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  339. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  340. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  341. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  342. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  343. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  344. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  345. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  346. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  347. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  348. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  349. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  350. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  351. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  352. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  353. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  354. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  355. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  356. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  357. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  358. data/demo/tools/tool_launch.rb +38 -38
  359. data/ext/cosmos/ext/array/array.c +111 -111
  360. data/ext/cosmos/ext/array/extconf.rb +13 -13
  361. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
  362. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
  363. data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
  364. data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
  365. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
  366. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
  367. data/ext/cosmos/ext/crc/crc.c +341 -341
  368. data/ext/cosmos/ext/crc/extconf.rb +12 -12
  369. data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
  370. data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
  371. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
  372. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -265
  373. data/ext/cosmos/ext/packet/extconf.rb +13 -13
  374. data/ext/cosmos/ext/packet/packet.c +339 -339
  375. data/ext/cosmos/ext/platform/extconf.rb +13 -13
  376. data/ext/cosmos/ext/platform/platform.c +101 -101
  377. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
  378. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
  379. data/ext/cosmos/ext/string/extconf.rb +13 -13
  380. data/ext/cosmos/ext/string/string.c +49 -49
  381. data/ext/cosmos/ext/structure/structure.c +1428 -1428
  382. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
  383. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
  384. data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
  385. data/ext/cosmos/ext/telemetry/telemetry.c +307 -307
  386. data/ext/mkrf_conf.rb +40 -40
  387. data/install/Gemfile +10 -10
  388. data/install/Launcher +16 -16
  389. data/install/Launcher.bat +0 -0
  390. data/install/Rakefile +77 -77
  391. data/install/config/data/crc.txt +151 -151
  392. data/install/config/system/system.txt +29 -29
  393. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  394. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  395. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  396. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  397. data/install/config/targets/COSMOS/screens/version.txt +19 -19
  398. data/install/config/targets/COSMOS/target.txt +8 -8
  399. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  400. data/install/config/tools/data_viewer/data_viewer.txt +3 -3
  401. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
  402. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  403. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  404. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  405. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
  406. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  407. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  408. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  409. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  410. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  411. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  412. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  413. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  414. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
  415. data/install/config/tools/launcher/launcher.txt +40 -40
  416. data/install/config/tools/script_runner/script_runner.txt +3 -3
  417. data/install/config/tools/test_runner/test_runner.txt +8 -8
  418. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  419. data/install/lib/user_version.rb +3 -3
  420. data/install/tools/CmdExtractor +16 -16
  421. data/install/tools/CmdExtractor.bat +0 -0
  422. data/install/tools/CmdSender +16 -16
  423. data/install/tools/CmdSender.bat +0 -0
  424. data/install/tools/CmdTlmServer +16 -16
  425. data/install/tools/CmdTlmServer.bat +0 -0
  426. data/install/tools/DataViewer +16 -16
  427. data/install/tools/DataViewer.bat +0 -0
  428. data/install/tools/HandbookCreator +16 -16
  429. data/install/tools/HandbookCreator.bat +0 -0
  430. data/install/tools/Launcher +16 -16
  431. data/install/tools/Launcher.bat +0 -0
  432. data/install/tools/LimitsMonitor +16 -16
  433. data/install/tools/LimitsMonitor.bat +0 -0
  434. data/install/tools/OpenGLBuilder +16 -16
  435. data/install/tools/OpenGLBuilder.bat +0 -0
  436. data/install/tools/PacketViewer +16 -16
  437. data/install/tools/PacketViewer.bat +0 -0
  438. data/install/tools/Replay +16 -16
  439. data/install/tools/Replay.bat +0 -0
  440. data/install/tools/ScriptRunner +16 -16
  441. data/install/tools/ScriptRunner.bat +0 -0
  442. data/install/tools/TableManager +16 -16
  443. data/install/tools/TableManager.bat +0 -0
  444. data/install/tools/TestRunner +16 -16
  445. data/install/tools/TestRunner.bat +0 -0
  446. data/install/tools/TlmExtractor +16 -16
  447. data/install/tools/TlmExtractor.bat +0 -0
  448. data/install/tools/TlmGrapher +16 -16
  449. data/install/tools/TlmGrapher.bat +0 -0
  450. data/install/tools/TlmViewer +16 -16
  451. data/install/tools/TlmViewer.bat +0 -0
  452. data/install/tools/ToolLaunch.bat +14 -5
  453. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  454. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  455. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  456. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  457. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  458. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  459. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  460. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  461. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  462. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  463. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  464. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  465. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  466. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  467. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  468. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  469. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  470. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  471. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  472. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  473. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  474. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  475. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  476. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  477. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  478. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  479. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  480. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  481. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  482. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  483. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  484. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  485. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  486. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  487. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  488. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  489. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
  490. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  491. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  492. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  493. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  494. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  495. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  496. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  497. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  498. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  499. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  500. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  501. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  502. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  503. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  504. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  505. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  506. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  507. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  508. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  509. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  510. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  511. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  512. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  513. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  514. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  515. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  516. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  517. data/install/tools/tool_launch.rb +38 -38
  518. data/lib/cosmos.rb +63 -63
  519. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
  520. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
  521. data/lib/cosmos/config/config_parser.rb +324 -324
  522. data/lib/cosmos/conversions.rb +13 -13
  523. data/lib/cosmos/conversions/conversion.rb +47 -47
  524. data/lib/cosmos/conversions/generic_conversion.rb +55 -55
  525. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
  526. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
  527. data/lib/cosmos/conversions/processor_conversion.rb +46 -46
  528. data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
  529. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
  530. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
  531. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
  532. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
  533. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
  534. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
  535. data/lib/cosmos/core_ext.rb +18 -18
  536. data/lib/cosmos/core_ext/array.rb +354 -354
  537. data/lib/cosmos/core_ext/class.rb +51 -51
  538. data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
  539. data/lib/cosmos/core_ext/exception.rb +52 -52
  540. data/lib/cosmos/core_ext/file.rb +75 -75
  541. data/lib/cosmos/core_ext/hash.rb +28 -28
  542. data/lib/cosmos/core_ext/io.rb +75 -75
  543. data/lib/cosmos/core_ext/kernel.rb +38 -38
  544. data/lib/cosmos/core_ext/math.rb +119 -119
  545. data/lib/cosmos/core_ext/matrix.rb +146 -146
  546. data/lib/cosmos/core_ext/objectspace.rb +29 -29
  547. data/lib/cosmos/core_ext/range.rb +22 -22
  548. data/lib/cosmos/core_ext/socket.rb +32 -32
  549. data/lib/cosmos/core_ext/string.rb +311 -311
  550. data/lib/cosmos/core_ext/stringio.rb +24 -24
  551. data/lib/cosmos/core_ext/time.rb +448 -448
  552. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
  553. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
  554. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
  555. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
  556. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
  557. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -326
  558. data/lib/cosmos/gui/dialogs/about_dialog.rb +137 -137
  559. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
  560. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
  561. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
  562. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
  563. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
  564. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
  565. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +260 -260
  566. data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -169
  567. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
  568. data/lib/cosmos/gui/dialogs/progress_dialog.rb +276 -276
  569. data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -165
  570. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
  571. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
  572. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
  573. data/lib/cosmos/gui/dialogs/splash.rb +135 -135
  574. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
  575. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
  576. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
  577. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
  578. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +473 -473
  579. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
  580. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +451 -451
  581. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
  582. data/lib/cosmos/gui/line_graph/lines.rb +290 -290
  583. data/lib/cosmos/gui/line_graph/overview_graph.rb +469 -469
  584. data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
  585. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
  586. data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
  587. data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
  588. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
  589. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
  590. data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -724
  591. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
  592. data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
  593. data/lib/cosmos/gui/opengl/opengl.rb +8 -8
  594. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
  595. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
  596. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
  597. data/lib/cosmos/gui/qt.rb +860 -860
  598. data/lib/cosmos/gui/qt_tool.rb +380 -380
  599. data/lib/cosmos/gui/text/completion.rb +381 -381
  600. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
  601. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
  602. data/lib/cosmos/gui/text/ruby_editor.rb +415 -415
  603. data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
  604. data/lib/cosmos/gui/utilities/script_module_gui.rb +330 -330
  605. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
  606. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
  607. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
  608. data/lib/cosmos/interfaces.rb +11 -11
  609. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -153
  610. data/lib/cosmos/interfaces/interface.rb +225 -225
  611. data/lib/cosmos/interfaces/linc_interface.rb +360 -360
  612. data/lib/cosmos/interfaces/serial_interface.rb +76 -76
  613. data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -129
  614. data/lib/cosmos/interfaces/stream_interface.rb +136 -136
  615. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
  616. data/lib/cosmos/interfaces/tcpip_server_interface.rb +164 -164
  617. data/lib/cosmos/interfaces/udp_interface.rb +161 -161
  618. data/lib/cosmos/io/buffered_file.rb +11 -11
  619. data/lib/cosmos/io/cosmos_snmp.rb +50 -50
  620. data/lib/cosmos/io/io_multiplexer.rb +89 -89
  621. data/lib/cosmos/io/json_drb.rb +376 -376
  622. data/lib/cosmos/io/json_drb_object.rb +198 -198
  623. data/lib/cosmos/io/json_rpc.rb +365 -365
  624. data/lib/cosmos/io/posix_serial_driver.rb +145 -145
  625. data/lib/cosmos/io/raw_logger.rb +174 -174
  626. data/lib/cosmos/io/raw_logger_pair.rb +71 -71
  627. data/lib/cosmos/io/serial_driver.rb +85 -85
  628. data/lib/cosmos/io/stderr.rb +36 -36
  629. data/lib/cosmos/io/stdout.rb +36 -36
  630. data/lib/cosmos/io/tcpip_server.rb +571 -571
  631. data/lib/cosmos/io/udp_sockets.rb +152 -152
  632. data/lib/cosmos/io/win32_serial_driver.rb +145 -145
  633. data/lib/cosmos/packet_logs.rb +7 -7
  634. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -104
  635. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
  636. data/lib/cosmos/packet_logs/packet_log_reader.rb +450 -450
  637. data/lib/cosmos/packet_logs/packet_log_writer.rb +323 -323
  638. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
  639. data/lib/cosmos/packets/binary_accessor.rb +634 -634
  640. data/lib/cosmos/packets/commands.rb +293 -293
  641. data/lib/cosmos/packets/limits.rb +267 -267
  642. data/lib/cosmos/packets/limits_response.rb +38 -38
  643. data/lib/cosmos/packets/packet.rb +786 -786
  644. data/lib/cosmos/packets/packet_config.rb +482 -482
  645. data/lib/cosmos/packets/packet_item.rb +317 -317
  646. data/lib/cosmos/packets/packet_item_limits.rb +128 -128
  647. data/lib/cosmos/packets/parsers/format_string_parser.rb +58 -58
  648. data/lib/cosmos/packets/parsers/limits_parser.rb +146 -146
  649. data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -52
  650. data/lib/cosmos/packets/parsers/macro_parser.rb +116 -116
  651. data/lib/cosmos/packets/parsers/packet_item_parser.rb +215 -215
  652. data/lib/cosmos/packets/parsers/packet_parser.rb +123 -123
  653. data/lib/cosmos/packets/parsers/processor_parser.rb +63 -63
  654. data/lib/cosmos/packets/parsers/state_parser.rb +116 -116
  655. data/lib/cosmos/packets/structure.rb +458 -458
  656. data/lib/cosmos/packets/structure_item.rb +233 -233
  657. data/lib/cosmos/packets/telemetry.rb +350 -350
  658. data/lib/cosmos/processors.rb +6 -6
  659. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
  660. data/lib/cosmos/processors/processor.rb +71 -71
  661. data/lib/cosmos/processors/statistics_processor.rb +65 -65
  662. data/lib/cosmos/processors/watermark_processor.rb +44 -44
  663. data/lib/cosmos/script.rb +9 -9
  664. data/lib/cosmos/script/cmd_tlm_server.rb +110 -110
  665. data/lib/cosmos/script/commands.rb +184 -184
  666. data/lib/cosmos/script/extract.rb +123 -123
  667. data/lib/cosmos/script/limits.rb +114 -114
  668. data/lib/cosmos/script/script.rb +76 -76
  669. data/lib/cosmos/script/scripting.rb +897 -897
  670. data/lib/cosmos/script/telemetry.rb +174 -174
  671. data/lib/cosmos/script/tools.rb +138 -138
  672. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
  673. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
  674. data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
  675. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
  676. data/lib/cosmos/streams/serial_stream.rb +157 -157
  677. data/lib/cosmos/streams/stream.rb +63 -63
  678. data/lib/cosmos/streams/stream_protocol.rb +373 -373
  679. data/lib/cosmos/streams/tcpip_client_stream.rb +113 -113
  680. data/lib/cosmos/streams/tcpip_socket_stream.rb +143 -143
  681. data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
  682. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
  683. data/lib/cosmos/system.rb +4 -4
  684. data/lib/cosmos/system/system.rb +618 -618
  685. data/lib/cosmos/system/target.rb +197 -197
  686. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +255 -255
  687. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +717 -717
  688. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
  689. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
  690. data/lib/cosmos/tools/cmd_tlm_server/api.rb +1034 -1034
  691. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
  692. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -67
  693. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +515 -515
  694. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +253 -253
  695. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +408 -408
  696. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
  697. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -175
  698. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +200 -200
  699. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -176
  700. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +150 -150
  701. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +244 -244
  702. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +90 -90
  703. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +266 -266
  704. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
  705. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
  706. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
  707. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
  708. data/lib/cosmos/tools/data_viewer/data_viewer.rb +621 -621
  709. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +134 -134
  710. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
  711. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -156
  712. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -382
  713. data/lib/cosmos/tools/launcher/launcher.rb +188 -188
  714. data/lib/cosmos/tools/launcher/launcher_config.rb +256 -256
  715. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -40
  716. data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -116
  717. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +837 -837
  718. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
  719. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
  720. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +542 -542
  721. data/lib/cosmos/tools/replay/replay.rb +501 -501
  722. data/lib/cosmos/tools/replay/replay_server.rb +91 -91
  723. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -147
  724. data/lib/cosmos/tools/script_runner/script_runner.rb +922 -922
  725. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
  726. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1798 -1798
  727. data/lib/cosmos/tools/table_manager/table.rb +70 -70
  728. data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
  729. data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
  730. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
  731. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
  732. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
  733. data/lib/cosmos/tools/test_runner/test.rb +539 -539
  734. data/lib/cosmos/tools/test_runner/test_runner.rb +1189 -1189
  735. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -341
  736. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
  737. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1016 -1016
  738. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
  739. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
  740. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
  741. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
  742. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -95
  743. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
  744. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +181 -181
  745. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
  746. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
  747. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -174
  748. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -193
  749. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +407 -407
  750. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
  751. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
  752. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -323
  753. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
  754. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
  755. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
  756. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
  757. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
  758. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
  759. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
  760. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
  761. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
  762. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
  763. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
  764. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -1291
  765. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
  766. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
  767. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -114
  768. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
  769. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -78
  770. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
  771. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
  772. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
  773. data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -486
  774. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +561 -561
  775. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +290 -290
  776. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
  777. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
  778. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -66
  779. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -57
  780. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
  781. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
  782. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
  783. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
  784. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
  785. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
  786. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
  787. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
  788. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
  789. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
  790. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
  791. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
  792. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
  793. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
  794. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
  795. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
  796. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
  797. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
  798. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
  799. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
  800. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
  801. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
  802. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
  803. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
  804. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
  805. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
  806. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
  807. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
  808. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
  809. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
  810. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
  811. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
  812. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
  813. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
  814. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
  815. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
  816. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
  817. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
  818. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
  819. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
  820. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
  821. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
  822. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
  823. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
  824. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
  825. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
  826. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
  827. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
  828. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
  829. data/lib/cosmos/top_level.rb +759 -759
  830. data/lib/cosmos/utilities.rb +11 -11
  831. data/lib/cosmos/utilities/crc.rb +166 -166
  832. data/lib/cosmos/utilities/csv.rb +83 -83
  833. data/lib/cosmos/utilities/logger.rb +137 -137
  834. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
  835. data/lib/cosmos/utilities/message_log.rb +79 -79
  836. data/lib/cosmos/utilities/quaternion.rb +258 -258
  837. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
  838. data/lib/cosmos/utilities/simulated_target.rb +99 -99
  839. data/lib/cosmos/utilities/sleeper.rb +44 -44
  840. data/lib/cosmos/version.rb +12 -12
  841. data/lib/cosmos/win32/excel.rb +66 -66
  842. data/lib/cosmos/win32/win32.rb +387 -387
  843. data/lib/cosmos/win32/win32_main.rb +321 -321
  844. data/roodi.yml +24 -24
  845. data/run_gui_tests.bat +0 -0
  846. data/spec/ccsds/ccsds_packet_spec.rb +67 -67
  847. data/spec/ccsds/ccsds_parser_spec.rb +148 -148
  848. data/spec/config/config_parser_spec.rb +322 -322
  849. data/spec/conversions/conversion_spec.rb +31 -31
  850. data/spec/conversions/generic_conversion_spec.rb +45 -45
  851. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
  852. data/spec/conversions/polynomial_conversion_spec.rb +40 -40
  853. data/spec/conversions/processor_conversion_spec.rb +45 -45
  854. data/spec/conversions/received_count_conversion_spec.rb +43 -43
  855. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
  856. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
  857. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
  858. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
  859. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
  860. data/spec/core_ext/array_spec.rb +186 -186
  861. data/spec/core_ext/class_spec.rb +36 -36
  862. data/spec/core_ext/cosmos_io_spec.rb +77 -77
  863. data/spec/core_ext/exception_spec.rb +91 -91
  864. data/spec/core_ext/file_spec.rb +72 -72
  865. data/spec/core_ext/hash_spec.rb +24 -24
  866. data/spec/core_ext/io_spec.rb +46 -46
  867. data/spec/core_ext/kernel_spec.rb +54 -54
  868. data/spec/core_ext/math_spec.rb +116 -116
  869. data/spec/core_ext/matrix_spec.rb +66 -66
  870. data/spec/core_ext/objectspace_spec.rb +29 -29
  871. data/spec/core_ext/range_spec.rb +21 -21
  872. data/spec/core_ext/socket_spec.rb +32 -32
  873. data/spec/core_ext/string_spec.rb +223 -223
  874. data/spec/core_ext/stringio_spec.rb +21 -21
  875. data/spec/core_ext/time_spec.rb +202 -202
  876. data/spec/gui/line_graph/line_clip_spec.rb +322 -322
  877. data/spec/gui/qt_spec.rb +102 -102
  878. data/spec/install/config/system/system.txt +33 -33
  879. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  880. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  881. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  882. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  883. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
  884. data/spec/install/config/targets/COSMOS/target.txt +5 -5
  885. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
  886. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
  887. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
  888. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
  889. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
  890. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -305
  891. data/spec/install/config/targets/INST/target.txt +10 -10
  892. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
  893. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
  894. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  895. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
  896. data/spec/interfaces/interface_spec.rb +130 -130
  897. data/spec/interfaces/linc_interface_spec.rb +259 -259
  898. data/spec/interfaces/serial_interface_spec.rb +56 -56
  899. data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
  900. data/spec/interfaces/stream_interface_spec.rb +157 -157
  901. data/spec/interfaces/tcpip_client_interface_spec.rb +55 -55
  902. data/spec/interfaces/tcpip_server_interface_spec.rb +160 -160
  903. data/spec/interfaces/udp_interface_spec.rb +175 -175
  904. data/spec/io/buffered_file_spec.rb +113 -113
  905. data/spec/io/io_multiplexer_spec.rb +94 -94
  906. data/spec/io/json_drb_object_spec.rb +119 -119
  907. data/spec/io/json_drb_spec.rb +311 -311
  908. data/spec/io/json_rpc_spec.rb +264 -264
  909. data/spec/io/raw_logger_pair_spec.rb +76 -76
  910. data/spec/io/raw_logger_spec.rb +133 -133
  911. data/spec/io/serial_driver_spec.rb +60 -60
  912. data/spec/io/stderr_spec.rb +32 -32
  913. data/spec/io/stdout_spec.rb +32 -32
  914. data/spec/io/tcpip_server_spec.rb +338 -338
  915. data/spec/io/udp_sockets_spec.rb +94 -94
  916. data/spec/io/win32_serial_driver_spec.rb +88 -88
  917. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
  918. data/spec/packet_logs/packet_log_reader_spec.rb +468 -468
  919. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
  920. data/spec/packet_logs/packet_log_writer_spec.rb +225 -225
  921. data/spec/packets/binary_accessor_spec.rb +2326 -2326
  922. data/spec/packets/commands_spec.rb +369 -369
  923. data/spec/packets/limits_response_spec.rb +25 -25
  924. data/spec/packets/limits_spec.rb +344 -344
  925. data/spec/packets/packet_config_spec.rb +805 -805
  926. data/spec/packets/packet_item_limits_spec.rb +161 -161
  927. data/spec/packets/packet_item_spec.rb +386 -386
  928. data/spec/packets/packet_spec.rb +1317 -1317
  929. data/spec/packets/parsers/format_string_parser_spec.rb +122 -122
  930. data/spec/packets/parsers/limits_parser_spec.rb +282 -282
  931. data/spec/packets/parsers/limits_response_parser_spec.rb +149 -149
  932. data/spec/packets/parsers/macro_parser_spec.rb +212 -212
  933. data/spec/packets/parsers/packet_item_parser_spec.rb +306 -306
  934. data/spec/packets/parsers/packet_parser_spec.rb +99 -99
  935. data/spec/packets/parsers/processor_parser_spec.rb +114 -114
  936. data/spec/packets/parsers/state_parser_spec.rb +156 -156
  937. data/spec/packets/structure_item_spec.rb +195 -195
  938. data/spec/packets/structure_spec.rb +565 -565
  939. data/spec/packets/telemetry_spec.rb +578 -578
  940. data/spec/processors/new_packet_log_processor_spec.rb +39 -39
  941. data/spec/processors/processor_spec.rb +55 -55
  942. data/spec/processors/statistics_processor_spec.rb +60 -60
  943. data/spec/processors/watermark_processor_spec.rb +51 -51
  944. data/spec/script/cmd_tlm_server_spec.rb +110 -110
  945. data/spec/script/commands_disconnect_spec.rb +270 -270
  946. data/spec/script/commands_spec.rb +302 -302
  947. data/spec/script/limits_spec.rb +153 -153
  948. data/spec/script/script_spec.rb +86 -86
  949. data/spec/script/scripting_spec.rb +440 -440
  950. data/spec/script/telemetry_spec.rb +165 -165
  951. data/spec/script/tools_spec.rb +117 -117
  952. data/spec/spec_helper.rb +190 -190
  953. data/spec/streams/burst_stream_protocol_spec.rb +32 -32
  954. data/spec/streams/fixed_stream_protocol_spec.rb +113 -113
  955. data/spec/streams/length_stream_protocol_spec.rb +300 -300
  956. data/spec/streams/preidentified_stream_protocol_spec.rb +121 -121
  957. data/spec/streams/serial_stream_spec.rb +117 -117
  958. data/spec/streams/stream_protocol_spec.rb +346 -346
  959. data/spec/streams/stream_spec.rb +30 -30
  960. data/spec/streams/tcpip_client_stream_spec.rb +57 -57
  961. data/spec/streams/tcpip_socket_stream_spec.rb +193 -193
  962. data/spec/streams/template_stream_protocol_spec.rb +156 -156
  963. data/spec/streams/terminated_stream_protocol_spec.rb +127 -127
  964. data/spec/system/system_spec.rb +665 -665
  965. data/spec/system/target_spec.rb +250 -250
  966. data/spec/tools/cmd_tlm_server/api_spec.rb +1117 -1117
  967. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
  968. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
  969. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +453 -453
  970. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
  971. data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -151
  972. data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -235
  973. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
  974. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -252
  975. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
  976. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +151 -151
  977. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -223
  978. data/spec/tools/launcher/launcher_config_spec.rb +464 -464
  979. data/spec/top_level/top_level_spec.rb +334 -334
  980. data/spec/utilities/crc_spec.rb +45 -45
  981. data/spec/utilities/csv_spec.rb +97 -97
  982. data/spec/utilities/logger_spec.rb +102 -102
  983. data/spec/utilities/message_log_spec.rb +89 -89
  984. data/spec/utilities/quaternion_spec.rb +107 -107
  985. data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
  986. data/tasks/manifest.rake +22 -22
  987. data/tasks/spec.rake +23 -23
  988. data/test/benchmarks/binary_accessor_benchmark.rb +14 -14
  989. data/test/benchmarks/gsub_benchmark.rb +152 -152
  990. data/test/benchmarks/is_a_benchmark.rb +34 -34
  991. data/test/performance/PACKETS.bat +0 -0
  992. data/test/performance/Rakefile +77 -77
  993. data/test/performance/THREADS.bat +0 -0
  994. data/test/performance/config/data/crc.txt +196 -196
  995. data/test/performance/config/data/diamond.STL +57 -57
  996. data/test/performance/config/data/meta_init.txt +4 -4
  997. data/test/performance/config/system/system_packets.txt +39 -39
  998. data/test/performance/config/system/system_threads.txt +59 -59
  999. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -46
  1000. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  1001. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  1002. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -20
  1003. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -19
  1004. data/test/performance/config/targets/COSMOS/target.txt +11 -11
  1005. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -20
  1006. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -98
  1007. data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -6
  1008. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -22
  1009. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -24
  1010. data/test/performance/config/targets/PACKET/screens/status.txt +25 -25
  1011. data/test/performance/config/targets/PACKET/target.txt +28 -28
  1012. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -12
  1013. data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -17
  1014. data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -18
  1015. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -6
  1016. data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -22
  1017. data/test/performance/config/targets/THREAD/screens/status.txt +25 -25
  1018. data/test/performance/config/targets/THREAD/target.txt +6 -6
  1019. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -28
  1020. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -68
  1021. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -11
  1022. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -66
  1023. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  1024. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  1025. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  1026. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -25
  1027. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  1028. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  1029. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  1030. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  1031. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  1032. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  1033. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  1034. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  1035. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -1
  1036. data/test/performance/config/tools/launcher/launcher_packets.txt +34 -34
  1037. data/test/performance/config/tools/launcher/launcher_threads.txt +83 -83
  1038. data/test/performance/config/tools/script_runner/script_runner.txt +3 -3
  1039. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -8
  1040. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  1041. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  1042. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  1043. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  1044. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  1045. data/test/performance/config/tools/test_runner/test_runner.txt +17 -17
  1046. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  1047. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  1048. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  1049. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  1050. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -204
  1051. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -13
  1052. data/test/performance/lib/packet_target.rb +126 -126
  1053. data/test/performance/lib/thread_target.rb +120 -120
  1054. data/test/performance/lib/user_version.rb +3 -3
  1055. data/test/performance/procedures/checks.rb +11 -11
  1056. data/test/performance/procedures/clear_util.rb +7 -7
  1057. data/test/performance/procedures/collect.rb +18 -18
  1058. data/test/performance/procedures/collect_util.rb +14 -14
  1059. data/test/performance/procedures/cosmos_api_test.rb +293 -293
  1060. data/test/performance/procedures/disconnect.rb +29 -29
  1061. data/test/performance/procedures/example_test.rb +182 -182
  1062. data/test/performance/procedures/plot_test.rb +8 -8
  1063. data/test/performance/procedures/procedure.rb +2 -2
  1064. data/test/performance/procedures/run_example_test.rb +3 -3
  1065. data/test/performance/procedures/test.rb +51 -51
  1066. data/test/performance/tools/CmdExtractor +14 -14
  1067. data/test/performance/tools/CmdExtractor.bat +0 -0
  1068. data/test/performance/tools/CmdSender +14 -14
  1069. data/test/performance/tools/CmdSender.bat +0 -0
  1070. data/test/performance/tools/CmdTlmServer +16 -16
  1071. data/test/performance/tools/CmdTlmServer.bat +0 -0
  1072. data/test/performance/tools/CmdTlmServerMemProf +20 -20
  1073. data/test/performance/tools/CmdTlmServerMemProf.bat +0 -0
  1074. data/test/performance/tools/DataViewer +14 -14
  1075. data/test/performance/tools/DataViewer.bat +0 -0
  1076. data/test/performance/tools/HandbookCreator +14 -14
  1077. data/test/performance/tools/HandbookCreator.bat +0 -0
  1078. data/test/performance/tools/Launcher +14 -14
  1079. data/test/performance/tools/Launcher.bat +0 -0
  1080. data/test/performance/tools/LimitsMonitor +14 -14
  1081. data/test/performance/tools/LimitsMonitor.bat +0 -0
  1082. data/test/performance/tools/OpenGLBuilder +14 -14
  1083. data/test/performance/tools/OpenGLBuilder.bat +0 -0
  1084. data/test/performance/tools/PacketTarget +14 -14
  1085. data/test/performance/tools/PacketTarget.bat +0 -0
  1086. data/test/performance/tools/PacketViewer +14 -14
  1087. data/test/performance/tools/PacketViewer.bat +0 -0
  1088. data/test/performance/tools/Replay +14 -14
  1089. data/test/performance/tools/Replay.bat +0 -0
  1090. data/test/performance/tools/ScpiTarget +14 -14
  1091. data/test/performance/tools/ScpiTarget.bat +0 -0
  1092. data/test/performance/tools/ScriptRunner +14 -14
  1093. data/test/performance/tools/ScriptRunner.bat +0 -0
  1094. data/test/performance/tools/TableManager +14 -14
  1095. data/test/performance/tools/TableManager.bat +0 -0
  1096. data/test/performance/tools/TestRunner +14 -14
  1097. data/test/performance/tools/TestRunner.bat +0 -0
  1098. data/test/performance/tools/ThreadTarget +14 -14
  1099. data/test/performance/tools/ThreadTarget.bat +0 -0
  1100. data/test/performance/tools/TlmExtractor +14 -14
  1101. data/test/performance/tools/TlmExtractor.bat +0 -0
  1102. data/test/performance/tools/TlmGrapher +14 -14
  1103. data/test/performance/tools/TlmGrapher.bat +0 -0
  1104. data/test/performance/tools/TlmGrapherMemProf +19 -19
  1105. data/test/performance/tools/TlmGrapherMemProf.bat +0 -0
  1106. data/test/performance/tools/TlmViewer +14 -14
  1107. data/test/performance/tools/TlmViewer.bat +0 -0
  1108. data/test/performance/tools/TlmViewerMemProf +19 -19
  1109. data/test/performance/tools/TlmViewerMemProf.bat +0 -0
  1110. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  1111. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  1112. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  1113. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  1114. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  1115. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  1116. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  1117. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  1118. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  1119. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  1120. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  1121. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  1122. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  1123. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  1124. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  1125. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  1126. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  1127. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  1128. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  1129. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  1130. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  1131. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  1132. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  1133. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  1134. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  1135. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  1136. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  1137. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -38
  1138. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  1139. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  1140. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  1141. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  1142. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  1143. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  1144. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  1145. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  1146. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  1147. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  1148. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  1149. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  1150. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  1151. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  1152. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  1153. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  1154. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  1155. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  1156. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  1157. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  1158. metadata +3 -3
@@ -1,717 +1,717 @@
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/script'
14
- require 'cosmos/gui/qt_tool'
15
- require 'cosmos/config/config_parser'
16
- require 'cosmos/gui/text/completion'
17
- require 'cosmos/gui/utilities/script_module_gui'
18
- require 'cosmos/gui/dialogs/splash'
19
- require 'cosmos/gui/dialogs/cmd_details_dialog'
20
- require 'cosmos/tools/cmd_sender/cmd_sender_text_edit'
21
- require 'cosmos/tools/cmd_sender/cmd_sender_item_delegate'
22
- end
23
-
24
- module Cosmos
25
-
26
- Cosmos.disable_warnings do
27
- module Script
28
- def prompt_for_script_abort
29
- window = get_cmd_tlm_gui_window()
30
- window.statusBar.showMessage(tr("Hazardous command not sent"))
31
- return true # Aborted - Don't retry
32
- end
33
- end #module Script
34
- end
35
-
36
- $eval_binding = binding()
37
-
38
- # Command Sender sends commands to the COSMOS server. Itgives the user
39
- # a drop down to select the target and then command to send.
40
- # It then displays all the command parameters. Once a
41
- # command is sent it is added to the command history window which allows the
42
- # user to resend the command or copy it for use in a script.
43
- class CmdSender < QtTool
44
- slots 'file_send_raw()'
45
- slots 'update_cmd_params(bool)'
46
- slots 'menu_states_in_hex(bool)'
47
- slots 'target_changed(const QString&)'
48
- slots 'cmd_changed(const QString&)'
49
- slots 'send_button()'
50
- slots 'context_menu(const QPoint&)'
51
- slots 'click_callback(QTableWidgetItem*)'
52
-
53
- MANUALLY = "MANUALLY ENTERED"
54
-
55
- def self.send_count
56
- @@send_count
57
- end
58
-
59
- def self.send_count=(val)
60
- @@send_count = val
61
- end
62
-
63
- def self.param_widgets
64
- @@param_widgets
65
- end
66
-
67
- def self.table
68
- @@table
69
- end
70
-
71
- def initialize(options)
72
- # MUST BE FIRST - All code before super is executed twice in RubyQt Based classes
73
- super(options)
74
- Cosmos.load_cosmos_icon("cmd_sender.png")
75
-
76
- @file_dir = System.paths['LOGS']
77
- @message_log = MessageLog.new('cmdsender')
78
- @send_raw_dir = nil
79
- @@send_count = 0
80
- @@param_widgets = []
81
- @@table = nil
82
-
83
- initialize_actions()
84
- initialize_menus()
85
- initialize_central_widget()
86
- complete_initialize() # defined in qt_tool
87
- end
88
-
89
- def initialize_actions
90
- super()
91
-
92
- @send_raw_action = Qt::Action.new(Cosmos.get_icon('send_file.png'),
93
- tr('&Send Raw'),
94
- self)
95
- @send_raw_action.shortcut = Qt::KeySequence.new(tr('Ctrl+S'))
96
- @send_raw_action.statusTip = tr('Send raw data from a file')
97
- connect(@send_raw_action, SIGNAL('triggered()'), self, SLOT('file_send_raw()'))
98
-
99
- @ignore_range = Qt::Action.new(tr('&Ignore Range Checks'), self)
100
- @ignore_range.statusTip = tr('Ignore range checks when processing command')
101
- @ignore_range.setCheckable(true)
102
- @ignore_range.setChecked(false)
103
-
104
- @states_in_hex = Qt::Action.new(tr('&Display State Values in Hex'), self)
105
- @states_in_hex.statusTip = tr('Display states values in hex instead of decimal')
106
- @states_in_hex.setCheckable(true)
107
- @states_in_hex.setChecked(false)
108
- connect(@states_in_hex, SIGNAL('toggled(bool)'), self, SLOT('menu_states_in_hex(bool)'))
109
-
110
- @show_ignored = Qt::Action.new(tr('&Show Ignored Parameters'), self)
111
- @show_ignored.statusTip = tr('Show ignored parameters which are normally hidden')
112
- @show_ignored.setCheckable(true)
113
- @show_ignored.setChecked(false)
114
- connect(@show_ignored, SIGNAL('toggled(bool)'), self, SLOT('update_cmd_params(bool)'))
115
-
116
- @cmd_raw = Qt::Action.new(tr('Disable &Parameter Conversions'), self)
117
- @cmd_raw.statusTip = tr('Send the command without running write or state conversions')
118
- @cmd_raw.setCheckable(true)
119
- @cmd_raw.setChecked(false)
120
- end
121
-
122
- def initialize_menus
123
- # File Menu
124
- file_menu = menuBar.addMenu(tr('&File'))
125
- file_menu.addAction(@send_raw_action)
126
- file_menu.addAction(@exit_action)
127
- file_menu.insertSeparator(@exit_action)
128
-
129
- # Mode Menu
130
- mode_menu = menuBar.addMenu(tr('&Mode'))
131
- mode_menu.addAction(@ignore_range)
132
- mode_menu.addAction(@states_in_hex)
133
- mode_menu.addAction(@show_ignored)
134
- mode_menu.addAction(@cmd_raw)
135
-
136
- # Help Menu
137
- @about_string = "Command Sender allows the user to send any command defined in the system."
138
- initialize_help_menu()
139
- end
140
-
141
- def initialize_central_widget
142
- # Create the central widget
143
- central_widget = Qt::Widget.new
144
- setCentralWidget(central_widget)
145
-
146
- # Create the top half of the splitter window
147
- sender = Qt::Widget.new
148
-
149
- # Create the top level vertical layout
150
- top_layout = Qt::VBoxLayout.new(sender)
151
- # Set the size constraint to always respect the minimum sizes of the child widgets
152
- # If this is not set then when we refresh the command parameters they'll all be squished
153
- top_layout.setSizeConstraint(Qt::Layout::SetMinimumSize)
154
-
155
- # Set the target combobox selection
156
- @target_select = Qt::ComboBox.new
157
- @target_select.setMaxVisibleItems(6)
158
- connect(@target_select, SIGNAL('activated(const QString&)'), self, SLOT('target_changed(const QString&)'))
159
- target_label = Qt::Label.new(tr("&Target:"))
160
- target_label.setBuddy(@target_select)
161
-
162
- # Set the comamnd combobox selection
163
- @cmd_select = Qt::ComboBox.new
164
- @cmd_select.setMaxVisibleItems(20)
165
- connect(@cmd_select, SIGNAL('activated(const QString&)'), self, SLOT('cmd_changed(const QString&)'))
166
- cmd_label = Qt::Label.new(tr("&Command:"))
167
- cmd_label.setBuddy(@cmd_select)
168
-
169
- # Button to send command
170
- send = Qt::PushButton.new("Send")
171
- connect(send, SIGNAL('clicked()'), self, SLOT('send_button()'))
172
-
173
- # Layout the top level selection
174
- select_layout = Qt::HBoxLayout.new
175
- select_layout.addWidget(target_label)
176
- select_layout.addWidget(@target_select, 1)
177
- select_layout.addWidget(cmd_label)
178
- select_layout.addWidget(@cmd_select, 1)
179
- select_layout.addWidget(send)
180
- top_layout.addLayout(select_layout)
181
-
182
- # Separator Between Command Selection and Command Description
183
- sep1 = Qt::Frame.new(sender)
184
- sep1.setFrameStyle(Qt::Frame::HLine | Qt::Frame::Sunken)
185
- top_layout.addWidget(sep1)
186
-
187
- # Command Description Label
188
- dec_label = Qt::Label.new(tr("Description:"))
189
- @description = Qt::Label.new('')
190
- @description.setWordWrap(true)
191
- desc_layout = Qt::HBoxLayout.new
192
- desc_layout.addWidget(dec_label)
193
- desc_layout.addWidget(@description, 1)
194
- top_layout.addLayout(desc_layout)
195
-
196
- # Separator Between Command Selection and Description
197
- sep2 = Qt::Frame.new(sender)
198
- sep2.setFrameStyle(Qt::Frame::HLine | Qt::Frame::Sunken)
199
- top_layout.addWidget(sep2)
200
-
201
- # Parameters Label
202
- param_label = Qt::Label.new(tr("Parameters:"))
203
- top_layout.addWidget(param_label)
204
-
205
- # Grid Layout for Parameters
206
- @table_layout = Qt::VBoxLayout.new
207
- top_layout.addLayout(@table_layout, 500)
208
-
209
- # Add stretch to force everything to fit against the top of the window
210
- # otherwise the selection window, description, and parameters all try
211
- # to get equal space.
212
- top_layout.addStretch(1)
213
-
214
- # Create the text edit where previously issued commands go and where
215
- # commands can be manually typed in and re-executed
216
- @input = CmdSenderTextEdit.new(statusBar)
217
- @input.setFocus()
218
-
219
- layout = Qt::VBoxLayout.new
220
- layout.setSpacing(1)
221
- layout.setContentsMargins(1, 1, 1, 1)
222
- layout.setSizeConstraint(Qt::Layout::SetMaximumSize)
223
- layout.addWidget(Qt::Label.new("Command History: (Pressing Enter on the line re-executes the command)"))
224
- layout.addWidget(@input)
225
- history = Qt::Widget.new
226
- history.layout = layout
227
-
228
- # Create the scroll area
229
- scroll = Qt::ScrollArea.new
230
- scroll.setMinimumSize(500, 150)
231
- scroll.setWidgetResizable(true)
232
- scroll.setWidget(sender)
233
-
234
- splitter = Qt::Splitter.new(central_widget)
235
- splitter.setOrientation(Qt::Vertical)
236
- splitter.addWidget(scroll)
237
- splitter.addWidget(history)
238
- splitter.setStretchFactor(0,10)
239
- splitter.setStretchFactor(1,1)
240
-
241
- layout = Qt::VBoxLayout.new
242
- layout.setSpacing(1)
243
- layout.setContentsMargins(1, 1, 1, 1)
244
- layout.setSizeConstraint(Qt::Layout::SetMaximumSize)
245
- layout.addWidget(splitter)
246
- central_widget.layout = layout
247
-
248
- #Mark this window as the window for popups
249
- set_cmd_tlm_gui_window(self)
250
-
251
- # Bring up slash screen for long duration tasks after creation
252
- Splash.execute(self) do |splash|
253
- # Configure CosmosConfig to interact with splash screen
254
- ConfigParser.splash = splash
255
-
256
- System.commands
257
- Qt.execute_in_main_thread(true) do
258
- update_targets()
259
- update_commands()
260
- update_cmd_params()
261
- end
262
-
263
- # Unconfigure CosmosConfig to interact with splash screen
264
- ConfigParser.splash = nil
265
- end
266
- end
267
-
268
- def menu_states_in_hex(checked)
269
- @@param_widgets.each do |packet_item, value_item, state_value_item|
270
- if state_value_item
271
- text = state_value_item.text
272
- quotes_removed = text.remove_quotes
273
- if text == quotes_removed
274
- if checked
275
- if text.is_int?
276
- @@table.blockSignals(true)
277
- state_value_item.text = sprintf("0x%X", text.to_i)
278
- @@table.blockSignals(false)
279
- end
280
- else
281
- if text.is_hex?
282
- @@table.blockSignals(true)
283
- state_value_item.text = Integer(text).to_s
284
- @@table.blockSignals(false)
285
- end
286
- end
287
- end
288
- end
289
- end
290
- end
291
-
292
- def file_send_raw
293
- begin
294
- dialog = Qt::Dialog.new(self, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
295
- dialog.setWindowTitle("Send Raw Data From File")
296
- layout = Qt::GridLayout.new
297
- interfaces = Qt::ComboBox.new
298
- interfaces.addItems(get_interface_names())
299
- interfaces.setMaxVisibleItems(30)
300
- layout.addWidget(interfaces, 0, 1)
301
- int_label = Qt::Label.new(tr("&Interface:"))
302
- int_label.setBuddy(interfaces)
303
- layout.addWidget(int_label, 0, 0)
304
-
305
- file_line = Qt::LineEdit.new(@send_raw_dir)
306
- file_line.setMinimumSize(250, 0)
307
- file_label = Qt::Label.new(tr("&Filename:"))
308
- file_label.setBuddy(file_line)
309
- get_file = Qt::PushButton.new("Select")
310
- file_layout = Qt::BoxLayout.new(Qt::Horizontal)
311
- file_layout.addWidget(get_file)
312
- file_layout.addWidget(file_line)
313
- get_file.connect(SIGNAL('clicked()')) do
314
- Cosmos.set_working_dir do
315
- file_line.text = Qt::FileDialog::getOpenFileName(self, "Select File", @send_raw_dir, tr("Binary Files (*.bin);;All Files (*)"))
316
- end
317
- end
318
-
319
- layout.addWidget(file_label, 1, 0)
320
- layout.addLayout(file_layout, 1, 1)
321
-
322
- button_layout = Qt::BoxLayout.new(Qt::Horizontal)
323
- ok = Qt::PushButton.new("Ok")
324
- connect(ok, SIGNAL('clicked()'), dialog, SLOT('accept()'))
325
- button_layout.addWidget(ok)
326
- cancel = Qt::PushButton.new("Cancel")
327
- connect(cancel, SIGNAL('clicked()'), dialog, SLOT('reject()'))
328
- button_layout.addWidget(cancel)
329
- layout.addLayout(button_layout, 2, 0, 1 ,2)
330
-
331
- dialog.setLayout(layout)
332
- if dialog.exec == Qt::Dialog::Accepted
333
- @send_raw_dir = file_line.text
334
- Cosmos.set_working_dir do
335
- send_raw_file(interfaces.text, file_line.text)
336
- end
337
- statusBar.showMessage(tr("File #{file_line.text} sent to interface #{interfaces.text}"))
338
- end
339
- dialog.dispose
340
- rescue Exception => err
341
- message = "Error sending raw file due to #{err}"
342
- @message_log.write(Time.now.formatted + ' ' + message + "\n")
343
- statusBar.showMessage(message)
344
- rescue DRb::DRbConnError
345
- message = "Error Connecting to Command and Telemetry Server"
346
- @message_log.write(Time.now.formatted + ' ' + message + "\n")
347
- statusBar.showMessage(message)
348
- end
349
- end
350
-
351
- def closeEvent(event)
352
- shutdown_cmd_tlm()
353
- @message_log.stop
354
- super(event)
355
- end
356
-
357
- def target_changed(target)
358
- update_commands()
359
- update_cmd_params()
360
- end
361
-
362
- def cmd_changed(command)
363
- update_cmd_params()
364
- end
365
-
366
- def send_button
367
- begin
368
- target_name = @target_select.text
369
- packet_name = @cmd_select.text
370
- if target_name and packet_name
371
- output_string, params = view_as_script()
372
- @message_log.write(Time.now.formatted + ' ' + output_string + "\n")
373
- if @cmd_raw.checked?
374
- if @ignore_range.checked?
375
- cmd_raw_no_range_check(target_name, packet_name, params)
376
- else
377
- cmd_raw(target_name, packet_name, params)
378
- end
379
- else
380
- if @ignore_range.checked?
381
- cmd_no_range_check(target_name, packet_name, params)
382
- else
383
- cmd(target_name, packet_name, params)
384
- end
385
- end
386
-
387
- if statusBar.currentMessage != 'Hazardous command not sent'
388
- @@send_count += 1
389
- statusBar.showMessage("#{output_string} sent. (#{@@send_count})")
390
- @input.append(output_string)
391
- @input.moveCursor(Qt::TextCursor::End)
392
- @input.ensureCursorVisible()
393
- end
394
- end
395
- rescue DRb::DRbConnError
396
- message = "Error Connecting to Command and Telemetry Server"
397
- @message_log.write(Time.now.formatted + ' ' + message + "\n")
398
- statusBar.showMessage(message)
399
- Qt::MessageBox.critical(self, 'Error', message)
400
- rescue Exception => err
401
- message = "Error sending #{target_name} #{packet_name} due to #{err}"
402
- @message_log.write(Time.now.formatted + ' ' + message + "\n")
403
- statusBar.showMessage(message)
404
- Qt::MessageBox.critical(self, 'Error', message)
405
- end
406
- end
407
-
408
- def view_as_script
409
- params = {}
410
-
411
- @@param_widgets.each do |packet_item, value_item, state_value_item|
412
- text = value_item.text
413
-
414
- text = state_value_item.text if state_value_item and (text == MANUALLY or @cmd_raw.checked?)
415
- quotes_removed = text.remove_quotes
416
- if text == quotes_removed
417
- params[packet_item.name] = text.convert_to_value
418
- else
419
- params[packet_item.name] = quotes_removed
420
- end
421
- raise "#{packet_item.name} is required." if quotes_removed == '' and packet_item.required
422
- end
423
- statusBar.clearMessage()
424
-
425
- output_string = build_cmd_output_string(@target_select.text, @cmd_select.text, params, @cmd_raw.checked?)
426
- if output_string =~ /[\x00-\x08\x0B-\x0C\x0E-\x1F\x7F-\xFF]/
427
- output_string = output_string.inspect.remove_quotes
428
- end
429
-
430
- if @cmd_raw.checked?
431
- if @ignore_range.checked?
432
- output_string.insert(7, '_no_range_check')
433
- end
434
- else
435
- if @ignore_range.checked?
436
- output_string.insert(3, '_no_range_check')
437
- end
438
- end
439
-
440
- return output_string, params
441
- end
442
-
443
- def update_targets
444
- @target_select.clearItems()
445
- target_names = System.commands.target_names
446
- target_names_to_delete = []
447
- target_names.each do |target_name|
448
- found_non_hidden = false
449
- begin
450
- packets = System.commands.packets(target_name)
451
- packets.each do |packet_name, packet|
452
- found_non_hidden = true unless packet.hidden
453
- end
454
- rescue
455
- # Don't do anything
456
- end
457
- target_names_to_delete << target_name unless found_non_hidden
458
- end
459
- target_names_to_delete.each do |target_name|
460
- target_names.delete(target_name)
461
- end
462
- target_names.each do |target_name|
463
- @target_select.addItem(target_name)
464
- end
465
- end
466
-
467
- def update_commands
468
- @cmd_select.clearItems()
469
- target_name = @target_select.text
470
- if target_name
471
- commands = System.commands.packets(@target_select.text)
472
- command_names = []
473
- commands.each do |command_name, command|
474
- command_names << command_name unless command.hidden
475
- end
476
- command_names.sort!
477
- command_names.each do |command_name|
478
- @cmd_select.addItem(command_name)
479
- end
480
- end
481
- end
482
-
483
- def update_cmd_params(ignored_toggle = nil)
484
- old_params = {}
485
- if ignored_toggle.nil?
486
- ignored_toggle = false
487
- else
488
- ignored_toggle = true
489
- # Save parameter values
490
- @@param_widgets.each do |packet_item, value_item, state_value_item|
491
- text = value_item.text
492
- if state_value_item
493
- old_params[packet_item.name] = [text, state_value_item.text]
494
- else
495
- old_params[packet_item.name] = text
496
- end
497
- end
498
- end
499
-
500
- # Clear Status Bar
501
- statusBar.showMessage(tr(""))
502
-
503
- target_name = @target_select.text
504
- target = System.targets[target_name]
505
- packet_name = @cmd_select.text
506
- if target_name and packet_name
507
- packet = System.commands.packet(target_name, packet_name)
508
- packet_items = packet.sorted_items
509
- shown_packet_items = []
510
- packet_items.each do |packet_item|
511
- next if target and target.ignored_parameters.include?(packet_item.name) && !@show_ignored.checked?
512
- shown_packet_items << packet_item
513
- end
514
-
515
- # Update Command Description
516
- @description.text = packet.description.to_s
517
-
518
- # Destroy the old table widget
519
- @@table.dispose if @@table
520
- @@table = nil
521
-
522
- # Update Parameters
523
- @@param_widgets = []
524
- drawn_header = false
525
-
526
- row = 0
527
- shown_packet_items.each do |packet_item|
528
- next if target and target.ignored_parameters.include?(packet_item.name) && !@show_ignored.checked?
529
- value_item = nil
530
- state_value_item = nil
531
-
532
- unless drawn_header
533
- @@table = Qt::TableWidget.new()
534
- @@table.setSizePolicy(Qt::SizePolicy::Expanding, Qt::SizePolicy::Expanding)
535
- @@table.setWordWrap(true)
536
- @@table.setRowCount(shown_packet_items.length)
537
- @@table.setColumnCount(5)
538
- @@table.setHorizontalHeaderLabels(['Name', ' Value or State ', ' ', 'Units', 'Description'])
539
- @@table.horizontalHeader.setStretchLastSection(true)
540
- @@table.verticalHeader.setVisible(false)
541
- @@table.setItemDelegate(CmdSenderItemDelegate.new(@@table))
542
- @@table.setContextMenuPolicy(Qt::CustomContextMenu)
543
- @@table.verticalHeader.setResizeMode(Qt::HeaderView::ResizeToContents)
544
- @@table.setEditTriggers(Qt::AbstractItemView::AllEditTriggers)
545
- @@table.setSelectionMode(Qt::AbstractItemView::NoSelection)
546
- connect(@@table, SIGNAL('customContextMenuRequested(const QPoint&)'), self, SLOT('context_menu(const QPoint&)'))
547
- connect(@@table, SIGNAL('itemClicked(QTableWidgetItem*)'), self, SLOT('click_callback(QTableWidgetItem*)'))
548
- drawn_header = true
549
- end
550
-
551
- # Parameter Name
552
- item = Qt::TableWidgetItem.new("#{packet_item.name}:")
553
- item.setTextAlignment(Qt::AlignRight | Qt::AlignVCenter)
554
- item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable | Qt::ItemIsEnabled)
555
- @@table.setItem(row, 0, item)
556
-
557
- if packet_item.states
558
- default_state = packet_item.states.key(packet_item.default)
559
- if old_params[packet_item.name]
560
- value_item = Qt::TableWidgetItem.new(old_params[packet_item.name][0])
561
- else
562
- if default_state
563
- value_item = Qt::TableWidgetItem.new(default_state.to_s)
564
- else
565
- value_item = Qt::TableWidgetItem.new(MANUALLY)
566
- end
567
- end
568
- value_item.setTextAlignment(Qt::AlignRight | Qt::AlignVCenter)
569
- value_item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable)
570
- @@table.setItem(row, 1, value_item)
571
-
572
- if old_params[packet_item.name]
573
- state_value_item = Qt::TableWidgetItem.new(old_params[packet_item.name][1])
574
- else
575
- if @states_in_hex.checked? && packet_item.default.kind_of?(Integer)
576
- state_value_item = Qt::TableWidgetItem.new(sprintf("0x%X", packet_item.default))
577
- else
578
- state_value_item = Qt::TableWidgetItem.new(packet_item.default.to_s)
579
- end
580
- end
581
- state_value_item.setTextAlignment(Qt::AlignRight | Qt::AlignVCenter)
582
- state_value_item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable)
583
- @@table.setItem(row, 2, state_value_item)
584
-
585
- # If the parameter is required set the combobox to MANUAL and
586
- # clear the value field so they have to choose something
587
- if packet_item.required and !old_params[packet_item.name]
588
- value_item.setText(MANUALLY)
589
- state_value_item.setText('')
590
- end
591
- else
592
- # Parameter Value
593
- if old_params[packet_item.name]
594
- value_item = Qt::TableWidgetItem.new(old_params[packet_item.name])
595
- else
596
- if packet_item.required
597
- value_item = Qt::TableWidgetItem.new('')
598
- else
599
- if packet_item.format_string
600
- begin
601
- value_item = Qt::TableWidgetItem.new(sprintf(packet_item.format_string, packet_item.default))
602
- rescue
603
- # Oh well - Don't use the format string
604
- value_item = Qt::TableWidgetItem.new(packet_item.default.to_s)
605
- end
606
- else
607
- value_item = Qt::TableWidgetItem.new(packet_item.default.to_s)
608
- end
609
- end
610
- end
611
- value_item.setTextAlignment(Qt::AlignRight | Qt::AlignVCenter)
612
- value_item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable)
613
- @@table.setItem(row, 1, value_item)
614
- @@table.setSpan(row, 1, 1, 2)
615
- end
616
-
617
- # Units
618
- item = Qt::TableWidgetItem.new(packet_item.units.to_s)
619
- item.setTextAlignment(Qt::AlignRight | Qt::AlignVCenter)
620
- item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable | Qt::ItemIsEnabled)
621
- @@table.setItem(row, 3, item)
622
-
623
- # Description
624
- item = Qt::TableWidgetItem.new(packet_item.description.to_s)
625
- item.setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter)
626
- item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable | Qt::ItemIsEnabled)
627
- @@table.setItem(row, 4, item)
628
-
629
- @@param_widgets << [packet_item, value_item, state_value_item]
630
- row += 1
631
- end
632
-
633
- if @@table
634
- @@table.connect(SIGNAL('itemChanged(QTableWidgetItem*)')) do |item|
635
- packet_item, value_item, state_value_item = @@param_widgets[item.row]
636
- if item.column == 1
637
- if packet_item.states
638
- value = packet_item.states[value_item.text]
639
- @@table.blockSignals(true)
640
- if @states_in_hex.checked? && value.kind_of?(Integer)
641
- state_value_item.setText(sprintf("0x%X", value))
642
- else
643
- state_value_item.setText(value.to_s)
644
- end
645
- @@table.blockSignals(false)
646
- end
647
- elsif item.column == 2
648
- @@table.blockSignals(true)
649
- @@table.item(item.row, 1).setText(MANUALLY)
650
- @@table.blockSignals(false)
651
- end
652
- end
653
- @table_layout.addWidget(@@table, 500)
654
- @@table.resizeColumnsToContents()
655
- @@table.resizeRowsToContents()
656
- end
657
- end # if target_name and packet_name
658
- end
659
-
660
- def context_menu(point)
661
- target_name = @target_select.text
662
- packet_name = @cmd_select.text
663
- item = @@table.itemAt(point)
664
- if item
665
- item_name = @@table.item(item.row, 0).text[0..-2] # Remove :
666
- if target_name.length > 0 and packet_name.length > 0 and item_name.length > 0
667
- menu = Qt::Menu.new()
668
-
669
- details_action = Qt::Action.new(tr("Details #{target_name} #{packet_name} #{item_name}"), self)
670
- details_action.statusTip = tr("Popup details about #{target_name} #{packet_name} #{item_name}")
671
- details_action.connect(SIGNAL('triggered()')) do
672
- CmdDetailsDialog.new(nil, target_name, packet_name, item_name)
673
- end
674
- menu.addAction(details_action)
675
-
676
- file_chooser_action = Qt::Action.new(tr("Insert Filename"), self)
677
- file_chooser_action.statusTip = tr("Select a file and place its name into this parameter")
678
- file_chooser_action.connect(SIGNAL('triggered()')) do
679
- filename = Qt::FileDialog::getOpenFileName(self, "Insert Filename:", @file_dir, "All Files (*)")
680
- if filename and not filename.empty?
681
- @file_dir = File.dirname(filename)
682
- _, value_item, state_value_item = @@param_widgets[item.row]
683
- if state_value_item
684
- state_value_item.setText(filename)
685
- elsif value_item
686
- value_item.setText(filename)
687
- end
688
- end
689
- end
690
- menu.addAction(file_chooser_action)
691
-
692
- menu.exec(@@table.mapToGlobal(point))
693
- menu.dispose
694
- end
695
- end
696
- end
697
-
698
- def click_callback(item)
699
- @@table.editItem(item) if (item.flags & Qt::ItemIsEditable) != 0
700
- end
701
-
702
- def self.run (option_parser = nil, options = nil)
703
- Cosmos.catch_fatal_exception do
704
- unless option_parser && options
705
- option_parser, options = create_default_options()
706
- options.width = 600
707
- options.height = 425
708
- options.title = 'Command Sender'
709
- end
710
-
711
- super(option_parser, options)
712
- end
713
- end
714
-
715
- end # CmdSender
716
-
717
- end # module Cosmos
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/script'
14
+ require 'cosmos/gui/qt_tool'
15
+ require 'cosmos/config/config_parser'
16
+ require 'cosmos/gui/text/completion'
17
+ require 'cosmos/gui/utilities/script_module_gui'
18
+ require 'cosmos/gui/dialogs/splash'
19
+ require 'cosmos/gui/dialogs/cmd_details_dialog'
20
+ require 'cosmos/tools/cmd_sender/cmd_sender_text_edit'
21
+ require 'cosmos/tools/cmd_sender/cmd_sender_item_delegate'
22
+ end
23
+
24
+ module Cosmos
25
+
26
+ Cosmos.disable_warnings do
27
+ module Script
28
+ def prompt_for_script_abort
29
+ window = get_cmd_tlm_gui_window()
30
+ window.statusBar.showMessage(tr("Hazardous command not sent"))
31
+ return true # Aborted - Don't retry
32
+ end
33
+ end #module Script
34
+ end
35
+
36
+ $eval_binding = binding()
37
+
38
+ # Command Sender sends commands to the COSMOS server. Itgives the user
39
+ # a drop down to select the target and then command to send.
40
+ # It then displays all the command parameters. Once a
41
+ # command is sent it is added to the command history window which allows the
42
+ # user to resend the command or copy it for use in a script.
43
+ class CmdSender < QtTool
44
+ slots 'file_send_raw()'
45
+ slots 'update_cmd_params(bool)'
46
+ slots 'menu_states_in_hex(bool)'
47
+ slots 'target_changed(const QString&)'
48
+ slots 'cmd_changed(const QString&)'
49
+ slots 'send_button()'
50
+ slots 'context_menu(const QPoint&)'
51
+ slots 'click_callback(QTableWidgetItem*)'
52
+
53
+ MANUALLY = "MANUALLY ENTERED"
54
+
55
+ def self.send_count
56
+ @@send_count
57
+ end
58
+
59
+ def self.send_count=(val)
60
+ @@send_count = val
61
+ end
62
+
63
+ def self.param_widgets
64
+ @@param_widgets
65
+ end
66
+
67
+ def self.table
68
+ @@table
69
+ end
70
+
71
+ def initialize(options)
72
+ # MUST BE FIRST - All code before super is executed twice in RubyQt Based classes
73
+ super(options)
74
+ Cosmos.load_cosmos_icon("cmd_sender.png")
75
+
76
+ @file_dir = System.paths['LOGS']
77
+ @message_log = MessageLog.new('cmdsender')
78
+ @send_raw_dir = nil
79
+ @@send_count = 0
80
+ @@param_widgets = []
81
+ @@table = nil
82
+
83
+ initialize_actions()
84
+ initialize_menus()
85
+ initialize_central_widget()
86
+ complete_initialize() # defined in qt_tool
87
+ end
88
+
89
+ def initialize_actions
90
+ super()
91
+
92
+ @send_raw_action = Qt::Action.new(Cosmos.get_icon('send_file.png'),
93
+ tr('&Send Raw'),
94
+ self)
95
+ @send_raw_action.shortcut = Qt::KeySequence.new(tr('Ctrl+S'))
96
+ @send_raw_action.statusTip = tr('Send raw data from a file')
97
+ connect(@send_raw_action, SIGNAL('triggered()'), self, SLOT('file_send_raw()'))
98
+
99
+ @ignore_range = Qt::Action.new(tr('&Ignore Range Checks'), self)
100
+ @ignore_range.statusTip = tr('Ignore range checks when processing command')
101
+ @ignore_range.setCheckable(true)
102
+ @ignore_range.setChecked(false)
103
+
104
+ @states_in_hex = Qt::Action.new(tr('&Display State Values in Hex'), self)
105
+ @states_in_hex.statusTip = tr('Display states values in hex instead of decimal')
106
+ @states_in_hex.setCheckable(true)
107
+ @states_in_hex.setChecked(false)
108
+ connect(@states_in_hex, SIGNAL('toggled(bool)'), self, SLOT('menu_states_in_hex(bool)'))
109
+
110
+ @show_ignored = Qt::Action.new(tr('&Show Ignored Parameters'), self)
111
+ @show_ignored.statusTip = tr('Show ignored parameters which are normally hidden')
112
+ @show_ignored.setCheckable(true)
113
+ @show_ignored.setChecked(false)
114
+ connect(@show_ignored, SIGNAL('toggled(bool)'), self, SLOT('update_cmd_params(bool)'))
115
+
116
+ @cmd_raw = Qt::Action.new(tr('Disable &Parameter Conversions'), self)
117
+ @cmd_raw.statusTip = tr('Send the command without running write or state conversions')
118
+ @cmd_raw.setCheckable(true)
119
+ @cmd_raw.setChecked(false)
120
+ end
121
+
122
+ def initialize_menus
123
+ # File Menu
124
+ file_menu = menuBar.addMenu(tr('&File'))
125
+ file_menu.addAction(@send_raw_action)
126
+ file_menu.addAction(@exit_action)
127
+ file_menu.insertSeparator(@exit_action)
128
+
129
+ # Mode Menu
130
+ mode_menu = menuBar.addMenu(tr('&Mode'))
131
+ mode_menu.addAction(@ignore_range)
132
+ mode_menu.addAction(@states_in_hex)
133
+ mode_menu.addAction(@show_ignored)
134
+ mode_menu.addAction(@cmd_raw)
135
+
136
+ # Help Menu
137
+ @about_string = "Command Sender allows the user to send any command defined in the system."
138
+ initialize_help_menu()
139
+ end
140
+
141
+ def initialize_central_widget
142
+ # Create the central widget
143
+ central_widget = Qt::Widget.new
144
+ setCentralWidget(central_widget)
145
+
146
+ # Create the top half of the splitter window
147
+ sender = Qt::Widget.new
148
+
149
+ # Create the top level vertical layout
150
+ top_layout = Qt::VBoxLayout.new(sender)
151
+ # Set the size constraint to always respect the minimum sizes of the child widgets
152
+ # If this is not set then when we refresh the command parameters they'll all be squished
153
+ top_layout.setSizeConstraint(Qt::Layout::SetMinimumSize)
154
+
155
+ # Set the target combobox selection
156
+ @target_select = Qt::ComboBox.new
157
+ @target_select.setMaxVisibleItems(6)
158
+ connect(@target_select, SIGNAL('activated(const QString&)'), self, SLOT('target_changed(const QString&)'))
159
+ target_label = Qt::Label.new(tr("&Target:"))
160
+ target_label.setBuddy(@target_select)
161
+
162
+ # Set the comamnd combobox selection
163
+ @cmd_select = Qt::ComboBox.new
164
+ @cmd_select.setMaxVisibleItems(20)
165
+ connect(@cmd_select, SIGNAL('activated(const QString&)'), self, SLOT('cmd_changed(const QString&)'))
166
+ cmd_label = Qt::Label.new(tr("&Command:"))
167
+ cmd_label.setBuddy(@cmd_select)
168
+
169
+ # Button to send command
170
+ send = Qt::PushButton.new("Send")
171
+ connect(send, SIGNAL('clicked()'), self, SLOT('send_button()'))
172
+
173
+ # Layout the top level selection
174
+ select_layout = Qt::HBoxLayout.new
175
+ select_layout.addWidget(target_label)
176
+ select_layout.addWidget(@target_select, 1)
177
+ select_layout.addWidget(cmd_label)
178
+ select_layout.addWidget(@cmd_select, 1)
179
+ select_layout.addWidget(send)
180
+ top_layout.addLayout(select_layout)
181
+
182
+ # Separator Between Command Selection and Command Description
183
+ sep1 = Qt::Frame.new(sender)
184
+ sep1.setFrameStyle(Qt::Frame::HLine | Qt::Frame::Sunken)
185
+ top_layout.addWidget(sep1)
186
+
187
+ # Command Description Label
188
+ dec_label = Qt::Label.new(tr("Description:"))
189
+ @description = Qt::Label.new('')
190
+ @description.setWordWrap(true)
191
+ desc_layout = Qt::HBoxLayout.new
192
+ desc_layout.addWidget(dec_label)
193
+ desc_layout.addWidget(@description, 1)
194
+ top_layout.addLayout(desc_layout)
195
+
196
+ # Separator Between Command Selection and Description
197
+ sep2 = Qt::Frame.new(sender)
198
+ sep2.setFrameStyle(Qt::Frame::HLine | Qt::Frame::Sunken)
199
+ top_layout.addWidget(sep2)
200
+
201
+ # Parameters Label
202
+ param_label = Qt::Label.new(tr("Parameters:"))
203
+ top_layout.addWidget(param_label)
204
+
205
+ # Grid Layout for Parameters
206
+ @table_layout = Qt::VBoxLayout.new
207
+ top_layout.addLayout(@table_layout, 500)
208
+
209
+ # Add stretch to force everything to fit against the top of the window
210
+ # otherwise the selection window, description, and parameters all try
211
+ # to get equal space.
212
+ top_layout.addStretch(1)
213
+
214
+ # Create the text edit where previously issued commands go and where
215
+ # commands can be manually typed in and re-executed
216
+ @input = CmdSenderTextEdit.new(statusBar)
217
+ @input.setFocus()
218
+
219
+ layout = Qt::VBoxLayout.new
220
+ layout.setSpacing(1)
221
+ layout.setContentsMargins(1, 1, 1, 1)
222
+ layout.setSizeConstraint(Qt::Layout::SetMaximumSize)
223
+ layout.addWidget(Qt::Label.new("Command History: (Pressing Enter on the line re-executes the command)"))
224
+ layout.addWidget(@input)
225
+ history = Qt::Widget.new
226
+ history.layout = layout
227
+
228
+ # Create the scroll area
229
+ scroll = Qt::ScrollArea.new
230
+ scroll.setMinimumSize(500, 150)
231
+ scroll.setWidgetResizable(true)
232
+ scroll.setWidget(sender)
233
+
234
+ splitter = Qt::Splitter.new(central_widget)
235
+ splitter.setOrientation(Qt::Vertical)
236
+ splitter.addWidget(scroll)
237
+ splitter.addWidget(history)
238
+ splitter.setStretchFactor(0,10)
239
+ splitter.setStretchFactor(1,1)
240
+
241
+ layout = Qt::VBoxLayout.new
242
+ layout.setSpacing(1)
243
+ layout.setContentsMargins(1, 1, 1, 1)
244
+ layout.setSizeConstraint(Qt::Layout::SetMaximumSize)
245
+ layout.addWidget(splitter)
246
+ central_widget.layout = layout
247
+
248
+ #Mark this window as the window for popups
249
+ set_cmd_tlm_gui_window(self)
250
+
251
+ # Bring up slash screen for long duration tasks after creation
252
+ Splash.execute(self) do |splash|
253
+ # Configure CosmosConfig to interact with splash screen
254
+ ConfigParser.splash = splash
255
+
256
+ System.commands
257
+ Qt.execute_in_main_thread(true) do
258
+ update_targets()
259
+ update_commands()
260
+ update_cmd_params()
261
+ end
262
+
263
+ # Unconfigure CosmosConfig to interact with splash screen
264
+ ConfigParser.splash = nil
265
+ end
266
+ end
267
+
268
+ def menu_states_in_hex(checked)
269
+ @@param_widgets.each do |packet_item, value_item, state_value_item|
270
+ if state_value_item
271
+ text = state_value_item.text
272
+ quotes_removed = text.remove_quotes
273
+ if text == quotes_removed
274
+ if checked
275
+ if text.is_int?
276
+ @@table.blockSignals(true)
277
+ state_value_item.text = sprintf("0x%X", text.to_i)
278
+ @@table.blockSignals(false)
279
+ end
280
+ else
281
+ if text.is_hex?
282
+ @@table.blockSignals(true)
283
+ state_value_item.text = Integer(text).to_s
284
+ @@table.blockSignals(false)
285
+ end
286
+ end
287
+ end
288
+ end
289
+ end
290
+ end
291
+
292
+ def file_send_raw
293
+ begin
294
+ dialog = Qt::Dialog.new(self, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
295
+ dialog.setWindowTitle("Send Raw Data From File")
296
+ layout = Qt::GridLayout.new
297
+ interfaces = Qt::ComboBox.new
298
+ interfaces.addItems(get_interface_names())
299
+ interfaces.setMaxVisibleItems(30)
300
+ layout.addWidget(interfaces, 0, 1)
301
+ int_label = Qt::Label.new(tr("&Interface:"))
302
+ int_label.setBuddy(interfaces)
303
+ layout.addWidget(int_label, 0, 0)
304
+
305
+ file_line = Qt::LineEdit.new(@send_raw_dir)
306
+ file_line.setMinimumSize(250, 0)
307
+ file_label = Qt::Label.new(tr("&Filename:"))
308
+ file_label.setBuddy(file_line)
309
+ get_file = Qt::PushButton.new("Select")
310
+ file_layout = Qt::BoxLayout.new(Qt::Horizontal)
311
+ file_layout.addWidget(get_file)
312
+ file_layout.addWidget(file_line)
313
+ get_file.connect(SIGNAL('clicked()')) do
314
+ Cosmos.set_working_dir do
315
+ file_line.text = Qt::FileDialog::getOpenFileName(self, "Select File", @send_raw_dir, tr("Binary Files (*.bin);;All Files (*)"))
316
+ end
317
+ end
318
+
319
+ layout.addWidget(file_label, 1, 0)
320
+ layout.addLayout(file_layout, 1, 1)
321
+
322
+ button_layout = Qt::BoxLayout.new(Qt::Horizontal)
323
+ ok = Qt::PushButton.new("Ok")
324
+ connect(ok, SIGNAL('clicked()'), dialog, SLOT('accept()'))
325
+ button_layout.addWidget(ok)
326
+ cancel = Qt::PushButton.new("Cancel")
327
+ connect(cancel, SIGNAL('clicked()'), dialog, SLOT('reject()'))
328
+ button_layout.addWidget(cancel)
329
+ layout.addLayout(button_layout, 2, 0, 1 ,2)
330
+
331
+ dialog.setLayout(layout)
332
+ if dialog.exec == Qt::Dialog::Accepted
333
+ @send_raw_dir = file_line.text
334
+ Cosmos.set_working_dir do
335
+ send_raw_file(interfaces.text, file_line.text)
336
+ end
337
+ statusBar.showMessage(tr("File #{file_line.text} sent to interface #{interfaces.text}"))
338
+ end
339
+ dialog.dispose
340
+ rescue Exception => err
341
+ message = "Error sending raw file due to #{err}"
342
+ @message_log.write(Time.now.formatted + ' ' + message + "\n")
343
+ statusBar.showMessage(message)
344
+ rescue DRb::DRbConnError
345
+ message = "Error Connecting to Command and Telemetry Server"
346
+ @message_log.write(Time.now.formatted + ' ' + message + "\n")
347
+ statusBar.showMessage(message)
348
+ end
349
+ end
350
+
351
+ def closeEvent(event)
352
+ shutdown_cmd_tlm()
353
+ @message_log.stop
354
+ super(event)
355
+ end
356
+
357
+ def target_changed(target)
358
+ update_commands()
359
+ update_cmd_params()
360
+ end
361
+
362
+ def cmd_changed(command)
363
+ update_cmd_params()
364
+ end
365
+
366
+ def send_button
367
+ begin
368
+ target_name = @target_select.text
369
+ packet_name = @cmd_select.text
370
+ if target_name and packet_name
371
+ output_string, params = view_as_script()
372
+ @message_log.write(Time.now.formatted + ' ' + output_string + "\n")
373
+ if @cmd_raw.checked?
374
+ if @ignore_range.checked?
375
+ cmd_raw_no_range_check(target_name, packet_name, params)
376
+ else
377
+ cmd_raw(target_name, packet_name, params)
378
+ end
379
+ else
380
+ if @ignore_range.checked?
381
+ cmd_no_range_check(target_name, packet_name, params)
382
+ else
383
+ cmd(target_name, packet_name, params)
384
+ end
385
+ end
386
+
387
+ if statusBar.currentMessage != 'Hazardous command not sent'
388
+ @@send_count += 1
389
+ statusBar.showMessage("#{output_string} sent. (#{@@send_count})")
390
+ @input.append(output_string)
391
+ @input.moveCursor(Qt::TextCursor::End)
392
+ @input.ensureCursorVisible()
393
+ end
394
+ end
395
+ rescue DRb::DRbConnError
396
+ message = "Error Connecting to Command and Telemetry Server"
397
+ @message_log.write(Time.now.formatted + ' ' + message + "\n")
398
+ statusBar.showMessage(message)
399
+ Qt::MessageBox.critical(self, 'Error', message)
400
+ rescue Exception => err
401
+ message = "Error sending #{target_name} #{packet_name} due to #{err}"
402
+ @message_log.write(Time.now.formatted + ' ' + message + "\n")
403
+ statusBar.showMessage(message)
404
+ Qt::MessageBox.critical(self, 'Error', message)
405
+ end
406
+ end
407
+
408
+ def view_as_script
409
+ params = {}
410
+
411
+ @@param_widgets.each do |packet_item, value_item, state_value_item|
412
+ text = value_item.text
413
+
414
+ text = state_value_item.text if state_value_item and (text == MANUALLY or @cmd_raw.checked?)
415
+ quotes_removed = text.remove_quotes
416
+ if text == quotes_removed
417
+ params[packet_item.name] = text.convert_to_value
418
+ else
419
+ params[packet_item.name] = quotes_removed
420
+ end
421
+ raise "#{packet_item.name} is required." if quotes_removed == '' and packet_item.required
422
+ end
423
+ statusBar.clearMessage()
424
+
425
+ output_string = build_cmd_output_string(@target_select.text, @cmd_select.text, params, @cmd_raw.checked?)
426
+ if output_string =~ /[\x00-\x08\x0B-\x0C\x0E-\x1F\x7F-\xFF]/
427
+ output_string = output_string.inspect.remove_quotes
428
+ end
429
+
430
+ if @cmd_raw.checked?
431
+ if @ignore_range.checked?
432
+ output_string.insert(7, '_no_range_check')
433
+ end
434
+ else
435
+ if @ignore_range.checked?
436
+ output_string.insert(3, '_no_range_check')
437
+ end
438
+ end
439
+
440
+ return output_string, params
441
+ end
442
+
443
+ def update_targets
444
+ @target_select.clearItems()
445
+ target_names = System.commands.target_names
446
+ target_names_to_delete = []
447
+ target_names.each do |target_name|
448
+ found_non_hidden = false
449
+ begin
450
+ packets = System.commands.packets(target_name)
451
+ packets.each do |packet_name, packet|
452
+ found_non_hidden = true unless packet.hidden
453
+ end
454
+ rescue
455
+ # Don't do anything
456
+ end
457
+ target_names_to_delete << target_name unless found_non_hidden
458
+ end
459
+ target_names_to_delete.each do |target_name|
460
+ target_names.delete(target_name)
461
+ end
462
+ target_names.each do |target_name|
463
+ @target_select.addItem(target_name)
464
+ end
465
+ end
466
+
467
+ def update_commands
468
+ @cmd_select.clearItems()
469
+ target_name = @target_select.text
470
+ if target_name
471
+ commands = System.commands.packets(@target_select.text)
472
+ command_names = []
473
+ commands.each do |command_name, command|
474
+ command_names << command_name unless command.hidden
475
+ end
476
+ command_names.sort!
477
+ command_names.each do |command_name|
478
+ @cmd_select.addItem(command_name)
479
+ end
480
+ end
481
+ end
482
+
483
+ def update_cmd_params(ignored_toggle = nil)
484
+ old_params = {}
485
+ if ignored_toggle.nil?
486
+ ignored_toggle = false
487
+ else
488
+ ignored_toggle = true
489
+ # Save parameter values
490
+ @@param_widgets.each do |packet_item, value_item, state_value_item|
491
+ text = value_item.text
492
+ if state_value_item
493
+ old_params[packet_item.name] = [text, state_value_item.text]
494
+ else
495
+ old_params[packet_item.name] = text
496
+ end
497
+ end
498
+ end
499
+
500
+ # Clear Status Bar
501
+ statusBar.showMessage(tr(""))
502
+
503
+ target_name = @target_select.text
504
+ target = System.targets[target_name]
505
+ packet_name = @cmd_select.text
506
+ if target_name and packet_name
507
+ packet = System.commands.packet(target_name, packet_name)
508
+ packet_items = packet.sorted_items
509
+ shown_packet_items = []
510
+ packet_items.each do |packet_item|
511
+ next if target and target.ignored_parameters.include?(packet_item.name) && !@show_ignored.checked?
512
+ shown_packet_items << packet_item
513
+ end
514
+
515
+ # Update Command Description
516
+ @description.text = packet.description.to_s
517
+
518
+ # Destroy the old table widget
519
+ @@table.dispose if @@table
520
+ @@table = nil
521
+
522
+ # Update Parameters
523
+ @@param_widgets = []
524
+ drawn_header = false
525
+
526
+ row = 0
527
+ shown_packet_items.each do |packet_item|
528
+ next if target and target.ignored_parameters.include?(packet_item.name) && !@show_ignored.checked?
529
+ value_item = nil
530
+ state_value_item = nil
531
+
532
+ unless drawn_header
533
+ @@table = Qt::TableWidget.new()
534
+ @@table.setSizePolicy(Qt::SizePolicy::Expanding, Qt::SizePolicy::Expanding)
535
+ @@table.setWordWrap(true)
536
+ @@table.setRowCount(shown_packet_items.length)
537
+ @@table.setColumnCount(5)
538
+ @@table.setHorizontalHeaderLabels(['Name', ' Value or State ', ' ', 'Units', 'Description'])
539
+ @@table.horizontalHeader.setStretchLastSection(true)
540
+ @@table.verticalHeader.setVisible(false)
541
+ @@table.setItemDelegate(CmdSenderItemDelegate.new(@@table))
542
+ @@table.setContextMenuPolicy(Qt::CustomContextMenu)
543
+ @@table.verticalHeader.setResizeMode(Qt::HeaderView::ResizeToContents)
544
+ @@table.setEditTriggers(Qt::AbstractItemView::AllEditTriggers)
545
+ @@table.setSelectionMode(Qt::AbstractItemView::NoSelection)
546
+ connect(@@table, SIGNAL('customContextMenuRequested(const QPoint&)'), self, SLOT('context_menu(const QPoint&)'))
547
+ connect(@@table, SIGNAL('itemClicked(QTableWidgetItem*)'), self, SLOT('click_callback(QTableWidgetItem*)'))
548
+ drawn_header = true
549
+ end
550
+
551
+ # Parameter Name
552
+ item = Qt::TableWidgetItem.new("#{packet_item.name}:")
553
+ item.setTextAlignment(Qt::AlignRight | Qt::AlignVCenter)
554
+ item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable | Qt::ItemIsEnabled)
555
+ @@table.setItem(row, 0, item)
556
+
557
+ if packet_item.states
558
+ default_state = packet_item.states.key(packet_item.default)
559
+ if old_params[packet_item.name]
560
+ value_item = Qt::TableWidgetItem.new(old_params[packet_item.name][0])
561
+ else
562
+ if default_state
563
+ value_item = Qt::TableWidgetItem.new(default_state.to_s)
564
+ else
565
+ value_item = Qt::TableWidgetItem.new(MANUALLY)
566
+ end
567
+ end
568
+ value_item.setTextAlignment(Qt::AlignRight | Qt::AlignVCenter)
569
+ value_item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable)
570
+ @@table.setItem(row, 1, value_item)
571
+
572
+ if old_params[packet_item.name]
573
+ state_value_item = Qt::TableWidgetItem.new(old_params[packet_item.name][1])
574
+ else
575
+ if @states_in_hex.checked? && packet_item.default.kind_of?(Integer)
576
+ state_value_item = Qt::TableWidgetItem.new(sprintf("0x%X", packet_item.default))
577
+ else
578
+ state_value_item = Qt::TableWidgetItem.new(packet_item.default.to_s)
579
+ end
580
+ end
581
+ state_value_item.setTextAlignment(Qt::AlignRight | Qt::AlignVCenter)
582
+ state_value_item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable)
583
+ @@table.setItem(row, 2, state_value_item)
584
+
585
+ # If the parameter is required set the combobox to MANUAL and
586
+ # clear the value field so they have to choose something
587
+ if packet_item.required and !old_params[packet_item.name]
588
+ value_item.setText(MANUALLY)
589
+ state_value_item.setText('')
590
+ end
591
+ else
592
+ # Parameter Value
593
+ if old_params[packet_item.name]
594
+ value_item = Qt::TableWidgetItem.new(old_params[packet_item.name])
595
+ else
596
+ if packet_item.required
597
+ value_item = Qt::TableWidgetItem.new('')
598
+ else
599
+ if packet_item.format_string
600
+ begin
601
+ value_item = Qt::TableWidgetItem.new(sprintf(packet_item.format_string, packet_item.default))
602
+ rescue
603
+ # Oh well - Don't use the format string
604
+ value_item = Qt::TableWidgetItem.new(packet_item.default.to_s)
605
+ end
606
+ else
607
+ value_item = Qt::TableWidgetItem.new(packet_item.default.to_s)
608
+ end
609
+ end
610
+ end
611
+ value_item.setTextAlignment(Qt::AlignRight | Qt::AlignVCenter)
612
+ value_item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable)
613
+ @@table.setItem(row, 1, value_item)
614
+ @@table.setSpan(row, 1, 1, 2)
615
+ end
616
+
617
+ # Units
618
+ item = Qt::TableWidgetItem.new(packet_item.units.to_s)
619
+ item.setTextAlignment(Qt::AlignRight | Qt::AlignVCenter)
620
+ item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable | Qt::ItemIsEnabled)
621
+ @@table.setItem(row, 3, item)
622
+
623
+ # Description
624
+ item = Qt::TableWidgetItem.new(packet_item.description.to_s)
625
+ item.setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter)
626
+ item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable | Qt::ItemIsEnabled)
627
+ @@table.setItem(row, 4, item)
628
+
629
+ @@param_widgets << [packet_item, value_item, state_value_item]
630
+ row += 1
631
+ end
632
+
633
+ if @@table
634
+ @@table.connect(SIGNAL('itemChanged(QTableWidgetItem*)')) do |item|
635
+ packet_item, value_item, state_value_item = @@param_widgets[item.row]
636
+ if item.column == 1
637
+ if packet_item.states
638
+ value = packet_item.states[value_item.text]
639
+ @@table.blockSignals(true)
640
+ if @states_in_hex.checked? && value.kind_of?(Integer)
641
+ state_value_item.setText(sprintf("0x%X", value))
642
+ else
643
+ state_value_item.setText(value.to_s)
644
+ end
645
+ @@table.blockSignals(false)
646
+ end
647
+ elsif item.column == 2
648
+ @@table.blockSignals(true)
649
+ @@table.item(item.row, 1).setText(MANUALLY)
650
+ @@table.blockSignals(false)
651
+ end
652
+ end
653
+ @table_layout.addWidget(@@table, 500)
654
+ @@table.resizeColumnsToContents()
655
+ @@table.resizeRowsToContents()
656
+ end
657
+ end # if target_name and packet_name
658
+ end
659
+
660
+ def context_menu(point)
661
+ target_name = @target_select.text
662
+ packet_name = @cmd_select.text
663
+ item = @@table.itemAt(point)
664
+ if item
665
+ item_name = @@table.item(item.row, 0).text[0..-2] # Remove :
666
+ if target_name.length > 0 and packet_name.length > 0 and item_name.length > 0
667
+ menu = Qt::Menu.new()
668
+
669
+ details_action = Qt::Action.new(tr("Details #{target_name} #{packet_name} #{item_name}"), self)
670
+ details_action.statusTip = tr("Popup details about #{target_name} #{packet_name} #{item_name}")
671
+ details_action.connect(SIGNAL('triggered()')) do
672
+ CmdDetailsDialog.new(nil, target_name, packet_name, item_name)
673
+ end
674
+ menu.addAction(details_action)
675
+
676
+ file_chooser_action = Qt::Action.new(tr("Insert Filename"), self)
677
+ file_chooser_action.statusTip = tr("Select a file and place its name into this parameter")
678
+ file_chooser_action.connect(SIGNAL('triggered()')) do
679
+ filename = Qt::FileDialog::getOpenFileName(self, "Insert Filename:", @file_dir, "All Files (*)")
680
+ if filename and not filename.empty?
681
+ @file_dir = File.dirname(filename)
682
+ _, value_item, state_value_item = @@param_widgets[item.row]
683
+ if state_value_item
684
+ state_value_item.setText(filename)
685
+ elsif value_item
686
+ value_item.setText(filename)
687
+ end
688
+ end
689
+ end
690
+ menu.addAction(file_chooser_action)
691
+
692
+ menu.exec(@@table.mapToGlobal(point))
693
+ menu.dispose
694
+ end
695
+ end
696
+ end
697
+
698
+ def click_callback(item)
699
+ @@table.editItem(item) if (item.flags & Qt::ItemIsEditable) != 0
700
+ end
701
+
702
+ def self.run (option_parser = nil, options = nil)
703
+ Cosmos.catch_fatal_exception do
704
+ unless option_parser && options
705
+ option_parser, options = create_default_options()
706
+ options.width = 600
707
+ options.height = 425
708
+ options.title = 'Command Sender'
709
+ end
710
+
711
+ super(option_parser, options)
712
+ end
713
+ end
714
+
715
+ end # CmdSender
716
+
717
+ end # module Cosmos