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,118 +1,118 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'cosmos'
12
- require 'cosmos/gui/opengl/opengl'
13
- require 'cosmos/gui/opengl/stl_shape'
14
- require 'cosmos/gui/opengl/texture_mapped_sphere'
15
-
16
- module Cosmos
17
-
18
- class SceneConfig
19
-
20
- attr_accessor :scene
21
-
22
- def initialize(filename, dragable = true)
23
- @scene = GlScene.new
24
-
25
- shape = nil
26
- parser = ConfigParser.new
27
- parser.parse_file(filename) do |keyword, parameters|
28
- case keyword
29
- when 'STL_FILE'
30
- usage = "#{keyword} <filename> <scaling factor (optional)>"
31
- parser.verify_num_parameters(1, 2, usage)
32
- shape = StlShape.new(0.0, 0.0, 0.0)
33
- if parameters[0] =~ /^\// or parameters[0] =~ /^\w:/
34
- shape.stl_file = parameters[0]
35
- else
36
- shape.stl_file = File.join(Cosmos::USERPATH, 'config', 'data', parameters[0])
37
- end
38
- raise "STL File \"#{shape.stl_file}\" does not exist" unless File.exist? shape.stl_file
39
- shape.show_load_progress = true
40
- shape.tipText = parameters[0]
41
- shape.dragable = dragable
42
- if parameters[1]
43
- shape.stl_scaling_factor = parameters[1].to_f
44
- end
45
- @scene.append(shape)
46
-
47
- when 'TEXTURE_MAPPED_SPHERE'
48
- usage = "#{keyword} <texture_filename>"
49
- parser.verify_num_parameters(1, 1, usage)
50
- shape = TextureMappedSphere.new(0.0, 0.0, 0.0, parameters[0])
51
- shape.dragable = dragable
52
- @scene.append(shape)
53
-
54
- when 'TIP_TEXT'
55
- usage = "#{keyword} <text>"
56
- parser.verify_num_parameters(1, 1, usage)
57
- shape.tipText = parameters[0]
58
-
59
- when 'COLOR'
60
- usage = "#{keyword} <red> <green> <blue> <alpha (optional)>"
61
- parser.verify_num_parameters(3, 4, usage)
62
- if parameters[3]
63
- shape.base_color = [parameters[0].to_f, parameters[1].to_f, parameters[2].to_f, parameters[3].to_f]
64
- else
65
- shape.base_color = [parameters[0].to_f, parameters[1].to_f, parameters[2].to_f, 1.0]
66
- end
67
- shape.color = shape.base_color.clone
68
-
69
- when 'POSITION'
70
- usage = "#{keyword} <x> <y> <z>"
71
- parser.verify_num_parameters(3, 3, usage)
72
- shape.position = [parameters[0].to_f, parameters[1].to_f, parameters[2].to_f]
73
-
74
- when 'ROTATION_X'
75
- usage = "#{keyword} <rotation_x>"
76
- parser.verify_num_parameters(1, 1, usage)
77
- shape.rotation_x = parameters[0].to_f
78
-
79
- when 'ROTATION_Y'
80
- usage = "#{keyword} <rotation_y>"
81
- parser.verify_num_parameters(1, 1, usage)
82
- shape.rotation_y = parameters[0].to_f
83
-
84
- when 'ROTATION_Z'
85
- usage = "#{keyword} <rotation_z>"
86
- parser.verify_num_parameters(1, 1, usage)
87
- shape.rotation_z = parameters[0].to_f
88
-
89
- when 'ZOOM'
90
- usage = "#{keyword} <zoom>"
91
- parser.verify_num_parameters(1, 1, usage)
92
- @scene.zoom = parameters[0].to_f
93
-
94
- when 'ORIENTATION'
95
- usage = "#{keyword} <q0> <q1> <q2> <q3 - scalar>"
96
- parser.verify_num_parameters(4, 4, usage)
97
- @scene.orientation = Quaternion.new([parameters[0].to_f, parameters[1].to_f, parameters[2].to_f, parameters[3].to_f])
98
-
99
- when 'CENTER'
100
- usage = "#{keyword} <x> <y> <z>"
101
- parser.verify_num_parameters(3, 3, usage)
102
- @scene.center = [parameters[0].to_f, parameters[1].to_f, parameters[2].to_f]
103
-
104
- when 'BOUNDS'
105
- usage = "#{keyword} <x0> <x1> <y0> <y1> <z0> <z1>"
106
- parser.verify_num_parameters(6, 6, usage)
107
- @scene.bounds = GlBounds.new(parameters[0].to_f, parameters[1].to_f, parameters[2].to_f, parameters[3].to_f, parameters[4].to_f, parameters[5].to_f)
108
-
109
- else
110
- raise "Unknown keyword #{keyword} with parameters #{parameters.join(' ')}"
111
- end # case keyword
112
- end # parser.parse_file
113
-
114
- end
115
-
116
- end # class SceneDefinition
117
-
118
- 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
+ require 'cosmos/gui/opengl/opengl'
13
+ require 'cosmos/gui/opengl/stl_shape'
14
+ require 'cosmos/gui/opengl/texture_mapped_sphere'
15
+
16
+ module Cosmos
17
+
18
+ class SceneConfig
19
+
20
+ attr_accessor :scene
21
+
22
+ def initialize(filename, dragable = true)
23
+ @scene = GlScene.new
24
+
25
+ shape = nil
26
+ parser = ConfigParser.new
27
+ parser.parse_file(filename) do |keyword, parameters|
28
+ case keyword
29
+ when 'STL_FILE'
30
+ usage = "#{keyword} <filename> <scaling factor (optional)>"
31
+ parser.verify_num_parameters(1, 2, usage)
32
+ shape = StlShape.new(0.0, 0.0, 0.0)
33
+ if parameters[0] =~ /^\// or parameters[0] =~ /^\w:/
34
+ shape.stl_file = parameters[0]
35
+ else
36
+ shape.stl_file = File.join(Cosmos::USERPATH, 'config', 'data', parameters[0])
37
+ end
38
+ raise "STL File \"#{shape.stl_file}\" does not exist" unless File.exist? shape.stl_file
39
+ shape.show_load_progress = true
40
+ shape.tipText = parameters[0]
41
+ shape.dragable = dragable
42
+ if parameters[1]
43
+ shape.stl_scaling_factor = parameters[1].to_f
44
+ end
45
+ @scene.append(shape)
46
+
47
+ when 'TEXTURE_MAPPED_SPHERE'
48
+ usage = "#{keyword} <texture_filename>"
49
+ parser.verify_num_parameters(1, 1, usage)
50
+ shape = TextureMappedSphere.new(0.0, 0.0, 0.0, parameters[0])
51
+ shape.dragable = dragable
52
+ @scene.append(shape)
53
+
54
+ when 'TIP_TEXT'
55
+ usage = "#{keyword} <text>"
56
+ parser.verify_num_parameters(1, 1, usage)
57
+ shape.tipText = parameters[0]
58
+
59
+ when 'COLOR'
60
+ usage = "#{keyword} <red> <green> <blue> <alpha (optional)>"
61
+ parser.verify_num_parameters(3, 4, usage)
62
+ if parameters[3]
63
+ shape.base_color = [parameters[0].to_f, parameters[1].to_f, parameters[2].to_f, parameters[3].to_f]
64
+ else
65
+ shape.base_color = [parameters[0].to_f, parameters[1].to_f, parameters[2].to_f, 1.0]
66
+ end
67
+ shape.color = shape.base_color.clone
68
+
69
+ when 'POSITION'
70
+ usage = "#{keyword} <x> <y> <z>"
71
+ parser.verify_num_parameters(3, 3, usage)
72
+ shape.position = [parameters[0].to_f, parameters[1].to_f, parameters[2].to_f]
73
+
74
+ when 'ROTATION_X'
75
+ usage = "#{keyword} <rotation_x>"
76
+ parser.verify_num_parameters(1, 1, usage)
77
+ shape.rotation_x = parameters[0].to_f
78
+
79
+ when 'ROTATION_Y'
80
+ usage = "#{keyword} <rotation_y>"
81
+ parser.verify_num_parameters(1, 1, usage)
82
+ shape.rotation_y = parameters[0].to_f
83
+
84
+ when 'ROTATION_Z'
85
+ usage = "#{keyword} <rotation_z>"
86
+ parser.verify_num_parameters(1, 1, usage)
87
+ shape.rotation_z = parameters[0].to_f
88
+
89
+ when 'ZOOM'
90
+ usage = "#{keyword} <zoom>"
91
+ parser.verify_num_parameters(1, 1, usage)
92
+ @scene.zoom = parameters[0].to_f
93
+
94
+ when 'ORIENTATION'
95
+ usage = "#{keyword} <q0> <q1> <q2> <q3 - scalar>"
96
+ parser.verify_num_parameters(4, 4, usage)
97
+ @scene.orientation = Quaternion.new([parameters[0].to_f, parameters[1].to_f, parameters[2].to_f, parameters[3].to_f])
98
+
99
+ when 'CENTER'
100
+ usage = "#{keyword} <x> <y> <z>"
101
+ parser.verify_num_parameters(3, 3, usage)
102
+ @scene.center = [parameters[0].to_f, parameters[1].to_f, parameters[2].to_f]
103
+
104
+ when 'BOUNDS'
105
+ usage = "#{keyword} <x0> <x1> <y0> <y1> <z0> <z1>"
106
+ parser.verify_num_parameters(6, 6, usage)
107
+ @scene.bounds = GlBounds.new(parameters[0].to_f, parameters[1].to_f, parameters[2].to_f, parameters[3].to_f, parameters[4].to_f, parameters[5].to_f)
108
+
109
+ else
110
+ raise "Unknown keyword #{keyword} with parameters #{parameters.join(' ')}"
111
+ end # case keyword
112
+ end # parser.parse_file
113
+
114
+ end
115
+
116
+ end # class SceneDefinition
117
+
118
+ end # module Cosmos
@@ -1,542 +1,542 @@
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/gui/dialogs/tlm_details_dialog'
16
- require 'cosmos/gui/dialogs/tlm_edit_dialog'
17
- require 'cosmos/gui/dialogs/exception_dialog'
18
- require 'cosmos/gui/dialogs/splash'
19
- require 'cosmos/gui/widgets/full_text_search_line_edit'
20
- end
21
-
22
- module Cosmos
23
-
24
- class PacketViewer < QtTool
25
- slots 'file_options()'
26
- slots 'update_all()'
27
- slots 'mouse_over(int, int)'
28
- slots 'context_menu(const QPoint&)'
29
-
30
- def initialize(options)
31
- super(options) # MUST BE FIRST - All code before super is executed twice in RubyQt Based classes
32
- Cosmos.load_cosmos_icon("packet_viewer.png")
33
-
34
- @table = nil
35
- @tlm_thread = nil
36
- @shutdown_tlm_thread = false
37
- @mode = :WITH_UNITS
38
- @polling_rate = 1.0
39
- @colorblind = false
40
-
41
- initialize_actions()
42
- initialize_menus()
43
- initialize_central_widget(options)
44
- complete_initialize()
45
-
46
- # Bring up slash screen for long duration tasks after creation
47
- Splash.execute(self) do |splash|
48
- # Configure CosmosConfig to interact with splash screen
49
- ConfigParser.splash = splash
50
-
51
- System.telemetry
52
- Qt.execute_in_main_thread(true) do
53
- update_targets()
54
- @target_select.setCurrentText(options.packet[0].upcase) if options.packet
55
- update_packets()
56
- @packet_select.setCurrentText(options.packet[1].upcase) if options.packet
57
- update_tlm_items()
58
-
59
- @search_box.completion_list = System.telemetry.all_item_strings(true, splash)
60
- @search_box.callback = lambda do |tlm|
61
- split_tlm = tlm.split(" ")
62
- if split_tlm.length == 3
63
- target_name = split_tlm[0].upcase
64
- @target_select.setCurrentText(target_name)
65
- update_packets()
66
- packet_name = split_tlm[1]
67
- @packet_select.setCurrentText(packet_name)
68
- item_name = split_tlm[2]
69
- update_tlm_items(item_name)
70
- end
71
- end
72
- end
73
-
74
- # Unconfigure CosmosConfig to interact with splash screen
75
- ConfigParser.splash = nil
76
- end
77
- end
78
-
79
- def initialize_actions
80
- super()
81
-
82
- @reset_action = Qt::Action.new(tr('&Reset'), self)
83
- @reset_keyseq = Qt::KeySequence.new(tr('Ctrl+R'))
84
- @reset_action.shortcut = @reset_keyseq
85
- @reset_action.statusTip = tr('Reset Connection')
86
- connect(@reset_action, SIGNAL('triggered()'), self, SLOT('update_all()'))
87
-
88
- @option_action = Qt::Action.new(tr('O&ptions'), self)
89
- @option_action.statusTip = tr('Application Options')
90
- connect(@option_action, SIGNAL('triggered()'), self, SLOT('file_options()'))
91
-
92
- @color_blind_action = Qt::Action.new(tr('Color&blind Mode'), self)
93
- @color_blind_keyseq = Qt::KeySequence.new(tr('Ctrl+B'))
94
- @color_blind_action.shortcut = @color_blind_keyseq
95
- @color_blind_action.statusTip = tr('Enable text representation of colors in the values')
96
- @color_blind_action.setCheckable(true)
97
- @color_blind_action.connect(SIGNAL('triggered()')) do
98
- @colorblind = @color_blind_action.isChecked
99
- end
100
-
101
- @hide_ignored_action = Qt::Action.new(tr('&Hide Ignored Items'), self)
102
- @hide_ignored_keyseq = Qt::KeySequence.new(tr('Ctrl+H'))
103
- @hide_ignored_action.shortcut = @hide_ignored_keyseq
104
- @hide_ignored_action.statusTip = tr('Toggle showing and hiding ignored items')
105
- @hide_ignored_action.setCheckable(true)
106
- @hide_ignored_action.setChecked(false)
107
- @hide_ignored_action.connect(SIGNAL('triggered()')) do
108
- if @hide_ignored_action.isChecked
109
- @ignored_rows.each {|row| @table.setRowHidden(row, true) }
110
- else
111
- @ignored_rows.each {|row| @table.setRowHidden(row, false) }
112
- end
113
- end
114
-
115
- @formatted_tlm_units_action = Qt::Action.new(tr('Formatted Telemetry With &Units'), self)
116
- @formatted_tlm_units_keyseq = Qt::KeySequence.new(tr('Ctrl+U'))
117
- @formatted_tlm_units_action.shortcut = @formatted_tlm_units_keyseq
118
- @formatted_tlm_units_action.statusTip = tr('Formatted Telemetry with Units')
119
- @formatted_tlm_units_action.setCheckable(true)
120
- @formatted_tlm_units_action.setChecked(true)
121
- @formatted_tlm_units_action.connect(SIGNAL('triggered()')) do
122
- @mode = :WITH_UNITS
123
- self.window_title = "COSMOS Packet Viewer : Formatted Telemetry with Units"
124
- end
125
-
126
- @formatted_tlm_action = Qt::Action.new(tr('&Formatted Telemetry'), self)
127
- @formatted_tlm_keyseq = Qt::KeySequence.new(tr('Ctrl+F'))
128
- @formatted_tlm_action.shortcut = @formatted_tlm_keyseq
129
- @formatted_tlm_action.statusTip = tr('Formatted Telemetry')
130
- @formatted_tlm_action.setCheckable(true)
131
- @formatted_tlm_action.connect(SIGNAL('triggered()')) do
132
- @mode = :FORMATTED
133
- self.window_title = "COSMOS Packet Viewer : Formatted Telemetry"
134
- end
135
-
136
- @normal_tlm_action = Qt::Action.new(tr('Normal &Converted Telemetry'), self)
137
- @normal_tlm_keyseq = Qt::KeySequence.new(tr('Ctrl+C'))
138
- @normal_tlm_action.shortcut = @normal_tlm_keyseq
139
- @normal_tlm_action.statusTip = tr('Normal Converted Telemetry')
140
- @normal_tlm_action.setCheckable(true)
141
- @normal_tlm_action.connect(SIGNAL('triggered()')) do
142
- @mode = :CONVERTED
143
- self.window_title = "COSMOS Packet Viewer : Coverted Telemetry"
144
- end
145
-
146
- @raw_tlm_action = Qt::Action.new(tr('&Raw Telemetry'), self)
147
- @raw_tlm_keyseq = Qt::KeySequence.new(tr('Ctrl+A'))
148
- @raw_tlm_action.shortcut = @raw_tlm_keyseq
149
- @raw_tlm_action.statusTip = tr('Raw Unprocessed Telemetry')
150
- @raw_tlm_action.setCheckable(true)
151
- @raw_tlm_action.connect(SIGNAL('triggered()')) do
152
- @mode = :RAW
153
- self.window_title = "COSMOS Packet Viewer : Raw Telemetry"
154
- end
155
-
156
- # The formatting options are mutually exclusive so create an action group
157
- formatting_group = Qt::ActionGroup.new(self)
158
- formatting_group.addAction(@formatted_tlm_units_action)
159
- formatting_group.addAction(@formatted_tlm_action)
160
- formatting_group.addAction(@normal_tlm_action)
161
- formatting_group.addAction(@raw_tlm_action)
162
- end
163
-
164
- def initialize_menus
165
- # File Menu
166
- file_menu = menuBar.addMenu(tr('&File'))
167
- file_menu.addAction(@reset_action)
168
- file_menu.addAction(@option_action)
169
- file_menu.addSeparator()
170
- file_menu.addAction(@exit_action)
171
-
172
- # View Menu
173
- view_menu = menuBar.addMenu(tr('&View'))
174
- view_menu.addAction(@color_blind_action)
175
- view_menu.addAction(@hide_ignored_action)
176
- view_menu.addSeparator.setText(tr('Formatting'));
177
- view_menu.addAction(@formatted_tlm_units_action)
178
- view_menu.addAction(@formatted_tlm_action)
179
- view_menu.addAction(@normal_tlm_action)
180
- view_menu.addAction(@raw_tlm_action)
181
-
182
- # Help Menu
183
- @about_string = "Packet Viewer provides a view of every telemetry packet in the system. Packets can be viewed in numerous represenations ranging from the raw data to formatted with units."
184
- initialize_help_menu()
185
- end
186
-
187
- def initialize_central_widget(options)
188
- # Create the central widget
189
- central_widget = Qt::Widget.new
190
- setCentralWidget(central_widget)
191
-
192
- # Create the top level vertical layout
193
- top_layout = Qt::VBoxLayout.new(central_widget)
194
-
195
- # Set the target combobox selection
196
- @target_select = Qt::ComboBox.new
197
- @target_select.setMaxVisibleItems(6)
198
- @target_select.connect(SIGNAL('activated(const QString&)')) do
199
- update_packets()
200
- update_tlm_items()
201
- end
202
- target_label = Qt::Label.new(tr("&Target:"))
203
- target_label.setBuddy(@target_select)
204
-
205
- # Set the command combobox selection
206
- @packet_select = Qt::ComboBox.new
207
- @packet_select.setMaxVisibleItems(20)
208
- @packet_select.connect(SIGNAL('activated(const QString&)')) do
209
- update_tlm_items()
210
- end
211
- cmd_label = Qt::Label.new(tr("&Packet:"))
212
- cmd_label.setBuddy(@packet_select)
213
-
214
- # Mnemonic Search Box
215
- @search_layout = Qt::HBoxLayout.new
216
- @search_box = FullTextSearchLineEdit.new(self)
217
- @search_box.setStyleSheet("padding-right: 20px;padding-left: 5px;background: url(#{File.join(Cosmos::PATH, 'data', 'search-14.png')});background-position: right;background-repeat: no-repeat;")
218
- @search_layout.addWidget(@search_box)
219
- top_layout.addLayout(@search_layout)
220
-
221
- # Layout the top level selection
222
- select_layout = Qt::HBoxLayout.new
223
- select_layout.addWidget(target_label)
224
- select_layout.addWidget(@target_select, 1)
225
- select_layout.addWidget(cmd_label)
226
- select_layout.addWidget(@packet_select, 1)
227
- top_layout.addLayout(select_layout)
228
-
229
- # Separator Between Telemetry Selection and Telemetry Description
230
- sep1 = Qt::Frame.new(central_widget)
231
- sep1.setFrameStyle(Qt::Frame::HLine | Qt::Frame::Sunken)
232
- top_layout.addWidget(sep1)
233
-
234
- # Telemetry Description Label
235
- dec_label = Qt::Label.new(tr("Description:"))
236
- @description = Qt::Label.new('')
237
- desc_layout = Qt::HBoxLayout.new
238
- desc_layout.addWidget(dec_label)
239
- desc_layout.addWidget(@description, 1)
240
- top_layout.addLayout(desc_layout)
241
-
242
- # Separator Between Telemetry Selection and Description
243
- sep2 = Qt::Frame.new(central_widget)
244
- sep2.setFrameStyle(Qt::Frame::HLine | Qt::Frame::Sunken)
245
- top_layout.addWidget(sep2)
246
-
247
- @frame = Qt::VBoxLayout.new
248
- top_layout.addLayout(@frame)
249
- end
250
-
251
- def file_options
252
- @polling_rate = Qt::InputDialog.getDouble(self, tr("Options"), tr("Polling Rate:"), @polling_rate, 0, 1000, 1, nil)
253
- end
254
-
255
- def update_all
256
- update_targets()
257
- update_packets()
258
- update_tlm_items()
259
- end
260
-
261
- def update_targets
262
- @target_select.clearItems
263
-
264
- System.telemetry.target_names.each do |target_name|
265
- packets = System.telemetry.packets(target_name)
266
- has_non_hidden = false
267
- packets.each do |packet_name, packet|
268
- next if packet.hidden
269
- has_non_hidden = true
270
- break
271
- end
272
- @target_select.addItem(target_name) if has_non_hidden
273
- end
274
- end
275
-
276
- def update_packets
277
- @packet_select.clearItems
278
- @packets = []
279
- begin
280
- packets = System.telemetry.packets(@target_select.text)
281
- rescue
282
- # Unknown target or no telemetry packets
283
- packets = []
284
- end
285
- packets.each do |packet_name, packet|
286
- @packets << [packet_name, packet.description] unless packet.hidden
287
- end
288
- @packets.sort
289
- @packets = [[""]] if @packets.empty?
290
- @packets.each do |packet_name, description|
291
- @packet_select.addItem(packet_name)
292
- end
293
- if not @packets.empty?
294
- @packet_select.setCurrentText(@packets[0][0])
295
- end
296
- end
297
-
298
- def update_tlm_items(featured_item_name = nil)
299
- target_name = @target_select.text
300
- packet_name = @packet_select.text
301
-
302
- if @tlm_thread
303
- @shutdown_tlm_thread = true
304
- Qt.execute_in_main_thread(false, 0.001, true) {update_tlm_items(featured_item_name)}
305
- return
306
- end
307
-
308
- # Clear Status Bar
309
- statusBar.clearMessage()
310
-
311
- # Update Telemetry Description
312
- @description.text = ""
313
- @packets.each do |name, description|
314
- if name == packet_name
315
- @description.text = description.to_s
316
- break
317
- end
318
- end
319
-
320
- # Destory and recreate a new table widget
321
- @table.dispose if @table
322
-
323
- # Table for Telemetry Items
324
- @table = Qt::TableWidget.new()
325
-
326
- # Update Telemetry Items
327
- tlm_items = []
328
- begin
329
- System.telemetry.items(target_name, packet_name).each do |item|
330
- tlm_items << [item.name, item.states, item.description]
331
- end
332
- rescue
333
- # Unknown packet
334
- end
335
-
336
- @table.setRowCount(tlm_items.length)
337
- @table.setColumnCount(2)
338
- # Force the last section (the values) to fill all available space in the frame
339
- @table.horizontalHeader.setStretchLastSection(true)
340
- @table.setHorizontalHeaderLabels(%w(Item Value))
341
- @descriptions = []
342
-
343
- row = 0
344
- featured_item = nil
345
- @ignored_rows = []
346
- tlm_items.each do |tlm_name, states, description|
347
- @ignored_rows << row if System.targets[target_name].ignored_items.include?(tlm_name)
348
- item = Qt::TableWidgetItem.new(tr("#{tlm_name}:"))
349
- item.setTextAlignment(Qt::AlignRight)
350
- item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable)
351
- @table.setItem(row, 0, item)
352
- item = Qt::TableWidgetItem.new(tr("0.0"))
353
- item.setTextAlignment(Qt::AlignRight)
354
- item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable | Qt::ItemIsEnabled)
355
- @table.setItem(row, 1, item)
356
- @descriptions[row] = []
357
- @descriptions[row][0] = description
358
- @descriptions[row][1] = description
359
- row += 1
360
- featured_item = item if featured_item_name == tlm_name
361
- end
362
-
363
- @table.resizeColumnsToContents()
364
- @table.resizeRowsToContents()
365
- @table.scrollToItem(featured_item) if featured_item
366
- @frame.addWidget(@table)
367
-
368
- # Handle Table Clicks
369
- @table.setMouseTracking(true)
370
- connect(@table, SIGNAL('cellEntered(int, int)'), self, SLOT('mouse_over(int, int)'))
371
- @table.setContextMenuPolicy(Qt::CustomContextMenu)
372
- connect(@table, SIGNAL('customContextMenuRequested(const QPoint&)'), self, SLOT('context_menu(const QPoint&)'))
373
-
374
- # Start Update Thread
375
- update_needed = false
376
- @tlm_thread = Thread.new do
377
- begin
378
- while true
379
- time = Time.now
380
- break if @shutdown_tlm_thread
381
-
382
- begin
383
- tlm_items = get_tlm_packet(target_name || '', packet_name || '', @mode)
384
- rescue DRb::DRbConnError => err
385
- Qt.execute_in_main_thread(true) do
386
- statusBar.showMessage(tr("Error Connecting to Command and Telemetry Server"))
387
- end
388
- tlm_items = nil
389
- update_needed = false
390
- rescue RuntimeError => err
391
- Qt.execute_in_main_thread(true) do
392
- statusBar.showMessage(tr("Packet #{target_name} #{packet_name} does not exist"))
393
- end
394
- tlm_items = nil
395
- update_needed = true
396
- end
397
-
398
- break if @shutdown_tlm_thread
399
-
400
- Qt.execute_in_main_thread(true) do
401
- # If we need an update (which indicates we've reconnected to the server)
402
- # Then we call update_all which will update all the telemetry items and kill and respawn this thread
403
- if update_needed
404
- update_all()
405
- end
406
-
407
- if tlm_items
408
- row = 0
409
- tlm_items.each do |name, value, limits_state|
410
- text = value.to_s
411
-
412
- case limits_state
413
- when :GREEN, :GREEN_HIGH
414
- @table.item(row, 1).textColor = Cosmos::GREEN
415
- text << ' (G)' if @colorblind
416
- when :GREEN_LOW
417
- @table.item(row, 1).textColor = Cosmos::GREEN
418
- text << ' (g)' if @colorblind
419
- when :YELLOW, :YELLOW_HIGH
420
- @table.item(row, 1).textColor = Cosmos::YELLOW
421
- text << ' (Y)' if @colorblind
422
- when :YELLOW_LOW
423
- @table.item(row, 1).textColor = Cosmos::YELLOW
424
- text << ' (y)' if @colorblind
425
- when :RED, :RED_HIGH
426
- @table.item(row, 1).textColor = Cosmos::RED
427
- text << ' (R)' if @colorblind
428
- when :RED_LOW
429
- @table.item(row, 1).textColor = Cosmos::RED
430
- text << ' (r)' if @colorblind
431
- when :BLUE
432
- @table.item(row, 1).textColor = Cosmos::BLUE
433
- text << ' (B)' if @colorblind
434
- when :STALE
435
- @table.item(row, 1).textColor = Cosmos::PURPLE
436
- text << ' ($)' if @colorblind
437
- else
438
- @table.item(row, 1).textColor = Cosmos::BLACK
439
- end
440
-
441
- @table.item(row,1).setText(text)
442
- row += 1
443
- end
444
- end
445
- end
446
- # Delay for 1/10 of polling rate
447
- 10.times do
448
- break if @shutdown_tlm_thread
449
- sleep(@polling_rate.to_f / 10.0) if (Time.now - time < @polling_rate)
450
- end
451
- end
452
- rescue Exception => error
453
- Qt.execute_in_main_thread(true) do
454
- ExceptionDialog.new(self, error, "COSMOS Packet Viewer : Telemetry Thread")
455
- end
456
- end
457
- @shutdown_tlm_thread = false
458
- @tlm_thread = nil
459
- end
460
- end
461
-
462
- def mouse_over(row, col)
463
- statusBar.showMessage(tr(@descriptions[row][col]))
464
- end
465
-
466
- def context_menu(point)
467
- target_name = @target_select.currentText
468
- packet_name = @packet_select.currentText
469
- item = @table.itemAt(point)
470
- if item
471
- item_name = @table.item(item.row, 0).text[0..-2] # Remove :
472
- if target_name.length > 0 and packet_name.length > 0 and item_name.length > 0
473
- menu = Qt::Menu.new()
474
-
475
- details_action = Qt::Action.new(tr("Details #{target_name} #{packet_name} #{item_name}"), self)
476
- details_action.statusTip = tr("Popup details about #{target_name} #{packet_name} #{item_name}")
477
- details_action.connect(SIGNAL('triggered()')) do
478
- TlmDetailsDialog.new(nil, target_name, packet_name, item_name)
479
- end
480
- menu.addAction(details_action)
481
-
482
- edit_action = Qt::Action.new(tr("Edit #{target_name} #{packet_name} #{item_name}"), self)
483
- edit_action.statusTip = tr("Edit Settings for #{target_name} #{packet_name} #{item_name}")
484
- edit_action.connect(SIGNAL('triggered()')) do
485
- TlmEditDialog.new(self, target_name, packet_name, item_name)
486
- end
487
- menu.addAction(edit_action)
488
-
489
- graph_action = Qt::Action.new(tr("Graph #{target_name} #{packet_name} #{item_name}"), self)
490
- graph_action.statusTip = tr("Create a new COSMOS graph of #{target_name} #{packet_name} #{item_name}")
491
- graph_action.connect(SIGNAL('triggered()')) do
492
- if Kernel.is_windows?
493
- Cosmos.run_process("rubyw tools/TlmGrapher -i \"#{target_name} #{packet_name} #{item_name}\" --system #{File.basename(System.initial_filename)}")
494
- elsif Kernel.is_mac? and File.exist?("tools/mac/TlmGrapher.app")
495
- Cosmos.run_process("open tools/mac/TlmGrapher.app --args -i \"#{target_name} #{packet_name} #{item_name}\" --system #{File.basename(System.initial_filename)}")
496
- else
497
- Cosmos.run_process("ruby tools/TlmGrapher -i \"#{target_name} #{packet_name} #{item_name}\" --system #{File.basename(System.initial_filename)}")
498
- end
499
- end
500
- menu.addAction(graph_action)
501
-
502
- menu.exec(@table.mapToGlobal(point))
503
- menu.dispose
504
- end
505
- end
506
- end
507
-
508
- def closeEvent(event)
509
- if @tlm_thread
510
- @shutdown_tlm_thread = true
511
- Qt.execute_in_main_thread(false, 0.001, true) { close() }
512
- event.ignore
513
- return
514
- end
515
- super(event)
516
- end
517
-
518
- def self.run(option_parser = nil, options = nil)
519
- Cosmos.catch_fatal_exception do
520
- unless option_parser and options
521
- option_parser, options = create_default_options()
522
- options.width = 325
523
- options.height = 200
524
- options.title = 'Packet Viewer : Formatted Telemetry with Units'
525
- option_parser.separator "Packet Viewer Specific Options:"
526
- option_parser.on("-p", "--packet 'TARGET_NAME PACKET_NAME'", "Start viewing the specified packet") do |arg|
527
- split = arg.split
528
- if split.length != 2
529
- puts "Packet must be specified as 'TARGET_NAME PACKET_NAME' in quotes"
530
- exit
531
- end
532
- options.packet = split
533
- end
534
- end
535
-
536
- super(option_parser, options)
537
- end
538
- end
539
-
540
- end # class PacketViewer
541
-
542
- 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/gui/dialogs/tlm_details_dialog'
16
+ require 'cosmos/gui/dialogs/tlm_edit_dialog'
17
+ require 'cosmos/gui/dialogs/exception_dialog'
18
+ require 'cosmos/gui/dialogs/splash'
19
+ require 'cosmos/gui/widgets/full_text_search_line_edit'
20
+ end
21
+
22
+ module Cosmos
23
+
24
+ class PacketViewer < QtTool
25
+ slots 'file_options()'
26
+ slots 'update_all()'
27
+ slots 'mouse_over(int, int)'
28
+ slots 'context_menu(const QPoint&)'
29
+
30
+ def initialize(options)
31
+ super(options) # MUST BE FIRST - All code before super is executed twice in RubyQt Based classes
32
+ Cosmos.load_cosmos_icon("packet_viewer.png")
33
+
34
+ @table = nil
35
+ @tlm_thread = nil
36
+ @shutdown_tlm_thread = false
37
+ @mode = :WITH_UNITS
38
+ @polling_rate = 1.0
39
+ @colorblind = false
40
+
41
+ initialize_actions()
42
+ initialize_menus()
43
+ initialize_central_widget(options)
44
+ complete_initialize()
45
+
46
+ # Bring up slash screen for long duration tasks after creation
47
+ Splash.execute(self) do |splash|
48
+ # Configure CosmosConfig to interact with splash screen
49
+ ConfigParser.splash = splash
50
+
51
+ System.telemetry
52
+ Qt.execute_in_main_thread(true) do
53
+ update_targets()
54
+ @target_select.setCurrentText(options.packet[0].upcase) if options.packet
55
+ update_packets()
56
+ @packet_select.setCurrentText(options.packet[1].upcase) if options.packet
57
+ update_tlm_items()
58
+
59
+ @search_box.completion_list = System.telemetry.all_item_strings(true, splash)
60
+ @search_box.callback = lambda do |tlm|
61
+ split_tlm = tlm.split(" ")
62
+ if split_tlm.length == 3
63
+ target_name = split_tlm[0].upcase
64
+ @target_select.setCurrentText(target_name)
65
+ update_packets()
66
+ packet_name = split_tlm[1]
67
+ @packet_select.setCurrentText(packet_name)
68
+ item_name = split_tlm[2]
69
+ update_tlm_items(item_name)
70
+ end
71
+ end
72
+ end
73
+
74
+ # Unconfigure CosmosConfig to interact with splash screen
75
+ ConfigParser.splash = nil
76
+ end
77
+ end
78
+
79
+ def initialize_actions
80
+ super()
81
+
82
+ @reset_action = Qt::Action.new(tr('&Reset'), self)
83
+ @reset_keyseq = Qt::KeySequence.new(tr('Ctrl+R'))
84
+ @reset_action.shortcut = @reset_keyseq
85
+ @reset_action.statusTip = tr('Reset Connection')
86
+ connect(@reset_action, SIGNAL('triggered()'), self, SLOT('update_all()'))
87
+
88
+ @option_action = Qt::Action.new(tr('O&ptions'), self)
89
+ @option_action.statusTip = tr('Application Options')
90
+ connect(@option_action, SIGNAL('triggered()'), self, SLOT('file_options()'))
91
+
92
+ @color_blind_action = Qt::Action.new(tr('Color&blind Mode'), self)
93
+ @color_blind_keyseq = Qt::KeySequence.new(tr('Ctrl+B'))
94
+ @color_blind_action.shortcut = @color_blind_keyseq
95
+ @color_blind_action.statusTip = tr('Enable text representation of colors in the values')
96
+ @color_blind_action.setCheckable(true)
97
+ @color_blind_action.connect(SIGNAL('triggered()')) do
98
+ @colorblind = @color_blind_action.isChecked
99
+ end
100
+
101
+ @hide_ignored_action = Qt::Action.new(tr('&Hide Ignored Items'), self)
102
+ @hide_ignored_keyseq = Qt::KeySequence.new(tr('Ctrl+H'))
103
+ @hide_ignored_action.shortcut = @hide_ignored_keyseq
104
+ @hide_ignored_action.statusTip = tr('Toggle showing and hiding ignored items')
105
+ @hide_ignored_action.setCheckable(true)
106
+ @hide_ignored_action.setChecked(false)
107
+ @hide_ignored_action.connect(SIGNAL('triggered()')) do
108
+ if @hide_ignored_action.isChecked
109
+ @ignored_rows.each {|row| @table.setRowHidden(row, true) }
110
+ else
111
+ @ignored_rows.each {|row| @table.setRowHidden(row, false) }
112
+ end
113
+ end
114
+
115
+ @formatted_tlm_units_action = Qt::Action.new(tr('Formatted Telemetry With &Units'), self)
116
+ @formatted_tlm_units_keyseq = Qt::KeySequence.new(tr('Ctrl+U'))
117
+ @formatted_tlm_units_action.shortcut = @formatted_tlm_units_keyseq
118
+ @formatted_tlm_units_action.statusTip = tr('Formatted Telemetry with Units')
119
+ @formatted_tlm_units_action.setCheckable(true)
120
+ @formatted_tlm_units_action.setChecked(true)
121
+ @formatted_tlm_units_action.connect(SIGNAL('triggered()')) do
122
+ @mode = :WITH_UNITS
123
+ self.window_title = "COSMOS Packet Viewer : Formatted Telemetry with Units"
124
+ end
125
+
126
+ @formatted_tlm_action = Qt::Action.new(tr('&Formatted Telemetry'), self)
127
+ @formatted_tlm_keyseq = Qt::KeySequence.new(tr('Ctrl+F'))
128
+ @formatted_tlm_action.shortcut = @formatted_tlm_keyseq
129
+ @formatted_tlm_action.statusTip = tr('Formatted Telemetry')
130
+ @formatted_tlm_action.setCheckable(true)
131
+ @formatted_tlm_action.connect(SIGNAL('triggered()')) do
132
+ @mode = :FORMATTED
133
+ self.window_title = "COSMOS Packet Viewer : Formatted Telemetry"
134
+ end
135
+
136
+ @normal_tlm_action = Qt::Action.new(tr('Normal &Converted Telemetry'), self)
137
+ @normal_tlm_keyseq = Qt::KeySequence.new(tr('Ctrl+C'))
138
+ @normal_tlm_action.shortcut = @normal_tlm_keyseq
139
+ @normal_tlm_action.statusTip = tr('Normal Converted Telemetry')
140
+ @normal_tlm_action.setCheckable(true)
141
+ @normal_tlm_action.connect(SIGNAL('triggered()')) do
142
+ @mode = :CONVERTED
143
+ self.window_title = "COSMOS Packet Viewer : Coverted Telemetry"
144
+ end
145
+
146
+ @raw_tlm_action = Qt::Action.new(tr('&Raw Telemetry'), self)
147
+ @raw_tlm_keyseq = Qt::KeySequence.new(tr('Ctrl+A'))
148
+ @raw_tlm_action.shortcut = @raw_tlm_keyseq
149
+ @raw_tlm_action.statusTip = tr('Raw Unprocessed Telemetry')
150
+ @raw_tlm_action.setCheckable(true)
151
+ @raw_tlm_action.connect(SIGNAL('triggered()')) do
152
+ @mode = :RAW
153
+ self.window_title = "COSMOS Packet Viewer : Raw Telemetry"
154
+ end
155
+
156
+ # The formatting options are mutually exclusive so create an action group
157
+ formatting_group = Qt::ActionGroup.new(self)
158
+ formatting_group.addAction(@formatted_tlm_units_action)
159
+ formatting_group.addAction(@formatted_tlm_action)
160
+ formatting_group.addAction(@normal_tlm_action)
161
+ formatting_group.addAction(@raw_tlm_action)
162
+ end
163
+
164
+ def initialize_menus
165
+ # File Menu
166
+ file_menu = menuBar.addMenu(tr('&File'))
167
+ file_menu.addAction(@reset_action)
168
+ file_menu.addAction(@option_action)
169
+ file_menu.addSeparator()
170
+ file_menu.addAction(@exit_action)
171
+
172
+ # View Menu
173
+ view_menu = menuBar.addMenu(tr('&View'))
174
+ view_menu.addAction(@color_blind_action)
175
+ view_menu.addAction(@hide_ignored_action)
176
+ view_menu.addSeparator.setText(tr('Formatting'));
177
+ view_menu.addAction(@formatted_tlm_units_action)
178
+ view_menu.addAction(@formatted_tlm_action)
179
+ view_menu.addAction(@normal_tlm_action)
180
+ view_menu.addAction(@raw_tlm_action)
181
+
182
+ # Help Menu
183
+ @about_string = "Packet Viewer provides a view of every telemetry packet in the system. Packets can be viewed in numerous represenations ranging from the raw data to formatted with units."
184
+ initialize_help_menu()
185
+ end
186
+
187
+ def initialize_central_widget(options)
188
+ # Create the central widget
189
+ central_widget = Qt::Widget.new
190
+ setCentralWidget(central_widget)
191
+
192
+ # Create the top level vertical layout
193
+ top_layout = Qt::VBoxLayout.new(central_widget)
194
+
195
+ # Set the target combobox selection
196
+ @target_select = Qt::ComboBox.new
197
+ @target_select.setMaxVisibleItems(6)
198
+ @target_select.connect(SIGNAL('activated(const QString&)')) do
199
+ update_packets()
200
+ update_tlm_items()
201
+ end
202
+ target_label = Qt::Label.new(tr("&Target:"))
203
+ target_label.setBuddy(@target_select)
204
+
205
+ # Set the command combobox selection
206
+ @packet_select = Qt::ComboBox.new
207
+ @packet_select.setMaxVisibleItems(20)
208
+ @packet_select.connect(SIGNAL('activated(const QString&)')) do
209
+ update_tlm_items()
210
+ end
211
+ cmd_label = Qt::Label.new(tr("&Packet:"))
212
+ cmd_label.setBuddy(@packet_select)
213
+
214
+ # Mnemonic Search Box
215
+ @search_layout = Qt::HBoxLayout.new
216
+ @search_box = FullTextSearchLineEdit.new(self)
217
+ @search_box.setStyleSheet("padding-right: 20px;padding-left: 5px;background: url(#{File.join(Cosmos::PATH, 'data', 'search-14.png')});background-position: right;background-repeat: no-repeat;")
218
+ @search_layout.addWidget(@search_box)
219
+ top_layout.addLayout(@search_layout)
220
+
221
+ # Layout the top level selection
222
+ select_layout = Qt::HBoxLayout.new
223
+ select_layout.addWidget(target_label)
224
+ select_layout.addWidget(@target_select, 1)
225
+ select_layout.addWidget(cmd_label)
226
+ select_layout.addWidget(@packet_select, 1)
227
+ top_layout.addLayout(select_layout)
228
+
229
+ # Separator Between Telemetry Selection and Telemetry Description
230
+ sep1 = Qt::Frame.new(central_widget)
231
+ sep1.setFrameStyle(Qt::Frame::HLine | Qt::Frame::Sunken)
232
+ top_layout.addWidget(sep1)
233
+
234
+ # Telemetry Description Label
235
+ dec_label = Qt::Label.new(tr("Description:"))
236
+ @description = Qt::Label.new('')
237
+ desc_layout = Qt::HBoxLayout.new
238
+ desc_layout.addWidget(dec_label)
239
+ desc_layout.addWidget(@description, 1)
240
+ top_layout.addLayout(desc_layout)
241
+
242
+ # Separator Between Telemetry Selection and Description
243
+ sep2 = Qt::Frame.new(central_widget)
244
+ sep2.setFrameStyle(Qt::Frame::HLine | Qt::Frame::Sunken)
245
+ top_layout.addWidget(sep2)
246
+
247
+ @frame = Qt::VBoxLayout.new
248
+ top_layout.addLayout(@frame)
249
+ end
250
+
251
+ def file_options
252
+ @polling_rate = Qt::InputDialog.getDouble(self, tr("Options"), tr("Polling Rate:"), @polling_rate, 0, 1000, 1, nil)
253
+ end
254
+
255
+ def update_all
256
+ update_targets()
257
+ update_packets()
258
+ update_tlm_items()
259
+ end
260
+
261
+ def update_targets
262
+ @target_select.clearItems
263
+
264
+ System.telemetry.target_names.each do |target_name|
265
+ packets = System.telemetry.packets(target_name)
266
+ has_non_hidden = false
267
+ packets.each do |packet_name, packet|
268
+ next if packet.hidden
269
+ has_non_hidden = true
270
+ break
271
+ end
272
+ @target_select.addItem(target_name) if has_non_hidden
273
+ end
274
+ end
275
+
276
+ def update_packets
277
+ @packet_select.clearItems
278
+ @packets = []
279
+ begin
280
+ packets = System.telemetry.packets(@target_select.text)
281
+ rescue
282
+ # Unknown target or no telemetry packets
283
+ packets = []
284
+ end
285
+ packets.each do |packet_name, packet|
286
+ @packets << [packet_name, packet.description] unless packet.hidden
287
+ end
288
+ @packets.sort
289
+ @packets = [[""]] if @packets.empty?
290
+ @packets.each do |packet_name, description|
291
+ @packet_select.addItem(packet_name)
292
+ end
293
+ if not @packets.empty?
294
+ @packet_select.setCurrentText(@packets[0][0])
295
+ end
296
+ end
297
+
298
+ def update_tlm_items(featured_item_name = nil)
299
+ target_name = @target_select.text
300
+ packet_name = @packet_select.text
301
+
302
+ if @tlm_thread
303
+ @shutdown_tlm_thread = true
304
+ Qt.execute_in_main_thread(false, 0.001, true) {update_tlm_items(featured_item_name)}
305
+ return
306
+ end
307
+
308
+ # Clear Status Bar
309
+ statusBar.clearMessage()
310
+
311
+ # Update Telemetry Description
312
+ @description.text = ""
313
+ @packets.each do |name, description|
314
+ if name == packet_name
315
+ @description.text = description.to_s
316
+ break
317
+ end
318
+ end
319
+
320
+ # Destory and recreate a new table widget
321
+ @table.dispose if @table
322
+
323
+ # Table for Telemetry Items
324
+ @table = Qt::TableWidget.new()
325
+
326
+ # Update Telemetry Items
327
+ tlm_items = []
328
+ begin
329
+ System.telemetry.items(target_name, packet_name).each do |item|
330
+ tlm_items << [item.name, item.states, item.description]
331
+ end
332
+ rescue
333
+ # Unknown packet
334
+ end
335
+
336
+ @table.setRowCount(tlm_items.length)
337
+ @table.setColumnCount(2)
338
+ # Force the last section (the values) to fill all available space in the frame
339
+ @table.horizontalHeader.setStretchLastSection(true)
340
+ @table.setHorizontalHeaderLabels(%w(Item Value))
341
+ @descriptions = []
342
+
343
+ row = 0
344
+ featured_item = nil
345
+ @ignored_rows = []
346
+ tlm_items.each do |tlm_name, states, description|
347
+ @ignored_rows << row if System.targets[target_name].ignored_items.include?(tlm_name)
348
+ item = Qt::TableWidgetItem.new(tr("#{tlm_name}:"))
349
+ item.setTextAlignment(Qt::AlignRight)
350
+ item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable)
351
+ @table.setItem(row, 0, item)
352
+ item = Qt::TableWidgetItem.new(tr("0.0"))
353
+ item.setTextAlignment(Qt::AlignRight)
354
+ item.setFlags(Qt::NoItemFlags | Qt::ItemIsSelectable | Qt::ItemIsEnabled)
355
+ @table.setItem(row, 1, item)
356
+ @descriptions[row] = []
357
+ @descriptions[row][0] = description
358
+ @descriptions[row][1] = description
359
+ row += 1
360
+ featured_item = item if featured_item_name == tlm_name
361
+ end
362
+
363
+ @table.resizeColumnsToContents()
364
+ @table.resizeRowsToContents()
365
+ @table.scrollToItem(featured_item) if featured_item
366
+ @frame.addWidget(@table)
367
+
368
+ # Handle Table Clicks
369
+ @table.setMouseTracking(true)
370
+ connect(@table, SIGNAL('cellEntered(int, int)'), self, SLOT('mouse_over(int, int)'))
371
+ @table.setContextMenuPolicy(Qt::CustomContextMenu)
372
+ connect(@table, SIGNAL('customContextMenuRequested(const QPoint&)'), self, SLOT('context_menu(const QPoint&)'))
373
+
374
+ # Start Update Thread
375
+ update_needed = false
376
+ @tlm_thread = Thread.new do
377
+ begin
378
+ while true
379
+ time = Time.now
380
+ break if @shutdown_tlm_thread
381
+
382
+ begin
383
+ tlm_items = get_tlm_packet(target_name || '', packet_name || '', @mode)
384
+ rescue DRb::DRbConnError => err
385
+ Qt.execute_in_main_thread(true) do
386
+ statusBar.showMessage(tr("Error Connecting to Command and Telemetry Server"))
387
+ end
388
+ tlm_items = nil
389
+ update_needed = false
390
+ rescue RuntimeError => err
391
+ Qt.execute_in_main_thread(true) do
392
+ statusBar.showMessage(tr("Packet #{target_name} #{packet_name} does not exist"))
393
+ end
394
+ tlm_items = nil
395
+ update_needed = true
396
+ end
397
+
398
+ break if @shutdown_tlm_thread
399
+
400
+ Qt.execute_in_main_thread(true) do
401
+ # If we need an update (which indicates we've reconnected to the server)
402
+ # Then we call update_all which will update all the telemetry items and kill and respawn this thread
403
+ if update_needed
404
+ update_all()
405
+ end
406
+
407
+ if tlm_items
408
+ row = 0
409
+ tlm_items.each do |name, value, limits_state|
410
+ text = value.to_s
411
+
412
+ case limits_state
413
+ when :GREEN, :GREEN_HIGH
414
+ @table.item(row, 1).textColor = Cosmos::GREEN
415
+ text << ' (G)' if @colorblind
416
+ when :GREEN_LOW
417
+ @table.item(row, 1).textColor = Cosmos::GREEN
418
+ text << ' (g)' if @colorblind
419
+ when :YELLOW, :YELLOW_HIGH
420
+ @table.item(row, 1).textColor = Cosmos::YELLOW
421
+ text << ' (Y)' if @colorblind
422
+ when :YELLOW_LOW
423
+ @table.item(row, 1).textColor = Cosmos::YELLOW
424
+ text << ' (y)' if @colorblind
425
+ when :RED, :RED_HIGH
426
+ @table.item(row, 1).textColor = Cosmos::RED
427
+ text << ' (R)' if @colorblind
428
+ when :RED_LOW
429
+ @table.item(row, 1).textColor = Cosmos::RED
430
+ text << ' (r)' if @colorblind
431
+ when :BLUE
432
+ @table.item(row, 1).textColor = Cosmos::BLUE
433
+ text << ' (B)' if @colorblind
434
+ when :STALE
435
+ @table.item(row, 1).textColor = Cosmos::PURPLE
436
+ text << ' ($)' if @colorblind
437
+ else
438
+ @table.item(row, 1).textColor = Cosmos::BLACK
439
+ end
440
+
441
+ @table.item(row,1).setText(text)
442
+ row += 1
443
+ end
444
+ end
445
+ end
446
+ # Delay for 1/10 of polling rate
447
+ 10.times do
448
+ break if @shutdown_tlm_thread
449
+ sleep(@polling_rate.to_f / 10.0) if (Time.now - time < @polling_rate)
450
+ end
451
+ end
452
+ rescue Exception => error
453
+ Qt.execute_in_main_thread(true) do
454
+ ExceptionDialog.new(self, error, "COSMOS Packet Viewer : Telemetry Thread")
455
+ end
456
+ end
457
+ @shutdown_tlm_thread = false
458
+ @tlm_thread = nil
459
+ end
460
+ end
461
+
462
+ def mouse_over(row, col)
463
+ statusBar.showMessage(tr(@descriptions[row][col]))
464
+ end
465
+
466
+ def context_menu(point)
467
+ target_name = @target_select.currentText
468
+ packet_name = @packet_select.currentText
469
+ item = @table.itemAt(point)
470
+ if item
471
+ item_name = @table.item(item.row, 0).text[0..-2] # Remove :
472
+ if target_name.length > 0 and packet_name.length > 0 and item_name.length > 0
473
+ menu = Qt::Menu.new()
474
+
475
+ details_action = Qt::Action.new(tr("Details #{target_name} #{packet_name} #{item_name}"), self)
476
+ details_action.statusTip = tr("Popup details about #{target_name} #{packet_name} #{item_name}")
477
+ details_action.connect(SIGNAL('triggered()')) do
478
+ TlmDetailsDialog.new(nil, target_name, packet_name, item_name)
479
+ end
480
+ menu.addAction(details_action)
481
+
482
+ edit_action = Qt::Action.new(tr("Edit #{target_name} #{packet_name} #{item_name}"), self)
483
+ edit_action.statusTip = tr("Edit Settings for #{target_name} #{packet_name} #{item_name}")
484
+ edit_action.connect(SIGNAL('triggered()')) do
485
+ TlmEditDialog.new(self, target_name, packet_name, item_name)
486
+ end
487
+ menu.addAction(edit_action)
488
+
489
+ graph_action = Qt::Action.new(tr("Graph #{target_name} #{packet_name} #{item_name}"), self)
490
+ graph_action.statusTip = tr("Create a new COSMOS graph of #{target_name} #{packet_name} #{item_name}")
491
+ graph_action.connect(SIGNAL('triggered()')) do
492
+ if Kernel.is_windows?
493
+ Cosmos.run_process("rubyw tools/TlmGrapher -i \"#{target_name} #{packet_name} #{item_name}\" --system #{File.basename(System.initial_filename)}")
494
+ elsif Kernel.is_mac? and File.exist?("tools/mac/TlmGrapher.app")
495
+ Cosmos.run_process("open tools/mac/TlmGrapher.app --args -i \"#{target_name} #{packet_name} #{item_name}\" --system #{File.basename(System.initial_filename)}")
496
+ else
497
+ Cosmos.run_process("ruby tools/TlmGrapher -i \"#{target_name} #{packet_name} #{item_name}\" --system #{File.basename(System.initial_filename)}")
498
+ end
499
+ end
500
+ menu.addAction(graph_action)
501
+
502
+ menu.exec(@table.mapToGlobal(point))
503
+ menu.dispose
504
+ end
505
+ end
506
+ end
507
+
508
+ def closeEvent(event)
509
+ if @tlm_thread
510
+ @shutdown_tlm_thread = true
511
+ Qt.execute_in_main_thread(false, 0.001, true) { close() }
512
+ event.ignore
513
+ return
514
+ end
515
+ super(event)
516
+ end
517
+
518
+ def self.run(option_parser = nil, options = nil)
519
+ Cosmos.catch_fatal_exception do
520
+ unless option_parser and options
521
+ option_parser, options = create_default_options()
522
+ options.width = 325
523
+ options.height = 200
524
+ options.title = 'Packet Viewer : Formatted Telemetry with Units'
525
+ option_parser.separator "Packet Viewer Specific Options:"
526
+ option_parser.on("-p", "--packet 'TARGET_NAME PACKET_NAME'", "Start viewing the specified packet") do |arg|
527
+ split = arg.split
528
+ if split.length != 2
529
+ puts "Packet must be specified as 'TARGET_NAME PACKET_NAME' in quotes"
530
+ exit
531
+ end
532
+ options.packet = split
533
+ end
534
+ end
535
+
536
+ super(option_parser, options)
537
+ end
538
+ end
539
+
540
+ end # class PacketViewer
541
+
542
+ end # module Cosmos