cosmos 3.5.1 → 3.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1158) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -1
  3. data/.gitattributes +3 -3
  4. data/.gitignore +48 -48
  5. data/.travis.yml +8 -8
  6. data/CONTRIBUTING.txt +50 -50
  7. data/Gemfile +10 -10
  8. data/Guardfile +27 -27
  9. data/LICENSE.txt +879 -879
  10. data/Manifest.txt +1414 -1414
  11. data/README.md +111 -111
  12. data/Rakefile +218 -214
  13. data/autohotkey/config/data/diamond.STL +57 -57
  14. data/autohotkey/config/system/system.txt +34 -34
  15. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  16. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  17. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  18. data/autohotkey/config/targets/COSMOS/target.txt +5 -5
  19. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  20. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -270
  21. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
  22. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
  23. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -305
  24. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
  25. data/autohotkey/config/targets/INST/screens/array.txt +7 -7
  26. data/autohotkey/config/targets/INST/screens/block.txt +8 -8
  27. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
  28. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
  29. data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
  30. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
  31. data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
  32. data/autohotkey/config/targets/INST/screens/image.txt +21 -21
  33. data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
  34. data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
  35. data/autohotkey/config/targets/INST/screens/other.txt +25 -25
  36. data/autohotkey/config/targets/INST/screens/params.txt +25 -25
  37. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
  38. data/autohotkey/config/targets/INST/target.txt +26 -26
  39. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  40. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
  41. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  42. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
  43. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
  44. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
  45. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
  46. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  47. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  48. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  49. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
  50. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  51. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  52. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  53. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  54. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  55. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  56. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  57. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  58. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
  59. data/autohotkey/config/tools/launcher/launcher.txt +38 -38
  60. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
  61. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
  62. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
  63. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
  64. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
  65. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
  66. data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
  67. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  68. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  69. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
  70. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
  71. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
  72. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
  73. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
  74. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
  75. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
  76. data/autohotkey/lib/example_background_task.rb +42 -42
  77. data/autohotkey/lib/user_version.rb +3 -3
  78. data/autohotkey/procedures/clear_util.rb +7 -7
  79. data/autohotkey/procedures/collect_util.rb +14 -14
  80. data/autohotkey/procedures/example_test.rb +67 -67
  81. data/autohotkey/procedures/example_test2.rb +74 -74
  82. data/autohotkey/procedures/script_test.rb +17 -17
  83. data/autohotkey/procedures/syntax_error.rb +18 -18
  84. data/autohotkey/tools/CmdExtractorAHK +16 -16
  85. data/autohotkey/tools/CmdSender +14 -14
  86. data/autohotkey/tools/CmdSenderAHK +18 -18
  87. data/autohotkey/tools/CmdTlmServer +14 -14
  88. data/autohotkey/tools/CmdTlmServerAHK +28 -28
  89. data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
  90. data/autohotkey/tools/DataViewer +14 -14
  91. data/autohotkey/tools/DataViewerAHK +17 -17
  92. data/autohotkey/tools/HandbookCreatorAHK +20 -20
  93. data/autohotkey/tools/LauncherAHK +17 -17
  94. data/autohotkey/tools/LimitsMonitorAHK +20 -20
  95. data/autohotkey/tools/OpenGLBuilderAHK +24 -24
  96. data/autohotkey/tools/PacketViewer +14 -14
  97. data/autohotkey/tools/PacketViewerAHK +18 -18
  98. data/autohotkey/tools/PacketViewerAHK2 +17 -17
  99. data/autohotkey/tools/Replay +14 -14
  100. data/autohotkey/tools/ReplayAHK +17 -17
  101. data/autohotkey/tools/ScriptRunner +14 -14
  102. data/autohotkey/tools/ScriptRunnerAHK +20 -20
  103. data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
  104. data/autohotkey/tools/TableManager +14 -14
  105. data/autohotkey/tools/TableManagerAHK +30 -30
  106. data/autohotkey/tools/TestRunner +15 -15
  107. data/autohotkey/tools/TestRunnerAHK +17 -17
  108. data/autohotkey/tools/TestRunnerAHK2 +17 -17
  109. data/autohotkey/tools/TestRunnerAHK3 +17 -17
  110. data/autohotkey/tools/TestRunnerAHK4 +17 -17
  111. data/autohotkey/tools/TestRunnerAHK5 +17 -17
  112. data/autohotkey/tools/TestRunnerAHK6 +17 -17
  113. data/autohotkey/tools/TlmExtractor +15 -15
  114. data/autohotkey/tools/TlmExtractorAHK +19 -19
  115. data/autohotkey/tools/TlmExtractorAHK2 +16 -16
  116. data/autohotkey/tools/TlmExtractorAHK3 +16 -16
  117. data/autohotkey/tools/TlmGrapher +14 -14
  118. data/autohotkey/tools/TlmGrapherAHK +19 -19
  119. data/autohotkey/tools/TlmGrapherAHK2 +23 -23
  120. data/autohotkey/tools/TlmGrapherAHK3 +17 -17
  121. data/autohotkey/tools/TlmGrapherAHK4 +17 -17
  122. data/autohotkey/tools/TlmViewer +14 -14
  123. data/autohotkey/tools/TlmViewerAHK +28 -28
  124. data/autohotkey/tools/TlmViewerAHK2 +22 -22
  125. data/autohotkey/tools/TlmViewerAHK3 +23 -23
  126. data/autohotkey/tools/TlmViewerAHK4 +22 -22
  127. data/autohotkey/tools/TlmViewerAHK5 +18 -18
  128. data/autohotkey/tools/autohotkey.rb +37 -37
  129. data/autohotkey/tools/cmd_extractor.ahk +33 -33
  130. data/autohotkey/tools/cmd_sender.ahk +182 -182
  131. data/autohotkey/tools/cmd_tlm_server.ahk +90 -90
  132. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
  133. data/autohotkey/tools/data_viewer.ahk +141 -141
  134. data/autohotkey/tools/handbook_creator.ahk +32 -32
  135. data/autohotkey/tools/launcher.ahk +41 -41
  136. data/autohotkey/tools/limits_monitor.ahk +123 -123
  137. data/autohotkey/tools/open_gl_builder.ahk +134 -134
  138. data/autohotkey/tools/packet_viewer.ahk +196 -196
  139. data/autohotkey/tools/packet_viewer2.ahk +9 -9
  140. data/autohotkey/tools/replay.ahk +104 -104
  141. data/autohotkey/tools/script_runner.ahk +589 -589
  142. data/autohotkey/tools/script_runner2.ahk +38 -38
  143. data/autohotkey/tools/table_manager.ahk +220 -220
  144. data/autohotkey/tools/test_runner.ahk +262 -262
  145. data/autohotkey/tools/test_runner2.ahk +53 -53
  146. data/autohotkey/tools/test_runner3.ahk +13 -13
  147. data/autohotkey/tools/test_runner5.ahk +8 -8
  148. data/autohotkey/tools/test_runner6.ahk +5 -5
  149. data/autohotkey/tools/tlm_extractor.ahk +296 -296
  150. data/autohotkey/tools/tlm_grapher.ahk +660 -660
  151. data/autohotkey/tools/tlm_grapher2.ahk +115 -115
  152. data/autohotkey/tools/tlm_grapher3.ahk +24 -24
  153. data/autohotkey/tools/tlm_viewer.ahk +133 -133
  154. data/autohotkey/tools/tlm_viewer2.ahk +50 -50
  155. data/autohotkey/tools/tlm_viewer4.ahk +4 -4
  156. data/autohotkey/tools/tlm_viewer5.ahk +20 -20
  157. data/bin/cosmos +96 -96
  158. data/bin/cstol_converter +1166 -1166
  159. data/bin/rubysloc +85 -85
  160. data/cosmos.gemspec +99 -99
  161. data/data/about.txt +4 -4
  162. data/data/crc.txt +326 -326
  163. data/data/diamond.STL +57 -57
  164. data/data/legal.txt +9 -9
  165. data/demo/Gemfile +10 -10
  166. data/demo/Launcher +16 -16
  167. data/demo/Launcher.bat +0 -0
  168. data/demo/Rakefile +77 -77
  169. data/demo/config/data/crc.txt +224 -226
  170. data/demo/config/data/diamond.STL +57 -57
  171. data/demo/config/data/meta_init.txt +4 -4
  172. data/demo/config/system/system.txt +35 -35
  173. data/demo/config/system/system2.txt +33 -33
  174. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  175. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  176. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  177. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
  178. data/demo/config/targets/COSMOS/screens/version.txt +19 -19
  179. data/demo/config/targets/COSMOS/target.txt +11 -11
  180. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
  181. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -5
  182. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
  183. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
  184. data/demo/config/targets/EXAMPLE/target.txt +6 -6
  185. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  186. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  187. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
  188. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
  189. data/demo/config/targets/INST/lib/sim_inst.rb +305 -305
  190. data/demo/config/targets/INST/screens/adcs.txt +46 -46
  191. data/demo/config/targets/INST/screens/array.txt +15 -15
  192. data/demo/config/targets/INST/screens/block.txt +8 -8
  193. data/demo/config/targets/INST/screens/commanding.txt +30 -30
  194. data/demo/config/targets/INST/screens/graphs.txt +14 -14
  195. data/demo/config/targets/INST/screens/ground.txt +25 -25
  196. data/demo/config/targets/INST/screens/hs.txt +44 -44
  197. data/demo/config/targets/INST/screens/latest.txt +23 -23
  198. data/demo/config/targets/INST/screens/other.txt +29 -29
  199. data/demo/config/targets/INST/screens/tabs.txt +70 -70
  200. data/demo/config/targets/INST/target.txt +33 -33
  201. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  202. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
  203. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  204. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
  205. data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
  206. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -13
  207. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
  208. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
  209. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +56 -56
  210. data/demo/config/targets/TEMPLATED/target.txt +6 -6
  211. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +39 -39
  212. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +34 -34
  213. data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
  214. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
  215. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -88
  216. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  217. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  218. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
  219. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  220. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  221. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  222. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  223. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  224. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  225. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -82
  226. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  227. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
  228. data/demo/config/tools/launcher/launcher.txt +45 -45
  229. data/demo/config/tools/launcher/launcher2.txt +45 -45
  230. data/demo/config/tools/script_runner/script_runner.txt +3 -3
  231. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
  232. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  233. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  234. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  235. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  236. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  237. data/demo/config/tools/test_runner/test_runner.txt +17 -17
  238. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  239. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  240. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  241. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  242. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
  243. data/demo/lib/example_background_task.rb +57 -57
  244. data/demo/lib/example_target.rb +113 -113
  245. data/demo/lib/scpi_target.rb +74 -74
  246. data/demo/lib/user_version.rb +3 -3
  247. data/demo/procedures/checks.rb +11 -11
  248. data/demo/procedures/clear_util.rb +7 -7
  249. data/demo/procedures/collect.rb +18 -18
  250. data/demo/procedures/collect_util.rb +14 -14
  251. data/demo/procedures/cosmos_api_test.rb +293 -293
  252. data/demo/procedures/disconnect.rb +29 -29
  253. data/demo/procedures/example_test.rb +183 -183
  254. data/demo/procedures/plot_test.rb +8 -8
  255. data/demo/procedures/run_example_test.rb +3 -3
  256. data/demo/procedures/test.rb +51 -51
  257. data/demo/tools/CmdExtractor +16 -16
  258. data/demo/tools/CmdExtractor.bat +0 -0
  259. data/demo/tools/CmdSender +16 -16
  260. data/demo/tools/CmdSender.bat +0 -0
  261. data/demo/tools/CmdTlmServer +16 -16
  262. data/demo/tools/CmdTlmServer.bat +0 -0
  263. data/demo/tools/DataViewer +16 -16
  264. data/demo/tools/DataViewer.bat +0 -0
  265. data/demo/tools/ExampleTarget +16 -16
  266. data/demo/tools/ExampleTarget.bat +0 -0
  267. data/demo/tools/HandbookCreator +16 -16
  268. data/demo/tools/HandbookCreator.bat +0 -0
  269. data/demo/tools/Launcher +16 -16
  270. data/demo/tools/Launcher.bat +0 -0
  271. data/demo/tools/LimitsMonitor +16 -16
  272. data/demo/tools/LimitsMonitor.bat +0 -0
  273. data/demo/tools/OpenGLBuilder +16 -16
  274. data/demo/tools/OpenGLBuilder.bat +0 -0
  275. data/demo/tools/PacketViewer +16 -16
  276. data/demo/tools/PacketViewer.bat +0 -0
  277. data/demo/tools/Replay +16 -16
  278. data/demo/tools/Replay.bat +0 -0
  279. data/demo/tools/ScpiTarget +16 -16
  280. data/demo/tools/ScpiTarget.bat +0 -0
  281. data/demo/tools/ScriptRunner +16 -16
  282. data/demo/tools/ScriptRunner.bat +0 -0
  283. data/demo/tools/TableManager +16 -16
  284. data/demo/tools/TableManager.bat +0 -0
  285. data/demo/tools/TestRunner +16 -16
  286. data/demo/tools/TestRunner.bat +0 -0
  287. data/demo/tools/TlmExtractor +16 -16
  288. data/demo/tools/TlmExtractor.bat +0 -0
  289. data/demo/tools/TlmGrapher +16 -16
  290. data/demo/tools/TlmGrapher.bat +0 -0
  291. data/demo/tools/TlmViewer +16 -16
  292. data/demo/tools/TlmViewer.bat +0 -0
  293. data/demo/tools/ToolLaunch.bat +14 -5
  294. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  295. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  296. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  297. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  298. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  299. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  300. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  301. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  302. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  303. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  304. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  305. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  306. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  307. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  308. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  309. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  310. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  311. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  312. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  313. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  314. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  315. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  316. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  317. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  318. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  319. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  320. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  321. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  322. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  323. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  324. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  325. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  326. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  327. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  328. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  329. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  330. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
  331. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  332. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  333. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  334. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  335. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  336. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  337. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  338. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  339. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  340. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  341. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  342. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  343. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  344. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  345. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  346. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  347. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  348. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  349. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  350. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  351. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  352. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  353. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  354. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  355. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  356. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  357. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  358. data/demo/tools/tool_launch.rb +38 -38
  359. data/ext/cosmos/ext/array/array.c +111 -111
  360. data/ext/cosmos/ext/array/extconf.rb +13 -13
  361. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
  362. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
  363. data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
  364. data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
  365. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
  366. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
  367. data/ext/cosmos/ext/crc/crc.c +341 -341
  368. data/ext/cosmos/ext/crc/extconf.rb +12 -12
  369. data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
  370. data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
  371. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
  372. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -265
  373. data/ext/cosmos/ext/packet/extconf.rb +13 -13
  374. data/ext/cosmos/ext/packet/packet.c +339 -339
  375. data/ext/cosmos/ext/platform/extconf.rb +13 -13
  376. data/ext/cosmos/ext/platform/platform.c +101 -101
  377. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
  378. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
  379. data/ext/cosmos/ext/string/extconf.rb +13 -13
  380. data/ext/cosmos/ext/string/string.c +49 -49
  381. data/ext/cosmos/ext/structure/structure.c +1428 -1428
  382. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
  383. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
  384. data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
  385. data/ext/cosmos/ext/telemetry/telemetry.c +307 -307
  386. data/ext/mkrf_conf.rb +40 -40
  387. data/install/Gemfile +10 -10
  388. data/install/Launcher +16 -16
  389. data/install/Launcher.bat +0 -0
  390. data/install/Rakefile +77 -77
  391. data/install/config/data/crc.txt +151 -151
  392. data/install/config/system/system.txt +29 -29
  393. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  394. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  395. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  396. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  397. data/install/config/targets/COSMOS/screens/version.txt +19 -19
  398. data/install/config/targets/COSMOS/target.txt +8 -8
  399. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  400. data/install/config/tools/data_viewer/data_viewer.txt +3 -3
  401. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
  402. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  403. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  404. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  405. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
  406. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  407. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  408. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  409. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  410. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  411. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  412. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  413. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  414. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
  415. data/install/config/tools/launcher/launcher.txt +40 -40
  416. data/install/config/tools/script_runner/script_runner.txt +3 -3
  417. data/install/config/tools/test_runner/test_runner.txt +8 -8
  418. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  419. data/install/lib/user_version.rb +3 -3
  420. data/install/tools/CmdExtractor +16 -16
  421. data/install/tools/CmdExtractor.bat +0 -0
  422. data/install/tools/CmdSender +16 -16
  423. data/install/tools/CmdSender.bat +0 -0
  424. data/install/tools/CmdTlmServer +16 -16
  425. data/install/tools/CmdTlmServer.bat +0 -0
  426. data/install/tools/DataViewer +16 -16
  427. data/install/tools/DataViewer.bat +0 -0
  428. data/install/tools/HandbookCreator +16 -16
  429. data/install/tools/HandbookCreator.bat +0 -0
  430. data/install/tools/Launcher +16 -16
  431. data/install/tools/Launcher.bat +0 -0
  432. data/install/tools/LimitsMonitor +16 -16
  433. data/install/tools/LimitsMonitor.bat +0 -0
  434. data/install/tools/OpenGLBuilder +16 -16
  435. data/install/tools/OpenGLBuilder.bat +0 -0
  436. data/install/tools/PacketViewer +16 -16
  437. data/install/tools/PacketViewer.bat +0 -0
  438. data/install/tools/Replay +16 -16
  439. data/install/tools/Replay.bat +0 -0
  440. data/install/tools/ScriptRunner +16 -16
  441. data/install/tools/ScriptRunner.bat +0 -0
  442. data/install/tools/TableManager +16 -16
  443. data/install/tools/TableManager.bat +0 -0
  444. data/install/tools/TestRunner +16 -16
  445. data/install/tools/TestRunner.bat +0 -0
  446. data/install/tools/TlmExtractor +16 -16
  447. data/install/tools/TlmExtractor.bat +0 -0
  448. data/install/tools/TlmGrapher +16 -16
  449. data/install/tools/TlmGrapher.bat +0 -0
  450. data/install/tools/TlmViewer +16 -16
  451. data/install/tools/TlmViewer.bat +0 -0
  452. data/install/tools/ToolLaunch.bat +14 -5
  453. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  454. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  455. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  456. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  457. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  458. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  459. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  460. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  461. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  462. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  463. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  464. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  465. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  466. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  467. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  468. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  469. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  470. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  471. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  472. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  473. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  474. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  475. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  476. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  477. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  478. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  479. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  480. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  481. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  482. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  483. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  484. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  485. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  486. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  487. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  488. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  489. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
  490. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  491. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  492. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  493. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  494. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  495. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  496. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  497. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  498. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  499. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  500. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  501. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  502. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  503. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  504. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  505. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  506. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  507. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  508. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  509. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  510. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  511. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  512. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  513. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  514. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  515. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  516. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  517. data/install/tools/tool_launch.rb +38 -38
  518. data/lib/cosmos.rb +63 -63
  519. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
  520. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
  521. data/lib/cosmos/config/config_parser.rb +324 -324
  522. data/lib/cosmos/conversions.rb +13 -13
  523. data/lib/cosmos/conversions/conversion.rb +47 -47
  524. data/lib/cosmos/conversions/generic_conversion.rb +55 -55
  525. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
  526. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
  527. data/lib/cosmos/conversions/processor_conversion.rb +46 -46
  528. data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
  529. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
  530. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
  531. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
  532. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
  533. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
  534. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
  535. data/lib/cosmos/core_ext.rb +18 -18
  536. data/lib/cosmos/core_ext/array.rb +354 -354
  537. data/lib/cosmos/core_ext/class.rb +51 -51
  538. data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
  539. data/lib/cosmos/core_ext/exception.rb +52 -52
  540. data/lib/cosmos/core_ext/file.rb +75 -75
  541. data/lib/cosmos/core_ext/hash.rb +28 -28
  542. data/lib/cosmos/core_ext/io.rb +75 -75
  543. data/lib/cosmos/core_ext/kernel.rb +38 -38
  544. data/lib/cosmos/core_ext/math.rb +119 -119
  545. data/lib/cosmos/core_ext/matrix.rb +146 -146
  546. data/lib/cosmos/core_ext/objectspace.rb +29 -29
  547. data/lib/cosmos/core_ext/range.rb +22 -22
  548. data/lib/cosmos/core_ext/socket.rb +32 -32
  549. data/lib/cosmos/core_ext/string.rb +311 -311
  550. data/lib/cosmos/core_ext/stringio.rb +24 -24
  551. data/lib/cosmos/core_ext/time.rb +448 -448
  552. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
  553. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
  554. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
  555. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
  556. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
  557. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -326
  558. data/lib/cosmos/gui/dialogs/about_dialog.rb +137 -137
  559. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
  560. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
  561. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
  562. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
  563. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
  564. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
  565. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +260 -260
  566. data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -169
  567. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
  568. data/lib/cosmos/gui/dialogs/progress_dialog.rb +276 -276
  569. data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -165
  570. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
  571. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
  572. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
  573. data/lib/cosmos/gui/dialogs/splash.rb +135 -135
  574. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
  575. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
  576. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
  577. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
  578. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +473 -473
  579. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
  580. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +451 -451
  581. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
  582. data/lib/cosmos/gui/line_graph/lines.rb +290 -290
  583. data/lib/cosmos/gui/line_graph/overview_graph.rb +469 -469
  584. data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
  585. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
  586. data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
  587. data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
  588. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
  589. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
  590. data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -724
  591. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
  592. data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
  593. data/lib/cosmos/gui/opengl/opengl.rb +8 -8
  594. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
  595. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
  596. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
  597. data/lib/cosmos/gui/qt.rb +860 -860
  598. data/lib/cosmos/gui/qt_tool.rb +380 -380
  599. data/lib/cosmos/gui/text/completion.rb +381 -381
  600. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
  601. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
  602. data/lib/cosmos/gui/text/ruby_editor.rb +415 -415
  603. data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
  604. data/lib/cosmos/gui/utilities/script_module_gui.rb +330 -330
  605. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
  606. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
  607. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
  608. data/lib/cosmos/interfaces.rb +11 -11
  609. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -153
  610. data/lib/cosmos/interfaces/interface.rb +225 -225
  611. data/lib/cosmos/interfaces/linc_interface.rb +360 -360
  612. data/lib/cosmos/interfaces/serial_interface.rb +76 -76
  613. data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -129
  614. data/lib/cosmos/interfaces/stream_interface.rb +136 -136
  615. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
  616. data/lib/cosmos/interfaces/tcpip_server_interface.rb +164 -164
  617. data/lib/cosmos/interfaces/udp_interface.rb +161 -161
  618. data/lib/cosmos/io/buffered_file.rb +11 -11
  619. data/lib/cosmos/io/cosmos_snmp.rb +50 -50
  620. data/lib/cosmos/io/io_multiplexer.rb +89 -89
  621. data/lib/cosmos/io/json_drb.rb +376 -376
  622. data/lib/cosmos/io/json_drb_object.rb +198 -198
  623. data/lib/cosmos/io/json_rpc.rb +365 -365
  624. data/lib/cosmos/io/posix_serial_driver.rb +145 -145
  625. data/lib/cosmos/io/raw_logger.rb +174 -174
  626. data/lib/cosmos/io/raw_logger_pair.rb +71 -71
  627. data/lib/cosmos/io/serial_driver.rb +85 -85
  628. data/lib/cosmos/io/stderr.rb +36 -36
  629. data/lib/cosmos/io/stdout.rb +36 -36
  630. data/lib/cosmos/io/tcpip_server.rb +571 -571
  631. data/lib/cosmos/io/udp_sockets.rb +152 -152
  632. data/lib/cosmos/io/win32_serial_driver.rb +145 -145
  633. data/lib/cosmos/packet_logs.rb +7 -7
  634. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -104
  635. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
  636. data/lib/cosmos/packet_logs/packet_log_reader.rb +450 -450
  637. data/lib/cosmos/packet_logs/packet_log_writer.rb +323 -323
  638. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
  639. data/lib/cosmos/packets/binary_accessor.rb +634 -634
  640. data/lib/cosmos/packets/commands.rb +293 -293
  641. data/lib/cosmos/packets/limits.rb +267 -267
  642. data/lib/cosmos/packets/limits_response.rb +38 -38
  643. data/lib/cosmos/packets/packet.rb +786 -786
  644. data/lib/cosmos/packets/packet_config.rb +482 -482
  645. data/lib/cosmos/packets/packet_item.rb +317 -317
  646. data/lib/cosmos/packets/packet_item_limits.rb +128 -128
  647. data/lib/cosmos/packets/parsers/format_string_parser.rb +58 -58
  648. data/lib/cosmos/packets/parsers/limits_parser.rb +146 -146
  649. data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -52
  650. data/lib/cosmos/packets/parsers/macro_parser.rb +116 -116
  651. data/lib/cosmos/packets/parsers/packet_item_parser.rb +215 -215
  652. data/lib/cosmos/packets/parsers/packet_parser.rb +123 -123
  653. data/lib/cosmos/packets/parsers/processor_parser.rb +63 -63
  654. data/lib/cosmos/packets/parsers/state_parser.rb +116 -116
  655. data/lib/cosmos/packets/structure.rb +458 -458
  656. data/lib/cosmos/packets/structure_item.rb +233 -233
  657. data/lib/cosmos/packets/telemetry.rb +350 -350
  658. data/lib/cosmos/processors.rb +6 -6
  659. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
  660. data/lib/cosmos/processors/processor.rb +71 -71
  661. data/lib/cosmos/processors/statistics_processor.rb +65 -65
  662. data/lib/cosmos/processors/watermark_processor.rb +44 -44
  663. data/lib/cosmos/script.rb +9 -9
  664. data/lib/cosmos/script/cmd_tlm_server.rb +110 -110
  665. data/lib/cosmos/script/commands.rb +184 -184
  666. data/lib/cosmos/script/extract.rb +123 -123
  667. data/lib/cosmos/script/limits.rb +114 -114
  668. data/lib/cosmos/script/script.rb +76 -76
  669. data/lib/cosmos/script/scripting.rb +897 -897
  670. data/lib/cosmos/script/telemetry.rb +174 -174
  671. data/lib/cosmos/script/tools.rb +138 -138
  672. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
  673. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
  674. data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
  675. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
  676. data/lib/cosmos/streams/serial_stream.rb +157 -157
  677. data/lib/cosmos/streams/stream.rb +63 -63
  678. data/lib/cosmos/streams/stream_protocol.rb +373 -373
  679. data/lib/cosmos/streams/tcpip_client_stream.rb +113 -113
  680. data/lib/cosmos/streams/tcpip_socket_stream.rb +143 -143
  681. data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
  682. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
  683. data/lib/cosmos/system.rb +4 -4
  684. data/lib/cosmos/system/system.rb +618 -618
  685. data/lib/cosmos/system/target.rb +197 -197
  686. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +255 -255
  687. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +717 -717
  688. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
  689. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
  690. data/lib/cosmos/tools/cmd_tlm_server/api.rb +1034 -1034
  691. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
  692. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -67
  693. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +515 -515
  694. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +253 -253
  695. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +408 -408
  696. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
  697. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -175
  698. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +200 -200
  699. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -176
  700. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +150 -150
  701. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +244 -244
  702. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +90 -90
  703. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +266 -266
  704. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
  705. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
  706. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
  707. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
  708. data/lib/cosmos/tools/data_viewer/data_viewer.rb +621 -621
  709. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +134 -134
  710. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
  711. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -156
  712. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -382
  713. data/lib/cosmos/tools/launcher/launcher.rb +188 -188
  714. data/lib/cosmos/tools/launcher/launcher_config.rb +256 -256
  715. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -40
  716. data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -116
  717. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +837 -837
  718. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
  719. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
  720. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +542 -542
  721. data/lib/cosmos/tools/replay/replay.rb +501 -501
  722. data/lib/cosmos/tools/replay/replay_server.rb +91 -91
  723. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -147
  724. data/lib/cosmos/tools/script_runner/script_runner.rb +922 -922
  725. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
  726. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1798 -1798
  727. data/lib/cosmos/tools/table_manager/table.rb +70 -70
  728. data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
  729. data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
  730. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
  731. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
  732. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
  733. data/lib/cosmos/tools/test_runner/test.rb +539 -539
  734. data/lib/cosmos/tools/test_runner/test_runner.rb +1189 -1189
  735. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -341
  736. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
  737. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1016 -1016
  738. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
  739. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
  740. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
  741. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
  742. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -95
  743. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
  744. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +181 -181
  745. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
  746. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
  747. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -174
  748. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -193
  749. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +407 -407
  750. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
  751. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
  752. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -323
  753. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
  754. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
  755. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
  756. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
  757. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
  758. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
  759. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
  760. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
  761. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
  762. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
  763. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
  764. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -1291
  765. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
  766. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
  767. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -114
  768. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
  769. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -78
  770. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
  771. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
  772. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
  773. data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -486
  774. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +561 -561
  775. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +290 -290
  776. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
  777. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
  778. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -66
  779. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -57
  780. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
  781. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
  782. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
  783. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
  784. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
  785. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
  786. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
  787. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
  788. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
  789. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
  790. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
  791. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
  792. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
  793. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
  794. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
  795. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
  796. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
  797. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
  798. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
  799. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
  800. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
  801. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
  802. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
  803. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
  804. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
  805. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
  806. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
  807. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
  808. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
  809. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
  810. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
  811. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
  812. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
  813. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
  814. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
  815. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
  816. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
  817. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
  818. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
  819. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
  820. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
  821. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
  822. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
  823. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
  824. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
  825. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
  826. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
  827. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
  828. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
  829. data/lib/cosmos/top_level.rb +759 -759
  830. data/lib/cosmos/utilities.rb +11 -11
  831. data/lib/cosmos/utilities/crc.rb +166 -166
  832. data/lib/cosmos/utilities/csv.rb +83 -83
  833. data/lib/cosmos/utilities/logger.rb +137 -137
  834. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
  835. data/lib/cosmos/utilities/message_log.rb +79 -79
  836. data/lib/cosmos/utilities/quaternion.rb +258 -258
  837. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
  838. data/lib/cosmos/utilities/simulated_target.rb +99 -99
  839. data/lib/cosmos/utilities/sleeper.rb +44 -44
  840. data/lib/cosmos/version.rb +12 -12
  841. data/lib/cosmos/win32/excel.rb +66 -66
  842. data/lib/cosmos/win32/win32.rb +387 -387
  843. data/lib/cosmos/win32/win32_main.rb +321 -321
  844. data/roodi.yml +24 -24
  845. data/run_gui_tests.bat +0 -0
  846. data/spec/ccsds/ccsds_packet_spec.rb +67 -67
  847. data/spec/ccsds/ccsds_parser_spec.rb +148 -148
  848. data/spec/config/config_parser_spec.rb +322 -322
  849. data/spec/conversions/conversion_spec.rb +31 -31
  850. data/spec/conversions/generic_conversion_spec.rb +45 -45
  851. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
  852. data/spec/conversions/polynomial_conversion_spec.rb +40 -40
  853. data/spec/conversions/processor_conversion_spec.rb +45 -45
  854. data/spec/conversions/received_count_conversion_spec.rb +43 -43
  855. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
  856. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
  857. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
  858. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
  859. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
  860. data/spec/core_ext/array_spec.rb +186 -186
  861. data/spec/core_ext/class_spec.rb +36 -36
  862. data/spec/core_ext/cosmos_io_spec.rb +77 -77
  863. data/spec/core_ext/exception_spec.rb +91 -91
  864. data/spec/core_ext/file_spec.rb +72 -72
  865. data/spec/core_ext/hash_spec.rb +24 -24
  866. data/spec/core_ext/io_spec.rb +46 -46
  867. data/spec/core_ext/kernel_spec.rb +54 -54
  868. data/spec/core_ext/math_spec.rb +116 -116
  869. data/spec/core_ext/matrix_spec.rb +66 -66
  870. data/spec/core_ext/objectspace_spec.rb +29 -29
  871. data/spec/core_ext/range_spec.rb +21 -21
  872. data/spec/core_ext/socket_spec.rb +32 -32
  873. data/spec/core_ext/string_spec.rb +223 -223
  874. data/spec/core_ext/stringio_spec.rb +21 -21
  875. data/spec/core_ext/time_spec.rb +202 -202
  876. data/spec/gui/line_graph/line_clip_spec.rb +322 -322
  877. data/spec/gui/qt_spec.rb +102 -102
  878. data/spec/install/config/system/system.txt +33 -33
  879. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  880. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  881. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  882. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  883. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
  884. data/spec/install/config/targets/COSMOS/target.txt +5 -5
  885. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
  886. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
  887. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
  888. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
  889. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
  890. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -305
  891. data/spec/install/config/targets/INST/target.txt +10 -10
  892. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
  893. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
  894. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  895. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
  896. data/spec/interfaces/interface_spec.rb +130 -130
  897. data/spec/interfaces/linc_interface_spec.rb +259 -259
  898. data/spec/interfaces/serial_interface_spec.rb +56 -56
  899. data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
  900. data/spec/interfaces/stream_interface_spec.rb +157 -157
  901. data/spec/interfaces/tcpip_client_interface_spec.rb +55 -55
  902. data/spec/interfaces/tcpip_server_interface_spec.rb +160 -160
  903. data/spec/interfaces/udp_interface_spec.rb +175 -175
  904. data/spec/io/buffered_file_spec.rb +113 -113
  905. data/spec/io/io_multiplexer_spec.rb +94 -94
  906. data/spec/io/json_drb_object_spec.rb +119 -119
  907. data/spec/io/json_drb_spec.rb +311 -311
  908. data/spec/io/json_rpc_spec.rb +264 -264
  909. data/spec/io/raw_logger_pair_spec.rb +76 -76
  910. data/spec/io/raw_logger_spec.rb +133 -133
  911. data/spec/io/serial_driver_spec.rb +60 -60
  912. data/spec/io/stderr_spec.rb +32 -32
  913. data/spec/io/stdout_spec.rb +32 -32
  914. data/spec/io/tcpip_server_spec.rb +338 -338
  915. data/spec/io/udp_sockets_spec.rb +94 -94
  916. data/spec/io/win32_serial_driver_spec.rb +88 -88
  917. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
  918. data/spec/packet_logs/packet_log_reader_spec.rb +468 -468
  919. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
  920. data/spec/packet_logs/packet_log_writer_spec.rb +225 -225
  921. data/spec/packets/binary_accessor_spec.rb +2326 -2326
  922. data/spec/packets/commands_spec.rb +369 -369
  923. data/spec/packets/limits_response_spec.rb +25 -25
  924. data/spec/packets/limits_spec.rb +344 -344
  925. data/spec/packets/packet_config_spec.rb +805 -805
  926. data/spec/packets/packet_item_limits_spec.rb +161 -161
  927. data/spec/packets/packet_item_spec.rb +386 -386
  928. data/spec/packets/packet_spec.rb +1317 -1317
  929. data/spec/packets/parsers/format_string_parser_spec.rb +122 -122
  930. data/spec/packets/parsers/limits_parser_spec.rb +282 -282
  931. data/spec/packets/parsers/limits_response_parser_spec.rb +149 -149
  932. data/spec/packets/parsers/macro_parser_spec.rb +212 -212
  933. data/spec/packets/parsers/packet_item_parser_spec.rb +306 -306
  934. data/spec/packets/parsers/packet_parser_spec.rb +99 -99
  935. data/spec/packets/parsers/processor_parser_spec.rb +114 -114
  936. data/spec/packets/parsers/state_parser_spec.rb +156 -156
  937. data/spec/packets/structure_item_spec.rb +195 -195
  938. data/spec/packets/structure_spec.rb +565 -565
  939. data/spec/packets/telemetry_spec.rb +578 -578
  940. data/spec/processors/new_packet_log_processor_spec.rb +39 -39
  941. data/spec/processors/processor_spec.rb +55 -55
  942. data/spec/processors/statistics_processor_spec.rb +60 -60
  943. data/spec/processors/watermark_processor_spec.rb +51 -51
  944. data/spec/script/cmd_tlm_server_spec.rb +110 -110
  945. data/spec/script/commands_disconnect_spec.rb +270 -270
  946. data/spec/script/commands_spec.rb +302 -302
  947. data/spec/script/limits_spec.rb +153 -153
  948. data/spec/script/script_spec.rb +86 -86
  949. data/spec/script/scripting_spec.rb +440 -440
  950. data/spec/script/telemetry_spec.rb +165 -165
  951. data/spec/script/tools_spec.rb +117 -117
  952. data/spec/spec_helper.rb +190 -190
  953. data/spec/streams/burst_stream_protocol_spec.rb +32 -32
  954. data/spec/streams/fixed_stream_protocol_spec.rb +113 -113
  955. data/spec/streams/length_stream_protocol_spec.rb +300 -300
  956. data/spec/streams/preidentified_stream_protocol_spec.rb +121 -121
  957. data/spec/streams/serial_stream_spec.rb +117 -117
  958. data/spec/streams/stream_protocol_spec.rb +346 -346
  959. data/spec/streams/stream_spec.rb +30 -30
  960. data/spec/streams/tcpip_client_stream_spec.rb +57 -57
  961. data/spec/streams/tcpip_socket_stream_spec.rb +193 -193
  962. data/spec/streams/template_stream_protocol_spec.rb +156 -156
  963. data/spec/streams/terminated_stream_protocol_spec.rb +127 -127
  964. data/spec/system/system_spec.rb +665 -665
  965. data/spec/system/target_spec.rb +250 -250
  966. data/spec/tools/cmd_tlm_server/api_spec.rb +1117 -1117
  967. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
  968. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
  969. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +453 -453
  970. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
  971. data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -151
  972. data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -235
  973. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
  974. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -252
  975. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
  976. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +151 -151
  977. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -223
  978. data/spec/tools/launcher/launcher_config_spec.rb +464 -464
  979. data/spec/top_level/top_level_spec.rb +334 -334
  980. data/spec/utilities/crc_spec.rb +45 -45
  981. data/spec/utilities/csv_spec.rb +97 -97
  982. data/spec/utilities/logger_spec.rb +102 -102
  983. data/spec/utilities/message_log_spec.rb +89 -89
  984. data/spec/utilities/quaternion_spec.rb +107 -107
  985. data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
  986. data/tasks/manifest.rake +22 -22
  987. data/tasks/spec.rake +23 -23
  988. data/test/benchmarks/binary_accessor_benchmark.rb +14 -14
  989. data/test/benchmarks/gsub_benchmark.rb +152 -152
  990. data/test/benchmarks/is_a_benchmark.rb +34 -34
  991. data/test/performance/PACKETS.bat +0 -0
  992. data/test/performance/Rakefile +77 -77
  993. data/test/performance/THREADS.bat +0 -0
  994. data/test/performance/config/data/crc.txt +196 -196
  995. data/test/performance/config/data/diamond.STL +57 -57
  996. data/test/performance/config/data/meta_init.txt +4 -4
  997. data/test/performance/config/system/system_packets.txt +39 -39
  998. data/test/performance/config/system/system_threads.txt +59 -59
  999. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -46
  1000. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  1001. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  1002. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -20
  1003. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -19
  1004. data/test/performance/config/targets/COSMOS/target.txt +11 -11
  1005. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -20
  1006. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -98
  1007. data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -6
  1008. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -22
  1009. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -24
  1010. data/test/performance/config/targets/PACKET/screens/status.txt +25 -25
  1011. data/test/performance/config/targets/PACKET/target.txt +28 -28
  1012. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -12
  1013. data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -17
  1014. data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -18
  1015. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -6
  1016. data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -22
  1017. data/test/performance/config/targets/THREAD/screens/status.txt +25 -25
  1018. data/test/performance/config/targets/THREAD/target.txt +6 -6
  1019. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -28
  1020. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -68
  1021. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -11
  1022. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -66
  1023. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  1024. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  1025. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  1026. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -25
  1027. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  1028. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  1029. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  1030. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  1031. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  1032. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  1033. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  1034. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  1035. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -1
  1036. data/test/performance/config/tools/launcher/launcher_packets.txt +34 -34
  1037. data/test/performance/config/tools/launcher/launcher_threads.txt +83 -83
  1038. data/test/performance/config/tools/script_runner/script_runner.txt +3 -3
  1039. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -8
  1040. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  1041. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  1042. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  1043. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  1044. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  1045. data/test/performance/config/tools/test_runner/test_runner.txt +17 -17
  1046. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  1047. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  1048. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  1049. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  1050. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -204
  1051. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -13
  1052. data/test/performance/lib/packet_target.rb +126 -126
  1053. data/test/performance/lib/thread_target.rb +120 -120
  1054. data/test/performance/lib/user_version.rb +3 -3
  1055. data/test/performance/procedures/checks.rb +11 -11
  1056. data/test/performance/procedures/clear_util.rb +7 -7
  1057. data/test/performance/procedures/collect.rb +18 -18
  1058. data/test/performance/procedures/collect_util.rb +14 -14
  1059. data/test/performance/procedures/cosmos_api_test.rb +293 -293
  1060. data/test/performance/procedures/disconnect.rb +29 -29
  1061. data/test/performance/procedures/example_test.rb +182 -182
  1062. data/test/performance/procedures/plot_test.rb +8 -8
  1063. data/test/performance/procedures/procedure.rb +2 -2
  1064. data/test/performance/procedures/run_example_test.rb +3 -3
  1065. data/test/performance/procedures/test.rb +51 -51
  1066. data/test/performance/tools/CmdExtractor +14 -14
  1067. data/test/performance/tools/CmdExtractor.bat +0 -0
  1068. data/test/performance/tools/CmdSender +14 -14
  1069. data/test/performance/tools/CmdSender.bat +0 -0
  1070. data/test/performance/tools/CmdTlmServer +16 -16
  1071. data/test/performance/tools/CmdTlmServer.bat +0 -0
  1072. data/test/performance/tools/CmdTlmServerMemProf +20 -20
  1073. data/test/performance/tools/CmdTlmServerMemProf.bat +0 -0
  1074. data/test/performance/tools/DataViewer +14 -14
  1075. data/test/performance/tools/DataViewer.bat +0 -0
  1076. data/test/performance/tools/HandbookCreator +14 -14
  1077. data/test/performance/tools/HandbookCreator.bat +0 -0
  1078. data/test/performance/tools/Launcher +14 -14
  1079. data/test/performance/tools/Launcher.bat +0 -0
  1080. data/test/performance/tools/LimitsMonitor +14 -14
  1081. data/test/performance/tools/LimitsMonitor.bat +0 -0
  1082. data/test/performance/tools/OpenGLBuilder +14 -14
  1083. data/test/performance/tools/OpenGLBuilder.bat +0 -0
  1084. data/test/performance/tools/PacketTarget +14 -14
  1085. data/test/performance/tools/PacketTarget.bat +0 -0
  1086. data/test/performance/tools/PacketViewer +14 -14
  1087. data/test/performance/tools/PacketViewer.bat +0 -0
  1088. data/test/performance/tools/Replay +14 -14
  1089. data/test/performance/tools/Replay.bat +0 -0
  1090. data/test/performance/tools/ScpiTarget +14 -14
  1091. data/test/performance/tools/ScpiTarget.bat +0 -0
  1092. data/test/performance/tools/ScriptRunner +14 -14
  1093. data/test/performance/tools/ScriptRunner.bat +0 -0
  1094. data/test/performance/tools/TableManager +14 -14
  1095. data/test/performance/tools/TableManager.bat +0 -0
  1096. data/test/performance/tools/TestRunner +14 -14
  1097. data/test/performance/tools/TestRunner.bat +0 -0
  1098. data/test/performance/tools/ThreadTarget +14 -14
  1099. data/test/performance/tools/ThreadTarget.bat +0 -0
  1100. data/test/performance/tools/TlmExtractor +14 -14
  1101. data/test/performance/tools/TlmExtractor.bat +0 -0
  1102. data/test/performance/tools/TlmGrapher +14 -14
  1103. data/test/performance/tools/TlmGrapher.bat +0 -0
  1104. data/test/performance/tools/TlmGrapherMemProf +19 -19
  1105. data/test/performance/tools/TlmGrapherMemProf.bat +0 -0
  1106. data/test/performance/tools/TlmViewer +14 -14
  1107. data/test/performance/tools/TlmViewer.bat +0 -0
  1108. data/test/performance/tools/TlmViewerMemProf +19 -19
  1109. data/test/performance/tools/TlmViewerMemProf.bat +0 -0
  1110. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  1111. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  1112. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  1113. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  1114. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  1115. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  1116. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  1117. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  1118. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  1119. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  1120. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  1121. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  1122. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  1123. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  1124. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  1125. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  1126. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  1127. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  1128. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  1129. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  1130. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  1131. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  1132. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  1133. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  1134. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  1135. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  1136. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  1137. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -38
  1138. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  1139. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  1140. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  1141. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  1142. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  1143. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  1144. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  1145. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  1146. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  1147. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  1148. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  1149. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  1150. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  1151. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  1152. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  1153. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  1154. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  1155. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  1156. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  1157. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  1158. metadata +3 -3
