cosmos 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (912) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +48 -48
  4. data/.travis.yml +7 -7
  5. data/CONTRIBUTING.txt +50 -50
  6. data/Gemfile +6 -6
  7. data/Guardfile +27 -27
  8. data/LICENSE.txt +879 -879
  9. data/Manifest.txt +1116 -1114
  10. data/README.md +109 -107
  11. data/Rakefile +214 -214
  12. data/autohotkey/config/data/diamond.STL +57 -57
  13. data/autohotkey/config/system/system.txt +34 -34
  14. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  15. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  16. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  17. data/autohotkey/config/targets/COSMOS/target.txt +5 -5
  18. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  19. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  20. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
  21. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
  22. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -294
  23. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
  24. data/autohotkey/config/targets/INST/screens/array.txt +7 -7
  25. data/autohotkey/config/targets/INST/screens/block.txt +8 -8
  26. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
  27. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
  28. data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
  29. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
  30. data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
  31. data/autohotkey/config/targets/INST/screens/image.txt +21 -21
  32. data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
  33. data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
  34. data/autohotkey/config/targets/INST/screens/other.txt +25 -25
  35. data/autohotkey/config/targets/INST/screens/params.txt +25 -25
  36. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
  37. data/autohotkey/config/targets/INST/target.txt +26 -26
  38. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  39. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
  40. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  41. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
  42. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
  43. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
  44. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
  45. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  46. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  47. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  48. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
  49. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  50. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  51. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  52. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  53. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  54. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  55. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  56. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  57. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
  58. data/autohotkey/config/tools/launcher/launcher.txt +38 -38
  59. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
  60. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
  61. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
  62. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
  63. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
  64. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
  65. data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
  66. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  67. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  68. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
  69. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
  70. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
  71. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
  72. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
  73. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
  74. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
  75. data/autohotkey/lib/example_background_task.rb +42 -42
  76. data/autohotkey/lib/user_version.rb +3 -3
  77. data/autohotkey/procedures/clear_util.rb +7 -7
  78. data/autohotkey/procedures/collect.rb +18 -18
  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 +20 -20
  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/Replay.bat +59 -59
  101. data/autohotkey/tools/ReplayAHK +17 -17
  102. data/autohotkey/tools/ScriptRunner +14 -14
  103. data/autohotkey/tools/ScriptRunnerAHK +20 -20
  104. data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
  105. data/autohotkey/tools/TableManager +14 -14
  106. data/autohotkey/tools/TableManagerAHK +30 -30
  107. data/autohotkey/tools/TestRunner +15 -15
  108. data/autohotkey/tools/TestRunnerAHK +17 -17
  109. data/autohotkey/tools/TestRunnerAHK2 +17 -17
  110. data/autohotkey/tools/TestRunnerAHK3 +17 -17
  111. data/autohotkey/tools/TestRunnerAHK4 +17 -17
  112. data/autohotkey/tools/TlmExtractor +15 -15
  113. data/autohotkey/tools/TlmExtractorAHK +19 -19
  114. data/autohotkey/tools/TlmExtractorAHK2 +16 -16
  115. data/autohotkey/tools/TlmExtractorAHK3 +16 -16
  116. data/autohotkey/tools/TlmGrapher +14 -14
  117. data/autohotkey/tools/TlmGrapherAHK +19 -19
  118. data/autohotkey/tools/TlmGrapherAHK2 +23 -23
  119. data/autohotkey/tools/TlmGrapherAHK3 +17 -17
  120. data/autohotkey/tools/TlmGrapherAHK4 +17 -17
  121. data/autohotkey/tools/TlmViewer +14 -14
  122. data/autohotkey/tools/TlmViewerAHK +28 -28
  123. data/autohotkey/tools/TlmViewerAHK2 +18 -18
  124. data/autohotkey/tools/TlmViewerAHK3 +18 -18
  125. data/autohotkey/tools/TlmViewerAHK4 +18 -18
  126. data/autohotkey/tools/TlmViewerAHK5 +18 -18
  127. data/autohotkey/tools/autohotkey.rb +37 -37
  128. data/autohotkey/tools/cmd_extractor.ahk +27 -27
  129. data/autohotkey/tools/cmd_sender.ahk +182 -162
  130. data/autohotkey/tools/cmd_tlm_server.ahk +89 -89
  131. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
  132. data/autohotkey/tools/data_viewer.ahk +135 -135
  133. data/autohotkey/tools/handbook_creator.ahk +23 -23
  134. data/autohotkey/tools/launcher.ahk +41 -41
  135. data/autohotkey/tools/limits_monitor.ahk +70 -70
  136. data/autohotkey/tools/open_gl_builder.ahk +134 -134
  137. data/autohotkey/tools/packet_viewer.ahk +143 -143
  138. data/autohotkey/tools/packet_viewer2.ahk +9 -9
  139. data/autohotkey/tools/replay.ahk +98 -98
  140. data/autohotkey/tools/script_runner.ahk +589 -589
  141. data/autohotkey/tools/script_runner2.ahk +34 -31
  142. data/autohotkey/tools/table_manager.ahk +220 -220
  143. data/autohotkey/tools/test_runner.ahk +262 -259
  144. data/autohotkey/tools/test_runner2.ahk +52 -52
  145. data/autohotkey/tools/test_runner3.ahk +13 -13
  146. data/autohotkey/tools/tlm_extractor.ahk +272 -272
  147. data/autohotkey/tools/tlm_grapher.ahk +642 -642
  148. data/autohotkey/tools/tlm_grapher2.ahk +115 -115
  149. data/autohotkey/tools/tlm_grapher3.ahk +24 -24
  150. data/autohotkey/tools/tlm_viewer.ahk +133 -133
  151. data/autohotkey/tools/tlm_viewer2.ahk +50 -49
  152. data/autohotkey/tools/tlm_viewer4.ahk +4 -4
  153. data/autohotkey/tools/tlm_viewer5.ahk +20 -20
  154. data/bin/cosmos +96 -96
  155. data/bin/cstol_converter +1166 -1166
  156. data/bin/rubysloc +85 -85
  157. data/cosmos.gemspec +98 -97
  158. data/data/about.txt +4 -4
  159. data/data/crc.txt +306 -305
  160. data/data/diamond.STL +57 -57
  161. data/data/legal.txt +9 -9
  162. data/demo/Gemfile +6 -6
  163. data/demo/Launcher +15 -15
  164. data/demo/Launcher.bat +59 -59
  165. data/demo/Rakefile +61 -61
  166. data/demo/config/data/crc.txt +222 -206
  167. data/demo/config/data/diamond.STL +57 -57
  168. data/demo/config/data/meta_init.txt +4 -4
  169. data/demo/config/system/system.txt +34 -34
  170. data/demo/config/system/system2.txt +33 -33
  171. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  172. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  173. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  174. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
  175. data/demo/config/targets/COSMOS/screens/version.txt +19 -19
  176. data/demo/config/targets/COSMOS/target.txt +11 -11
  177. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
  178. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +3 -3
  179. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
  180. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
  181. data/demo/config/targets/EXAMPLE/target.txt +6 -6
  182. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  183. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  184. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
  185. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
  186. data/demo/config/targets/INST/lib/sim_inst.rb +305 -294
  187. data/demo/config/targets/INST/screens/adcs.txt +46 -46
  188. data/demo/config/targets/INST/screens/array.txt +15 -15
  189. data/demo/config/targets/INST/screens/block.txt +8 -8
  190. data/demo/config/targets/INST/screens/commanding.txt +30 -30
  191. data/demo/config/targets/INST/screens/graphs.txt +14 -14
  192. data/demo/config/targets/INST/screens/ground.txt +25 -25
  193. data/demo/config/targets/INST/screens/hs.txt +44 -44
  194. data/demo/config/targets/INST/screens/latest.txt +23 -23
  195. data/demo/config/targets/INST/screens/other.txt +29 -29
  196. data/demo/config/targets/INST/screens/tabs.txt +70 -70
  197. data/demo/config/targets/INST/target.txt +33 -33
  198. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  199. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
  200. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  201. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
  202. data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
  203. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -12
  204. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
  205. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
  206. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +54 -48
  207. data/demo/config/targets/TEMPLATED/target.txt +6 -6
  208. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +33 -33
  209. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +29 -29
  210. data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
  211. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
  212. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  213. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  214. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  215. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
  216. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  217. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  218. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  219. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  220. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  221. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  222. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  223. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  224. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
  225. data/demo/config/tools/launcher/launcher.txt +45 -45
  226. data/demo/config/tools/launcher/launcher2.txt +45 -45
  227. data/demo/config/tools/script_runner/script_runner.txt +3 -3
  228. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
  229. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  230. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  231. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  232. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  233. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  234. data/demo/config/tools/test_runner/test_runner.txt +17 -17
  235. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  236. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  237. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  238. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  239. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
  240. data/demo/lib/example_background_task.rb +57 -52
  241. data/demo/lib/example_target.rb +113 -108
  242. data/demo/lib/scpi_target.rb +74 -74
  243. data/demo/lib/user_version.rb +3 -3
  244. data/demo/procedures/checks.rb +11 -11
  245. data/demo/procedures/clear_util.rb +7 -7
  246. data/demo/procedures/collect.rb +18 -18
  247. data/demo/procedures/collect_util.rb +14 -14
  248. data/demo/procedures/cosmos_api_test.rb +293 -293
  249. data/demo/procedures/disconnect.rb +29 -29
  250. data/demo/procedures/example_test.rb +182 -182
  251. data/demo/procedures/plot_test.rb +8 -8
  252. data/demo/procedures/run_example_test.rb +3 -3
  253. data/demo/procedures/test.rb +51 -51
  254. data/demo/tools/CmdExtractor +15 -15
  255. data/demo/tools/CmdExtractor.bat +59 -59
  256. data/demo/tools/CmdSender +15 -15
  257. data/demo/tools/CmdSender.bat +59 -59
  258. data/demo/tools/CmdTlmServer +15 -15
  259. data/demo/tools/CmdTlmServer.bat +59 -59
  260. data/demo/tools/DataViewer +15 -15
  261. data/demo/tools/DataViewer.bat +59 -59
  262. data/demo/tools/ExampleTarget +15 -15
  263. data/demo/tools/ExampleTarget.bat +59 -59
  264. data/demo/tools/HandbookCreator +15 -15
  265. data/demo/tools/HandbookCreator.bat +61 -61
  266. data/demo/tools/Launcher +15 -15
  267. data/demo/tools/Launcher.bat +59 -59
  268. data/demo/tools/LimitsMonitor +15 -15
  269. data/demo/tools/LimitsMonitor.bat +59 -59
  270. data/demo/tools/OpenGLBuilder +15 -15
  271. data/demo/tools/OpenGLBuilder.bat +59 -59
  272. data/demo/tools/PacketViewer +15 -15
  273. data/demo/tools/PacketViewer.bat +59 -59
  274. data/demo/tools/Replay +15 -15
  275. data/demo/tools/Replay.bat +59 -59
  276. data/demo/tools/ScpiTarget +15 -15
  277. data/demo/tools/ScpiTarget.bat +59 -59
  278. data/demo/tools/ScriptRunner +15 -15
  279. data/demo/tools/ScriptRunner.bat +59 -59
  280. data/demo/tools/TableManager +15 -15
  281. data/demo/tools/TableManager.bat +59 -59
  282. data/demo/tools/TestRunner +15 -15
  283. data/demo/tools/TestRunner.bat +59 -59
  284. data/demo/tools/TlmExtractor +15 -15
  285. data/demo/tools/TlmExtractor.bat +59 -59
  286. data/demo/tools/TlmGrapher +15 -15
  287. data/demo/tools/TlmGrapher.bat +59 -59
  288. data/demo/tools/TlmViewer +15 -15
  289. data/demo/tools/TlmViewer.bat +59 -59
  290. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  291. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  292. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  293. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  294. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  295. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  296. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  297. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  298. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  299. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  300. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  301. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  302. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  303. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  304. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  305. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  306. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  307. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  308. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  309. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  310. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  311. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  312. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  313. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  314. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  315. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  316. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  317. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
  318. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  319. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  320. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  321. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  322. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  323. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  324. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  325. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  326. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  327. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  328. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  329. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  330. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  331. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  332. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  333. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  334. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  335. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  336. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  337. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  338. data/ext/cosmos/ext/array/array.c +111 -111
  339. data/ext/cosmos/ext/array/extconf.rb +13 -13
  340. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
  341. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
  342. data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
  343. data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
  344. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
  345. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
  346. data/ext/cosmos/ext/crc/crc.c +341 -341
  347. data/ext/cosmos/ext/crc/extconf.rb +12 -12
  348. data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
  349. data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
  350. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
  351. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +261 -261
  352. data/ext/cosmos/ext/packet/extconf.rb +13 -13
  353. data/ext/cosmos/ext/packet/packet.c +339 -339
  354. data/ext/cosmos/ext/platform/extconf.rb +13 -13
  355. data/ext/cosmos/ext/platform/platform.c +81 -81
  356. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
  357. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
  358. data/ext/cosmos/ext/string/extconf.rb +13 -13
  359. data/ext/cosmos/ext/string/string.c +49 -49
  360. data/ext/cosmos/ext/structure/structure.c +894 -894
  361. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
  362. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
  363. data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
  364. data/ext/cosmos/ext/telemetry/telemetry.c +306 -306
  365. data/ext/mkrf_conf.rb +40 -40
  366. data/install/Gemfile +6 -6
  367. data/install/Launcher +14 -14
  368. data/install/Launcher.bat +59 -59
  369. data/install/Rakefile +61 -61
  370. data/install/config/data/crc.txt +134 -133
  371. data/install/config/system/system.txt +29 -29
  372. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  373. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  374. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  375. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  376. data/install/config/targets/COSMOS/screens/version.txt +19 -19
  377. data/install/config/targets/COSMOS/target.txt +8 -8
  378. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  379. data/install/config/tools/data_viewer/data_viewer.txt +3 -3
  380. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
  381. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  382. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  383. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  384. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
  385. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  386. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  387. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  388. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  389. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  390. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  391. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  392. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  393. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
  394. data/install/config/tools/launcher/launcher.txt +39 -39
  395. data/install/config/tools/script_runner/script_runner.txt +3 -3
  396. data/install/config/tools/test_runner/test_runner.txt +8 -8
  397. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  398. data/install/lib/user_version.rb +3 -3
  399. data/install/tools/CmdExtractor +15 -15
  400. data/install/tools/CmdExtractor.bat +59 -59
  401. data/install/tools/CmdSender +15 -15
  402. data/install/tools/CmdSender.bat +59 -59
  403. data/install/tools/CmdTlmServer +15 -15
  404. data/install/tools/CmdTlmServer.bat +59 -59
  405. data/install/tools/DataViewer +15 -15
  406. data/install/tools/DataViewer.bat +59 -59
  407. data/install/tools/HandbookCreator +15 -15
  408. data/install/tools/HandbookCreator.bat +61 -61
  409. data/install/tools/Launcher +15 -15
  410. data/install/tools/Launcher.bat +59 -59
  411. data/install/tools/LimitsMonitor +15 -15
  412. data/install/tools/LimitsMonitor.bat +59 -59
  413. data/install/tools/OpenGLBuilder +15 -15
  414. data/install/tools/OpenGLBuilder.bat +59 -59
  415. data/install/tools/PacketViewer +15 -15
  416. data/install/tools/PacketViewer.bat +59 -59
  417. data/install/tools/Replay +15 -15
  418. data/install/tools/Replay.bat +59 -59
  419. data/install/tools/ScriptRunner +15 -15
  420. data/install/tools/ScriptRunner.bat +59 -59
  421. data/install/tools/TableManager +15 -15
  422. data/install/tools/TableManager.bat +59 -59
  423. data/install/tools/TestRunner +15 -15
  424. data/install/tools/TestRunner.bat +59 -59
  425. data/install/tools/TlmExtractor +15 -15
  426. data/install/tools/TlmExtractor.bat +59 -59
  427. data/install/tools/TlmGrapher +15 -15
  428. data/install/tools/TlmGrapher.bat +59 -59
  429. data/install/tools/TlmViewer +15 -15
  430. data/install/tools/TlmViewer.bat +59 -59
  431. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  432. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  433. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  434. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  435. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  436. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  437. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  438. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  439. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  440. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  441. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  442. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  443. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  444. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  445. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  446. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  447. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  448. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  449. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  450. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  451. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  452. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  453. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  454. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  455. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  456. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  457. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  458. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
  459. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  460. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  461. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  462. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  463. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  464. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  465. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  466. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  467. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  468. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  469. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  470. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  471. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  472. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  473. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  474. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  475. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  476. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  477. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  478. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  479. data/lib/cosmos.rb +63 -63
  480. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
  481. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
  482. data/lib/cosmos/config/config_parser.rb +324 -324
  483. data/lib/cosmos/conversions.rb +13 -13
  484. data/lib/cosmos/conversions/conversion.rb +47 -47
  485. data/lib/cosmos/conversions/generic_conversion.rb +55 -55
  486. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
  487. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
  488. data/lib/cosmos/conversions/processor_conversion.rb +46 -46
  489. data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
  490. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
  491. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
  492. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
  493. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
  494. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
  495. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
  496. data/lib/cosmos/core_ext.rb +18 -18
  497. data/lib/cosmos/core_ext/array.rb +354 -354
  498. data/lib/cosmos/core_ext/class.rb +51 -51
  499. data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
  500. data/lib/cosmos/core_ext/exception.rb +52 -52
  501. data/lib/cosmos/core_ext/file.rb +75 -75
  502. data/lib/cosmos/core_ext/hash.rb +28 -28
  503. data/lib/cosmos/core_ext/io.rb +75 -75
  504. data/lib/cosmos/core_ext/kernel.rb +38 -38
  505. data/lib/cosmos/core_ext/math.rb +119 -119
  506. data/lib/cosmos/core_ext/matrix.rb +146 -146
  507. data/lib/cosmos/core_ext/objectspace.rb +29 -29
  508. data/lib/cosmos/core_ext/range.rb +22 -22
  509. data/lib/cosmos/core_ext/socket.rb +32 -32
  510. data/lib/cosmos/core_ext/string.rb +310 -310
  511. data/lib/cosmos/core_ext/stringio.rb +24 -24
  512. data/lib/cosmos/core_ext/time.rb +446 -446
  513. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
  514. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
  515. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
  516. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
  517. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
  518. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +317 -317
  519. data/lib/cosmos/gui/dialogs/about_dialog.rb +128 -128
  520. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
  521. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
  522. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
  523. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
  524. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
  525. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
  526. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +196 -196
  527. data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -168
  528. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
  529. data/lib/cosmos/gui/dialogs/progress_dialog.rb +270 -262
  530. data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -161
  531. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
  532. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
  533. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
  534. data/lib/cosmos/gui/dialogs/splash.rb +113 -113
  535. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
  536. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
  537. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
  538. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
  539. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +494 -494
  540. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
  541. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +460 -460
  542. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
  543. data/lib/cosmos/gui/line_graph/lines.rb +290 -290
  544. data/lib/cosmos/gui/line_graph/overview_graph.rb +459 -459
  545. data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
  546. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
  547. data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
  548. data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
  549. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
  550. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
  551. data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -712
  552. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
  553. data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
  554. data/lib/cosmos/gui/opengl/opengl.rb +8 -8
  555. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
  556. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
  557. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
  558. data/lib/cosmos/gui/qt.rb +813 -786
  559. data/lib/cosmos/gui/qt_tool.rb +378 -373
  560. data/lib/cosmos/gui/text/completion.rb +381 -381
  561. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
  562. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
  563. data/lib/cosmos/gui/text/ruby_editor.rb +395 -395
  564. data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
  565. data/lib/cosmos/gui/utilities/script_module_gui.rb +203 -203
  566. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
  567. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
  568. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
  569. data/lib/cosmos/interfaces.rb +11 -11
  570. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -149
  571. data/lib/cosmos/interfaces/interface.rb +213 -213
  572. data/lib/cosmos/interfaces/linc_interface.rb +360 -360
  573. data/lib/cosmos/interfaces/serial_interface.rb +76 -76
  574. data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -128
  575. data/lib/cosmos/interfaces/stream_interface.rb +156 -156
  576. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
  577. data/lib/cosmos/interfaces/tcpip_server_interface.rb +154 -154
  578. data/lib/cosmos/interfaces/udp_interface.rb +173 -173
  579. data/lib/cosmos/io/buffered_file.rb +11 -11
  580. data/lib/cosmos/io/cosmos_snmp.rb +50 -50
  581. data/lib/cosmos/io/io_multiplexer.rb +89 -89
  582. data/lib/cosmos/io/json_drb.rb +344 -320
  583. data/lib/cosmos/io/json_drb_object.rb +137 -137
  584. data/lib/cosmos/io/json_rpc.rb +365 -365
  585. data/lib/cosmos/io/posix_serial_driver.rb +145 -145
  586. data/lib/cosmos/io/raw_logger.rb +174 -174
  587. data/lib/cosmos/io/raw_logger_pair.rb +71 -71
  588. data/lib/cosmos/io/serial_driver.rb +85 -85
  589. data/lib/cosmos/io/stderr.rb +36 -36
  590. data/lib/cosmos/io/stdout.rb +36 -36
  591. data/lib/cosmos/io/tcpip_server.rb +583 -532
  592. data/lib/cosmos/io/udp_sockets.rb +152 -152
  593. data/lib/cosmos/io/win32_serial_driver.rb +147 -147
  594. data/lib/cosmos/packet_logs.rb +6 -6
  595. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
  596. data/lib/cosmos/packet_logs/packet_log_reader.rb +441 -439
  597. data/lib/cosmos/packet_logs/packet_log_writer.rb +321 -309
  598. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
  599. data/lib/cosmos/packets/binary_accessor.rb +921 -921
  600. data/lib/cosmos/packets/commands.rb +291 -291
  601. data/lib/cosmos/packets/limits.rb +263 -263
  602. data/lib/cosmos/packets/limits_response.rb +38 -38
  603. data/lib/cosmos/packets/packet.rb +714 -699
  604. data/lib/cosmos/packets/packet_config.rb +1034 -1034
  605. data/lib/cosmos/packets/packet_item.rb +317 -317
  606. data/lib/cosmos/packets/packet_item_limits.rb +128 -128
  607. data/lib/cosmos/packets/structure.rb +421 -386
  608. data/lib/cosmos/packets/structure_item.rb +233 -233
  609. data/lib/cosmos/packets/telemetry.rb +317 -317
  610. data/lib/cosmos/processors.rb +6 -6
  611. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
  612. data/lib/cosmos/processors/processor.rb +71 -71
  613. data/lib/cosmos/processors/statistics_processor.rb +65 -65
  614. data/lib/cosmos/processors/watermark_processor.rb +44 -44
  615. data/lib/cosmos/script.rb +9 -9
  616. data/lib/cosmos/script/extract.rb +115 -115
  617. data/lib/cosmos/script/script.rb +1513 -1493
  618. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
  619. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
  620. data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
  621. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
  622. data/lib/cosmos/streams/serial_stream.rb +152 -143
  623. data/lib/cosmos/streams/stream.rb +57 -57
  624. data/lib/cosmos/streams/stream_protocol.rb +369 -369
  625. data/lib/cosmos/streams/tcpip_client_stream.rb +77 -77
  626. data/lib/cosmos/streams/tcpip_socket_stream.rb +139 -139
  627. data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
  628. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
  629. data/lib/cosmos/system.rb +4 -4
  630. data/lib/cosmos/system/system.rb +558 -558
  631. data/lib/cosmos/system/target.rb +178 -178
  632. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +254 -253
  633. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +716 -716
  634. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
  635. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
  636. data/lib/cosmos/tools/cmd_tlm_server/api.rb +936 -940
  637. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
  638. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -63
  639. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +511 -497
  640. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +241 -241
  641. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1033 -1008
  642. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
  643. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +176 -176
  644. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +241 -221
  645. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
  646. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
  647. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
  648. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
  649. data/lib/cosmos/tools/data_viewer/data_viewer.rb +628 -600
  650. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +167 -167
  651. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
  652. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +149 -149
  653. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +360 -360
  654. data/lib/cosmos/tools/launcher/launcher.rb +184 -184
  655. data/lib/cosmos/tools/launcher/launcher_config.rb +175 -167
  656. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -41
  657. data/lib/cosmos/tools/launcher/launcher_tool.rb +104 -104
  658. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +796 -768
  659. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
  660. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
  661. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +525 -525
  662. data/lib/cosmos/tools/replay/replay.rb +495 -488
  663. data/lib/cosmos/tools/replay/replay_server.rb +91 -91
  664. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -139
  665. data/lib/cosmos/tools/script_runner/script_runner.rb +914 -914
  666. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
  667. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1892 -1859
  668. data/lib/cosmos/tools/table_manager/table.rb +70 -70
  669. data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
  670. data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
  671. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
  672. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
  673. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
  674. data/lib/cosmos/tools/test_runner/test.rb +480 -480
  675. data/lib/cosmos/tools/test_runner/test_runner.rb +1157 -1157
  676. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +338 -338
  677. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
  678. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1008 -1008
  679. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
  680. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
  681. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
  682. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
  683. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +94 -94
  684. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
  685. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +180 -180
  686. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
  687. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
  688. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +173 -173
  689. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +177 -177
  690. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +412 -409
  691. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
  692. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
  693. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -320
  694. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
  695. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
  696. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
  697. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
  698. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
  699. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
  700. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
  701. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
  702. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
  703. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
  704. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
  705. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1278 -1278
  706. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
  707. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
  708. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +111 -95
  709. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
  710. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +72 -66
  711. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
  712. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
  713. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
  714. data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -458
  715. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +563 -544
  716. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +287 -287
  717. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
  718. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
  719. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +70 -70
  720. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +61 -61
  721. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
  722. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
  723. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
  724. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
  725. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
  726. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
  727. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
  728. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
  729. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
  730. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
  731. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
  732. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
  733. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
  734. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
  735. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
  736. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
  737. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
  738. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
  739. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
  740. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
  741. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
  742. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
  743. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
  744. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
  745. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
  746. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
  747. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
  748. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
  749. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
  750. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
  751. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
  752. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
  753. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
  754. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
  755. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
  756. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
  757. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
  758. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
  759. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
  760. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
  761. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
  762. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
  763. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
  764. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
  765. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
  766. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
  767. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
  768. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
  769. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
  770. data/lib/cosmos/top_level.rb +647 -596
  771. data/lib/cosmos/utilities.rb +11 -10
  772. data/lib/cosmos/utilities/crc.rb +166 -166
  773. data/lib/cosmos/utilities/csv.rb +83 -83
  774. data/lib/cosmos/utilities/logger.rb +137 -137
  775. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
  776. data/lib/cosmos/utilities/message_log.rb +74 -74
  777. data/lib/cosmos/utilities/quaternion.rb +258 -258
  778. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
  779. data/lib/cosmos/utilities/simulated_target.rb +99 -99
  780. data/lib/cosmos/utilities/sleeper.rb +44 -0
  781. data/lib/cosmos/version.rb +12 -12
  782. data/lib/cosmos/win32/excel.rb +66 -66
  783. data/lib/cosmos/win32/win32.rb +387 -387
  784. data/lib/cosmos/win32/win32_main.rb +311 -311
  785. data/roodi.yml +24 -24
  786. data/run_gui_tests.bat +32 -32
  787. data/spec/ccsds/ccsds_packet_spec.rb +67 -67
  788. data/spec/ccsds/ccsds_parser_spec.rb +148 -148
  789. data/spec/config/config_parser_spec.rb +322 -322
  790. data/spec/conversions/conversion_spec.rb +31 -31
  791. data/spec/conversions/generic_conversion_spec.rb +45 -45
  792. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
  793. data/spec/conversions/polynomial_conversion_spec.rb +40 -40
  794. data/spec/conversions/processor_conversion_spec.rb +45 -45
  795. data/spec/conversions/received_count_conversion_spec.rb +43 -43
  796. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
  797. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
  798. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
  799. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
  800. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
  801. data/spec/core_ext/array_spec.rb +186 -186
  802. data/spec/core_ext/class_spec.rb +36 -36
  803. data/spec/core_ext/cosmos_io_spec.rb +77 -77
  804. data/spec/core_ext/exception_spec.rb +91 -91
  805. data/spec/core_ext/file_spec.rb +72 -72
  806. data/spec/core_ext/hash_spec.rb +24 -24
  807. data/spec/core_ext/io_spec.rb +46 -46
  808. data/spec/core_ext/kernel_spec.rb +54 -54
  809. data/spec/core_ext/math_spec.rb +116 -116
  810. data/spec/core_ext/matrix_spec.rb +66 -66
  811. data/spec/core_ext/objectspace_spec.rb +29 -29
  812. data/spec/core_ext/range_spec.rb +21 -21
  813. data/spec/core_ext/socket_spec.rb +32 -32
  814. data/spec/core_ext/string_spec.rb +223 -223
  815. data/spec/core_ext/stringio_spec.rb +21 -21
  816. data/spec/core_ext/time_spec.rb +151 -151
  817. data/spec/gui/line_graph/line_clip_spec.rb +322 -322
  818. data/spec/install/config/system/system.txt +33 -33
  819. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  820. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  821. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  822. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  823. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
  824. data/spec/install/config/targets/COSMOS/target.txt +5 -5
  825. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
  826. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
  827. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
  828. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
  829. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
  830. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -294
  831. data/spec/install/config/targets/INST/target.txt +10 -10
  832. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
  833. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
  834. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  835. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
  836. data/spec/interfaces/interface_spec.rb +130 -131
  837. data/spec/interfaces/linc_interface_spec.rb +199 -199
  838. data/spec/interfaces/serial_interface_spec.rb +56 -56
  839. data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
  840. data/spec/interfaces/stream_interface_spec.rb +157 -157
  841. data/spec/interfaces/tcpip_client_interface_spec.rb +54 -54
  842. data/spec/interfaces/tcpip_server_interface_spec.rb +151 -151
  843. data/spec/interfaces/udp_interface_spec.rb +175 -177
  844. data/spec/io/buffered_file_spec.rb +113 -113
  845. data/spec/io/io_multiplexer_spec.rb +94 -94
  846. data/spec/io/json_drb_object_spec.rb +99 -99
  847. data/spec/io/json_drb_spec.rb +311 -311
  848. data/spec/io/json_rpc_spec.rb +264 -264
  849. data/spec/io/raw_logger_pair_spec.rb +76 -76
  850. data/spec/io/raw_logger_spec.rb +133 -133
  851. data/spec/io/serial_driver_spec.rb +61 -61
  852. data/spec/io/stderr_spec.rb +32 -32
  853. data/spec/io/stdout_spec.rb +32 -32
  854. data/spec/io/tcpip_server_spec.rb +338 -338
  855. data/spec/io/udp_sockets_spec.rb +94 -94
  856. data/spec/io/win32_serial_driver_spec.rb +88 -88
  857. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
  858. data/spec/packet_logs/packet_log_reader_spec.rb +408 -408
  859. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
  860. data/spec/packet_logs/packet_log_writer_spec.rb +223 -223
  861. data/spec/packets/binary_accessor_spec.rb +2073 -2073
  862. data/spec/packets/commands_spec.rb +369 -369
  863. data/spec/packets/limits_response_spec.rb +25 -25
  864. data/spec/packets/limits_spec.rb +326 -326
  865. data/spec/packets/packet_config_spec.rb +1620 -1620
  866. data/spec/packets/packet_item_limits_spec.rb +161 -161
  867. data/spec/packets/packet_item_spec.rb +386 -386
  868. data/spec/packets/packet_spec.rb +1057 -949
  869. data/spec/packets/structure_item_spec.rb +195 -195
  870. data/spec/packets/structure_spec.rb +419 -419
  871. data/spec/packets/telemetry_spec.rb +535 -535
  872. data/spec/processors/new_packet_log_processor_spec.rb +39 -39
  873. data/spec/processors/processor_spec.rb +55 -55
  874. data/spec/processors/statistics_processor_spec.rb +60 -60
  875. data/spec/processors/watermark_processor_spec.rb +51 -51
  876. data/spec/script/script_spec.rb +654 -654
  877. data/spec/spec_helper.rb +154 -148
  878. data/spec/streams/burst_stream_protocol_spec.rb +32 -32
  879. data/spec/streams/fixed_stream_protocol_spec.rb +110 -110
  880. data/spec/streams/length_stream_protocol_spec.rb +297 -297
  881. data/spec/streams/preidentified_stream_protocol_spec.rb +118 -118
  882. data/spec/streams/serial_stream_spec.rb +105 -105
  883. data/spec/streams/stream_protocol_spec.rb +332 -332
  884. data/spec/streams/stream_spec.rb +29 -29
  885. data/spec/streams/tcpip_client_stream_spec.rb +54 -54
  886. data/spec/streams/tcpip_socket_stream_spec.rb +146 -146
  887. data/spec/streams/template_stream_protocol_spec.rb +151 -151
  888. data/spec/streams/terminated_stream_protocol_spec.rb +123 -123
  889. data/spec/system/system_spec.rb +645 -645
  890. data/spec/system/target_spec.rb +248 -248
  891. data/spec/tools/cmd_tlm_server/api_spec.rb +1087 -1113
  892. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
  893. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
  894. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +411 -411
  895. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
  896. data/spec/tools/cmd_tlm_server/commanding_spec.rb +123 -123
  897. data/spec/tools/cmd_tlm_server/connections_spec.rb +147 -147
  898. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
  899. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -238
  900. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
  901. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +98 -101
  902. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -208
  903. data/spec/top_level/top_level_spec.rb +334 -321
  904. data/spec/utilities/crc_spec.rb +45 -45
  905. data/spec/utilities/csv_spec.rb +97 -97
  906. data/spec/utilities/logger_spec.rb +102 -102
  907. data/spec/utilities/message_log_spec.rb +89 -89
  908. data/spec/utilities/quaternion_spec.rb +107 -107
  909. data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
  910. data/tasks/manifest.rake +22 -22
  911. data/tasks/spec.rake +23 -23
  912. metadata +18 -2
