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,176 +1,176 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'cosmos'
12
- require 'cosmos/tools/tlm_grapher/data_objects/data_object'
13
-
14
- module Cosmos
15
-
16
- # Represents a data object on a line graph
17
- # Designed for use as a base class for custom data objects
18
- class LinegraphDataObject < DataObject
19
-
20
- # Possible Y-Axis Selections
21
- Y_AXIS_CHOICES = [:LEFT, :RIGHT]
22
-
23
- # Horizontal lines associated with this data object
24
- # Typically used to display limits on the line graph
25
- # Array of arrays of the form [y_value, color]
26
- attr_accessor :horizontal_lines
27
-
28
- # Y offset applied to each of the data object's values (float)
29
- attr_accessor :y_offset
30
-
31
- # Y axis used for this data object - :LEFT or :RIGHT
32
- attr_accessor :y_axis
33
-
34
- # Array of x_values to graph on the line graph
35
- attr_accessor :x_values
36
-
37
- # Array of y values to graph on the line graph
38
- attr_accessor :y_values
39
-
40
- # Array of formatted x_values to graph on the line graph
41
- attr_accessor :formatted_x_values
42
-
43
- # Hash of x states
44
- attr_accessor :x_states
45
-
46
- # Hash of y states
47
- attr_accessor :y_states
48
-
49
- # Create a new LineGraphDataObject
50
- def initialize
51
- super()
52
- @horizontal_lines = []
53
- @y_offset = 0.0
54
- @y_axis = :LEFT
55
- @x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
56
- @y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
57
- @formatted_x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
58
- @x_states = nil
59
- @y_states = nil
60
- end # def initialize
61
-
62
- # Returns the configuration lines used to create this data object
63
- def configuration_string
64
- string = super()
65
- string << " Y_OFFSET #{@y_offset}\n" if @y_offset != 0.0
66
- string << " Y_AXIS #{@y_axis}\n"
67
- @horizontal_lines.each do |y_value, color|
68
- string << " HORIZONTAL_LINE #{y_value} #{color}\n"
69
- end
70
- string
71
- end # def configuration_string
72
-
73
- # Handles data object specific keywords
74
- def handle_keyword(parser, keyword, parameters)
75
- case keyword
76
- when 'HORIZONTAL_LINE'
77
- # Expect 2 parameters
78
- parser.verify_num_parameters(2, 2, "HORIZONTAL_LINE <Y Value> <Color>")
79
- y_value = parameters[0].to_f
80
- color = parameters[1]
81
- @horizontal_lines << [y_value, color]
82
-
83
- when 'Y_OFFSET'
84
- # Expect 1 parameter
85
- parser.verify_num_parameters(1, 1, "Y_OFFSET <Offset Value>")
86
- @y_offset = parameters[0].to_f
87
-
88
- when 'Y_AXIS'
89
- # Expect 1 parameter
90
- parser.verify_num_parameters(1, 1, "Y_AXIS <LEFT or RIGHT>")
91
- axis = parameters[0].upcase.intern
92
- if Y_AXIS_CHOICES.include?(axis)
93
- @y_axis = axis
94
- else
95
- raise ArgumentError, "Unknown Y_AXIS value: #{axis}"
96
- end
97
-
98
- else
99
- # Unknown keywords are passed to parent data object
100
- super(parser, keyword, parameters)
101
-
102
- end # case keyword
103
-
104
- end # def handle_keyword
105
-
106
- # Resets the line graph data object
107
- def reset
108
- super()
109
- @x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
110
- @y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
111
- @formatted_x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
112
- end
113
-
114
- # Exports the data objects data
115
- def export
116
- if @formatted_x_values.empty?
117
- [[name().clone, 'X'].concat(@x_values), [name().clone, 'Y'].concat(@y_values)]
118
- else
119
- [[name().clone, 'Formatted X'].concat(@formatted_x_values), [name().clone, 'X'].concat(@x_values), [name().clone, 'Y'].concat(@y_values)]
120
- end
121
- end
122
-
123
- # Creates a copy of the data object with settings but without data
124
- def copy
125
- data_object = super()
126
- horizontal_lines = []
127
- @horizontal_lines.each do |y_value, color|
128
- horizontal_lines << [y_value, color.clone]
129
- end
130
- data_object.horizontal_lines = horizontal_lines
131
- data_object.y_offset = @y_offset
132
- data_object.y_axis = @y_axis
133
-
134
- # States should not be changing, so they will not be deep cloned.
135
- data_object.x_states = @x_states.clone if @x_states
136
- data_object.y_states = @y_states.clone if @y_states
137
-
138
- data_object
139
- end
140
-
141
- # Edits the data object
142
- def edit(editted_data_object)
143
- super(editted_data_object)
144
- @horizontal_lines = editted_data_object.horizontal_lines
145
- if @y_offset != editted_data_object.y_offset
146
- old_y_offset = @y_offset
147
- new_y_offset = editted_data_object.y_offset
148
- @y_values.length.times {|index| @y_values[index] += (new_y_offset - old_y_offset)}
149
- end
150
- @y_offset = editted_data_object.y_offset
151
- @y_axis = editted_data_object.y_axis
152
- @x_states = editted_data_object.x_states
153
- @y_states = editted_data_object.y_states
154
- end
155
-
156
- protected
157
-
158
- # (see DataObject#prune_to_max_points_saved)
159
- def prune_to_max_points_saved(force_prune = false)
160
- prune_index = nil
161
- if @max_points_saved
162
- prune_index = @x_values.length - @max_points_saved
163
- if prune_index > @prune_hysterisis or (force_prune and prune_index > 0)
164
- @x_values.remove_before!(prune_index)
165
- @y_values.remove_before!(prune_index)
166
- @formatted_x_values.remove_before!(prune_index)
167
- else
168
- prune_index = nil
169
- end
170
- end
171
- prune_index
172
- end
173
-
174
- end # class LinegraphDataObject
175
-
176
- 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/tools/tlm_grapher/data_objects/data_object'
13
+
14
+ module Cosmos
15
+
16
+ # Represents a data object on a line graph
17
+ # Designed for use as a base class for custom data objects
18
+ class LinegraphDataObject < DataObject
19
+
20
+ # Possible Y-Axis Selections
21
+ Y_AXIS_CHOICES = [:LEFT, :RIGHT]
22
+
23
+ # Horizontal lines associated with this data object
24
+ # Typically used to display limits on the line graph
25
+ # Array of arrays of the form [y_value, color]
26
+ attr_accessor :horizontal_lines
27
+
28
+ # Y offset applied to each of the data object's values (float)
29
+ attr_accessor :y_offset
30
+
31
+ # Y axis used for this data object - :LEFT or :RIGHT
32
+ attr_accessor :y_axis
33
+
34
+ # Array of x_values to graph on the line graph
35
+ attr_accessor :x_values
36
+
37
+ # Array of y values to graph on the line graph
38
+ attr_accessor :y_values
39
+
40
+ # Array of formatted x_values to graph on the line graph
41
+ attr_accessor :formatted_x_values
42
+
43
+ # Hash of x states
44
+ attr_accessor :x_states
45
+
46
+ # Hash of y states
47
+ attr_accessor :y_states
48
+
49
+ # Create a new LineGraphDataObject
50
+ def initialize
51
+ super()
52
+ @horizontal_lines = []
53
+ @y_offset = 0.0
54
+ @y_axis = :LEFT
55
+ @x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
56
+ @y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
57
+ @formatted_x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
58
+ @x_states = nil
59
+ @y_states = nil
60
+ end # def initialize
61
+
62
+ # Returns the configuration lines used to create this data object
63
+ def configuration_string
64
+ string = super()
65
+ string << " Y_OFFSET #{@y_offset}\n" if @y_offset != 0.0
66
+ string << " Y_AXIS #{@y_axis}\n"
67
+ @horizontal_lines.each do |y_value, color|
68
+ string << " HORIZONTAL_LINE #{y_value} #{color}\n"
69
+ end
70
+ string
71
+ end # def configuration_string
72
+
73
+ # Handles data object specific keywords
74
+ def handle_keyword(parser, keyword, parameters)
75
+ case keyword
76
+ when 'HORIZONTAL_LINE'
77
+ # Expect 2 parameters
78
+ parser.verify_num_parameters(2, 2, "HORIZONTAL_LINE <Y Value> <Color>")
79
+ y_value = parameters[0].to_f
80
+ color = parameters[1]
81
+ @horizontal_lines << [y_value, color]
82
+
83
+ when 'Y_OFFSET'
84
+ # Expect 1 parameter
85
+ parser.verify_num_parameters(1, 1, "Y_OFFSET <Offset Value>")
86
+ @y_offset = parameters[0].to_f
87
+
88
+ when 'Y_AXIS'
89
+ # Expect 1 parameter
90
+ parser.verify_num_parameters(1, 1, "Y_AXIS <LEFT or RIGHT>")
91
+ axis = parameters[0].upcase.intern
92
+ if Y_AXIS_CHOICES.include?(axis)
93
+ @y_axis = axis
94
+ else
95
+ raise ArgumentError, "Unknown Y_AXIS value: #{axis}"
96
+ end
97
+
98
+ else
99
+ # Unknown keywords are passed to parent data object
100
+ super(parser, keyword, parameters)
101
+
102
+ end # case keyword
103
+
104
+ end # def handle_keyword
105
+
106
+ # Resets the line graph data object
107
+ def reset
108
+ super()
109
+ @x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
110
+ @y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
111
+ @formatted_x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
112
+ end
113
+
114
+ # Exports the data objects data
115
+ def export
116
+ if @formatted_x_values.empty?
117
+ [[name().clone, 'X'].concat(@x_values), [name().clone, 'Y'].concat(@y_values)]
118
+ else
119
+ [[name().clone, 'Formatted X'].concat(@formatted_x_values), [name().clone, 'X'].concat(@x_values), [name().clone, 'Y'].concat(@y_values)]
120
+ end
121
+ end
122
+
123
+ # Creates a copy of the data object with settings but without data
124
+ def copy
125
+ data_object = super()
126
+ horizontal_lines = []
127
+ @horizontal_lines.each do |y_value, color|
128
+ horizontal_lines << [y_value, color.clone]
129
+ end
130
+ data_object.horizontal_lines = horizontal_lines
131
+ data_object.y_offset = @y_offset
132
+ data_object.y_axis = @y_axis
133
+
134
+ # States should not be changing, so they will not be deep cloned.
135
+ data_object.x_states = @x_states.clone if @x_states
136
+ data_object.y_states = @y_states.clone if @y_states
137
+
138
+ data_object
139
+ end
140
+
141
+ # Edits the data object
142
+ def edit(editted_data_object)
143
+ super(editted_data_object)
144
+ @horizontal_lines = editted_data_object.horizontal_lines
145
+ if @y_offset != editted_data_object.y_offset
146
+ old_y_offset = @y_offset
147
+ new_y_offset = editted_data_object.y_offset
148
+ @y_values.length.times {|index| @y_values[index] += (new_y_offset - old_y_offset)}
149
+ end
150
+ @y_offset = editted_data_object.y_offset
151
+ @y_axis = editted_data_object.y_axis
152
+ @x_states = editted_data_object.x_states
153
+ @y_states = editted_data_object.y_states
154
+ end
155
+
156
+ protected
157
+
158
+ # (see DataObject#prune_to_max_points_saved)
159
+ def prune_to_max_points_saved(force_prune = false)
160
+ prune_index = nil
161
+ if @max_points_saved
162
+ prune_index = @x_values.length - @max_points_saved
163
+ if prune_index > @prune_hysterisis or (force_prune and prune_index > 0)
164
+ @x_values.remove_before!(prune_index)
165
+ @y_values.remove_before!(prune_index)
166
+ @formatted_x_values.remove_before!(prune_index)
167
+ else
168
+ prune_index = nil
169
+ end
170
+ end
171
+ prune_index
172
+ end
173
+
174
+ end # class LinegraphDataObject
175
+
176
+ end # module Cosmos
@@ -1,25 +1,25 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'cosmos'
12
- require 'cosmos/tools/tlm_grapher/data_objects/xy_data_object'
13
-
14
- module Cosmos
15
-
16
- # Represents a data object on an SinglxyGraph for two telemetry items
17
- class SinglexyDataObject < XyDataObject
18
-
19
- def initialize
20
- super()
21
- end
22
-
23
- end # class SinglexyDataObject
24
-
25
- 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/tools/tlm_grapher/data_objects/xy_data_object'
13
+
14
+ module Cosmos
15
+
16
+ # Represents a data object on an SinglxyGraph for two telemetry items
17
+ class SinglexyDataObject < XyDataObject
18
+
19
+ def initialize
20
+ super()
21
+ end
22
+
23
+ end # class SinglexyDataObject
24
+
25
+ end # module Cosmos
@@ -1,320 +1,323 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'cosmos'
12
- require 'cosmos/tools/tlm_grapher/data_objects/data_object'
13
-
14
- module Cosmos
15
-
16
- # Represents a data object on an XyGraph for two telemetry items
17
- class XyDataObject < DataObject
18
-
19
- # Value Types
20
- VALUE_TYPES = [:RAW, :CONVERTED]
21
-
22
- # The target name (string)
23
- attr_accessor :target_name
24
-
25
- # The packet name (string)
26
- attr_accessor :packet_name
27
-
28
- # The x item name (string)
29
- attr_reader :x_item_name
30
-
31
- # The y item name (string)
32
- attr_reader :y_item_name
33
-
34
- # The time item name (string)
35
- attr_reader :time_item_name
36
-
37
- # Type of data to collect for x value - :RAW or :CONVERTED
38
- attr_accessor :x_value_type
39
-
40
- # Type of data to collect for y value - :RAW or :CONVERTED
41
- attr_accessor :y_value_type
42
-
43
- # Array of x_values to graph on the line graph
44
- attr_accessor :x_values
45
-
46
- # Array of y values to graph on the line graph
47
- attr_accessor :y_values
48
-
49
- # Array of time values to graph on the line graph
50
- attr_accessor :time_values
51
-
52
- # Hash of x states
53
- attr_accessor :x_states
54
-
55
- # Hash of y states
56
- attr_accessor :y_states
57
-
58
- def initialize
59
- super()
60
-
61
- @target_name = nil
62
- @packet_name = nil
63
- @x_item_name = nil
64
- @y_item_name = nil
65
- @time_item_name = nil
66
- @x_value_type = :CONVERTED
67
- @y_value_type = :CONVERTED
68
-
69
- @x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
70
- @y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
71
- @time_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
72
- @x_states = nil
73
- @y_states = nil
74
-
75
- @during_configuration = false
76
- end
77
-
78
- # Returns the configuration lines used to create this data object
79
- def configuration_string
80
- string = super()
81
- string << " TARGET #{@target_name}\n" if @target_name
82
- string << " PACKET #{@packet_name}\n" if @packet_name
83
- string << " X_ITEM #{@x_item_name}\n" if @x_item_name
84
- string << " Y_ITEM #{@y_item_name}\n" if @y_item_name
85
- string << " TIME_ITEM #{@time_item_name}\n" if @time_item_name
86
- string << " X_VALUE_TYPE #{@x_value_type}\n"
87
- string << " Y_VALUE_TYPE #{@y_value_type}\n"
88
- string
89
- end # def configuration_string
90
-
91
- # Handles data object specific keywords
92
- def handle_keyword(parser, keyword, parameters)
93
- case keyword
94
- when 'TARGET'
95
- # Expect 1 parameters
96
- parser.verify_num_parameters(1, 1, "TARGET <Target Name>")
97
- unless @target_name
98
- @target_name = parameters[0].upcase
99
- else
100
- raise ArgumentError, "Only one TARGET may be associated with an #{self.class}"
101
- end
102
-
103
- when 'PACKET'
104
- # Expect 1 parameters
105
- parser.verify_num_parameters(1, 1, "PACKET <Packet Name>")
106
- unless @packet_name
107
- @packet_name = parameters[0].upcase
108
- else
109
- raise ArgumentError, "Only one PACKET may be associated with an #{self.class}"
110
- end
111
-
112
- when 'X_ITEM'
113
- # Expect 1 parameters
114
- parser.verify_num_parameters(1, 1, "X_ITEM <X Item Name>")
115
- unless @x_item_name
116
- @during_configuration = true
117
- self.x_item_name = parameters[0]
118
- @during_configuration = false
119
- else
120
- raise ArgumentError, "Only one X_ITEM may be associated with an #{self.class}"
121
- end
122
-
123
- when 'Y_ITEM'
124
- # Expect 1 parameters
125
- parser.verify_num_parameters(1, 1, "Y_ITEM <Y Item Name>")
126
- unless @y_item_name
127
- @during_configuration = true
128
- self.y_item_name = parameters[0]
129
- @during_configuration = false
130
- else
131
- raise ArgumentError, "Only one Y_ITEM may be associated with an #{self.class}"
132
- end
133
-
134
- when 'TIME_ITEM'
135
- # Expect 1 parameters
136
- parser.verify_num_parameters(1, 1, "TIME_ITEM <Time Item Name>")
137
- if @time_item_name and not @y_item_name
138
- raise ArgumentError, "Only one TIME_ITEM may be associated with an #{self.class}"
139
- else
140
- self.time_item_name = parameters[0]
141
- end
142
-
143
- when 'X_VALUE_TYPE'
144
- # Expect 1 parameter
145
- parser.verify_num_parameters(1, 1, "X_VALUE_TYPE <RAW or CONVERTED>")
146
- value_type = parameters[0].upcase.intern
147
- if VALUE_TYPES.include?(value_type)
148
- @x_value_type = value_type
149
- else
150
- raise ArgumentError, "Unknown X_VALUE_TYPE value: #{value_type}"
151
- end
152
-
153
- when 'Y_VALUE_TYPE'
154
- # Expect 1 parameter
155
- parser.verify_num_parameters(1, 1, "Y_VALUE_TYPE <RAW or CONVERTED>")
156
- value_type = parameters[0].upcase.intern
157
- if VALUE_TYPES.include?(value_type)
158
- @y_value_type = value_type
159
- else
160
- raise ArgumentError, "Unknown Y_VALUE_TYPE value: #{value_type}"
161
- end
162
-
163
- else
164
- # Unknown keywords are passed to parent data object
165
- super(parser, keyword, parameters)
166
-
167
- end # case keyword
168
-
169
- end # def handle_keyword
170
-
171
- # Returns the packet processed by this data object
172
- def processed_packets
173
- if @target_name and @packet_name
174
- [[@target_name, @packet_name]]
175
- else
176
- []
177
- end
178
- end
179
-
180
- # (see DataObject#process_packet)
181
- def process_packet(packet, count)
182
- begin
183
- # Retrieve x, y, and time values from packet
184
- if @x_value_type == :RAW
185
- x_value = packet.read(@x_item_name, :RAW)
186
- else
187
- x_value = packet.read(@x_item_name)
188
- end
189
- if @y_value_type == :RAW
190
- y_value = packet.read(@y_item_name, :RAW)
191
- else
192
- y_value = packet.read(@y_item_name)
193
- end
194
- time_value = packet.read(@time_item_name) if @time_item_name
195
-
196
- @x_values << x_value
197
- @y_values << y_value
198
- @time_values << time_value if @time_item_name
199
-
200
- @plot.redraw_needed = true
201
-
202
- # Prune Data
203
- prune_to_max_points_saved()
204
- rescue Exception => error
205
- raise error if error.class == NoMemoryError
206
- reset()
207
- @error = error
208
- @plot.redraw_needed = true
209
- end
210
- end # def process_packet
211
-
212
- # Returns the name of this data object
213
- def name
214
- if @target_name and @packet_name and @y_item_name and @x_item_name
215
- "#{@target_name} #{@packet_name} #{@y_item_name} VS #{@x_item_name}"
216
- else
217
- ""
218
- end
219
- end
220
-
221
- # Resets the data object
222
- def reset
223
- super()
224
- @x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
225
- @y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
226
- @time_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE) if @time_item_name
227
- end
228
-
229
- # Exports the data objects data
230
- def export
231
- if @time_item_name
232
- [[name().clone, 'Time'].concat(@time_values), [name().clone, 'X'].concat(@x_values), [name().clone, 'Y'].concat(@y_values)]
233
- else
234
- [[name().clone, 'X'].concat(@x_values), [name().clone, 'Y'].concat(@y_values)]
235
- end
236
- end
237
-
238
- # Creates a copy of the data object with settings but without data
239
- def copy
240
- data_object = super()
241
- data_object.target_name = @target_name.clone if @target_name
242
- data_object.packet_name = @packet_name.clone if @packet_name
243
- data_object.x_item_name = @x_item_name.clone if @x_item_name
244
- data_object.y_item_name = @y_item_name.clone if @y_item_name
245
- data_object.time_item_name = @time_item_name.clone if @time_item_name
246
- data_object.x_value_type = @x_value_type
247
- data_object.y_value_type = @y_value_type
248
- data_object
249
- end
250
-
251
- # Determines if changes can be made to the data object without affecting data
252
- #
253
- # @param edited_data_object [DataObject] The data object which was edited
254
- def edit_safe?(editted_data_object)
255
- if @target_name != editted_data_object.target_name or
256
- @packet_name != editted_data_object.packet_name or
257
- @x_item_name != editted_data_object.x_item_name or
258
- @y_item_name != editted_data_object.y_item_name or
259
- @time_item_name != editted_data_object.time_item_name or
260
- @x_value_type != editted_data_object.x_value_type or
261
- @y_value_type != editted_data_object.y_value_type
262
- false
263
- else
264
- super(editted_data_object)
265
- end
266
- end
267
-
268
- # Sets x item
269
- def x_item_name=(x_item_name)
270
- @x_item_name = x_item_name
271
- _, item = System.telemetry.packet_and_item(@target_name, @packet_name, @x_item_name)
272
- @x_states = item.states
273
- if @x_states
274
- @x_value_type = :RAW
275
- else
276
- @x_value_type = :CONVERTED unless @during_configuration
277
- end
278
- end
279
-
280
- # Sets y item
281
- def y_item_name=(y_item_name)
282
- @y_item_name = y_item_name
283
- _, item = System.telemetry.packet_and_item(@target_name, @packet_name, @y_item_name)
284
- @y_states = item.states
285
- if @y_states
286
- @y_value_type = :RAW
287
- else
288
- @y_value_type = :CONVERTED unless @during_configuration
289
- end
290
-
291
- @time_item_name = 'RECEIVED_TIMESECONDS' if !@time_item_name
292
- end
293
-
294
- # Sets time item
295
- def time_item_name=(time_item_name)
296
- @time_item_name = time_item_name
297
- System.telemetry.packet_and_item(@target_name, @packet_name, @time_item_name)
298
- end
299
-
300
- protected
301
-
302
- # (see DataObject#prune_to_max_points_saved)
303
- def prune_to_max_points_saved(force_prune = false)
304
- prune_index = nil
305
- if @max_points_saved
306
- prune_index = @x_values.length - @max_points_saved
307
- if prune_index > @prune_hysterisis or (force_prune and prune_index > 0)
308
- @x_values.remove_before!(prune_index)
309
- @y_values.remove_before!(prune_index)
310
- @time_values.remove_before!(prune_index)
311
- else
312
- prune_index = nil
313
- end
314
- end
315
- prune_index
316
- end
317
-
318
- end # class XyDataObject
319
-
320
- 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/tools/tlm_grapher/data_objects/data_object'
13
+
14
+ module Cosmos
15
+
16
+ # Represents a data object on an XyGraph for two telemetry items
17
+ class XyDataObject < DataObject
18
+
19
+ # Value Types
20
+ VALUE_TYPES = [:RAW, :CONVERTED]
21
+
22
+ # The target name (string)
23
+ attr_accessor :target_name
24
+
25
+ # The packet name (string)
26
+ attr_accessor :packet_name
27
+
28
+ # The x item name (string)
29
+ attr_reader :x_item_name
30
+
31
+ # The y item name (string)
32
+ attr_reader :y_item_name
33
+
34
+ # The time item name (string)
35
+ attr_reader :time_item_name
36
+
37
+ # Type of data to collect for x value - :RAW or :CONVERTED
38
+ attr_accessor :x_value_type
39
+
40
+ # Type of data to collect for y value - :RAW or :CONVERTED
41
+ attr_accessor :y_value_type
42
+
43
+ # Array of x_values to graph on the line graph
44
+ attr_accessor :x_values
45
+
46
+ # Array of y values to graph on the line graph
47
+ attr_accessor :y_values
48
+
49
+ # Array of time values to graph on the line graph
50
+ attr_accessor :time_values
51
+
52
+ # Hash of x states
53
+ attr_accessor :x_states
54
+
55
+ # Hash of y states
56
+ attr_accessor :y_states
57
+
58
+ def initialize
59
+ super()
60
+
61
+ @target_name = nil
62
+ @packet_name = nil
63
+ @x_item_name = nil
64
+ @y_item_name = nil
65
+ @time_item_name = nil
66
+ @x_value_type = :CONVERTED
67
+ @y_value_type = :CONVERTED
68
+
69
+ @x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
70
+ @y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
71
+ @time_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
72
+ @x_states = nil
73
+ @y_states = nil
74
+
75
+ @during_configuration = false
76
+ end
77
+
78
+ # Returns the configuration lines used to create this data object
79
+ def configuration_string
80
+ string = super()
81
+ string << " TARGET #{@target_name}\n" if @target_name
82
+ string << " PACKET #{@packet_name}\n" if @packet_name
83
+ string << " X_ITEM #{@x_item_name}\n" if @x_item_name
84
+ string << " Y_ITEM #{@y_item_name}\n" if @y_item_name
85
+ string << " TIME_ITEM #{@time_item_name}\n" if @time_item_name
86
+ string << " X_VALUE_TYPE #{@x_value_type}\n"
87
+ string << " Y_VALUE_TYPE #{@y_value_type}\n"
88
+ string
89
+ end # def configuration_string
90
+
91
+ # Handles data object specific keywords
92
+ def handle_keyword(parser, keyword, parameters)
93
+ case keyword
94
+ when 'TARGET'
95
+ # Expect 1 parameters
96
+ parser.verify_num_parameters(1, 1, "TARGET <Target Name>")
97
+ unless @target_name
98
+ @target_name = parameters[0].upcase
99
+ else
100
+ raise ArgumentError, "Only one TARGET may be associated with an #{self.class}"
101
+ end
102
+
103
+ when 'PACKET'
104
+ # Expect 1 parameters
105
+ parser.verify_num_parameters(1, 1, "PACKET <Packet Name>")
106
+ unless @packet_name
107
+ @packet_name = parameters[0].upcase
108
+ else
109
+ raise ArgumentError, "Only one PACKET may be associated with an #{self.class}"
110
+ end
111
+
112
+ when 'X_ITEM'
113
+ # Expect 1 parameters
114
+ parser.verify_num_parameters(1, 1, "X_ITEM <X Item Name>")
115
+ unless @x_item_name
116
+ @during_configuration = true
117
+ self.x_item_name = parameters[0]
118
+ @during_configuration = false
119
+ else
120
+ raise ArgumentError, "Only one X_ITEM may be associated with an #{self.class}"
121
+ end
122
+
123
+ when 'Y_ITEM'
124
+ # Expect 1 parameters
125
+ parser.verify_num_parameters(1, 1, "Y_ITEM <Y Item Name>")
126
+ unless @y_item_name
127
+ @during_configuration = true
128
+ self.y_item_name = parameters[0]
129
+ @during_configuration = false
130
+ else
131
+ raise ArgumentError, "Only one Y_ITEM may be associated with an #{self.class}"
132
+ end
133
+
134
+ when 'TIME_ITEM'
135
+ # Expect 1 parameters
136
+ parser.verify_num_parameters(1, 1, "TIME_ITEM <Time Item Name>")
137
+ if @time_item_name and not @y_item_name
138
+ raise ArgumentError, "Only one TIME_ITEM may be associated with an #{self.class}"
139
+ else
140
+ self.time_item_name = parameters[0]
141
+ end
142
+
143
+ when 'X_VALUE_TYPE'
144
+ # Expect 1 parameter
145
+ parser.verify_num_parameters(1, 1, "X_VALUE_TYPE <RAW or CONVERTED>")
146
+ value_type = parameters[0].upcase.intern
147
+ if VALUE_TYPES.include?(value_type)
148
+ @x_value_type = value_type
149
+ else
150
+ raise ArgumentError, "Unknown X_VALUE_TYPE value: #{value_type}"
151
+ end
152
+
153
+ when 'Y_VALUE_TYPE'
154
+ # Expect 1 parameter
155
+ parser.verify_num_parameters(1, 1, "Y_VALUE_TYPE <RAW or CONVERTED>")
156
+ value_type = parameters[0].upcase.intern
157
+ if VALUE_TYPES.include?(value_type)
158
+ @y_value_type = value_type
159
+ else
160
+ raise ArgumentError, "Unknown Y_VALUE_TYPE value: #{value_type}"
161
+ end
162
+
163
+ else
164
+ # Unknown keywords are passed to parent data object
165
+ super(parser, keyword, parameters)
166
+
167
+ end # case keyword
168
+
169
+ end # def handle_keyword
170
+
171
+ # Returns the packet processed by this data object
172
+ def processed_packets
173
+ if @target_name and @packet_name
174
+ [[@target_name, @packet_name]]
175
+ else
176
+ []
177
+ end
178
+ end
179
+
180
+ # (see DataObject#process_packet)
181
+ def process_packet(packet, count)
182
+ begin
183
+ # Retrieve x, y, and time values from packet
184
+ if @x_value_type == :RAW
185
+ x_value = packet.read(@x_item_name, :RAW)
186
+ else
187
+ x_value = packet.read(@x_item_name)
188
+ end
189
+ if @y_value_type == :RAW
190
+ y_value = packet.read(@y_item_name, :RAW)
191
+ else
192
+ y_value = packet.read(@y_item_name)
193
+ end
194
+ # Bail on the values if they are NaN or nil as we can't graph them
195
+ return if x_value.nan? || y_value.nan? || x_value.nil? || y_value.nil?
196
+
197
+ time_value = packet.read(@time_item_name) if @time_item_name
198
+
199
+ @x_values << x_value
200
+ @y_values << y_value
201
+ @time_values << time_value if @time_item_name
202
+
203
+ @plot.redraw_needed = true
204
+
205
+ # Prune Data
206
+ prune_to_max_points_saved()
207
+ rescue Exception => error
208
+ raise error if error.class == NoMemoryError
209
+ reset()
210
+ @error = error
211
+ @plot.redraw_needed = true
212
+ end
213
+ end # def process_packet
214
+
215
+ # Returns the name of this data object
216
+ def name
217
+ if @target_name and @packet_name and @y_item_name and @x_item_name
218
+ "#{@target_name} #{@packet_name} #{@y_item_name} VS #{@x_item_name}"
219
+ else
220
+ ""
221
+ end
222
+ end
223
+
224
+ # Resets the data object
225
+ def reset
226
+ super()
227
+ @x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
228
+ @y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
229
+ @time_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE) if @time_item_name
230
+ end
231
+
232
+ # Exports the data objects data
233
+ def export
234
+ if @time_item_name
235
+ [[name().clone, 'Time'].concat(@time_values), [name().clone, 'X'].concat(@x_values), [name().clone, 'Y'].concat(@y_values)]
236
+ else
237
+ [[name().clone, 'X'].concat(@x_values), [name().clone, 'Y'].concat(@y_values)]
238
+ end
239
+ end
240
+
241
+ # Creates a copy of the data object with settings but without data
242
+ def copy
243
+ data_object = super()
244
+ data_object.target_name = @target_name.clone if @target_name
245
+ data_object.packet_name = @packet_name.clone if @packet_name
246
+ data_object.x_item_name = @x_item_name.clone if @x_item_name
247
+ data_object.y_item_name = @y_item_name.clone if @y_item_name
248
+ data_object.time_item_name = @time_item_name.clone if @time_item_name
249
+ data_object.x_value_type = @x_value_type
250
+ data_object.y_value_type = @y_value_type
251
+ data_object
252
+ end
253
+
254
+ # Determines if changes can be made to the data object without affecting data
255
+ #
256
+ # @param edited_data_object [DataObject] The data object which was edited
257
+ def edit_safe?(editted_data_object)
258
+ if @target_name != editted_data_object.target_name or
259
+ @packet_name != editted_data_object.packet_name or
260
+ @x_item_name != editted_data_object.x_item_name or
261
+ @y_item_name != editted_data_object.y_item_name or
262
+ @time_item_name != editted_data_object.time_item_name or
263
+ @x_value_type != editted_data_object.x_value_type or
264
+ @y_value_type != editted_data_object.y_value_type
265
+ false
266
+ else
267
+ super(editted_data_object)
268
+ end
269
+ end
270
+
271
+ # Sets x item
272
+ def x_item_name=(x_item_name)
273
+ @x_item_name = x_item_name
274
+ _, item = System.telemetry.packet_and_item(@target_name, @packet_name, @x_item_name)
275
+ @x_states = item.states
276
+ if @x_states
277
+ @x_value_type = :RAW
278
+ else
279
+ @x_value_type = :CONVERTED unless @during_configuration
280
+ end
281
+ end
282
+
283
+ # Sets y item
284
+ def y_item_name=(y_item_name)
285
+ @y_item_name = y_item_name
286
+ _, item = System.telemetry.packet_and_item(@target_name, @packet_name, @y_item_name)
287
+ @y_states = item.states
288
+ if @y_states
289
+ @y_value_type = :RAW
290
+ else
291
+ @y_value_type = :CONVERTED unless @during_configuration
292
+ end
293
+
294
+ @time_item_name = 'RECEIVED_TIMESECONDS' if !@time_item_name
295
+ end
296
+
297
+ # Sets time item
298
+ def time_item_name=(time_item_name)
299
+ @time_item_name = time_item_name
300
+ System.telemetry.packet_and_item(@target_name, @packet_name, @time_item_name)
301
+ end
302
+
303
+ protected
304
+
305
+ # (see DataObject#prune_to_max_points_saved)
306
+ def prune_to_max_points_saved(force_prune = false)
307
+ prune_index = nil
308
+ if @max_points_saved
309
+ prune_index = @x_values.length - @max_points_saved
310
+ if prune_index > @prune_hysterisis or (force_prune and prune_index > 0)
311
+ @x_values.remove_before!(prune_index)
312
+ @y_values.remove_before!(prune_index)
313
+ @time_values.remove_before!(prune_index)
314
+ else
315
+ prune_index = nil
316
+ end
317
+ end
318
+ prune_index
319
+ end
320
+
321
+ end # class XyDataObject
322
+
323
+ end # module Cosmos