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,459 +1,459 @@
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/line_graph/line_graph'
13
-
14
- module Cosmos
15
-
16
- class OverviewGraph < LineGraph
17
- DEFAULT_ZOOM_FACTOR = 0.1 # 10 percent
18
- DEFAULT_PAN_FACTOR = 0.1 # 10 percent
19
-
20
- # Minimum allowed size of the window in seconds plotted
21
- attr_accessor :window_min_size
22
- # Maximum allowed size of the window in seconds plotted
23
- attr_accessor :window_max_size
24
- # Callback called when the window changes
25
- attr_accessor :callback
26
- # Window size in seconds plotted
27
- attr_reader :window_size
28
- # Minimum x value in window
29
- attr_reader :window_min_x
30
- # Maximum x value in window
31
- attr_reader :window_max_x
32
-
33
- def initialize(parent)
34
- super(parent)
35
- setMaximumHeight(50)
36
- setFocusPolicy(Qt::StrongFocus)
37
-
38
- @qt_back_color = Cosmos::getColor(@back_color)
39
-
40
- @point_size = 0
41
-
42
- # Adjust minimum height for overview
43
- @minimum_height = 50
44
- @size_hint = Qt::Size.new(0, @minimum_height)
45
- # Size of the window in value space
46
- @window_size = 100.0
47
- # Minimum size of the window
48
- @window_min_size = 0.0
49
- # Maximum size of the window
50
- @window_max_size = nil
51
- # Minimum window x value
52
- @window_min_x = 0
53
- # Maximum window x value
54
- @window_max_x = 0
55
- # Flag to indicate if we are currently dragging the window
56
- @drag_window = false
57
- # Cursor position at start of drag
58
- @drag_start_x = nil
59
- # Variable to hold callback function that indicates the window position
60
- @callback = nil
61
- # window_min_x in graph coordinates
62
- @window_min_start = 0
63
- # window_max_x in graph coordinates
64
- @window_max_start = 0
65
- # Flag to indicate if we are currently dragging the bar
66
- @drag_bar = false
67
- # Flag to indicate if the cursor is in the selection window
68
- @cursor_in_window = false
69
- # The true maximum x value
70
- @true_max_x = 0
71
- @show_cursor_and_popups = false
72
- @window_left_x = 0
73
- @window_right_x = 0
74
- end
75
-
76
- def sizeHint
77
- return @size_hint
78
- end
79
-
80
- def set_window_size(new_window_size, use_callback)
81
- @window_size = new_window_size
82
- @window_size = @window_min_size if @window_min_size and @window_size < @window_min_size
83
- @window_size = @window_max_size if @window_max_size and @window_size > @window_max_size
84
- if @lines.empty?
85
- @window_max_x = 1.0
86
- @window_min_x = -1.0
87
- else
88
- @window_min_x = @window_max_x - @window_size
89
- end
90
- graph(false)
91
- @callback.call(self) if use_callback and @callback
92
- end
93
-
94
- # Sets the window size
95
- def window_size=(new_window_size)
96
- set_window_size(new_window_size, true)
97
- end
98
-
99
- def set_window_pos(window_min_x, window_max_x, use_callback)
100
- @window_min_x = window_min_x
101
- @window_max_x = window_max_x
102
- @callback.call(self) if use_callback and @callback
103
- end
104
-
105
- def drag_window(x)
106
- @cursor = Qt::Cursor.new(Qt::ClosedHandCursor)
107
- self.setCursor(@cursor)
108
-
109
- # Calculate the movement in terms of the graph coordinates (not the x values)
110
- temp_min = (@window_min_start + (x - @drag_start_x))
111
- temp_max = (@window_max_start + (x - @drag_start_x))
112
-
113
- # Only graph if the user hasn't dragged the window outside the graph
114
- if temp_min >= 0 and temp_max <= @graph_right_x
115
- #Now convert the graph coordinates back to the x values
116
- @window_min_x = scale_graph_to_value_x(temp_min)
117
- @window_max_x = scale_graph_to_value_x(temp_max)
118
- else # The user dragged outside the allowable area
119
- if temp_min < 0
120
- @window_min_x = @x_min
121
- @window_max_x = @x_min + @window_size
122
- elsif temp_max > @graph_right_x
123
- @window_max_x = scale_graph_to_value_x(@graph_right_x)
124
- @window_min_x = @window_max_x - @window_size
125
- end
126
- end
127
- @redraw_needed = true
128
- graph()
129
- end
130
-
131
- def drag_bar(x)
132
- if @cursor_on_bar == :LEFT
133
- temp_min = (@window_min_start + (x - @drag_start_x))
134
- temp_max = @window_max_start
135
- else
136
- temp_min = @window_min_start
137
- temp_max = (@window_max_start + (x - @drag_start_x))
138
- end
139
-
140
- value_temp_min = scale_graph_to_value_x(temp_min)
141
- value_temp_max = scale_graph_to_value_x(temp_max)
142
-
143
- # Verify the left bar hasn't moved past the minimum size
144
- if value_temp_min > (@window_max_x - @window_min_size)
145
- @window_min_x = @window_max_x - @window_min_size
146
- # Verify the left bar hasn't moved past the maximum size
147
- elsif @window_max_size and value_temp_min < (@window_max_x - @window_max_size)
148
- @window_min_x = @window_max_x - @window_max_size
149
- else
150
- @window_min_x = value_temp_min
151
- end
152
-
153
- # Verify the left bar hasn't been moved past the end
154
- if scale_value_to_graph_x(@window_min_x) < @graph_left_x
155
- @window_min_x = @x_min
156
- end
157
-
158
- # Verify the right bar hasn't moved past the minimum size
159
- if value_temp_max < (@window_min_x + @window_min_size)
160
- @window_max_x = @window_min_x + @window_min_size
161
- # Verify the right bar hasn't moved past the maximum size
162
- elsif @window_max_size and value_temp_max > (@window_min_x + @window_max_size)
163
- @window_max_x = @window_min_x + @window_max_size
164
- else
165
- @window_max_x = value_temp_max
166
- end
167
-
168
- # Verify the right bar hasn't been moved past the end
169
- if scale_value_to_graph_x(@window_max_x) > @graph_right_x
170
- @window_max_x = @x_max
171
- end
172
-
173
- # Update window size
174
- @window_size = @window_max_x - @window_min_x
175
-
176
- @redraw_needed = true
177
- graph()
178
- end
179
-
180
- def drag_lasso(x)
181
- if (x - @drag_start_x).abs > 5
182
- @drag_bar = true
183
- @window_min_start = @drag_start_x
184
- @window_max_start = @drag_start_x
185
- if x > @drag_start_x
186
- @cursor_on_bar = :RIGHT
187
- else
188
- @cursor_on_bar = :LEFT
189
- end
190
- end
191
- end
192
-
193
- def show_cursor(x)
194
- # Initially set the variables so the cursor isn't anywhere special
195
- @cursor_on_bar = nil
196
- @cursor_in_window = false
197
-
198
- # Figure out if the mouse is inside the graph so we show the Hand cursor
199
- gx = scale_graph_to_value_x(x)
200
-
201
- # Allow the user to drag the white window bars to increase the main view width
202
- if (scale_value_to_graph_x(@window_min_x) - x).abs < 5
203
- @cursor = Qt::Cursor.new(Qt::SizeHorCursor)
204
- self.setCursor(@cursor)
205
- @cursor_on_bar = :LEFT
206
- elsif (scale_value_to_graph_x(@window_max_x) - x).abs < 5
207
- @cursor = Qt::Cursor.new(Qt::SizeHorCursor)
208
- self.setCursor(@cursor)
209
- @cursor_on_bar = :RIGHT
210
- elsif (@window_min_x) < gx and gx < (@window_max_x)
211
- @cursor = Qt::Cursor.new(Qt::OpenHandCursor)
212
- self.setCursor(@cursor)
213
- @cursor_in_window = true
214
- else
215
- self.unsetCursor()
216
- end
217
- end
218
-
219
- # Handles the mouse moving over the overview graph
220
- def mouseMoveEvent(event)
221
- super(event)
222
- # Get the cursor position
223
- x = mapFromGlobal(self.cursor.pos).x
224
-
225
- if @drag_window
226
- drag_window(x)
227
- elsif @drag_bar # We're in the middle of moving one of the window bars
228
- drag_bar(x)
229
- elsif @drag_start_x # Lasso start
230
- drag_lasso(x)
231
- else # We're not dragging the window, the user just moused around so show the right cursor
232
- show_cursor(x)
233
- end
234
- end
235
-
236
- # Handler for leaveEvent
237
- def leaveEvent(event)
238
- super(event)
239
- self.unsetCursor()
240
- @cursor_in_window = false
241
- @cursor_on_bar = nil
242
- @drag_start_x = nil
243
- @drag_bar = false
244
- @drag_window = false
245
- end # def leaveEvent
246
-
247
- # Handles the left button being pressed in the overview graph
248
- def mousePressEvent(event)
249
- super(event)
250
-
251
- # Store off the mouse click x coordinate on the graph and the window x coordinates
252
- @drag_start_x = mapFromGlobal(self.cursor.pos).x
253
- @window_min_start = scale_value_to_graph_x(@window_min_x)
254
- @window_max_start = scale_value_to_graph_x(@window_max_x)
255
- @drag_window = true if @cursor_in_window
256
- @drag_bar = true if @cursor_on_bar
257
- end
258
-
259
- # Handles the left button being released
260
- def mouseReleaseEvent(event)
261
- self.unsetCursor()
262
- if !(@drag_bar or @drag_window) and @drag_start_x
263
- # Figure out what x value the click corresponds to
264
- xpoint = scale_graph_to_value_x(@drag_start_x)
265
-
266
- # Move the window values to make them equidistant from the click
267
- @window_min_x = xpoint - @window_size / 2
268
- @window_max_x = xpoint + @window_size / 2
269
-
270
- # Ensure we don't put the window outside the graphable points
271
- if @window_min_x < @x_min
272
- @window_min_x = @x_min
273
- @window_max_x = @x_min + @window_size
274
- elsif @window_max_x > @x_max
275
- @window_max_x = @x_max
276
- @window_min_x = @x_max - @window_size
277
- end
278
-
279
- @drag_window = true
280
- @redraw_needed = true
281
- graph()
282
- @drag_window = false
283
- end
284
-
285
- @drag_start_x = nil
286
- @drag_bar = false
287
- @drag_window = false
288
- @callback.call(self) unless @callback.nil?
289
- end
290
-
291
- # Draws the overview graph
292
- def graph(move_window = false)
293
- @move_window = move_window
294
- determine_graph_size()
295
- scale_graph()
296
- calculate_scaling_factors()
297
- calculate_window_lines()
298
- super()
299
- end
300
-
301
- def back_color=(value)
302
- super(value)
303
- @qt_back_color = Cosmos::getColor(@back_color)
304
- end
305
-
306
- def zoom(zoom_factor)
307
- @window_size = @window_size * zoom_factor
308
- @window_size = @window_min_size if @window_min_size and @window_size < @window_min_size
309
- @window_size = @window_max_size if @window_max_size and @window_size > @window_max_size
310
- if @lines.empty?
311
- @window_max_x = 1.0
312
- @window_min_x = -1.0
313
- else
314
- center = (@window_max_x + @window_min_x) / 2
315
- @window_min_x = center - @window_size / 2
316
- @window_max_x = center + @window_size / 2
317
- end
318
- @drag_window = true
319
- @redraw_needed = true
320
- graph()
321
- @drag_window = false
322
- @callback.call(self) if @callback
323
- end
324
-
325
- def zoom_in
326
- zoom(1 - DEFAULT_ZOOM_FACTOR)
327
- end
328
-
329
- def zoom_out
330
- zoom(1 + DEFAULT_ZOOM_FACTOR)
331
- end
332
-
333
- def pan(amount)
334
- # Move the window values to make them equidistant from the click
335
- new_window_min_x = @window_min_x + amount
336
- new_window_max_x = @window_max_x + amount
337
-
338
- # Ensure we don't put the window outside the graphable points
339
- if new_window_min_x >= @x_min and new_window_max_x <= @x_max
340
- @window_min_x = new_window_min_x
341
- @window_max_x = new_window_max_x
342
- elsif new_window_min_x < @x_min
343
- @window_min_x = @x_min
344
- @window_max_x = @x_min + @window_size
345
- else
346
- @window_min_x = @x_max - @window_size
347
- @window_max_x = @x_max
348
- end
349
-
350
- @drag_window = true
351
- @redraw_needed = true
352
- graph()
353
- @drag_window = false
354
- @callback.call(self) unless @callback.nil?
355
- end
356
-
357
- def pan_left
358
- pan(-@window_size * DEFAULT_PAN_FACTOR)
359
- end
360
-
361
- def pan_right
362
- pan(@window_size * DEFAULT_PAN_FACTOR)
363
- end
364
-
365
- def keyPressEvent(event)
366
- case event.key
367
- when Qt::Key_Up
368
- zoom_in()
369
- when Qt::Key_Down
370
- zoom_out()
371
- when Qt::Key_Left
372
- pan_left()
373
- when Qt::Key_Right
374
- pan_right()
375
- end
376
- super(event)
377
- end
378
-
379
- def focusInEvent(event)
380
- self.frame_color = 'gray'
381
- update()
382
- end
383
-
384
- def focusOutEvent(event)
385
- self.frame_color = 'black'
386
- update()
387
- end
388
-
389
- protected
390
-
391
- # Draws the graph lines into a buffer
392
-
393
- def draw_graph_into_back_buffer
394
- # Draw overall graph and origin lines and graph lines
395
- clear_canvas_and_draw_graph_rectangle(@painter)
396
- draw_origin_lines(@painter)
397
- draw_lines(@painter, :LEFT)
398
-
399
- draw_selection_window(@painter)
400
- draw_frame(@painter)
401
- end
402
-
403
- # Determines the size of the displayed graph
404
- def determine_graph_size
405
- @graph_left_x = GRAPH_SPACER
406
- @graph_right_x = width - GRAPH_SPACER - 1
407
- @graph_top_y = GRAPH_SPACER
408
- @graph_bottom_y = height - GRAPH_SPACER - 1
409
- end
410
-
411
- # Draws the selection window
412
- def draw_selection_window(dc)
413
- # Draw window area without stipple
414
- dc.addRectColor(@graph_left_x, 1, @window_left_x - @graph_left_x, height() - 2, @qt_back_color)
415
- dc.addRectColor(@window_right_x, 1, @graph_right_x - @window_right_x, height() - 2, @qt_back_color)
416
-
417
- # Draw window lines
418
- dc.addLineColor(@window_left_x, 0, @window_left_x, height(), @label_and_border_color)
419
- dc.addLineColor(@window_right_x, 0, @window_right_x, height(), @label_and_border_color)
420
- end
421
-
422
- def calculate_window_lines
423
- # Determine positions of window lines
424
- # If we're dragging the window then we draw the lines exactly as they have been
425
- # set by the mouse click and mouse drag event handler
426
- if @drag_window or @drag_bar or not @move_window
427
- # The window lines are in terms of the graph x values so convert to the graph coordinate system
428
- @window_left_x = scale_value_to_graph_x(@window_min_x)
429
- @window_left_x = @graph_left_x if @window_left_x < @graph_left_x
430
- @window_right_x = scale_value_to_graph_x(@window_max_x)
431
- @window_right_x = @graph_right_x if @window_right_x > @graph_right_x
432
- else # If we're not dragging the window we want to adjust the window lines automatically
433
- @window_max_x = @x_max
434
-
435
- # Graph the right window bounds line
436
- @window_right_x = scale_value_to_graph_x(@window_max_x)
437
- @window_right_x = @graph_right_x if @window_right_x > @graph_right_x
438
-
439
- # Graph the left window bounds line
440
- if @x_min == @x_max
441
- @window_min_x = @x_min - 1.0
442
- @window_max_x = @x_max + 1.0
443
- end
444
- if (@x_max - @x_min) > @window_size
445
- # Once we have enough points the left line trails the right by the size of the window
446
- @window_min_x = @window_max_x - @window_size
447
- @window_left_x = scale_value_to_graph_x(@window_min_x)
448
- @window_left_x = @graph_left_x if @window_left_x < @graph_left_x
449
- else # Initially we don't have enough points so the left line is at the GRAPH_SPACER
450
- @window_min_x = @x_min
451
- @window_max_x = @x_max
452
- @window_left_x = GRAPH_SPACER
453
- end
454
- end
455
- end
456
-
457
- end # class OverviewGraph
458
-
459
- 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/line_graph/line_graph'
13
+
14
+ module Cosmos
15
+
16
+ class OverviewGraph < LineGraph
17
+ DEFAULT_ZOOM_FACTOR = 0.1 # 10 percent
18
+ DEFAULT_PAN_FACTOR = 0.1 # 10 percent
19
+
20
+ # Minimum allowed size of the window in seconds plotted
21
+ attr_accessor :window_min_size
22
+ # Maximum allowed size of the window in seconds plotted
23
+ attr_accessor :window_max_size
24
+ # Callback called when the window changes
25
+ attr_accessor :callback
26
+ # Window size in seconds plotted
27
+ attr_reader :window_size
28
+ # Minimum x value in window
29
+ attr_reader :window_min_x
30
+ # Maximum x value in window
31
+ attr_reader :window_max_x
32
+
33
+ def initialize(parent)
34
+ super(parent)
35
+ setMaximumHeight(50)
36
+ setFocusPolicy(Qt::StrongFocus)
37
+
38
+ @qt_back_color = Cosmos::getColor(@back_color)
39
+
40
+ @point_size = 0
41
+
42
+ # Adjust minimum height for overview
43
+ @minimum_height = 50
44
+ @size_hint = Qt::Size.new(0, @minimum_height)
45
+ # Size of the window in value space
46
+ @window_size = 100.0
47
+ # Minimum size of the window
48
+ @window_min_size = 0.0
49
+ # Maximum size of the window
50
+ @window_max_size = nil
51
+ # Minimum window x value
52
+ @window_min_x = 0
53
+ # Maximum window x value
54
+ @window_max_x = 0
55
+ # Flag to indicate if we are currently dragging the window
56
+ @drag_window = false
57
+ # Cursor position at start of drag
58
+ @drag_start_x = nil
59
+ # Variable to hold callback function that indicates the window position
60
+ @callback = nil
61
+ # window_min_x in graph coordinates
62
+ @window_min_start = 0
63
+ # window_max_x in graph coordinates
64
+ @window_max_start = 0
65
+ # Flag to indicate if we are currently dragging the bar
66
+ @drag_bar = false
67
+ # Flag to indicate if the cursor is in the selection window
68
+ @cursor_in_window = false
69
+ # The true maximum x value
70
+ @true_max_x = 0
71
+ @show_cursor_and_popups = false
72
+ @window_left_x = 0
73
+ @window_right_x = 0
74
+ end
75
+
76
+ def sizeHint
77
+ return @size_hint
78
+ end
79
+
80
+ def set_window_size(new_window_size, use_callback)
81
+ @window_size = new_window_size
82
+ @window_size = @window_min_size if @window_min_size and @window_size < @window_min_size
83
+ @window_size = @window_max_size if @window_max_size and @window_size > @window_max_size
84
+ if @lines.empty?
85
+ @window_max_x = 1.0
86
+ @window_min_x = -1.0
87
+ else
88
+ @window_min_x = @window_max_x - @window_size
89
+ end
90
+ graph(false)
91
+ @callback.call(self) if use_callback and @callback
92
+ end
93
+
94
+ # Sets the window size
95
+ def window_size=(new_window_size)
96
+ set_window_size(new_window_size, true)
97
+ end
98
+
99
+ def set_window_pos(window_min_x, window_max_x, use_callback)
100
+ @window_min_x = window_min_x
101
+ @window_max_x = window_max_x
102
+ @callback.call(self) if use_callback and @callback
103
+ end
104
+
105
+ def drag_window(x)
106
+ @cursor = Qt::Cursor.new(Qt::ClosedHandCursor)
107
+ self.setCursor(@cursor)
108
+
109
+ # Calculate the movement in terms of the graph coordinates (not the x values)
110
+ temp_min = (@window_min_start + (x - @drag_start_x))
111
+ temp_max = (@window_max_start + (x - @drag_start_x))
112
+
113
+ # Only graph if the user hasn't dragged the window outside the graph
114
+ if temp_min >= 0 and temp_max <= @graph_right_x
115
+ #Now convert the graph coordinates back to the x values
116
+ @window_min_x = scale_graph_to_value_x(temp_min)
117
+ @window_max_x = scale_graph_to_value_x(temp_max)
118
+ else # The user dragged outside the allowable area
119
+ if temp_min < 0
120
+ @window_min_x = @x_min
121
+ @window_max_x = @x_min + @window_size
122
+ elsif temp_max > @graph_right_x
123
+ @window_max_x = scale_graph_to_value_x(@graph_right_x)
124
+ @window_min_x = @window_max_x - @window_size
125
+ end
126
+ end
127
+ @redraw_needed = true
128
+ graph()
129
+ end
130
+
131
+ def drag_bar(x)
132
+ if @cursor_on_bar == :LEFT
133
+ temp_min = (@window_min_start + (x - @drag_start_x))
134
+ temp_max = @window_max_start
135
+ else
136
+ temp_min = @window_min_start
137
+ temp_max = (@window_max_start + (x - @drag_start_x))
138
+ end
139
+
140
+ value_temp_min = scale_graph_to_value_x(temp_min)
141
+ value_temp_max = scale_graph_to_value_x(temp_max)
142
+
143
+ # Verify the left bar hasn't moved past the minimum size
144
+ if value_temp_min > (@window_max_x - @window_min_size)
145
+ @window_min_x = @window_max_x - @window_min_size
146
+ # Verify the left bar hasn't moved past the maximum size
147
+ elsif @window_max_size and value_temp_min < (@window_max_x - @window_max_size)
148
+ @window_min_x = @window_max_x - @window_max_size
149
+ else
150
+ @window_min_x = value_temp_min
151
+ end
152
+
153
+ # Verify the left bar hasn't been moved past the end
154
+ if scale_value_to_graph_x(@window_min_x) < @graph_left_x
155
+ @window_min_x = @x_min
156
+ end
157
+
158
+ # Verify the right bar hasn't moved past the minimum size
159
+ if value_temp_max < (@window_min_x + @window_min_size)
160
+ @window_max_x = @window_min_x + @window_min_size
161
+ # Verify the right bar hasn't moved past the maximum size
162
+ elsif @window_max_size and value_temp_max > (@window_min_x + @window_max_size)
163
+ @window_max_x = @window_min_x + @window_max_size
164
+ else
165
+ @window_max_x = value_temp_max
166
+ end
167
+
168
+ # Verify the right bar hasn't been moved past the end
169
+ if scale_value_to_graph_x(@window_max_x) > @graph_right_x
170
+ @window_max_x = @x_max
171
+ end
172
+
173
+ # Update window size
174
+ @window_size = @window_max_x - @window_min_x
175
+
176
+ @redraw_needed = true
177
+ graph()
178
+ end
179
+
180
+ def drag_lasso(x)
181
+ if (x - @drag_start_x).abs > 5
182
+ @drag_bar = true
183
+ @window_min_start = @drag_start_x
184
+ @window_max_start = @drag_start_x
185
+ if x > @drag_start_x
186
+ @cursor_on_bar = :RIGHT
187
+ else
188
+ @cursor_on_bar = :LEFT
189
+ end
190
+ end
191
+ end
192
+
193
+ def show_cursor(x)
194
+ # Initially set the variables so the cursor isn't anywhere special
195
+ @cursor_on_bar = nil
196
+ @cursor_in_window = false
197
+
198
+ # Figure out if the mouse is inside the graph so we show the Hand cursor
199
+ gx = scale_graph_to_value_x(x)
200
+
201
+ # Allow the user to drag the white window bars to increase the main view width
202
+ if (scale_value_to_graph_x(@window_min_x) - x).abs < 5
203
+ @cursor = Qt::Cursor.new(Qt::SizeHorCursor)
204
+ self.setCursor(@cursor)
205
+ @cursor_on_bar = :LEFT
206
+ elsif (scale_value_to_graph_x(@window_max_x) - x).abs < 5
207
+ @cursor = Qt::Cursor.new(Qt::SizeHorCursor)
208
+ self.setCursor(@cursor)
209
+ @cursor_on_bar = :RIGHT
210
+ elsif (@window_min_x) < gx and gx < (@window_max_x)
211
+ @cursor = Qt::Cursor.new(Qt::OpenHandCursor)
212
+ self.setCursor(@cursor)
213
+ @cursor_in_window = true
214
+ else
215
+ self.unsetCursor()
216
+ end
217
+ end
218
+
219
+ # Handles the mouse moving over the overview graph
220
+ def mouseMoveEvent(event)
221
+ super(event)
222
+ # Get the cursor position
223
+ x = mapFromGlobal(self.cursor.pos).x
224
+
225
+ if @drag_window
226
+ drag_window(x)
227
+ elsif @drag_bar # We're in the middle of moving one of the window bars
228
+ drag_bar(x)
229
+ elsif @drag_start_x # Lasso start
230
+ drag_lasso(x)
231
+ else # We're not dragging the window, the user just moused around so show the right cursor
232
+ show_cursor(x)
233
+ end
234
+ end
235
+
236
+ # Handler for leaveEvent
237
+ def leaveEvent(event)
238
+ super(event)
239
+ self.unsetCursor()
240
+ @cursor_in_window = false
241
+ @cursor_on_bar = nil
242
+ @drag_start_x = nil
243
+ @drag_bar = false
244
+ @drag_window = false
245
+ end # def leaveEvent
246
+
247
+ # Handles the left button being pressed in the overview graph
248
+ def mousePressEvent(event)
249
+ super(event)
250
+
251
+ # Store off the mouse click x coordinate on the graph and the window x coordinates
252
+ @drag_start_x = mapFromGlobal(self.cursor.pos).x
253
+ @window_min_start = scale_value_to_graph_x(@window_min_x)
254
+ @window_max_start = scale_value_to_graph_x(@window_max_x)
255
+ @drag_window = true if @cursor_in_window
256
+ @drag_bar = true if @cursor_on_bar
257
+ end
258
+
259
+ # Handles the left button being released
260
+ def mouseReleaseEvent(event)
261
+ self.unsetCursor()
262
+ if !(@drag_bar or @drag_window) and @drag_start_x
263
+ # Figure out what x value the click corresponds to
264
+ xpoint = scale_graph_to_value_x(@drag_start_x)
265
+
266
+ # Move the window values to make them equidistant from the click
267
+ @window_min_x = xpoint - @window_size / 2
268
+ @window_max_x = xpoint + @window_size / 2
269
+
270
+ # Ensure we don't put the window outside the graphable points
271
+ if @window_min_x < @x_min
272
+ @window_min_x = @x_min
273
+ @window_max_x = @x_min + @window_size
274
+ elsif @window_max_x > @x_max
275
+ @window_max_x = @x_max
276
+ @window_min_x = @x_max - @window_size
277
+ end
278
+
279
+ @drag_window = true
280
+ @redraw_needed = true
281
+ graph()
282
+ @drag_window = false
283
+ end
284
+
285
+ @drag_start_x = nil
286
+ @drag_bar = false
287
+ @drag_window = false
288
+ @callback.call(self) unless @callback.nil?
289
+ end
290
+
291
+ # Draws the overview graph
292
+ def graph(move_window = false)
293
+ @move_window = move_window
294
+ determine_graph_size()
295
+ scale_graph()
296
+ calculate_scaling_factors()
297
+ calculate_window_lines()
298
+ super()
299
+ end
300
+
301
+ def back_color=(value)
302
+ super(value)
303
+ @qt_back_color = Cosmos::getColor(@back_color)
304
+ end
305
+
306
+ def zoom(zoom_factor)
307
+ @window_size = @window_size * zoom_factor
308
+ @window_size = @window_min_size if @window_min_size and @window_size < @window_min_size
309
+ @window_size = @window_max_size if @window_max_size and @window_size > @window_max_size
310
+ if @lines.empty?
311
+ @window_max_x = 1.0
312
+ @window_min_x = -1.0
313
+ else
314
+ center = (@window_max_x + @window_min_x) / 2
315
+ @window_min_x = center - @window_size / 2
316
+ @window_max_x = center + @window_size / 2
317
+ end
318
+ @drag_window = true
319
+ @redraw_needed = true
320
+ graph()
321
+ @drag_window = false
322
+ @callback.call(self) if @callback
323
+ end
324
+
325
+ def zoom_in
326
+ zoom(1 - DEFAULT_ZOOM_FACTOR)
327
+ end
328
+
329
+ def zoom_out
330
+ zoom(1 + DEFAULT_ZOOM_FACTOR)
331
+ end
332
+
333
+ def pan(amount)
334
+ # Move the window values to make them equidistant from the click
335
+ new_window_min_x = @window_min_x + amount
336
+ new_window_max_x = @window_max_x + amount
337
+
338
+ # Ensure we don't put the window outside the graphable points
339
+ if new_window_min_x >= @x_min and new_window_max_x <= @x_max
340
+ @window_min_x = new_window_min_x
341
+ @window_max_x = new_window_max_x
342
+ elsif new_window_min_x < @x_min
343
+ @window_min_x = @x_min
344
+ @window_max_x = @x_min + @window_size
345
+ else
346
+ @window_min_x = @x_max - @window_size
347
+ @window_max_x = @x_max
348
+ end
349
+
350
+ @drag_window = true
351
+ @redraw_needed = true
352
+ graph()
353
+ @drag_window = false
354
+ @callback.call(self) unless @callback.nil?
355
+ end
356
+
357
+ def pan_left
358
+ pan(-@window_size * DEFAULT_PAN_FACTOR)
359
+ end
360
+
361
+ def pan_right
362
+ pan(@window_size * DEFAULT_PAN_FACTOR)
363
+ end
364
+
365
+ def keyPressEvent(event)
366
+ case event.key
367
+ when Qt::Key_Up
368
+ zoom_in()
369
+ when Qt::Key_Down
370
+ zoom_out()
371
+ when Qt::Key_Left
372
+ pan_left()
373
+ when Qt::Key_Right
374
+ pan_right()
375
+ end
376
+ super(event)
377
+ end
378
+
379
+ def focusInEvent(event)
380
+ self.frame_color = 'gray'
381
+ update()
382
+ end
383
+
384
+ def focusOutEvent(event)
385
+ self.frame_color = 'black'
386
+ update()
387
+ end
388
+
389
+ protected
390
+
391
+ # Draws the graph lines into a buffer
392
+
393
+ def draw_graph_into_back_buffer
394
+ # Draw overall graph and origin lines and graph lines
395
+ clear_canvas_and_draw_graph_rectangle(@painter)
396
+ draw_origin_lines(@painter)
397
+ draw_lines(@painter, :LEFT)
398
+
399
+ draw_selection_window(@painter)
400
+ draw_frame(@painter)
401
+ end
402
+
403
+ # Determines the size of the displayed graph
404
+ def determine_graph_size
405
+ @graph_left_x = GRAPH_SPACER
406
+ @graph_right_x = width - GRAPH_SPACER - 1
407
+ @graph_top_y = GRAPH_SPACER
408
+ @graph_bottom_y = height - GRAPH_SPACER - 1
409
+ end
410
+
411
+ # Draws the selection window
412
+ def draw_selection_window(dc)
413
+ # Draw window area without stipple
414
+ dc.addRectColor(@graph_left_x, 1, @window_left_x - @graph_left_x, height() - 2, @qt_back_color)
415
+ dc.addRectColor(@window_right_x, 1, @graph_right_x - @window_right_x, height() - 2, @qt_back_color)
416
+
417
+ # Draw window lines
418
+ dc.addLineColor(@window_left_x, 0, @window_left_x, height(), @label_and_border_color)
419
+ dc.addLineColor(@window_right_x, 0, @window_right_x, height(), @label_and_border_color)
420
+ end
421
+
422
+ def calculate_window_lines
423
+ # Determine positions of window lines
424
+ # If we're dragging the window then we draw the lines exactly as they have been
425
+ # set by the mouse click and mouse drag event handler
426
+ if @drag_window or @drag_bar or not @move_window
427
+ # The window lines are in terms of the graph x values so convert to the graph coordinate system
428
+ @window_left_x = scale_value_to_graph_x(@window_min_x)
429
+ @window_left_x = @graph_left_x if @window_left_x < @graph_left_x
430
+ @window_right_x = scale_value_to_graph_x(@window_max_x)
431
+ @window_right_x = @graph_right_x if @window_right_x > @graph_right_x
432
+ else # If we're not dragging the window we want to adjust the window lines automatically
433
+ @window_max_x = @x_max
434
+
435
+ # Graph the right window bounds line
436
+ @window_right_x = scale_value_to_graph_x(@window_max_x)
437
+ @window_right_x = @graph_right_x if @window_right_x > @graph_right_x
438
+
439
+ # Graph the left window bounds line
440
+ if @x_min == @x_max
441
+ @window_min_x = @x_min - 1.0
442
+ @window_max_x = @x_max + 1.0
443
+ end
444
+ if (@x_max - @x_min) > @window_size
445
+ # Once we have enough points the left line trails the right by the size of the window
446
+ @window_min_x = @window_max_x - @window_size
447
+ @window_left_x = scale_value_to_graph_x(@window_min_x)
448
+ @window_left_x = @graph_left_x if @window_left_x < @graph_left_x
449
+ else # Initially we don't have enough points so the left line is at the GRAPH_SPACER
450
+ @window_min_x = @x_min
451
+ @window_max_x = @x_max
452
+ @window_left_x = GRAPH_SPACER
453
+ end
454
+ end
455
+ end
456
+
457
+ end # class OverviewGraph
458
+
459
+ end # module Cosmos