@@ -1,34 +1,34 @@
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/qt'
13
- require 'cosmos/gui/line_graph/line_graph'
14
-
15
- module Cosmos
16
-
17
- class LineGraphDialog < Qt::Dialog
18
-
19
- attr_accessor :line_graph
20
-
21
- def initialize(title)
22
- super(Qt::CoreApplication.instance.activeWindow)
23
- self.window_title = title
24
- @layout = Qt::VBoxLayout.new
25
- self.layout = @layout
26
-
27
- @line_graph = LineGraph.new(self)
28
- layout.addWidget(@line_graph)
29
-
30
- resize(400, 300)
31
- end
32
- end
33
-
34
- end # 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/qt'
13
+ require 'cosmos/gui/line_graph/line_graph'
14
+
15
+ module Cosmos
16
+
17
+ class LineGraphDialog < Qt::Dialog
18
+
19
+ attr_accessor :line_graph
20
+
21
+ def initialize(title)
22
+ super(Qt::CoreApplication.instance.activeWindow)
23
+ self.window_title = title
24
+ @layout = Qt::VBoxLayout.new
25
+ self.layout = @layout
26
+
27
+ @line_graph = LineGraph.new(self)
28
+ layout.addWidget(@line_graph)
29
+
30
+ resize(400, 300)
31
+ end
32
+ end
33
+
34
+ end # end module Cosmos
@@ -1,494 +1,494 @@
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
- module Cosmos
12
-
13
- # LineGraph class continued
14
- class LineGraph < Qt::Widget
15
- # Pixels for a label tick
16
- LABEL_TICK_SIZE = 3
17
- FRAME_OFFSET = 3
18
- LEFT_X_LABEL_WIDTH_ADJUST = 10
19
-
20
- @@gradient = Qt::LinearGradient.new(Qt::PointF.new(0, 0), Qt::PointF.new(0, 1))
21
- @@gradient.setColorAt(0, Cosmos.getColor(250, 250, 250))
22
- @@gradient.setColorAt(0.6, Cosmos.getColor(235, 235, 235))
23
- @@gradient.setColorAt(1, Cosmos.getColor(220, 220, 220))
24
- @@gradient.setCoordinateMode(Qt::Gradient::ObjectBoundingMode)
25
-
26
- def draw_graph_into_back_buffer
27
- # Determine the scale of the graph
28
- determine_graph_size()
29
- scale_graph()
30
- build_x_grid_lines()
31
- build_y_grid_lines(@lines.axes)
32
- calculate_y_labels()
33
- calculate_scaling_factors()
34
-
35
- # Draw overall graph and origin lines
36
- clear_canvas_and_draw_graph_rectangle(@painter)
37
- draw_origin_lines(@painter)
38
-
39
- # Draw gridlines and titles
40
- draw_x_axis_grid_lines(@painter)
41
- draw_y_axis_grid_lines(@painter)
42
- draw_horizontal_lines(@painter)
43
- draw_title(@painter)
44
- draw_x_axis_title(@painter)
45
- draw_y_axis_title(@painter, :LEFT)
46
- draw_y_axis_title(@painter, :RIGHT)
47
-
48
- # Draw legend and lines
49
- draw_legend(@painter)
50
-
51
- draw_lines(@painter, :LEFT)
52
- draw_lines(@painter, :RIGHT)
53
- end # def draw_graph_into_buffer
54
-
55
- # Draws the graph to the screen
56
- def draw_graph_to_screen
57
- # Draw frame around graph
58
- draw_frame(@painter)
59
-
60
- # Draw cursor line and popups if present
61
- draw_cursor_line_and_popups(@painter) if @show_cursor_and_popups
62
-
63
- # Draw error icon if present
64
- draw_error_icon(@painter)
65
- end # def draw_graph_to_screen
66
-
67
- # Clears the entire canvas and then draws the colored rectangle for the graph
68
- def clear_canvas_and_draw_graph_rectangle(dc)
69
- # Draw graph background
70
- color = Cosmos::getColor(@graph_back_color)
71
- dc.setPen(color)
72
- dc.setBrush(Cosmos.getBrush(@@gradient))
73
- dc.drawRect(@graph_left_x,@graph_top_y,@graph_right_x - @graph_left_x,@graph_bottom_y - @graph_top_y)
74
- # Draw the graph border
75
- dc.addRectColor(@graph_left_x, @graph_top_y, @graph_right_x - @graph_left_x, @graph_bottom_y - @graph_top_y, @label_and_border_color)
76
- end # def clear_canvas_and_draw_graph_rectangle
77
-
78
- # Draws origin lines if they fall on the graph
79
- def draw_origin_lines(dc)
80
- if (@left_y_max > 0) and (@left_y_min < 0) and @lines.axes == :LEFT
81
- y1 = scale_value_to_graph_y(0.0, :LEFT)
82
- dc.addLineColor(@graph_left_x - 3, y1, @graph_right_x, y1)
83
- end
84
- if (@right_y_max > 0) and (@right_y_min < 0) and @lines.axes == :RIGHT
85
- y1 = scale_value_to_graph_y(0.0, :RIGHT)
86
- dc.addLineColor(@graph_left_x, y1, @graph_right_x + 3, y1)
87
- end
88
- if (@x_max > 0) and (@x_min < 0)
89
- x1 = scale_value_to_graph_x(0.0)
90
- dc.addLineColor(x1, @graph_bottom_y + 3, x1, @graph_top_y)
91
- end
92
- end # def draw_origin_lines
93
-
94
- # Draws the gridlines for a y-axis
95
- def draw_y_axis_grid_lines(dc)
96
- @y_grid_lines.each_with_index do |value, index|
97
- # Don't draw gridlines that are too close to 0
98
- if ((value > (@y_grid_line_scale / 2.0)) || (value < (@y_grid_line_scale / -2.0)))
99
- draw_y_label_and_grid_line(dc, value, index, true)
100
- else
101
- draw_y_label_and_grid_line(dc, 0, index, true)
102
- end
103
- end
104
- end # def draw_y_axis_grid_lines
105
-
106
- # Calcuate the Y axis labels as well as their width and adjust the size of
107
- # the graph accordingly
108
- def calculate_y_labels
109
- metrics = Cosmos.getFontMetrics(@font)
110
- left_widths = [metrics.width("-1.0")]
111
- right_widths = [0]
112
- @left_text = []
113
- @right_text = []
114
-
115
- @y_grid_lines.each do |value|
116
- value = 0 unless ((value > (@y_grid_line_scale / 2.0)) || (value < (@y_grid_line_scale / -2.0)))
117
- # Get text for label(s)
118
- case @lines.axes
119
- when :BOTH
120
- @left_text << convert_y_value_to_text(value, @max_y_characters, :LEFT)
121
- left_widths << metrics.width(@left_text[-1])
122
- right_value = scale_left_to_right_y(value)
123
- @right_text << convert_y_value_to_text(right_value, @max_y_characters, :RIGHT)
124
- right_widths << metrics.width(@right_text[-1])
125
- when :LEFT
126
- @left_text << convert_y_value_to_text(value, @max_y_characters, :LEFT)
127
- left_widths << metrics.width(@left_text[-1])
128
- when :RIGHT
129
- @right_text << convert_y_value_to_text(value, @max_y_characters, :RIGHT)
130
- right_widths << metrics.width(@right_text[-1])
131
- end
132
- end
133
-
134
- # Also include half of width of first x label into left widths.
135
- value, label = @x_grid_lines[0]
136
- if label
137
- text = label.to_s
138
- else
139
- text = convert_x_value_to_text(value, @max_x_characters)
140
- end
141
- left_widths << ((metrics.width(text) / 2) - LEFT_X_LABEL_WIDTH_ADJUST)
142
-
143
- @graph_left_x += left_widths.max
144
- @graph_right_x -= (right_widths.max + GRAPH_SPACER)
145
- end
146
-
147
- # This function is used to draw a horizontal line on the graph with a label.
148
- # This line is not clipped so the value must fall on the graph. Uses the
149
- # label values calculated in calculate_y_labels.
150
- def draw_y_label_and_grid_line(dc, value, index, show_line)
151
- left_value = value
152
- right_value = value
153
- left_text = @left_text[index]
154
- right_text = @right_text[index]
155
-
156
- y = nil
157
- if left_text
158
- metrics = Cosmos.getFontMetrics(@font)
159
- text_width = metrics.width(left_text)
160
- x = @graph_left_x
161
- y = scale_value_to_graph_y(left_value, :LEFT)
162
- if (y < @graph_top_y)
163
- y = @graph_top_y
164
- elsif (y > @graph_bottom_y)
165
- y = @graph_bottom_y
166
- end
167
- dc.addLineColor(x - LABEL_TICK_SIZE + 1, y, x, y)
168
-
169
- # Only display the label if we have room. This only affects the top
170
- # side of the graph since that's where new grid lines appear.
171
- if (y == @graph_top_y) || ((y - @font_size) > @graph_top_y)
172
- dc.addSimpleTextAt(left_text,
173
- x - text_width - GRAPH_SPACER,
174
- y + (@font_size / 2))
175
- end
176
- end
177
-
178
- if right_text
179
- x = @graph_right_x
180
- y = scale_value_to_graph_y(right_value, :RIGHT) unless y
181
- if (y < @graph_top_y)
182
- y = @graph_top_y
183
- elsif (y > @graph_bottom_y)
184
- y = @graph_bottom_y
185
- end
186
- dc.addLineColor(x, y, x + LABEL_TICK_SIZE, y)
187
-
188
- # Only display the label if we have room. This only affects the top
189
- # side of the graph since that's where new grid lines appear.
190
- if (y == @graph_top_y) || ((y - @font_size) > @graph_top_y)
191
- dc.addSimpleTextAt(right_text,
192
- x + 2 * GRAPH_SPACER,
193
- y + (@font_size / 2))
194
- end
195
- end
196
-
197
- if show_line
198
- dc.addLineColor(@graph_left_x, y, @graph_right_x, y, Cosmos::DASHLINE_PEN)
199
- end
200
-
201
- end # def draw_y_label_and_grid_line
202
-
203
- # Draws the gridlines for the x-axis
204
- def draw_x_axis_grid_lines(dc)
205
- @x_grid_lines.each do |value, label|
206
- # If the line has states or is far enough away from the origin
207
- if @lines.x_states || ((value > (@x_grid_line_scale / 2.0)) || (value < (@x_grid_line_scale / -2.0)))
208
- draw_x_label_and_grid_line(dc, value, label, true)
209
- else
210
- draw_x_label_and_grid_line(dc, 0, nil, true)
211
- end
212
- end
213
- end # def draw_x_axis_grid_lines
214
-
215
- # This function is used to draw a vertical line on the graph with a label.
216
- # This line is not clipped so the value must fall on the graph
217
- def draw_x_label_and_grid_line(dc, value, label, show_line)
218
- if label
219
- text = label.to_s
220
- else
221
- text = convert_x_value_to_text(value, @max_x_characters)
222
- end
223
- metrics = Cosmos.getFontMetrics(@font)
224
- text_width = metrics.width(text)
225
- text_height = metrics.height
226
- x1 = scale_value_to_graph_x(value)
227
- y1 = @graph_bottom_y + LABEL_TICK_SIZE
228
- if (x1 < @graph_left_x)
229
- x1 = @graph_left_x
230
- end
231
- if (x1 > @graph_right_x)
232
- x1 = @graph_right_x
233
- end
234
- if show_line
235
- y2 = @graph_top_y
236
- else
237
- y2 = @graph_bottom_y
238
- end
239
- x2 = x1
240
- dc.addLineColor(x1, y1, x2, y2, Cosmos::DASHLINE_PEN)
241
-
242
- # Only display the label if we have room. This really only affects the
243
- # right side of the graph since that's where new grid lines appear. The
244
- # 1.25 is because we shift the far right label over a bit to eliminate
245
- # white space on the right side of the graph.
246
- if (x1 == @graph_right_x) || (x1 < (@graph_right_x - (1.25 * text_width)))
247
- # Shift the far right label left a bit to eliminate white space
248
- x1 -= text_width / 4 if x1 == @graph_right_x
249
- x1 -= text_width / 2 # center the text
250
- dc.addSimpleTextAt(text, x1, @graph_bottom_y + text_height + GRAPH_SPACER)
251
- end
252
- end # def draw_x_label_and_grid_line
253
-
254
- # Converts a x value into text with a max number of characters
255
- def convert_x_value_to_text(value, max_characters)
256
- if !@show_popup_x_y and @unix_epoch_x_values
257
- if (value > 1 and value < 2147483647)
258
- text = Time.at(value.to_f).formatted(false) # no year
259
- else
260
- text = value.to_s
261
- end
262
- else
263
- text = value.to_s
264
- end
265
- truncate_to_max(text, max_characters, value)
266
- end
267
-
268
- # Converts a y value into text with a max number of characters
269
- def convert_y_value_to_text(value, max_characters, axis)
270
- states = @lines.unique_y_states(axis)
271
- if states
272
- text = states.key(value)
273
- else
274
- text = truncate_to_max(value.to_s, max_characters, value)
275
- end
276
- return text
277
- end
278
-
279
- # Draws any extra horizontal lines onto the graph
280
- def draw_horizontal_lines(dc)
281
- @horizontal_lines.each do |y_value, color, axis|
282
- y = scale_value_to_graph_y(y_value, axis)
283
- if (y > @graph_top_y) and (y < @graph_bottom_y)
284
- dc.addLineColor(@graph_left_x, y, @graph_right_x, y, color)
285
- end
286
- end
287
- end
288
-
289
- # Draw the overall graph title
290
- def draw_title(dc)
291
- if @title
292
- metrics = Cosmos.getFontMetrics(@title_font)
293
- dc.setFont(@title_font)
294
- dc.addSimpleTextAt(@title, (self.width / 2) - (metrics.width(@title) / 2), metrics.height)
295
- dc.setFont(@font)
296
- end
297
- end # def draw_title
298
-
299
- # Draws the title for the X-axis
300
- def draw_x_axis_title(dc)
301
- if @x_axis_title
302
- metrics = Cosmos.getFontMetrics(@font)
303
- text_width = metrics.width(@x_axis_title)
304
- text_height = metrics.height
305
- dc.addSimpleTextAt(@x_axis_title,
306
- (((@graph_right_x - @graph_left_x) / 2) + @graph_left_x) - (text_width / 2),
307
- @graph_bottom_y + (2 * text_height) + GRAPH_SPACER)
308
- end
309
- end # def draw_x_axis_title
310
-
311
- # Draws a title for a Y-axis
312
- def draw_y_axis_title(dc, axis)
313
- metrics = Cosmos.getFontMetrics(@font)
314
- if axis == :LEFT
315
- y_axis_title = @left_y_axis_title
316
- graph_x = GRAPH_SPACER
317
- else
318
- y_axis_title = @right_y_axis_title
319
- graph_x = self.width - metrics.width('W') - GRAPH_SPACER - FRAME_OFFSET
320
- end
321
-
322
- if y_axis_title
323
- text_height = metrics.height
324
- total_height = text_height * y_axis_title.length
325
- start_height = (height - total_height) / 2
326
- max_width = metrics.width('W')
327
- y_axis_title.length.times do |index|
328
- character = y_axis_title[index..index]
329
- cur_width = metrics.width(character)
330
- dc.addSimpleTextAt(character, graph_x + ((max_width - cur_width) / 2), start_height + text_height * index)
331
- end
332
- end
333
- end # def draw_y_axis_title
334
-
335
- # Draws the legend on the bottom of the graph
336
- def draw_legend(dc)
337
- metrics = Cosmos.getFontMetrics(@font)
338
- # Draw Legend
339
- if @show_legend && !@lines.empty?
340
- if @lines.axes == :BOTH
341
- both_axis = true
342
- else
343
- both_axis = false
344
- end
345
- legend_width = 0
346
- @lines.legend.each do |legend_text, color, axis|
347
- text_width = metrics.width(legend_text)
348
- legend_width = text_width if text_width > legend_width
349
- end
350
- legend_width += (GRAPH_SPACER * 2)
351
- legend_width *= 2 if both_axis
352
- legend_graph_x = (self.width - legend_width) / 2
353
-
354
- text_x = legend_graph_x + GRAPH_SPACER
355
- text_y = self.height - metrics.height
356
-
357
- # Draw legend text for each line
358
- if both_axis
359
- left_text_x = text_x
360
- right_text_x = text_x + (legend_width / 2)
361
- left_text_y = text_y
362
- right_text_y = text_y
363
- @lines.legend.reverse.each do |legend_text, color, axis|
364
- if axis == :LEFT
365
- dc.addSimpleTextAt(legend_text, left_text_x, left_text_y, color)
366
- left_text_y -= metrics.height
367
- else
368
- dc.addSimpleTextAt(legend_text, right_text_x, right_text_y, color)
369
- right_text_y -= metrics.height
370
- end
371
- end
372
- if left_text_y < right_text_y
373
- text_y = left_text_y
374
- else
375
- text_y = right_text_y
376
- end
377
- else
378
- @lines.legend.reverse.each do |legend_text, color, axis|
379
- dc.addSimpleTextAt(legend_text, text_x, text_y, color)
380
- text_y -= metrics.height
381
- end
382
- end
383
- end
384
- end # def draw_legend
385
-
386
- # Draws all lines for the given axis
387
- # def draw_lines(dc, axis)
388
-
389
- # Draws a line between two points that is clipped to fit the visible graph if necessary
390
- # def draw_line(dc, x1, y1, x2, y2, show_line, point_size, axis, color)
391
-
392
- # Draws the cursor line and popups if needed - called from drawForeground
393
- def draw_cursor_line_and_popups(dc)
394
- if @mouse_in_window == true
395
- # Draw the cursor line at mouse position
396
- x = scale_graph_to_value_x(mapFromGlobal(cursor.pos).x)
397
- draw_cursor_line_and_popups_at_x(dc, x)
398
-
399
- # Call callback when the mouse caused the cursor to draw
400
- saved_callback = @draw_cursor_line_callback
401
- @draw_cursor_line_callback = nil
402
- saved_callback.call(self, x, @left_button_pressed) if saved_callback
403
- @draw_cursor_line_callback = saved_callback
404
- elsif @cursor_line_x
405
- # Draw the cursor line at given position
406
- draw_cursor_line_and_popups_at_x(dc, @cursor_line_x)
407
- end
408
- end
409
-
410
- # Draws the cursor line at a given position and builds the popups
411
- def draw_cursor_line_and_popups_at_x(dc, x)
412
- # Draw cursor line
413
- if @lines.left_y_axis? and x <= @x_max and x >= @x_min
414
- draw_line(dc, x, @left_y_min, x, @left_y_max, true, 0, :LEFT, @back_color)
415
- elsif @lines.right_y_axis? and x <= @x_max and x >= @x_min
416
- draw_line(dc, x, @right_y_min, x, @right_y_max, true, 0, :RIGHT, @back_color)
417
- end
418
-
419
- # Build and draw popups
420
- build_popups_from_x_value(x)
421
- draw_popups(dc)
422
- end
423
-
424
- # Draws popup boxes if any
425
- def draw_popups(dc)
426
- unless @popups.empty?
427
- # Draw each popup
428
- @popups.each do |popup_text, popup_x, popup_y, popup_width, popup_height, popup_color|
429
- # Draw overall rectangle
430
- dc.addRectColorFill(popup_x, popup_y, popup_width, popup_height, @back_color)
431
-
432
- # Draw border around rectangle in line color
433
- dc.addRectColor(popup_x, popup_y, popup_width, popup_height, popup_color)
434
-
435
- # Draw popup text
436
- dc.addSimpleTextAt(popup_text, popup_x + 5, popup_y + popup_height - 7, @label_and_border_color)
437
- end # popups.each
438
- end # unless popups.empty?
439
- end
440
-
441
- # Draws the overall frame around the canvas
442
- def draw_frame(dc)
443
- # Draw Frame Rectangle around canvas
444
- dc.addRectColor(0,0,self.width-1,self.height-1, @frame_color)
445
- end
446
-
447
- # Draws an icon that indicates an error has occurred
448
- def draw_error_icon(dc)
449
- if @error
450
- dc.addEllipseColor(@graph_right_x - 60, 20, 40, 40, 'red')
451
- dc.addRectColorFill(@graph_right_x - 42, 25, 4, 20, 'red')
452
- dc.addRectColorFill(@graph_right_x - 42, 50, 4, 4, 'red')
453
- end
454
- end
455
-
456
- # Handles window resizes and enforces a minimum size
457
- def update_graph_size
458
- unless @in_update_graph_size
459
- @in_update_graph_size = true
460
-
461
- # Get new width and height
462
- new_width = self.width
463
- new_height = self.height
464
-
465
- # Enforce a minimum width and height
466
- if (new_width < @minimum_width)
467
- new_width = @minimum_width
468
- end
469
- if (new_height < @minimum_height)
470
- new_height = @minimum_height
471
- end
472
-
473
- # Make sure everything is the correct size
474
- self.resize(new_width, new_height)
475
-
476
- @in_update_graph_size = false
477
- end
478
- end # def update_graph_size
479
-
480
- protected
481
-
482
- def truncate_to_max(text, max_characters, value)
483
- if text.length > max_characters
484
- text = sprintf("%0.#{max_characters}g", value.to_f)
485
- if text.length > max_characters
486
- text = sprintf("%0.#{max_characters - 5}g", value.to_f)
487
- end
488
- end
489
- text
490
- end
491
-
492
- end # end class LineGraph
493
-
494
- 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
+ module Cosmos
12
+
13
+ # LineGraph class continued
14
+ class LineGraph < Qt::Widget
15
+ # Pixels for a label tick
16
+ LABEL_TICK_SIZE = 3
17
+ FRAME_OFFSET = 3
18
+ LEFT_X_LABEL_WIDTH_ADJUST = 10
19
+
20
+ @@gradient = Qt::LinearGradient.new(Qt::PointF.new(0, 0), Qt::PointF.new(0, 1))
21
+ @@gradient.setColorAt(0, Cosmos.getColor(250, 250, 250))
22
+ @@gradient.setColorAt(0.6, Cosmos.getColor(235, 235, 235))
23
+ @@gradient.setColorAt(1, Cosmos.getColor(220, 220, 220))
24
+ @@gradient.setCoordinateMode(Qt::Gradient::ObjectBoundingMode)
25
+
26
+ def draw_graph_into_back_buffer
27
+ # Determine the scale of the graph
28
+ determine_graph_size()
29
+ scale_graph()
30
+ build_x_grid_lines()
31
+ build_y_grid_lines(@lines.axes)
32
+ calculate_y_labels()
33
+ calculate_scaling_factors()
34
+
35
+ # Draw overall graph and origin lines
36
+ clear_canvas_and_draw_graph_rectangle(@painter)
37
+ draw_origin_lines(@painter)
38
+
39
+ # Draw gridlines and titles
40
+ draw_x_axis_grid_lines(@painter)
41
+ draw_y_axis_grid_lines(@painter)
42
+ draw_horizontal_lines(@painter)
43
+ draw_title(@painter)
44
+ draw_x_axis_title(@painter)
45
+ draw_y_axis_title(@painter, :LEFT)
46
+ draw_y_axis_title(@painter, :RIGHT)
47
+
48
+ # Draw legend and lines
49
+ draw_legend(@painter)
50
+
51
+ draw_lines(@painter, :LEFT)
52
+ draw_lines(@painter, :RIGHT)
53
+ end # def draw_graph_into_buffer
54
+
55
+ # Draws the graph to the screen
56
+ def draw_graph_to_screen
57
+ # Draw frame around graph
58
+ draw_frame(@painter)
59
+
60
+ # Draw cursor line and popups if present
61
+ draw_cursor_line_and_popups(@painter) if @show_cursor_and_popups
62
+
63
+ # Draw error icon if present
64
+ draw_error_icon(@painter)
65
+ end # def draw_graph_to_screen
66
+
67
+ # Clears the entire canvas and then draws the colored rectangle for the graph
68
+ def clear_canvas_and_draw_graph_rectangle(dc)
69
+ # Draw graph background
70
+ color = Cosmos::getColor(@graph_back_color)
71
+ dc.setPen(color)
72
+ dc.setBrush(Cosmos.getBrush(@@gradient))
73
+ dc.drawRect(@graph_left_x,@graph_top_y,@graph_right_x - @graph_left_x,@graph_bottom_y - @graph_top_y)
74
+ # Draw the graph border
75
+ dc.addRectColor(@graph_left_x, @graph_top_y, @graph_right_x - @graph_left_x, @graph_bottom_y - @graph_top_y, @label_and_border_color)
76
+ end # def clear_canvas_and_draw_graph_rectangle
77
+
78
+ # Draws origin lines if they fall on the graph
79
+ def draw_origin_lines(dc)
80
+ if (@left_y_max > 0) and (@left_y_min < 0) and @lines.axes == :LEFT
81
+ y1 = scale_value_to_graph_y(0.0, :LEFT)
82
+ dc.addLineColor(@graph_left_x - 3, y1, @graph_right_x, y1)
83
+ end
84
+ if (@right_y_max > 0) and (@right_y_min < 0) and @lines.axes == :RIGHT
85
+ y1 = scale_value_to_graph_y(0.0, :RIGHT)
86
+ dc.addLineColor(@graph_left_x, y1, @graph_right_x + 3, y1)
87
+ end
88
+ if (@x_max > 0) and (@x_min < 0)
89
+ x1 = scale_value_to_graph_x(0.0)
90
+ dc.addLineColor(x1, @graph_bottom_y + 3, x1, @graph_top_y)
91
+ end
92
+ end # def draw_origin_lines
93
+
94
+ # Draws the gridlines for a y-axis
95
+ def draw_y_axis_grid_lines(dc)
96
+ @y_grid_lines.each_with_index do |value, index|
97
+ # Don't draw gridlines that are too close to 0
98
+ if ((value > (@y_grid_line_scale / 2.0)) || (value < (@y_grid_line_scale / -2.0)))
99
+ draw_y_label_and_grid_line(dc, value, index, true)
100
+ else
101
+ draw_y_label_and_grid_line(dc, 0, index, true)
102
+ end
103
+ end
104
+ end # def draw_y_axis_grid_lines
105
+
106
+ # Calcuate the Y axis labels as well as their width and adjust the size of
107
+ # the graph accordingly
108
+ def calculate_y_labels
109
+ metrics = Cosmos.getFontMetrics(@font)
110
+ left_widths = [metrics.width("-1.0")]
111
+ right_widths = [0]
112
+ @left_text = []
113
+ @right_text = []
114
+
115
+ @y_grid_lines.each do |value|
116
+ value = 0 unless ((value > (@y_grid_line_scale / 2.0)) || (value < (@y_grid_line_scale / -2.0)))
117
+ # Get text for label(s)
118
+ case @lines.axes
119
+ when :BOTH
120
+ @left_text << convert_y_value_to_text(value, @max_y_characters, :LEFT)
121
+ left_widths << metrics.width(@left_text[-1])
122
+ right_value = scale_left_to_right_y(value)
123
+ @right_text << convert_y_value_to_text(right_value, @max_y_characters, :RIGHT)
124
+ right_widths << metrics.width(@right_text[-1])
125
+ when :LEFT
126
+ @left_text << convert_y_value_to_text(value, @max_y_characters, :LEFT)
127
+ left_widths << metrics.width(@left_text[-1])
128
+ when :RIGHT
129
+ @right_text << convert_y_value_to_text(value, @max_y_characters, :RIGHT)
130
+ right_widths << metrics.width(@right_text[-1])
131
+ end
132
+ end
133
+
134
+ # Also include half of width of first x label into left widths.
135
+ value, label = @x_grid_lines[0]
136
+ if label
137
+ text = label.to_s
138
+ else
139
+ text = convert_x_value_to_text(value, @max_x_characters)
140
+ end
141
+ left_widths << ((metrics.width(text) / 2) - LEFT_X_LABEL_WIDTH_ADJUST)
142
+
143
+ @graph_left_x += left_widths.max
144
+ @graph_right_x -= (right_widths.max + GRAPH_SPACER)
145
+ end
146
+
147
+ # This function is used to draw a horizontal line on the graph with a label.
148
+ # This line is not clipped so the value must fall on the graph. Uses the
149
+ # label values calculated in calculate_y_labels.
150
+ def draw_y_label_and_grid_line(dc, value, index, show_line)
151
+ left_value = value
152
+ right_value = value
153
+ left_text = @left_text[index]
154
+ right_text = @right_text[index]
155
+
156
+ y = nil
157
+ if left_text
158
+ metrics = Cosmos.getFontMetrics(@font)
159
+ text_width = metrics.width(left_text)
160
+ x = @graph_left_x
161
+ y = scale_value_to_graph_y(left_value, :LEFT)
162
+ if (y < @graph_top_y)
163
+ y = @graph_top_y
164
+ elsif (y > @graph_bottom_y)
165
+ y = @graph_bottom_y
166
+ end
167
+ dc.addLineColor(x - LABEL_TICK_SIZE + 1, y, x, y)
168
+
169
+ # Only display the label if we have room. This only affects the top
170
+ # side of the graph since that's where new grid lines appear.
171
+ if (y == @graph_top_y) || ((y - @font_size) > @graph_top_y)
172
+ dc.addSimpleTextAt(left_text,
173
+ x - text_width - GRAPH_SPACER,
174
+ y + (@font_size / 2))
175
+ end
176
+ end
177
+
178
+ if right_text
179
+ x = @graph_right_x
180
+ y = scale_value_to_graph_y(right_value, :RIGHT) unless y
181
+ if (y < @graph_top_y)
182
+ y = @graph_top_y
183
+ elsif (y > @graph_bottom_y)
184
+ y = @graph_bottom_y
185
+ end
186
+ dc.addLineColor(x, y, x + LABEL_TICK_SIZE, y)
187
+
188
+ # Only display the label if we have room. This only affects the top
189
+ # side of the graph since that's where new grid lines appear.
190
+ if (y == @graph_top_y) || ((y - @font_size) > @graph_top_y)
191
+ dc.addSimpleTextAt(right_text,
192
+ x + 2 * GRAPH_SPACER,
193
+ y + (@font_size / 2))
194
+ end
195
+ end
196
+
197
+ if show_line and y
198
+ dc.addLineColor(@graph_left_x, y, @graph_right_x, y, Cosmos::DASHLINE_PEN)
199
+ end
200
+
201
+ end # def draw_y_label_and_grid_line
202
+
203
+ # Draws the gridlines for the x-axis
204
+ def draw_x_axis_grid_lines(dc)
205
+ @x_grid_lines.each do |value, label|
206
+ # If the line has states or is far enough away from the origin
207
+ if @lines.x_states || ((value > (@x_grid_line_scale / 2.0)) || (value < (@x_grid_line_scale / -2.0)))
208
+ draw_x_label_and_grid_line(dc, value, label, true)
209
+ else
210
+ draw_x_label_and_grid_line(dc, 0, nil, true)
211
+ end
212
+ end
213
+ end # def draw_x_axis_grid_lines
214
+
215
+ # This function is used to draw a vertical line on the graph with a label.
216
+ # This line is not clipped so the value must fall on the graph
217
+ def draw_x_label_and_grid_line(dc, value, label, show_line)
218
+ if label
219
+ text = label.to_s
220
+ else
221
+ text = convert_x_value_to_text(value, @max_x_characters)
222
+ end
223
+ metrics = Cosmos.getFontMetrics(@font)
224
+ text_width = metrics.width(text)
225
+ text_height = metrics.height
226
+ x1 = scale_value_to_graph_x(value)
227
+ y1 = @graph_bottom_y + LABEL_TICK_SIZE
228
+ if (x1 < @graph_left_x)
229
+ x1 = @graph_left_x
230
+ end
231
+ if (x1 > @graph_right_x)
232
+ x1 = @graph_right_x
233
+ end
234
+ if show_line
235
+ y2 = @graph_top_y
236
+ else
237
+ y2 = @graph_bottom_y
238
+ end
239
+ x2 = x1
240
+ dc.addLineColor(x1, y1, x2, y2, Cosmos::DASHLINE_PEN)
241
+
242
+ # Only display the label if we have room. This really only affects the
243
+ # right side of the graph since that's where new grid lines appear. The
244
+ # 1.25 is because we shift the far right label over a bit to eliminate
245
+ # white space on the right side of the graph.
246
+ if (x1 == @graph_right_x) || (x1 < (@graph_right_x - (1.25 * text_width)))
247
+ # Shift the far right label left a bit to eliminate white space
248
+ x1 -= text_width / 4 if x1 == @graph_right_x
249
+ x1 -= text_width / 2 # center the text
250
+ dc.addSimpleTextAt(text, x1, @graph_bottom_y + text_height + GRAPH_SPACER)
251
+ end
252
+ end # def draw_x_label_and_grid_line
253
+
254
+ # Converts a x value into text with a max number of characters
255
+ def convert_x_value_to_text(value, max_characters)
256
+ if !@show_popup_x_y and @unix_epoch_x_values
257
+ if (value > 1 and value < 2147483647)
258
+ text = Time.at(value.to_f).formatted(false) # no year
259
+ else
260
+ text = value.to_s
261
+ end
262
+ else
263
+ text = value.to_s
264
+ end
265
+ truncate_to_max(text, max_characters, value)
266
+ end
267
+
268
+ # Converts a y value into text with a max number of characters
269
+ def convert_y_value_to_text(value, max_characters, axis)
270
+ states = @lines.unique_y_states(axis)
271
+ if states
272
+ text = states.key(value)
273
+ else
274
+ text = truncate_to_max(value.to_s, max_characters, value)
275
+ end
276
+ return text
277
+ end
278
+
279
+ # Draws any extra horizontal lines onto the graph
280
+ def draw_horizontal_lines(dc)
281
+ @horizontal_lines.each do |y_value, color, axis|
282
+ y = scale_value_to_graph_y(y_value, axis)
283
+ if (y > @graph_top_y) and (y < @graph_bottom_y)
284
+ dc.addLineColor(@graph_left_x, y, @graph_right_x, y, color)
285
+ end
286
+ end
287
+ end
288
+
289
+ # Draw the overall graph title
290
+ def draw_title(dc)
291
+ if @title
292
+ metrics = Cosmos.getFontMetrics(@title_font)
293
+ dc.setFont(@title_font)
294
+ dc.addSimpleTextAt(@title, (self.width / 2) - (metrics.width(@title) / 2), metrics.height)
295
+ dc.setFont(@font)
296
+ end
297
+ end # def draw_title
298
+
299
+ # Draws the title for the X-axis
300
+ def draw_x_axis_title(dc)
301
+ if @x_axis_title
302
+ metrics = Cosmos.getFontMetrics(@font)
303
+ text_width = metrics.width(@x_axis_title)
304
+ text_height = metrics.height
305
+ dc.addSimpleTextAt(@x_axis_title,
306
+ (((@graph_right_x - @graph_left_x) / 2) + @graph_left_x) - (text_width / 2),
307
+ @graph_bottom_y + (2 * text_height) + GRAPH_SPACER)
308
+ end
309
+ end # def draw_x_axis_title
310
+
311
+ # Draws a title for a Y-axis
312
+ def draw_y_axis_title(dc, axis)
313
+ metrics = Cosmos.getFontMetrics(@font)
314
+ if axis == :LEFT
315
+ y_axis_title = @left_y_axis_title
316
+ graph_x = GRAPH_SPACER
317
+ else
318
+ y_axis_title = @right_y_axis_title
319
+ graph_x = self.width - metrics.width('W') - GRAPH_SPACER - FRAME_OFFSET
320
+ end
321
+
322
+ if y_axis_title
323
+ text_height = metrics.height
324
+ total_height = text_height * y_axis_title.length
325
+ start_height = (height - total_height) / 2
326
+ max_width = metrics.width('W')
327
+ y_axis_title.length.times do |index|
328
+ character = y_axis_title[index..index]
329
+ cur_width = metrics.width(character)
330
+ dc.addSimpleTextAt(character, graph_x + ((max_width - cur_width) / 2), start_height + text_height * index)
331
+ end
332
+ end
333
+ end # def draw_y_axis_title
334
+
335
+ # Draws the legend on the bottom of the graph
336
+ def draw_legend(dc)
337
+ metrics = Cosmos.getFontMetrics(@font)
338
+ # Draw Legend
339
+ if @show_legend && !@lines.empty?
340
+ if @lines.axes == :BOTH
341
+ both_axis = true
342
+ else
343
+ both_axis = false
344
+ end
345
+ legend_width = 0
346
+ @lines.legend.each do |legend_text, color, axis|
347
+ text_width = metrics.width(legend_text)
348
+ legend_width = text_width if text_width > legend_width
349
+ end
350
+ legend_width += (GRAPH_SPACER * 2)
351
+ legend_width *= 2 if both_axis
352
+ legend_graph_x = (self.width - legend_width) / 2
353
+
354
+ text_x = legend_graph_x + GRAPH_SPACER
355
+ text_y = self.height - metrics.height
356
+
357
+ # Draw legend text for each line
358
+ if both_axis
359
+ left_text_x = text_x
360
+ right_text_x = text_x + (legend_width / 2)
361
+ left_text_y = text_y
362
+ right_text_y = text_y
363
+ @lines.legend.reverse.each do |legend_text, color, axis|
364
+ if axis == :LEFT
365
+ dc.addSimpleTextAt(legend_text, left_text_x, left_text_y, color)
366
+ left_text_y -= metrics.height
367
+ else
368
+ dc.addSimpleTextAt(legend_text, right_text_x, right_text_y, color)
369
+ right_text_y -= metrics.height
370
+ end
371
+ end
372
+ if left_text_y < right_text_y
373
+ text_y = left_text_y
374
+ else
375
+ text_y = right_text_y
376
+ end
377
+ else
378
+ @lines.legend.reverse.each do |legend_text, color, axis|
379
+ dc.addSimpleTextAt(legend_text, text_x, text_y, color)
380
+ text_y -= metrics.height
381
+ end
382
+ end
383
+ end
384
+ end # def draw_legend
385
+
386
+ # Draws all lines for the given axis
387
+ # def draw_lines(dc, axis)
388
+
389
+ # Draws a line between two points that is clipped to fit the visible graph if necessary
390
+ # def draw_line(dc, x1, y1, x2, y2, show_line, point_size, axis, color)
391
+
392
+ # Draws the cursor line and popups if needed - called from drawForeground
393
+ def draw_cursor_line_and_popups(dc)
394
+ if @mouse_in_window == true
395
+ # Draw the cursor line at mouse position
396
+ x = scale_graph_to_value_x(mapFromGlobal(cursor.pos).x)
397
+ draw_cursor_line_and_popups_at_x(dc, x)
398
+
399
+ # Call callback when the mouse caused the cursor to draw
400
+ saved_callback = @draw_cursor_line_callback
401
+ @draw_cursor_line_callback = nil
402
+ saved_callback.call(self, x, @left_button_pressed) if saved_callback
403
+ @draw_cursor_line_callback = saved_callback
404
+ elsif @cursor_line_x
405
+ # Draw the cursor line at given position
406
+ draw_cursor_line_and_popups_at_x(dc, @cursor_line_x)
407
+ end
408
+ end
409
+
410
+ # Draws the cursor line at a given position and builds the popups
411
+ def draw_cursor_line_and_popups_at_x(dc, x)
412
+ # Draw cursor line
413
+ if @lines.left_y_axis? and x <= @x_max and x >= @x_min
414
+ draw_line(dc, x, @left_y_min, x, @left_y_max, true, 0, :LEFT, @back_color)
415
+ elsif @lines.right_y_axis? and x <= @x_max and x >= @x_min
416
+ draw_line(dc, x, @right_y_min, x, @right_y_max, true, 0, :RIGHT, @back_color)
417
+ end
418
+
419
+ # Build and draw popups
420
+ build_popups_from_x_value(x)
421
+ draw_popups(dc)
422
+ end
423
+
424
+ # Draws popup boxes if any
425
+ def draw_popups(dc)
426
+ unless @popups.empty?
427
+ # Draw each popup
428
+ @popups.each do |popup_text, popup_x, popup_y, popup_width, popup_height, popup_color|
429
+ # Draw overall rectangle
430
+ dc.addRectColorFill(popup_x, popup_y, popup_width, popup_height, @back_color)
431
+
432
+ # Draw border around rectangle in line color
433
+ dc.addRectColor(popup_x, popup_y, popup_width, popup_height, popup_color)
434
+
435
+ # Draw popup text
436
+ dc.addSimpleTextAt(popup_text, popup_x + 5, popup_y + popup_height - 7, @label_and_border_color)
437
+ end # popups.each
438
+ end # unless popups.empty?
439
+ end
440
+
441
+ # Draws the overall frame around the canvas
442
+ def draw_frame(dc)
443
+ # Draw Frame Rectangle around canvas
444
+ dc.addRectColor(0,0,self.width-1,self.height-1, @frame_color)
445
+ end
446
+
447
+ # Draws an icon that indicates an error has occurred
448
+ def draw_error_icon(dc)
449
+ if @error
450
+ dc.addEllipseColor(@graph_right_x - 60, 20, 40, 40, 'red')
451
+ dc.addRectColorFill(@graph_right_x - 42, 25, 4, 20, 'red')
452
+ dc.addRectColorFill(@graph_right_x - 42, 50, 4, 4, 'red')
453
+ end
454
+ end
455
+
456
+ # Handles window resizes and enforces a minimum size
457
+ def update_graph_size
458
+ unless @in_update_graph_size
459
+ @in_update_graph_size = true
460
+
461
+ # Get new width and height
462
+ new_width = self.width
463
+ new_height = self.height
464
+
465
+ # Enforce a minimum width and height
466
+ if (new_width < @minimum_width)
467
+ new_width = @minimum_width
468
+ end
469
+ if (new_height < @minimum_height)
470
+ new_height = @minimum_height
471
+ end
472
+
473
+ # Make sure everything is the correct size
474
+ self.resize(new_width, new_height)
475
+
476
+ @in_update_graph_size = false
477
+ end
478
+ end # def update_graph_size
479
+
480
+ protected
481
+
482
+ def truncate_to_max(text, max_characters, value)
483
+ if text.length > max_characters
484
+ text = sprintf("%0.#{max_characters}g", value.to_f)
485
+ if text.length > max_characters
486
+ text = sprintf("%0.#{max_characters - 5}g", value.to_f)
487
+ end
488
+ end
489
+ text
490
+ end
491
+
492
+ end # end class LineGraph
493
+
494
+ end # module Cosmos