@@ -1,193 +1,193 @@
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
-
13
- module Cosmos
14
-
15
- # Represents a data object in a tabbed plots definition
16
- # Designed for use as a base class for custom data objects
17
- class DataObject
18
-
19
- # List of colors to use
20
- COLOR_LIST = %w(blue red green darkorange gold purple hotpink lime cornflowerblue brown coral crimson indigo tan lightblue cyan peru)
21
-
22
- # Used to create large arrays to prevent memory thrashing with large objects
23
- DEFAULT_ARRAY_SIZE = 100000
24
-
25
- # Percent of max seconds saved to achieve hystersis on pruning to
26
- # reduce memory thrashing
27
- PRUNE_HYSTERISIS_PERCENTAGE = 0.10
28
-
29
- # Plot holding this data object (subclass of Plot)
30
- attr_accessor :plot
31
-
32
- # Name of this data object (string or nil)
33
- attr_writer :name
34
-
35
- # Max number of data points saved (integer)
36
- attr_reader :max_points_saved
37
-
38
- # Type of data object (string)
39
- attr_accessor :data_object_type
40
-
41
- # Error associated with this data_object (Exception)
42
- attr_accessor :error
43
-
44
- # Color currently being used to draw the line (string)
45
- attr_accessor :color
46
-
47
- # Assigned Color of the line (string or nil for auto color choice)
48
- attr_accessor :assigned_color
49
-
50
- # This value is the first x value for this data object since reset() was called. It is stored here
51
- # so it can be retrieved even after x values have been pruned.
52
- attr_accessor :first_x_value
53
-
54
- def initialize
55
- @plot = nil
56
- @max_points_saved = nil
57
- @prune_hysterisis = nil
58
- # Start this value at the max float so any x_value will be less than it
59
- @first_x_value = Float::MAX
60
- @error = nil
61
- @assigned_color = nil
62
- @color = COLOR_LIST[0]
63
-
64
- # Type is classname without DataObject
65
- @data_object_type = self.class.to_s[0..-11].upcase
66
- @data_object_type = @data_object_type.split("::")[-1] # remove Cosmos:: if necessary
67
- end # def initialize
68
-
69
- # Returns the configuration lines used to create this data object
70
- def configuration_string
71
- string = " DATA_OBJECT #{@data_object_type}\n"
72
- string << " COLOR #{@assigned_color}\n" if @assigned_color
73
- string
74
- end # def configuration_string
75
-
76
- # Handles data object specific keywords
77
- def handle_keyword(parser, keyword, parameters)
78
- case keyword
79
- when 'COLOR'
80
- # Expect 1 parameter
81
- parser.verify_num_parameters(1, 1, "COLOR <Color Name>")
82
- @assigned_color = parameters[0].downcase
83
- @color = @assigned_color
84
- else
85
- raise ArgumentError, "Unknown keyword received by #{self.class}: #{keyword}"
86
- end
87
- end # def handle_keyword
88
-
89
- # Returns the packets processed by this data object as an array of
90
- # [target_name, packet_name] pairs
91
- def processed_packets
92
- raise "processed_packets must be defined by class #{self.class}"
93
- end
94
-
95
- # Processes a packet associated with this data object
96
- #
97
- # @param packet [Packet] The packet to process
98
- # @param count [Integer] Count which increments for each packet received by
99
- # the higher level process
100
- def process_packet(packet, count)
101
- raise "process_packet must be defined by class #{self.class}"
102
- end
103
-
104
- def handle_process_exception(error, telemetry_point)
105
- raise error if error.class == NoMemoryError
106
- reset()
107
- @plot.redraw_needed = true
108
- @error = error
109
- if error.is_a? TypeError
110
- @error = FatalError.new("Telemetry point #{telemetry_point} could not be displayed. This is most likely due to this telemetry point being a String which can't be represented on the graph. Remove the point from the list of telemetry items to cause this exception to go away.\n\n#{error}")
111
- else
112
- @exceptions_reported ||= []
113
- unless @exceptions_reported.include?(error.message)
114
- @exceptions_reported << error.message
115
- Cosmos.write_exception_file(error)
116
- end
117
- end
118
- end
119
-
120
- # Resets the data object's data (everything that is not configuration)
121
- def reset
122
- @error = nil
123
- # Reset this value at the max float so any x_value will be less than it
124
- @first_x_value = Float::MAX
125
- end
126
-
127
- # Supplies text that should be appended to the popup string on mousing over the specified
128
- # x value
129
- def popup_modifier(x_value)
130
- # The default class returns an empty value
131
- return ""
132
- end
133
-
134
- # Exports the data object's data as an array of arrays. Each inner array
135
- # is a column of the output.
136
- def export
137
- raise "export must be defined by class #{self.class}"
138
- end
139
-
140
- # Creates a copy of the data object with settings but without data
141
- def copy
142
- data_object = self.class.new
143
- data_object.assigned_color = @assigned_color.clone if @assigned_color
144
- data_object.color = @color.clone
145
- data_object.max_points_saved = @max_points_saved
146
- data_object
147
- end
148
-
149
- # Edits the data object by updating its settings from another data object
150
- def edit(editted_data_object)
151
- @assigned_color = editted_data_object.assigned_color
152
- @color = editted_data_object.color
153
- self.max_points_saved = editted_data_object.max_points_saved
154
- end
155
-
156
- # Indicates if the changes made to the data object are safe to perform without reseting
157
- # its data
158
- #
159
- # @param edited_data_object [DataObject] The data object which was edited
160
- def edit_safe?(edited_data_object)
161
- true
162
- end
163
-
164
- # Returns the name of this data object
165
- def name
166
- 'Unknown'
167
- end
168
-
169
- # Sets the maximum number of points saved
170
- def max_points_saved=(new_max_points_saved)
171
- @max_points_saved = new_max_points_saved
172
- if @max_points_saved
173
- @prune_hysterisis = (@max_points_saved.to_f * PRUNE_HYSTERISIS_PERCENTAGE).to_i
174
- @prune_hysterisis = 0 if @prune_hysterisis < 0
175
- prune_to_max_points_saved(true) # force prune
176
- else
177
- @prune_hysterisis = nil
178
- end
179
- end
180
-
181
- # Prunes data to max_points_saved
182
- #
183
- # @param force_prune [Boolean] Whether to prune no matter if the
184
- # PRUNE_HYSTERISIS_PERCENTAGE is met. Set to true if the max_points_saved
185
- # is changed to ensure the total is within the new limit.
186
- def prune_to_max_points_saved(force_prune = false)
187
- # Must be implemented by subclasses
188
- return nil
189
- end
190
-
191
- end # class DataObject
192
-
193
- 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
+
13
+ module Cosmos
14
+
15
+ # Represents a data object in a tabbed plots definition
16
+ # Designed for use as a base class for custom data objects
17
+ class DataObject
18
+
19
+ # List of colors to use
20
+ COLOR_LIST = %w(blue red green darkorange gold purple hotpink lime cornflowerblue brown coral crimson indigo tan lightblue cyan peru)
21
+
22
+ # Used to create large arrays to prevent memory thrashing with large objects
23
+ DEFAULT_ARRAY_SIZE = 100000
24
+
25
+ # Percent of max seconds saved to achieve hystersis on pruning to
26
+ # reduce memory thrashing
27
+ PRUNE_HYSTERISIS_PERCENTAGE = 0.10
28
+
29
+ # Plot holding this data object (subclass of Plot)
30
+ attr_accessor :plot
31
+
32
+ # Name of this data object (string or nil)
33
+ attr_writer :name
34
+
35
+ # Max number of data points saved (integer)
36
+ attr_reader :max_points_saved
37
+
38
+ # Type of data object (string)
39
+ attr_accessor :data_object_type
40
+
41
+ # Error associated with this data_object (Exception)
42
+ attr_accessor :error
43
+
44
+ # Color currently being used to draw the line (string)
45
+ attr_accessor :color
46
+
47
+ # Assigned Color of the line (string or nil for auto color choice)
48
+ attr_accessor :assigned_color
49
+
50
+ # This value is the first x value for this data object since reset() was called. It is stored here
51
+ # so it can be retrieved even after x values have been pruned.
52
+ attr_accessor :first_x_value
53
+
54
+ def initialize
55
+ @plot = nil
56
+ @max_points_saved = nil
57
+ @prune_hysterisis = nil
58
+ # Start this value at the max float so any x_value will be less than it
59
+ @first_x_value = Float::MAX
60
+ @error = nil
61
+ @assigned_color = nil
62
+ @color = COLOR_LIST[0]
63
+
64
+ # Type is classname without DataObject
65
+ @data_object_type = self.class.to_s[0..-11].upcase
66
+ @data_object_type = @data_object_type.split("::")[-1] # remove Cosmos:: if necessary
67
+ end # def initialize
68
+
69
+ # Returns the configuration lines used to create this data object
70
+ def configuration_string
71
+ string = " DATA_OBJECT #{@data_object_type}\n"
72
+ string << " COLOR #{@assigned_color}\n" if @assigned_color
73
+ string
74
+ end # def configuration_string
75
+
76
+ # Handles data object specific keywords
77
+ def handle_keyword(parser, keyword, parameters)
78
+ case keyword
79
+ when 'COLOR'
80
+ # Expect 1 parameter
81
+ parser.verify_num_parameters(1, 1, "COLOR <Color Name>")
82
+ @assigned_color = parameters[0].downcase
83
+ @color = @assigned_color
84
+ else
85
+ raise ArgumentError, "Unknown keyword received by #{self.class}: #{keyword}"
86
+ end
87
+ end # def handle_keyword
88
+
89
+ # Returns the packets processed by this data object as an array of
90
+ # [target_name, packet_name] pairs
91
+ def processed_packets
92
+ raise "processed_packets must be defined by class #{self.class}"
93
+ end
94
+
95
+ # Processes a packet associated with this data object
96
+ #
97
+ # @param packet [Packet] The packet to process
98
+ # @param count [Integer] Count which increments for each packet received by
99
+ # the higher level process
100
+ def process_packet(packet, count)
101
+ raise "process_packet must be defined by class #{self.class}"
102
+ end
103
+
104
+ def handle_process_exception(error, telemetry_point)
105
+ raise error if error.class == NoMemoryError
106
+ reset()
107
+ @plot.redraw_needed = true
108
+ @error = error
109
+ if error.is_a? TypeError
110
+ @error = FatalError.new("Telemetry point #{telemetry_point} could not be displayed. This is most likely due to this telemetry point being a String which can't be represented on the graph. Remove the point from the list of telemetry items to cause this exception to go away.\n\n#{error}")
111
+ else
112
+ @exceptions_reported ||= []
113
+ unless @exceptions_reported.include?(error.message)
114
+ @exceptions_reported << error.message
115
+ Cosmos.write_exception_file(error)
116
+ end
117
+ end
118
+ end
119
+
120
+ # Resets the data object's data (everything that is not configuration)
121
+ def reset
122
+ @error = nil
123
+ # Reset this value at the max float so any x_value will be less than it
124
+ @first_x_value = Float::MAX
125
+ end
126
+
127
+ # Supplies text that should be appended to the popup string on mousing over the specified
128
+ # x value
129
+ def popup_modifier(x_value)
130
+ # The default class returns an empty value
131
+ return ""
132
+ end
133
+
134
+ # Exports the data object's data as an array of arrays. Each inner array
135
+ # is a column of the output.
136
+ def export
137
+ raise "export must be defined by class #{self.class}"
138
+ end
139
+
140
+ # Creates a copy of the data object with settings but without data
141
+ def copy
142
+ data_object = self.class.new
143
+ data_object.assigned_color = @assigned_color.clone if @assigned_color
144
+ data_object.color = @color.clone
145
+ data_object.max_points_saved = @max_points_saved
146
+ data_object
147
+ end
148
+
149
+ # Edits the data object by updating its settings from another data object
150
+ def edit(editted_data_object)
151
+ @assigned_color = editted_data_object.assigned_color
152
+ @color = editted_data_object.color
153
+ self.max_points_saved = editted_data_object.max_points_saved
154
+ end
155
+
156
+ # Indicates if the changes made to the data object are safe to perform without reseting
157
+ # its data
158
+ #
159
+ # @param edited_data_object [DataObject] The data object which was edited
160
+ def edit_safe?(edited_data_object)
161
+ true
162
+ end
163
+
164
+ # Returns the name of this data object
165
+ def name
166
+ 'Unknown'
167
+ end
168
+
169
+ # Sets the maximum number of points saved
170
+ def max_points_saved=(new_max_points_saved)
171
+ @max_points_saved = new_max_points_saved
172
+ if @max_points_saved
173
+ @prune_hysterisis = (@max_points_saved.to_f * PRUNE_HYSTERISIS_PERCENTAGE).to_i
174
+ @prune_hysterisis = 0 if @prune_hysterisis < 0
175
+ prune_to_max_points_saved(true) # force prune
176
+ else
177
+ @prune_hysterisis = nil
178
+ end
179
+ end
180
+
181
+ # Prunes data to max_points_saved
182
+ #
183
+ # @param force_prune [Boolean] Whether to prune no matter if the
184
+ # PRUNE_HYSTERISIS_PERCENTAGE is met. Set to true if the max_points_saved
185
+ # is changed to ensure the total is within the new limit.
186
+ def prune_to_max_points_saved(force_prune = false)
187
+ # Must be implemented by subclasses
188
+ return nil
189
+ end
190
+
191
+ end # class DataObject
192
+
193
+ end # module Cosmos
@@ -1,407 +1,407 @@
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/linegraph_data_object'
13
-
14
- module Cosmos
15
-
16
- # Represents a data object on a line graph for a housekeeping telemetry item
17
- class HousekeepingDataObject < LinegraphDataObject
18
-
19
- # Value Types
20
- VALUE_TYPES = [:RAW, :CONVERTED]
21
-
22
- # Analysis Types
23
- ANALYSIS_TYPES = [:NONE, :DIFFERENCE, :WINDOWED_MEAN, :WINDOWED_MEAN_REMOVED, :STD_DEV, :ALLAN_DEV, :MAXIMUM, :MINIMUM, :PEAK_TO_PEAK]
24
-
25
- # The housekeeping telemetry item's target name (string)
26
- attr_reader :target_name
27
-
28
- # The housekeeping telemetry item's packet name (string)
29
- attr_reader :packet_name
30
-
31
- # The housekeeping telemetry item's item name (string)
32
- attr_reader :item_name
33
-
34
- # The housekeeping telemetry item's time item name (string)
35
- attr_accessor :time_item_name
36
-
37
- # The housekeeping telemetry item's formatted time item name (string)
38
- attr_accessor :formatted_time_item_name
39
-
40
- # Type of data to collect - :RAW or :CONVERTED
41
- attr_accessor :value_type
42
-
43
- # The analysis to perform
44
- attr_accessor :analysis
45
-
46
- # The number of samples to use in the analysis (integer)
47
- attr_reader :analysis_samples
48
-
49
- # Automatically show limits line for telemetry item (true or false)
50
- attr_reader :show_limits_lines
51
-
52
- # Limits lines for telemetry item (array)
53
- attr_accessor :limits_lines
54
-
55
- # Create a new data object
56
- def initialize
57
- super()
58
- @target_name = nil
59
- @packet_name = nil
60
- @item_name = nil
61
- @time_item_name = nil
62
- @formatted_time_item_name = nil
63
- @value_type = :CONVERTED
64
- @analysis = :NONE
65
- @analysis_samples = 3
66
- @show_limits_lines = false
67
- @limits_lines = []
68
- @num_samples_ahead = 1
69
- @num_samples_behind = 1
70
- @unprocessed_x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
71
- @unprocessed_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
72
- @differenced_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
73
- end # def initialize
74
-
75
- # Returns the configuration lines used to create this data object
76
- def configuration_string
77
- string = super()
78
- string << " ITEM #{@target_name} #{@packet_name} #{@item_name}\n" if @target_name and @packet_name and @item_name
79
- string << " TIME_ITEM #{@time_item_name}\n" if @time_item_name
80
- string << " FORMATTED_TIME_ITEM #{@formatted_time_item_name}\n" if @formatted_time_item_name
81
- string << " VALUE_TYPE #{@value_type}\n"
82
- string << " ANALYSIS #{@analysis}\n"
83
- string << " ANALYSIS_SAMPLES #{@analysis_samples}\n"
84
- string << " SHOW_LIMITS_LINES #{@show_limits_lines.to_s.upcase}\n"
85
- string
86
- end # def configuration_string
87
-
88
- # Handles data object specific keywords
89
- def handle_keyword(parser, keyword, parameters)
90
- case keyword
91
- when 'ITEM'
92
- # Expect 3 parameters
93
- parser.verify_num_parameters(3, 3, "ITEM <Target Name> <Packet Name> <Item Name>")
94
- set_item(parameters[0], parameters[1], parameters[2], true)
95
-
96
- when 'TIME_ITEM'
97
- # Expect 1 parameter
98
- parser.verify_num_parameters(1, 1, "TIME_ITEM <Time Item Name>")
99
- @time_item_name = parameters[0].upcase
100
-
101
- when 'FORMATTED_TIME_ITEM'
102
- # Expect 1 parameter
103
- parser.verify_num_parameters(1, 1, "FORMATTED_TIME_ITEM <Formatted Time Item Name>")
104
- @formatted_time_item_name = parameters[0].upcase
105
-
106
- when 'VALUE_TYPE'
107
- # Expect 1 parameter
108
- parser.verify_num_parameters(1, 1, "VALUE_TYPE <RAW or CONVERTED>")
109
- value_type = parameters[0].upcase.intern
110
- if VALUE_TYPES.include?(value_type)
111
- @value_type = value_type
112
- else
113
- raise ArgumentError, "Unknown VALUE_TYPE value: #{value_type}"
114
- end
115
-
116
- when 'ANALYSIS'
117
- # Expect 1 parameter
118
- parser.verify_num_parameters(1, 1, "ANALYSIS <Analysis Type>")
119
- analysis = parameters[0].upcase.intern
120
- if ANALYSIS_TYPES.include?(analysis)
121
- @analysis = analysis
122
- else
123
- raise ArgumentError, "Unknown ANALYSIS value: #{analysis}"
124
- end
125
-
126
- when 'ANALYSIS_SAMPLES'
127
- # Expect 1 parameter
128
- parser.verify_num_parameters(1, 1, "ANALYSIS_SAMPLES <Number of Samples>")
129
- self.analysis_samples = parameters[0].to_i
130
-
131
- when 'SHOW_LIMITS_LINES'
132
- # Expect 1 parameter
133
- parser.verify_num_parameters(1, 1, "SHOW_LIMITS_LINES <TRUE or FALSE>")
134
- self.show_limits_lines = ConfigParser.handle_true_false(parameters[0])
135
-
136
- else
137
- # Unknown keywords are passed to parent data object
138
- super(parser, keyword, parameters)
139
-
140
- end # case keyword
141
-
142
- end # def handle_keyword
143
-
144
- # Returns the packet processed by this data object
145
- def processed_packets
146
- if @target_name and @packet_name
147
- [[@target_name, @packet_name]]
148
- else
149
- []
150
- end
151
- end
152
-
153
- # (see DataObject#process_packet)
154
- def process_packet(packet, count)
155
- begin
156
- # Retrieve x and y values from packet
157
- x_value = packet.read(@time_item_name)
158
- if @value_type == :RAW
159
- y_value = packet.read(@item_name, :RAW)
160
- else
161
- y_value = packet.read(@item_name)
162
- end
163
- # Bail on the values if they are NaN or nil as we can't graph them
164
- return if x_value.nil? || y_value.nil? ||
165
- (x_value.respond_to?(:nan?) && x_value.nan?) ||
166
- (y_value.respond_to?(:nan?) && y_value.nan?)
167
- @formatted_x_values << packet.read(@formatted_time_item_name) if @formatted_time_item_name
168
-
169
- upper_index = nil
170
- sample_index = nil
171
- lower_index = nil
172
- if @analysis != :NONE
173
- # Add to unprocessed data
174
- @unprocessed_x_values << x_value
175
- @unprocessed_y_values << y_value
176
-
177
- # Calculate indexes into arrays
178
- upper_index = @unprocessed_y_values.length - 1
179
- sample_index = upper_index - @num_samples_ahead
180
- lower_index = sample_index - @num_samples_behind
181
- end
182
-
183
- case @analysis
184
- when :NONE
185
- @x_values << x_value
186
- @y_values << (y_value + @y_offset)
187
- @plot.redraw_needed = true
188
-
189
- when :DIFFERENCE, :ALLAN_DEV
190
- if @unprocessed_y_values.length > 1
191
- differenced_y_value = y_value - @unprocessed_y_values[-2]
192
-
193
- if @analysis == :DIFFERENCE
194
- @x_values << x_value
195
- @y_values << (differenced_y_value + @y_offset)
196
- @plot.redraw_needed = true
197
- else # @analysis == :ALLAN_DEV
198
- @differenced_y_values[upper_index] = differenced_y_value
199
-
200
- if lower_index >= 1
201
- data = @differenced_y_values[lower_index..upper_index]
202
- @x_values << @unprocessed_x_values[sample_index]
203
- @y_values << (Math.sqrt(data.squared.sum / (@analysis_samples * 2)) + @y_offset)
204
- @plot.redraw_needed = true
205
- end
206
- end
207
- end
208
-
209
- when :WINDOWED_MEAN, :WINDOWED_MEAN_REMOVED, :STD_DEV
210
- if @unprocessed_y_values.length >= @analysis_samples
211
- # Isolate window of data
212
- data = @unprocessed_y_values[lower_index..upper_index]
213
-
214
- # Calculate windowed mean
215
- mean = data.mean
216
-
217
- case @analysis
218
- when :WINDOWED_MEAN
219
- @y_values << (mean + @y_offset)
220
- when :WINDOWED_MEAN_REMOVED
221
- @y_values << (@unprocessed_y_values[sample_index] - mean + @y_offset)
222
- when :STD_DEV
223
- data.map! {|value| value - mean}
224
- @y_values << (Math.sqrt(data.squared.sum / (@analysis_samples - 1)) + @y_offset)
225
- end
226
- @x_values << @unprocessed_x_values[sample_index]
227
- @plot.redraw_needed = true
228
- end
229
-
230
- when :MAXIMUM, :MINIMUM, :PEAK_TO_PEAK
231
- if @unprocessed_y_values.length >= @analysis_samples
232
- case @analysis
233
- when :MAXIMUM
234
- @y_values << (@unprocessed_y_values[lower_index..upper_index].max + @y_offset)
235
- when :MINIMUM
236
- @y_values << (@unprocessed_y_values[lower_index..upper_index].min + @y_offset)
237
- else # :PEAK_TO_PEAK
238
- @y_values << ((@unprocessed_y_values[lower_index..upper_index].max - @unprocessed_y_values[lower_index..upper_index].min) + @y_offset)
239
- end
240
- @x_values << @unprocessed_x_values[sample_index]
241
- @plot.redraw_needed = true
242
- end
243
-
244
- end # case @analysis
245
-
246
- # Make sure the data object's first x value is the smallest x value encountered during packet processing.
247
- # This is the smallest x_value seen since reset() was called, i.e. it doesn't get deleted during pruning.
248
- # We make the assumption that @x_values is ordered, so just check against its first value.
249
- if (@x_values.length > 0) and (@x_values[0] < @first_x_value)
250
- @first_x_value = @x_values[0]
251
- end
252
-
253
- # Prune Data
254
- prune_to_max_points_saved()
255
- rescue Exception => error
256
- handle_process_exception(error, "#{packet.target_name} #{packet.packet_name} #{@item_name}")
257
- end
258
- end # def process_packet
259
-
260
- # Returns the name of this data object
261
- def name
262
- if @target_name and @packet_name and @item_name
263
- if @analysis != :NONE
264
- "#{@target_name} #{@packet_name} #{@item_name} (#{@analysis})"
265
- else
266
- "#{@target_name} #{@packet_name} #{@item_name}"
267
- end
268
- else
269
- ''
270
- end
271
- end
272
-
273
- # Resets the data object
274
- def reset
275
- super()
276
- @unprocessed_x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
277
- @unprocessed_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
278
- @differenced_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
279
- end
280
-
281
- # Creates a copy of the data object with settings but without data
282
- def copy
283
- data_object = super()
284
- if @target_name and @packet_name and @item_name
285
- data_object.set_item(@target_name.clone, @packet_name.clone, @item_name.clone)
286
- end
287
- data_object.time_item_name = @time_item_name.clone if @time_item_name
288
- data_object.formatted_time_item_name = @formatted_time_item_name.clone if @formatted_time_item_name
289
- data_object.value_type = @value_type
290
- data_object.analysis = @analysis
291
- data_object.analysis_samples = @analysis_samples
292
- data_object.show_limits_lines = @show_limits_lines
293
- if @target_name
294
- limits_lines = []
295
- get_limits_lines()
296
- @limits_lines.each do |y_value, color|
297
- limits_lines << [y_value, color.clone]
298
- end
299
- data_object.limits_lines = limits_lines
300
- end
301
- data_object
302
- end
303
-
304
- # Edits the data object - show_limits_lines is the only edit_safe? attribute
305
- def edit(editted_data_object)
306
- self.show_limits_lines = editted_data_object.show_limits_lines
307
- super(editted_data_object)
308
- end
309
-
310
- # Determines if changes can be made to the data object without affecting data
311
- #
312
- # @param edited_data_object [DataObject] The data object which was edited
313
- def edit_safe?(editted_data_object)
314
- if @target_name != editted_data_object.target_name or
315
- @packet_name != editted_data_object.packet_name or
316
- @item_name != editted_data_object.item_name or
317
- @time_item_name != editted_data_object.time_item_name or
318
- @formatted_time_item_name != editted_data_object.formatted_time_item_name or
319
- @value_type != editted_data_object.value_type or
320
- @analysis != editted_data_object.analysis or
321
- @analysis_samples != editted_data_object.analysis_samples
322
- false
323
- else
324
- super(editted_data_object)
325
- end
326
- end
327
-
328
- # Sets the housekeeping item
329
- def set_item(target_name, packet_name, item_name, during_configuration = false)
330
- @target_name = target_name
331
- @packet_name = packet_name
332
- @item_name = item_name
333
- _, item = System.telemetry.packet_and_item(@target_name, @packet_name, @item_name)
334
- @y_states = item.states
335
- if @y_states
336
- @value_type = :RAW
337
- else
338
- @value_type = :CONVERTED unless during_configuration
339
- end
340
-
341
- @time_item_name = 'RECEIVED_TIMESECONDS' unless @time_item_name
342
-
343
- # Update limits lines
344
- self.show_limits_lines = @show_limits_lines
345
- end
346
-
347
- # Sets the number of analysis samples
348
- def analysis_samples=(new_analysis_samples)
349
- # Value must be at least 2
350
- if new_analysis_samples <= 1
351
- raise ArgumentError, "Invalid ANALYSIS_SAMPLES value: #{new_analysis_samples}"
352
- else
353
- @analysis_samples = new_analysis_samples
354
- if @analysis_samples % 2 == 0
355
- # Even
356
- @num_samples_ahead = @analysis_samples / 2
357
- @num_samples_behind = @num_samples_ahead - 1
358
- else
359
- # Odd
360
- @num_samples_ahead = (@analysis_samples - 1) / 2
361
- @num_samples_behind = @num_samples_ahead
362
- end
363
- end
364
- end
365
-
366
- # Sets the show limits lines flag
367
- def show_limits_lines=(new_show_limits_lines)
368
- @show_limits_lines = new_show_limits_lines
369
- get_limits_lines()
370
- end
371
-
372
- protected
373
-
374
- def get_limits_lines
375
- if @target_name
376
- _, item = System.telemetry.packet_and_item(@target_name, @packet_name, @item_name)
377
- if item.limits.values
378
- @limits_lines = []
379
- @limits_lines << [item.limits.values[:DEFAULT][0], 'red']
380
- @limits_lines << [item.limits.values[:DEFAULT][1], 'yellow']
381
- if item.limits.values[:DEFAULT].length == 6
382
- @limits_lines << [item.limits.values[:DEFAULT][4], 'green']
383
- @limits_lines << [item.limits.values[:DEFAULT][5], 'green']
384
- end
385
- @limits_lines << [item.limits.values[:DEFAULT][2], 'yellow']
386
- @limits_lines << [item.limits.values[:DEFAULT][3], 'red']
387
- end
388
- end
389
- end
390
-
391
- # (see DataObject#prune_to_max_points_saved)
392
- def prune_to_max_points_saved(force_prune = false)
393
- prune_index = super(force_prune)
394
- if prune_index
395
- # Prune unprocessed
396
- unless @unprocessed_x_values.empty?
397
- @unprocessed_x_values.remove_before!(prune_index)
398
- @unprocessed_y_values.remove_before!(prune_index)
399
- @differenced_y_values.remove_before!(prune_index) if @analysis == :ALLAN_DEV
400
- end
401
- end
402
- prune_index
403
- end
404
-
405
- end # class HousekeepingDataObject
406
-
407
- 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/linegraph_data_object'
13
+
14
+ module Cosmos
15
+
16
+ # Represents a data object on a line graph for a housekeeping telemetry item
17
+ class HousekeepingDataObject < LinegraphDataObject
18
+
19
+ # Value Types
20
+ VALUE_TYPES = [:RAW, :CONVERTED]
21
+
22
+ # Analysis Types
23
+ ANALYSIS_TYPES = [:NONE, :DIFFERENCE, :WINDOWED_MEAN, :WINDOWED_MEAN_REMOVED, :STD_DEV, :ALLAN_DEV, :MAXIMUM, :MINIMUM, :PEAK_TO_PEAK]
24
+
25
+ # The housekeeping telemetry item's target name (string)
26
+ attr_reader :target_name
27
+
28
+ # The housekeeping telemetry item's packet name (string)
29
+ attr_reader :packet_name
30
+
31
+ # The housekeeping telemetry item's item name (string)
32
+ attr_reader :item_name
33
+
34
+ # The housekeeping telemetry item's time item name (string)
35
+ attr_accessor :time_item_name
36
+
37
+ # The housekeeping telemetry item's formatted time item name (string)
38
+ attr_accessor :formatted_time_item_name
39
+
40
+ # Type of data to collect - :RAW or :CONVERTED
41
+ attr_accessor :value_type
42
+
43
+ # The analysis to perform
44
+ attr_accessor :analysis
45
+
46
+ # The number of samples to use in the analysis (integer)
47
+ attr_reader :analysis_samples
48
+
49
+ # Automatically show limits line for telemetry item (true or false)
50
+ attr_reader :show_limits_lines
51
+
52
+ # Limits lines for telemetry item (array)
53
+ attr_accessor :limits_lines
54
+
55
+ # Create a new data object
56
+ def initialize
57
+ super()
58
+ @target_name = nil
59
+ @packet_name = nil
60
+ @item_name = nil
61
+ @time_item_name = nil
62
+ @formatted_time_item_name = nil
63
+ @value_type = :CONVERTED
64
+ @analysis = :NONE
65
+ @analysis_samples = 3
66
+ @show_limits_lines = false
67
+ @limits_lines = []
68
+ @num_samples_ahead = 1
69
+ @num_samples_behind = 1
70
+ @unprocessed_x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
71
+ @unprocessed_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
72
+ @differenced_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
73
+ end # def initialize
74
+
75
+ # Returns the configuration lines used to create this data object
76
+ def configuration_string
77
+ string = super()
78
+ string << " ITEM #{@target_name} #{@packet_name} #{@item_name}\n" if @target_name and @packet_name and @item_name
79
+ string << " TIME_ITEM #{@time_item_name}\n" if @time_item_name
80
+ string << " FORMATTED_TIME_ITEM #{@formatted_time_item_name}\n" if @formatted_time_item_name
81
+ string << " VALUE_TYPE #{@value_type}\n"
82
+ string << " ANALYSIS #{@analysis}\n"
83
+ string << " ANALYSIS_SAMPLES #{@analysis_samples}\n"
84
+ string << " SHOW_LIMITS_LINES #{@show_limits_lines.to_s.upcase}\n"
85
+ string
86
+ end # def configuration_string
87
+
88
+ # Handles data object specific keywords
89
+ def handle_keyword(parser, keyword, parameters)
90
+ case keyword
91
+ when 'ITEM'
92
+ # Expect 3 parameters
93
+ parser.verify_num_parameters(3, 3, "ITEM <Target Name> <Packet Name> <Item Name>")
94
+ set_item(parameters[0], parameters[1], parameters[2], true)
95
+
96
+ when 'TIME_ITEM'
97
+ # Expect 1 parameter
98
+ parser.verify_num_parameters(1, 1, "TIME_ITEM <Time Item Name>")
99
+ @time_item_name = parameters[0].upcase
100
+
101
+ when 'FORMATTED_TIME_ITEM'
102
+ # Expect 1 parameter
103
+ parser.verify_num_parameters(1, 1, "FORMATTED_TIME_ITEM <Formatted Time Item Name>")
104
+ @formatted_time_item_name = parameters[0].upcase
105
+
106
+ when 'VALUE_TYPE'
107
+ # Expect 1 parameter
108
+ parser.verify_num_parameters(1, 1, "VALUE_TYPE <RAW or CONVERTED>")
109
+ value_type = parameters[0].upcase.intern
110
+ if VALUE_TYPES.include?(value_type)
111
+ @value_type = value_type
112
+ else
113
+ raise ArgumentError, "Unknown VALUE_TYPE value: #{value_type}"
114
+ end
115
+
116
+ when 'ANALYSIS'
117
+ # Expect 1 parameter
118
+ parser.verify_num_parameters(1, 1, "ANALYSIS <Analysis Type>")
119
+ analysis = parameters[0].upcase.intern
120
+ if ANALYSIS_TYPES.include?(analysis)
121
+ @analysis = analysis
122
+ else
123
+ raise ArgumentError, "Unknown ANALYSIS value: #{analysis}"
124
+ end
125
+
126
+ when 'ANALYSIS_SAMPLES'
127
+ # Expect 1 parameter
128
+ parser.verify_num_parameters(1, 1, "ANALYSIS_SAMPLES <Number of Samples>")
129
+ self.analysis_samples = parameters[0].to_i
130
+
131
+ when 'SHOW_LIMITS_LINES'
132
+ # Expect 1 parameter
133
+ parser.verify_num_parameters(1, 1, "SHOW_LIMITS_LINES <TRUE or FALSE>")
134
+ self.show_limits_lines = ConfigParser.handle_true_false(parameters[0])
135
+
136
+ else
137
+ # Unknown keywords are passed to parent data object
138
+ super(parser, keyword, parameters)
139
+
140
+ end # case keyword
141
+
142
+ end # def handle_keyword
143
+
144
+ # Returns the packet processed by this data object
145
+ def processed_packets
146
+ if @target_name and @packet_name
147
+ [[@target_name, @packet_name]]
148
+ else
149
+ []
150
+ end
151
+ end
152
+
153
+ # (see DataObject#process_packet)
154
+ def process_packet(packet, count)
155
+ begin
156
+ # Retrieve x and y values from packet
157
+ x_value = packet.read(@time_item_name)
158
+ if @value_type == :RAW
159
+ y_value = packet.read(@item_name, :RAW)
160
+ else
161
+ y_value = packet.read(@item_name)
162
+ end
163
+ # Bail on the values if they are NaN or nil as we can't graph them
164
+ return if x_value.nil? || y_value.nil? ||
165
+ (x_value.respond_to?(:nan?) && x_value.nan?) ||
166
+ (y_value.respond_to?(:nan?) && y_value.nan?)
167
+ @formatted_x_values << packet.read(@formatted_time_item_name) if @formatted_time_item_name
168
+
169
+ upper_index = nil
170
+ sample_index = nil
171
+ lower_index = nil
172
+ if @analysis != :NONE
173
+ # Add to unprocessed data
174
+ @unprocessed_x_values << x_value
175
+ @unprocessed_y_values << y_value
176
+
177
+ # Calculate indexes into arrays
178
+ upper_index = @unprocessed_y_values.length - 1
179
+ sample_index = upper_index - @num_samples_ahead
180
+ lower_index = sample_index - @num_samples_behind
181
+ end
182
+
183
+ case @analysis
184
+ when :NONE
185
+ @x_values << x_value
186
+ @y_values << (y_value + @y_offset)
187
+ @plot.redraw_needed = true
188
+
189
+ when :DIFFERENCE, :ALLAN_DEV
190
+ if @unprocessed_y_values.length > 1
191
+ differenced_y_value = y_value - @unprocessed_y_values[-2]
192
+
193
+ if @analysis == :DIFFERENCE
194
+ @x_values << x_value
195
+ @y_values << (differenced_y_value + @y_offset)
196
+ @plot.redraw_needed = true
197
+ else # @analysis == :ALLAN_DEV
198
+ @differenced_y_values[upper_index] = differenced_y_value
199
+
200
+ if lower_index >= 1
201
+ data = @differenced_y_values[lower_index..upper_index]
202
+ @x_values << @unprocessed_x_values[sample_index]
203
+ @y_values << (Math.sqrt(data.squared.sum / (@analysis_samples * 2)) + @y_offset)
204
+ @plot.redraw_needed = true
205
+ end
206
+ end
207
+ end
208
+
209
+ when :WINDOWED_MEAN, :WINDOWED_MEAN_REMOVED, :STD_DEV
210
+ if @unprocessed_y_values.length >= @analysis_samples
211
+ # Isolate window of data
212
+ data = @unprocessed_y_values[lower_index..upper_index]
213
+
214
+ # Calculate windowed mean
215
+ mean = data.mean
216
+
217
+ case @analysis
218
+ when :WINDOWED_MEAN
219
+ @y_values << (mean + @y_offset)
220
+ when :WINDOWED_MEAN_REMOVED
221
+ @y_values << (@unprocessed_y_values[sample_index] - mean + @y_offset)
222
+ when :STD_DEV
223
+ data.map! {|value| value - mean}
224
+ @y_values << (Math.sqrt(data.squared.sum / (@analysis_samples - 1)) + @y_offset)
225
+ end
226
+ @x_values << @unprocessed_x_values[sample_index]
227
+ @plot.redraw_needed = true
228
+ end
229
+
230
+ when :MAXIMUM, :MINIMUM, :PEAK_TO_PEAK
231
+ if @unprocessed_y_values.length >= @analysis_samples
232
+ case @analysis
233
+ when :MAXIMUM
234
+ @y_values << (@unprocessed_y_values[lower_index..upper_index].max + @y_offset)
235
+ when :MINIMUM
236
+ @y_values << (@unprocessed_y_values[lower_index..upper_index].min + @y_offset)
237
+ else # :PEAK_TO_PEAK
238
+ @y_values << ((@unprocessed_y_values[lower_index..upper_index].max - @unprocessed_y_values[lower_index..upper_index].min) + @y_offset)
239
+ end
240
+ @x_values << @unprocessed_x_values[sample_index]
241
+ @plot.redraw_needed = true
242
+ end
243
+
244
+ end # case @analysis
245
+
246
+ # Make sure the data object's first x value is the smallest x value encountered during packet processing.
247
+ # This is the smallest x_value seen since reset() was called, i.e. it doesn't get deleted during pruning.
248
+ # We make the assumption that @x_values is ordered, so just check against its first value.
249
+ if (@x_values.length > 0) and (@x_values[0] < @first_x_value)
250
+ @first_x_value = @x_values[0]
251
+ end
252
+
253
+ # Prune Data
254
+ prune_to_max_points_saved()
255
+ rescue Exception => error
256
+ handle_process_exception(error, "#{packet.target_name} #{packet.packet_name} #{@item_name}")
257
+ end
258
+ end # def process_packet
259
+
260
+ # Returns the name of this data object
261
+ def name
262
+ if @target_name and @packet_name and @item_name
263
+ if @analysis != :NONE
264
+ "#{@target_name} #{@packet_name} #{@item_name} (#{@analysis})"
265
+ else
266
+ "#{@target_name} #{@packet_name} #{@item_name}"
267
+ end
268
+ else
269
+ ''
270
+ end
271
+ end
272
+
273
+ # Resets the data object
274
+ def reset
275
+ super()
276
+ @unprocessed_x_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
277
+ @unprocessed_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
278
+ @differenced_y_values = LowFragmentationArray.new(DEFAULT_ARRAY_SIZE)
279
+ end
280
+
281
+ # Creates a copy of the data object with settings but without data
282
+ def copy
283
+ data_object = super()
284
+ if @target_name and @packet_name and @item_name
285
+ data_object.set_item(@target_name.clone, @packet_name.clone, @item_name.clone)
286
+ end
287
+ data_object.time_item_name = @time_item_name.clone if @time_item_name
288
+ data_object.formatted_time_item_name = @formatted_time_item_name.clone if @formatted_time_item_name
289
+ data_object.value_type = @value_type
290
+ data_object.analysis = @analysis
291
+ data_object.analysis_samples = @analysis_samples
292
+ data_object.show_limits_lines = @show_limits_lines
293
+ if @target_name
294
+ limits_lines = []
295
+ get_limits_lines()
296
+ @limits_lines.each do |y_value, color|
297
+ limits_lines << [y_value, color.clone]
298
+ end
299
+ data_object.limits_lines = limits_lines
300
+ end
301
+ data_object
302
+ end
303
+
304
+ # Edits the data object - show_limits_lines is the only edit_safe? attribute
305
+ def edit(editted_data_object)
306
+ self.show_limits_lines = editted_data_object.show_limits_lines
307
+ super(editted_data_object)
308
+ end
309
+
310
+ # Determines if changes can be made to the data object without affecting data
311
+ #
312
+ # @param edited_data_object [DataObject] The data object which was edited
313
+ def edit_safe?(editted_data_object)
314
+ if @target_name != editted_data_object.target_name or
315
+ @packet_name != editted_data_object.packet_name or
316
+ @item_name != editted_data_object.item_name or
317
+ @time_item_name != editted_data_object.time_item_name or
318
+ @formatted_time_item_name != editted_data_object.formatted_time_item_name or
319
+ @value_type != editted_data_object.value_type or
320
+ @analysis != editted_data_object.analysis or
321
+ @analysis_samples != editted_data_object.analysis_samples
322
+ false
323
+ else
324
+ super(editted_data_object)
325
+ end
326
+ end
327
+
328
+ # Sets the housekeeping item
329
+ def set_item(target_name, packet_name, item_name, during_configuration = false)
330
+ @target_name = target_name
331
+ @packet_name = packet_name
332
+ @item_name = item_name
333
+ _, item = System.telemetry.packet_and_item(@target_name, @packet_name, @item_name)
334
+ @y_states = item.states
335
+ if @y_states
336
+ @value_type = :RAW
337
+ else
338
+ @value_type = :CONVERTED unless during_configuration
339
+ end
340
+
341
+ @time_item_name = 'RECEIVED_TIMESECONDS' unless @time_item_name
342
+
343
+ # Update limits lines
344
+ self.show_limits_lines = @show_limits_lines
345
+ end
346
+
347
+ # Sets the number of analysis samples
348
+ def analysis_samples=(new_analysis_samples)
349
+ # Value must be at least 2
350
+ if new_analysis_samples <= 1
351
+ raise ArgumentError, "Invalid ANALYSIS_SAMPLES value: #{new_analysis_samples}"
352
+ else
353
+ @analysis_samples = new_analysis_samples
354
+ if @analysis_samples % 2 == 0
355
+ # Even
356
+ @num_samples_ahead = @analysis_samples / 2
357
+ @num_samples_behind = @num_samples_ahead - 1
358
+ else
359
+ # Odd
360
+ @num_samples_ahead = (@analysis_samples - 1) / 2
361
+ @num_samples_behind = @num_samples_ahead
362
+ end
363
+ end
364
+ end
365
+
366
+ # Sets the show limits lines flag
367
+ def show_limits_lines=(new_show_limits_lines)
368
+ @show_limits_lines = new_show_limits_lines
369
+ get_limits_lines()
370
+ end
371
+
372
+ protected
373
+
374
+ def get_limits_lines
375
+ if @target_name
376
+ _, item = System.telemetry.packet_and_item(@target_name, @packet_name, @item_name)
377
+ if item.limits.values
378
+ @limits_lines = []
379
+ @limits_lines << [item.limits.values[:DEFAULT][0], 'red']
380
+ @limits_lines << [item.limits.values[:DEFAULT][1], 'yellow']
381
+ if item.limits.values[:DEFAULT].length == 6
382
+ @limits_lines << [item.limits.values[:DEFAULT][4], 'green']
383
+ @limits_lines << [item.limits.values[:DEFAULT][5], 'green']
384
+ end
385
+ @limits_lines << [item.limits.values[:DEFAULT][2], 'yellow']
386
+ @limits_lines << [item.limits.values[:DEFAULT][3], 'red']
387
+ end
388
+ end
389
+ end
390
+
391
+ # (see DataObject#prune_to_max_points_saved)
392
+ def prune_to_max_points_saved(force_prune = false)
393
+ prune_index = super(force_prune)
394
+ if prune_index
395
+ # Prune unprocessed
396
+ unless @unprocessed_x_values.empty?
397
+ @unprocessed_x_values.remove_before!(prune_index)
398
+ @unprocessed_y_values.remove_before!(prune_index)
399
+ @differenced_y_values.remove_before!(prune_index) if @analysis == :ALLAN_DEV
400
+ end
401
+ end
402
+ prune_index
403
+ end
404
+
405
+ end # class HousekeepingDataObject
406
+
407
+ end # module Cosmos