cosmos 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (912) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +48 -48
  4. data/.travis.yml +7 -7
  5. data/CONTRIBUTING.txt +50 -50
  6. data/Gemfile +6 -6
  7. data/Guardfile +27 -27
  8. data/LICENSE.txt +879 -879
  9. data/Manifest.txt +1116 -1114
  10. data/README.md +109 -107
  11. data/Rakefile +214 -214
  12. data/autohotkey/config/data/diamond.STL +57 -57
  13. data/autohotkey/config/system/system.txt +34 -34
  14. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  15. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  16. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  17. data/autohotkey/config/targets/COSMOS/target.txt +5 -5
  18. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  19. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  20. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
  21. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
  22. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -294
  23. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
  24. data/autohotkey/config/targets/INST/screens/array.txt +7 -7
  25. data/autohotkey/config/targets/INST/screens/block.txt +8 -8
  26. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
  27. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
  28. data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
  29. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
  30. data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
  31. data/autohotkey/config/targets/INST/screens/image.txt +21 -21
  32. data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
  33. data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
  34. data/autohotkey/config/targets/INST/screens/other.txt +25 -25
  35. data/autohotkey/config/targets/INST/screens/params.txt +25 -25
  36. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
  37. data/autohotkey/config/targets/INST/target.txt +26 -26
  38. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  39. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
  40. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  41. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
  42. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
  43. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
  44. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
  45. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  46. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  47. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  48. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
  49. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  50. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  51. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  52. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  53. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  54. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  55. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  56. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  57. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
  58. data/autohotkey/config/tools/launcher/launcher.txt +38 -38
  59. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
  60. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
  61. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
  62. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
  63. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
  64. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
  65. data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
  66. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  67. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  68. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
  69. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
  70. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
  71. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
  72. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
  73. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
  74. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
  75. data/autohotkey/lib/example_background_task.rb +42 -42
  76. data/autohotkey/lib/user_version.rb +3 -3
  77. data/autohotkey/procedures/clear_util.rb +7 -7
  78. data/autohotkey/procedures/collect.rb +18 -18
  79. data/autohotkey/procedures/collect_util.rb +14 -14
  80. data/autohotkey/procedures/example_test.rb +67 -67
  81. data/autohotkey/procedures/example_test2.rb +74 -74
  82. data/autohotkey/procedures/script_test.rb +17 -17
  83. data/autohotkey/procedures/syntax_error.rb +18 -18
  84. data/autohotkey/tools/CmdExtractorAHK +16 -16
  85. data/autohotkey/tools/CmdSender +14 -14
  86. data/autohotkey/tools/CmdSenderAHK +18 -18
  87. data/autohotkey/tools/CmdTlmServer +14 -14
  88. data/autohotkey/tools/CmdTlmServerAHK +28 -28
  89. data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
  90. data/autohotkey/tools/DataViewer +14 -14
  91. data/autohotkey/tools/DataViewerAHK +17 -17
  92. data/autohotkey/tools/HandbookCreatorAHK +20 -20
  93. data/autohotkey/tools/LauncherAHK +17 -17
  94. data/autohotkey/tools/LimitsMonitorAHK +20 -20
  95. data/autohotkey/tools/OpenGLBuilderAHK +20 -20
  96. data/autohotkey/tools/PacketViewer +14 -14
  97. data/autohotkey/tools/PacketViewerAHK +18 -18
  98. data/autohotkey/tools/PacketViewerAHK2 +17 -17
  99. data/autohotkey/tools/Replay +14 -14
  100. data/autohotkey/tools/Replay.bat +59 -59
  101. data/autohotkey/tools/ReplayAHK +17 -17
  102. data/autohotkey/tools/ScriptRunner +14 -14
  103. data/autohotkey/tools/ScriptRunnerAHK +20 -20
  104. data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
  105. data/autohotkey/tools/TableManager +14 -14
  106. data/autohotkey/tools/TableManagerAHK +30 -30
  107. data/autohotkey/tools/TestRunner +15 -15
  108. data/autohotkey/tools/TestRunnerAHK +17 -17
  109. data/autohotkey/tools/TestRunnerAHK2 +17 -17
  110. data/autohotkey/tools/TestRunnerAHK3 +17 -17
  111. data/autohotkey/tools/TestRunnerAHK4 +17 -17
  112. data/autohotkey/tools/TlmExtractor +15 -15
  113. data/autohotkey/tools/TlmExtractorAHK +19 -19
  114. data/autohotkey/tools/TlmExtractorAHK2 +16 -16
  115. data/autohotkey/tools/TlmExtractorAHK3 +16 -16
  116. data/autohotkey/tools/TlmGrapher +14 -14
  117. data/autohotkey/tools/TlmGrapherAHK +19 -19
  118. data/autohotkey/tools/TlmGrapherAHK2 +23 -23
  119. data/autohotkey/tools/TlmGrapherAHK3 +17 -17
  120. data/autohotkey/tools/TlmGrapherAHK4 +17 -17
  121. data/autohotkey/tools/TlmViewer +14 -14
  122. data/autohotkey/tools/TlmViewerAHK +28 -28
  123. data/autohotkey/tools/TlmViewerAHK2 +18 -18
  124. data/autohotkey/tools/TlmViewerAHK3 +18 -18
  125. data/autohotkey/tools/TlmViewerAHK4 +18 -18
  126. data/autohotkey/tools/TlmViewerAHK5 +18 -18
  127. data/autohotkey/tools/autohotkey.rb +37 -37
  128. data/autohotkey/tools/cmd_extractor.ahk +27 -27
  129. data/autohotkey/tools/cmd_sender.ahk +182 -162
  130. data/autohotkey/tools/cmd_tlm_server.ahk +89 -89
  131. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
  132. data/autohotkey/tools/data_viewer.ahk +135 -135
  133. data/autohotkey/tools/handbook_creator.ahk +23 -23
  134. data/autohotkey/tools/launcher.ahk +41 -41
  135. data/autohotkey/tools/limits_monitor.ahk +70 -70
  136. data/autohotkey/tools/open_gl_builder.ahk +134 -134
  137. data/autohotkey/tools/packet_viewer.ahk +143 -143
  138. data/autohotkey/tools/packet_viewer2.ahk +9 -9
  139. data/autohotkey/tools/replay.ahk +98 -98
  140. data/autohotkey/tools/script_runner.ahk +589 -589
  141. data/autohotkey/tools/script_runner2.ahk +34 -31
  142. data/autohotkey/tools/table_manager.ahk +220 -220
  143. data/autohotkey/tools/test_runner.ahk +262 -259
  144. data/autohotkey/tools/test_runner2.ahk +52 -52
  145. data/autohotkey/tools/test_runner3.ahk +13 -13
  146. data/autohotkey/tools/tlm_extractor.ahk +272 -272
  147. data/autohotkey/tools/tlm_grapher.ahk +642 -642
  148. data/autohotkey/tools/tlm_grapher2.ahk +115 -115
  149. data/autohotkey/tools/tlm_grapher3.ahk +24 -24
  150. data/autohotkey/tools/tlm_viewer.ahk +133 -133
  151. data/autohotkey/tools/tlm_viewer2.ahk +50 -49
  152. data/autohotkey/tools/tlm_viewer4.ahk +4 -4
  153. data/autohotkey/tools/tlm_viewer5.ahk +20 -20
  154. data/bin/cosmos +96 -96
  155. data/bin/cstol_converter +1166 -1166
  156. data/bin/rubysloc +85 -85
  157. data/cosmos.gemspec +98 -97
  158. data/data/about.txt +4 -4
  159. data/data/crc.txt +306 -305
  160. data/data/diamond.STL +57 -57
  161. data/data/legal.txt +9 -9
  162. data/demo/Gemfile +6 -6
  163. data/demo/Launcher +15 -15
  164. data/demo/Launcher.bat +59 -59
  165. data/demo/Rakefile +61 -61
  166. data/demo/config/data/crc.txt +222 -206
  167. data/demo/config/data/diamond.STL +57 -57
  168. data/demo/config/data/meta_init.txt +4 -4
  169. data/demo/config/system/system.txt +34 -34
  170. data/demo/config/system/system2.txt +33 -33
  171. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  172. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  173. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  174. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
  175. data/demo/config/targets/COSMOS/screens/version.txt +19 -19
  176. data/demo/config/targets/COSMOS/target.txt +11 -11
  177. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
  178. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +3 -3
  179. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
  180. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
  181. data/demo/config/targets/EXAMPLE/target.txt +6 -6
  182. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  183. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  184. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
  185. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
  186. data/demo/config/targets/INST/lib/sim_inst.rb +305 -294
  187. data/demo/config/targets/INST/screens/adcs.txt +46 -46
  188. data/demo/config/targets/INST/screens/array.txt +15 -15
  189. data/demo/config/targets/INST/screens/block.txt +8 -8
  190. data/demo/config/targets/INST/screens/commanding.txt +30 -30
  191. data/demo/config/targets/INST/screens/graphs.txt +14 -14
  192. data/demo/config/targets/INST/screens/ground.txt +25 -25
  193. data/demo/config/targets/INST/screens/hs.txt +44 -44
  194. data/demo/config/targets/INST/screens/latest.txt +23 -23
  195. data/demo/config/targets/INST/screens/other.txt +29 -29
  196. data/demo/config/targets/INST/screens/tabs.txt +70 -70
  197. data/demo/config/targets/INST/target.txt +33 -33
  198. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  199. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
  200. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  201. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
  202. data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
  203. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -12
  204. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
  205. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
  206. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +54 -48
  207. data/demo/config/targets/TEMPLATED/target.txt +6 -6
  208. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +33 -33
  209. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +29 -29
  210. data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
  211. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
  212. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  213. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  214. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  215. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
  216. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  217. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  218. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  219. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  220. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  221. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  222. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  223. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  224. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
  225. data/demo/config/tools/launcher/launcher.txt +45 -45
  226. data/demo/config/tools/launcher/launcher2.txt +45 -45
  227. data/demo/config/tools/script_runner/script_runner.txt +3 -3
  228. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
  229. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  230. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  231. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  232. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  233. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  234. data/demo/config/tools/test_runner/test_runner.txt +17 -17
  235. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  236. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  237. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  238. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  239. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
  240. data/demo/lib/example_background_task.rb +57 -52
  241. data/demo/lib/example_target.rb +113 -108
  242. data/demo/lib/scpi_target.rb +74 -74
  243. data/demo/lib/user_version.rb +3 -3
  244. data/demo/procedures/checks.rb +11 -11
  245. data/demo/procedures/clear_util.rb +7 -7
  246. data/demo/procedures/collect.rb +18 -18
  247. data/demo/procedures/collect_util.rb +14 -14
  248. data/demo/procedures/cosmos_api_test.rb +293 -293
  249. data/demo/procedures/disconnect.rb +29 -29
  250. data/demo/procedures/example_test.rb +182 -182
  251. data/demo/procedures/plot_test.rb +8 -8
  252. data/demo/procedures/run_example_test.rb +3 -3
  253. data/demo/procedures/test.rb +51 -51
  254. data/demo/tools/CmdExtractor +15 -15
  255. data/demo/tools/CmdExtractor.bat +59 -59
  256. data/demo/tools/CmdSender +15 -15
  257. data/demo/tools/CmdSender.bat +59 -59
  258. data/demo/tools/CmdTlmServer +15 -15
  259. data/demo/tools/CmdTlmServer.bat +59 -59
  260. data/demo/tools/DataViewer +15 -15
  261. data/demo/tools/DataViewer.bat +59 -59
  262. data/demo/tools/ExampleTarget +15 -15
  263. data/demo/tools/ExampleTarget.bat +59 -59
  264. data/demo/tools/HandbookCreator +15 -15
  265. data/demo/tools/HandbookCreator.bat +61 -61
  266. data/demo/tools/Launcher +15 -15
  267. data/demo/tools/Launcher.bat +59 -59
  268. data/demo/tools/LimitsMonitor +15 -15
  269. data/demo/tools/LimitsMonitor.bat +59 -59
  270. data/demo/tools/OpenGLBuilder +15 -15
  271. data/demo/tools/OpenGLBuilder.bat +59 -59
  272. data/demo/tools/PacketViewer +15 -15
  273. data/demo/tools/PacketViewer.bat +59 -59
  274. data/demo/tools/Replay +15 -15
  275. data/demo/tools/Replay.bat +59 -59
  276. data/demo/tools/ScpiTarget +15 -15
  277. data/demo/tools/ScpiTarget.bat +59 -59
  278. data/demo/tools/ScriptRunner +15 -15
  279. data/demo/tools/ScriptRunner.bat +59 -59
  280. data/demo/tools/TableManager +15 -15
  281. data/demo/tools/TableManager.bat +59 -59
  282. data/demo/tools/TestRunner +15 -15
  283. data/demo/tools/TestRunner.bat +59 -59
  284. data/demo/tools/TlmExtractor +15 -15
  285. data/demo/tools/TlmExtractor.bat +59 -59
  286. data/demo/tools/TlmGrapher +15 -15
  287. data/demo/tools/TlmGrapher.bat +59 -59
  288. data/demo/tools/TlmViewer +15 -15
  289. data/demo/tools/TlmViewer.bat +59 -59
  290. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  291. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  292. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  293. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  294. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  295. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  296. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  297. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  298. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  299. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  300. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  301. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  302. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  303. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  304. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  305. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  306. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  307. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  308. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  309. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  310. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  311. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  312. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  313. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  314. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  315. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  316. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  317. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
  318. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  319. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  320. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  321. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  322. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  323. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  324. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  325. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  326. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  327. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  328. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  329. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  330. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  331. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  332. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  333. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  334. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  335. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  336. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  337. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  338. data/ext/cosmos/ext/array/array.c +111 -111
  339. data/ext/cosmos/ext/array/extconf.rb +13 -13
  340. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
  341. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
  342. data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
  343. data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
  344. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
  345. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
  346. data/ext/cosmos/ext/crc/crc.c +341 -341
  347. data/ext/cosmos/ext/crc/extconf.rb +12 -12
  348. data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
  349. data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
  350. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
  351. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +261 -261
  352. data/ext/cosmos/ext/packet/extconf.rb +13 -13
  353. data/ext/cosmos/ext/packet/packet.c +339 -339
  354. data/ext/cosmos/ext/platform/extconf.rb +13 -13
  355. data/ext/cosmos/ext/platform/platform.c +81 -81
  356. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
  357. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
  358. data/ext/cosmos/ext/string/extconf.rb +13 -13
  359. data/ext/cosmos/ext/string/string.c +49 -49
  360. data/ext/cosmos/ext/structure/structure.c +894 -894
  361. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
  362. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
  363. data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
  364. data/ext/cosmos/ext/telemetry/telemetry.c +306 -306
  365. data/ext/mkrf_conf.rb +40 -40
  366. data/install/Gemfile +6 -6
  367. data/install/Launcher +14 -14
  368. data/install/Launcher.bat +59 -59
  369. data/install/Rakefile +61 -61
  370. data/install/config/data/crc.txt +134 -133
  371. data/install/config/system/system.txt +29 -29
  372. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  373. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  374. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  375. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  376. data/install/config/targets/COSMOS/screens/version.txt +19 -19
  377. data/install/config/targets/COSMOS/target.txt +8 -8
  378. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  379. data/install/config/tools/data_viewer/data_viewer.txt +3 -3
  380. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
  381. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  382. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  383. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  384. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
  385. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  386. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  387. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  388. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  389. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  390. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  391. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  392. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  393. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
  394. data/install/config/tools/launcher/launcher.txt +39 -39
  395. data/install/config/tools/script_runner/script_runner.txt +3 -3
  396. data/install/config/tools/test_runner/test_runner.txt +8 -8
  397. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  398. data/install/lib/user_version.rb +3 -3
  399. data/install/tools/CmdExtractor +15 -15
  400. data/install/tools/CmdExtractor.bat +59 -59
  401. data/install/tools/CmdSender +15 -15
  402. data/install/tools/CmdSender.bat +59 -59
  403. data/install/tools/CmdTlmServer +15 -15
  404. data/install/tools/CmdTlmServer.bat +59 -59
  405. data/install/tools/DataViewer +15 -15
  406. data/install/tools/DataViewer.bat +59 -59
  407. data/install/tools/HandbookCreator +15 -15
  408. data/install/tools/HandbookCreator.bat +61 -61
  409. data/install/tools/Launcher +15 -15
  410. data/install/tools/Launcher.bat +59 -59
  411. data/install/tools/LimitsMonitor +15 -15
  412. data/install/tools/LimitsMonitor.bat +59 -59
  413. data/install/tools/OpenGLBuilder +15 -15
  414. data/install/tools/OpenGLBuilder.bat +59 -59
  415. data/install/tools/PacketViewer +15 -15
  416. data/install/tools/PacketViewer.bat +59 -59
  417. data/install/tools/Replay +15 -15
  418. data/install/tools/Replay.bat +59 -59
  419. data/install/tools/ScriptRunner +15 -15
  420. data/install/tools/ScriptRunner.bat +59 -59
  421. data/install/tools/TableManager +15 -15
  422. data/install/tools/TableManager.bat +59 -59
  423. data/install/tools/TestRunner +15 -15
  424. data/install/tools/TestRunner.bat +59 -59
  425. data/install/tools/TlmExtractor +15 -15
  426. data/install/tools/TlmExtractor.bat +59 -59
  427. data/install/tools/TlmGrapher +15 -15
  428. data/install/tools/TlmGrapher.bat +59 -59
  429. data/install/tools/TlmViewer +15 -15
  430. data/install/tools/TlmViewer.bat +59 -59
  431. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  432. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  433. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  434. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  435. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  436. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  437. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  438. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  439. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  440. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  441. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  442. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  443. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  444. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  445. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  446. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  447. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  448. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  449. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  450. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  451. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  452. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  453. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  454. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  455. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  456. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  457. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  458. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
  459. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  460. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  461. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  462. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  463. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  464. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  465. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  466. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  467. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  468. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  469. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  470. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  471. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  472. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  473. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  474. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  475. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  476. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  477. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  478. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  479. data/lib/cosmos.rb +63 -63
  480. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
  481. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
  482. data/lib/cosmos/config/config_parser.rb +324 -324
  483. data/lib/cosmos/conversions.rb +13 -13
  484. data/lib/cosmos/conversions/conversion.rb +47 -47
  485. data/lib/cosmos/conversions/generic_conversion.rb +55 -55
  486. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
  487. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
  488. data/lib/cosmos/conversions/processor_conversion.rb +46 -46
  489. data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
  490. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
  491. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
  492. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
  493. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
  494. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
  495. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
  496. data/lib/cosmos/core_ext.rb +18 -18
  497. data/lib/cosmos/core_ext/array.rb +354 -354
  498. data/lib/cosmos/core_ext/class.rb +51 -51
  499. data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
  500. data/lib/cosmos/core_ext/exception.rb +52 -52
  501. data/lib/cosmos/core_ext/file.rb +75 -75
  502. data/lib/cosmos/core_ext/hash.rb +28 -28
  503. data/lib/cosmos/core_ext/io.rb +75 -75
  504. data/lib/cosmos/core_ext/kernel.rb +38 -38
  505. data/lib/cosmos/core_ext/math.rb +119 -119
  506. data/lib/cosmos/core_ext/matrix.rb +146 -146
  507. data/lib/cosmos/core_ext/objectspace.rb +29 -29
  508. data/lib/cosmos/core_ext/range.rb +22 -22
  509. data/lib/cosmos/core_ext/socket.rb +32 -32
  510. data/lib/cosmos/core_ext/string.rb +310 -310
  511. data/lib/cosmos/core_ext/stringio.rb +24 -24
  512. data/lib/cosmos/core_ext/time.rb +446 -446
  513. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
  514. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
  515. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
  516. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
  517. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
  518. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +317 -317
  519. data/lib/cosmos/gui/dialogs/about_dialog.rb +128 -128
  520. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
  521. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
  522. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
  523. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
  524. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
  525. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
  526. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +196 -196
  527. data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -168
  528. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
  529. data/lib/cosmos/gui/dialogs/progress_dialog.rb +270 -262
  530. data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -161
  531. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
  532. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
  533. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
  534. data/lib/cosmos/gui/dialogs/splash.rb +113 -113
  535. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
  536. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
  537. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
  538. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
  539. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +494 -494
  540. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
  541. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +460 -460
  542. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
  543. data/lib/cosmos/gui/line_graph/lines.rb +290 -290
  544. data/lib/cosmos/gui/line_graph/overview_graph.rb +459 -459
  545. data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
  546. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
  547. data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
  548. data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
  549. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
  550. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
  551. data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -712
  552. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
  553. data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
  554. data/lib/cosmos/gui/opengl/opengl.rb +8 -8
  555. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
  556. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
  557. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
  558. data/lib/cosmos/gui/qt.rb +813 -786
  559. data/lib/cosmos/gui/qt_tool.rb +378 -373
  560. data/lib/cosmos/gui/text/completion.rb +381 -381
  561. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
  562. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
  563. data/lib/cosmos/gui/text/ruby_editor.rb +395 -395
  564. data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
  565. data/lib/cosmos/gui/utilities/script_module_gui.rb +203 -203
  566. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
  567. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
  568. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
  569. data/lib/cosmos/interfaces.rb +11 -11
  570. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -149
  571. data/lib/cosmos/interfaces/interface.rb +213 -213
  572. data/lib/cosmos/interfaces/linc_interface.rb +360 -360
  573. data/lib/cosmos/interfaces/serial_interface.rb +76 -76
  574. data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -128
  575. data/lib/cosmos/interfaces/stream_interface.rb +156 -156
  576. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
  577. data/lib/cosmos/interfaces/tcpip_server_interface.rb +154 -154
  578. data/lib/cosmos/interfaces/udp_interface.rb +173 -173
  579. data/lib/cosmos/io/buffered_file.rb +11 -11
  580. data/lib/cosmos/io/cosmos_snmp.rb +50 -50
  581. data/lib/cosmos/io/io_multiplexer.rb +89 -89
  582. data/lib/cosmos/io/json_drb.rb +344 -320
  583. data/lib/cosmos/io/json_drb_object.rb +137 -137
  584. data/lib/cosmos/io/json_rpc.rb +365 -365
  585. data/lib/cosmos/io/posix_serial_driver.rb +145 -145
  586. data/lib/cosmos/io/raw_logger.rb +174 -174
  587. data/lib/cosmos/io/raw_logger_pair.rb +71 -71
  588. data/lib/cosmos/io/serial_driver.rb +85 -85
  589. data/lib/cosmos/io/stderr.rb +36 -36
  590. data/lib/cosmos/io/stdout.rb +36 -36
  591. data/lib/cosmos/io/tcpip_server.rb +583 -532
  592. data/lib/cosmos/io/udp_sockets.rb +152 -152
  593. data/lib/cosmos/io/win32_serial_driver.rb +147 -147
  594. data/lib/cosmos/packet_logs.rb +6 -6
  595. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
  596. data/lib/cosmos/packet_logs/packet_log_reader.rb +441 -439
  597. data/lib/cosmos/packet_logs/packet_log_writer.rb +321 -309
  598. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
  599. data/lib/cosmos/packets/binary_accessor.rb +921 -921
  600. data/lib/cosmos/packets/commands.rb +291 -291
  601. data/lib/cosmos/packets/limits.rb +263 -263
  602. data/lib/cosmos/packets/limits_response.rb +38 -38
  603. data/lib/cosmos/packets/packet.rb +714 -699
  604. data/lib/cosmos/packets/packet_config.rb +1034 -1034
  605. data/lib/cosmos/packets/packet_item.rb +317 -317
  606. data/lib/cosmos/packets/packet_item_limits.rb +128 -128
  607. data/lib/cosmos/packets/structure.rb +421 -386
  608. data/lib/cosmos/packets/structure_item.rb +233 -233
  609. data/lib/cosmos/packets/telemetry.rb +317 -317
  610. data/lib/cosmos/processors.rb +6 -6
  611. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
  612. data/lib/cosmos/processors/processor.rb +71 -71
  613. data/lib/cosmos/processors/statistics_processor.rb +65 -65
  614. data/lib/cosmos/processors/watermark_processor.rb +44 -44
  615. data/lib/cosmos/script.rb +9 -9
  616. data/lib/cosmos/script/extract.rb +115 -115
  617. data/lib/cosmos/script/script.rb +1513 -1493
  618. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
  619. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
  620. data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
  621. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
  622. data/lib/cosmos/streams/serial_stream.rb +152 -143
  623. data/lib/cosmos/streams/stream.rb +57 -57
  624. data/lib/cosmos/streams/stream_protocol.rb +369 -369
  625. data/lib/cosmos/streams/tcpip_client_stream.rb +77 -77
  626. data/lib/cosmos/streams/tcpip_socket_stream.rb +139 -139
  627. data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
  628. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
  629. data/lib/cosmos/system.rb +4 -4
  630. data/lib/cosmos/system/system.rb +558 -558
  631. data/lib/cosmos/system/target.rb +178 -178
  632. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +254 -253
  633. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +716 -716
  634. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
  635. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
  636. data/lib/cosmos/tools/cmd_tlm_server/api.rb +936 -940
  637. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
  638. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -63
  639. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +511 -497
  640. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +241 -241
  641. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1033 -1008
  642. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
  643. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +176 -176
  644. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +241 -221
  645. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
  646. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
  647. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
  648. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
  649. data/lib/cosmos/tools/data_viewer/data_viewer.rb +628 -600
  650. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +167 -167
  651. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
  652. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +149 -149
  653. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +360 -360
  654. data/lib/cosmos/tools/launcher/launcher.rb +184 -184
  655. data/lib/cosmos/tools/launcher/launcher_config.rb +175 -167
  656. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -41
  657. data/lib/cosmos/tools/launcher/launcher_tool.rb +104 -104
  658. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +796 -768
  659. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
  660. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
  661. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +525 -525
  662. data/lib/cosmos/tools/replay/replay.rb +495 -488
  663. data/lib/cosmos/tools/replay/replay_server.rb +91 -91
  664. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -139
  665. data/lib/cosmos/tools/script_runner/script_runner.rb +914 -914
  666. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
  667. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1892 -1859
  668. data/lib/cosmos/tools/table_manager/table.rb +70 -70
  669. data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
  670. data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
  671. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
  672. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
  673. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
  674. data/lib/cosmos/tools/test_runner/test.rb +480 -480
  675. data/lib/cosmos/tools/test_runner/test_runner.rb +1157 -1157
  676. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +338 -338
  677. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
  678. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1008 -1008
  679. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
  680. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
  681. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
  682. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
  683. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +94 -94
  684. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
  685. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +180 -180
  686. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
  687. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
  688. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +173 -173
  689. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +177 -177
  690. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +412 -409
  691. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
  692. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
  693. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -320
  694. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
  695. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
  696. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
  697. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
  698. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
  699. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
  700. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
  701. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
  702. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
  703. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
  704. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
  705. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1278 -1278
  706. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
  707. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
  708. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +111 -95
  709. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
  710. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +72 -66
  711. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
  712. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
  713. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
  714. data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -458
  715. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +563 -544
  716. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +287 -287
  717. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
  718. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
  719. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +70 -70
  720. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +61 -61
  721. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
  722. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
  723. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
  724. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
  725. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
  726. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
  727. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
  728. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
  729. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
  730. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
  731. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
  732. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
  733. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
  734. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
  735. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
  736. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
  737. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
  738. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
  739. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
  740. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
  741. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
  742. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
  743. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
  744. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
  745. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
  746. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
  747. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
  748. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
  749. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
  750. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
  751. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
  752. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
  753. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
  754. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
  755. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
  756. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
  757. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
  758. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
  759. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
  760. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
  761. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
  762. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
  763. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
  764. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
  765. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
  766. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
  767. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
  768. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
  769. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
  770. data/lib/cosmos/top_level.rb +647 -596
  771. data/lib/cosmos/utilities.rb +11 -10
  772. data/lib/cosmos/utilities/crc.rb +166 -166
  773. data/lib/cosmos/utilities/csv.rb +83 -83
  774. data/lib/cosmos/utilities/logger.rb +137 -137
  775. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
  776. data/lib/cosmos/utilities/message_log.rb +74 -74
  777. data/lib/cosmos/utilities/quaternion.rb +258 -258
  778. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
  779. data/lib/cosmos/utilities/simulated_target.rb +99 -99
  780. data/lib/cosmos/utilities/sleeper.rb +44 -0
  781. data/lib/cosmos/version.rb +12 -12
  782. data/lib/cosmos/win32/excel.rb +66 -66
  783. data/lib/cosmos/win32/win32.rb +387 -387
  784. data/lib/cosmos/win32/win32_main.rb +311 -311
  785. data/roodi.yml +24 -24
  786. data/run_gui_tests.bat +32 -32
  787. data/spec/ccsds/ccsds_packet_spec.rb +67 -67
  788. data/spec/ccsds/ccsds_parser_spec.rb +148 -148
  789. data/spec/config/config_parser_spec.rb +322 -322
  790. data/spec/conversions/conversion_spec.rb +31 -31
  791. data/spec/conversions/generic_conversion_spec.rb +45 -45
  792. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
  793. data/spec/conversions/polynomial_conversion_spec.rb +40 -40
  794. data/spec/conversions/processor_conversion_spec.rb +45 -45
  795. data/spec/conversions/received_count_conversion_spec.rb +43 -43
  796. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
  797. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
  798. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
  799. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
  800. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
  801. data/spec/core_ext/array_spec.rb +186 -186
  802. data/spec/core_ext/class_spec.rb +36 -36
  803. data/spec/core_ext/cosmos_io_spec.rb +77 -77
  804. data/spec/core_ext/exception_spec.rb +91 -91
  805. data/spec/core_ext/file_spec.rb +72 -72
  806. data/spec/core_ext/hash_spec.rb +24 -24
  807. data/spec/core_ext/io_spec.rb +46 -46
  808. data/spec/core_ext/kernel_spec.rb +54 -54
  809. data/spec/core_ext/math_spec.rb +116 -116
  810. data/spec/core_ext/matrix_spec.rb +66 -66
  811. data/spec/core_ext/objectspace_spec.rb +29 -29
  812. data/spec/core_ext/range_spec.rb +21 -21
  813. data/spec/core_ext/socket_spec.rb +32 -32
  814. data/spec/core_ext/string_spec.rb +223 -223
  815. data/spec/core_ext/stringio_spec.rb +21 -21
  816. data/spec/core_ext/time_spec.rb +151 -151
  817. data/spec/gui/line_graph/line_clip_spec.rb +322 -322
  818. data/spec/install/config/system/system.txt +33 -33
  819. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  820. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  821. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  822. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  823. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
  824. data/spec/install/config/targets/COSMOS/target.txt +5 -5
  825. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
  826. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
  827. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
  828. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
  829. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
  830. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -294
  831. data/spec/install/config/targets/INST/target.txt +10 -10
  832. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
  833. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
  834. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  835. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
  836. data/spec/interfaces/interface_spec.rb +130 -131
  837. data/spec/interfaces/linc_interface_spec.rb +199 -199
  838. data/spec/interfaces/serial_interface_spec.rb +56 -56
  839. data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
  840. data/spec/interfaces/stream_interface_spec.rb +157 -157
  841. data/spec/interfaces/tcpip_client_interface_spec.rb +54 -54
  842. data/spec/interfaces/tcpip_server_interface_spec.rb +151 -151
  843. data/spec/interfaces/udp_interface_spec.rb +175 -177
  844. data/spec/io/buffered_file_spec.rb +113 -113
  845. data/spec/io/io_multiplexer_spec.rb +94 -94
  846. data/spec/io/json_drb_object_spec.rb +99 -99
  847. data/spec/io/json_drb_spec.rb +311 -311
  848. data/spec/io/json_rpc_spec.rb +264 -264
  849. data/spec/io/raw_logger_pair_spec.rb +76 -76
  850. data/spec/io/raw_logger_spec.rb +133 -133
  851. data/spec/io/serial_driver_spec.rb +61 -61
  852. data/spec/io/stderr_spec.rb +32 -32
  853. data/spec/io/stdout_spec.rb +32 -32
  854. data/spec/io/tcpip_server_spec.rb +338 -338
  855. data/spec/io/udp_sockets_spec.rb +94 -94
  856. data/spec/io/win32_serial_driver_spec.rb +88 -88
  857. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
  858. data/spec/packet_logs/packet_log_reader_spec.rb +408 -408
  859. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
  860. data/spec/packet_logs/packet_log_writer_spec.rb +223 -223
  861. data/spec/packets/binary_accessor_spec.rb +2073 -2073
  862. data/spec/packets/commands_spec.rb +369 -369
  863. data/spec/packets/limits_response_spec.rb +25 -25
  864. data/spec/packets/limits_spec.rb +326 -326
  865. data/spec/packets/packet_config_spec.rb +1620 -1620
  866. data/spec/packets/packet_item_limits_spec.rb +161 -161
  867. data/spec/packets/packet_item_spec.rb +386 -386
  868. data/spec/packets/packet_spec.rb +1057 -949
  869. data/spec/packets/structure_item_spec.rb +195 -195
  870. data/spec/packets/structure_spec.rb +419 -419
  871. data/spec/packets/telemetry_spec.rb +535 -535
  872. data/spec/processors/new_packet_log_processor_spec.rb +39 -39
  873. data/spec/processors/processor_spec.rb +55 -55
  874. data/spec/processors/statistics_processor_spec.rb +60 -60
  875. data/spec/processors/watermark_processor_spec.rb +51 -51
  876. data/spec/script/script_spec.rb +654 -654
  877. data/spec/spec_helper.rb +154 -148
  878. data/spec/streams/burst_stream_protocol_spec.rb +32 -32
  879. data/spec/streams/fixed_stream_protocol_spec.rb +110 -110
  880. data/spec/streams/length_stream_protocol_spec.rb +297 -297
  881. data/spec/streams/preidentified_stream_protocol_spec.rb +118 -118
  882. data/spec/streams/serial_stream_spec.rb +105 -105
  883. data/spec/streams/stream_protocol_spec.rb +332 -332
  884. data/spec/streams/stream_spec.rb +29 -29
  885. data/spec/streams/tcpip_client_stream_spec.rb +54 -54
  886. data/spec/streams/tcpip_socket_stream_spec.rb +146 -146
  887. data/spec/streams/template_stream_protocol_spec.rb +151 -151
  888. data/spec/streams/terminated_stream_protocol_spec.rb +123 -123
  889. data/spec/system/system_spec.rb +645 -645
  890. data/spec/system/target_spec.rb +248 -248
  891. data/spec/tools/cmd_tlm_server/api_spec.rb +1087 -1113
  892. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
  893. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
  894. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +411 -411
  895. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
  896. data/spec/tools/cmd_tlm_server/commanding_spec.rb +123 -123
  897. data/spec/tools/cmd_tlm_server/connections_spec.rb +147 -147
  898. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
  899. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -238
  900. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
  901. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +98 -101
  902. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -208
  903. data/spec/top_level/top_level_spec.rb +334 -321
  904. data/spec/utilities/crc_spec.rb +45 -45
  905. data/spec/utilities/csv_spec.rb +97 -97
  906. data/spec/utilities/logger_spec.rb +102 -102
  907. data/spec/utilities/message_log_spec.rb +89 -89
  908. data/spec/utilities/quaternion_spec.rb +107 -107
  909. data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
  910. data/tasks/manifest.rake +22 -22
  911. data/tasks/spec.rake +23 -23
  912. metadata +18 -2
@@ -1,535 +1,535 @@
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 'spec_helper'
12
- require 'cosmos'
13
- require 'cosmos/packets/telemetry'
14
- require 'tempfile'
15
-
16
- module Cosmos
17
-
18
- describe Telemetry do
19
-
20
- describe "initialize" do
21
- it "should have no warnings" do
22
- Telemetry.new(PacketConfig.new).warnings.should be_empty
23
- end
24
- end
25
-
26
- before(:each) do
27
- tf = Tempfile.new('unittest')
28
- tf.puts '# This is a comment'
29
- tf.puts '#'
30
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "TGT1 PKT1 Description"'
31
- tf.puts ' APPEND_ID_ITEM item1 8 UINT 1 "Item1"'
32
- tf.puts ' LIMITS DEFAULT 1 ENABLED 1 2 4 5'
33
- tf.puts ' APPEND_ITEM item2 8 UINT "Item2"'
34
- tf.puts ' LIMITS DEFAULT 1 ENABLED 1 2 4 5'
35
- tf.puts ' APPEND_ITEM item3 8 UINT "Item3"'
36
- tf.puts ' POLY_READ_CONVERSION 0 2'
37
- tf.puts ' APPEND_ITEM item4 8 UINT "Item4"'
38
- tf.puts ' POLY_READ_CONVERSION 0 2'
39
- tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "TGT1 PKT2 Description"'
40
- tf.puts ' APPEND_ID_ITEM item1 8 UINT 2 "Item1"'
41
- tf.puts ' APPEND_ITEM item2 8 UINT "Item2"'
42
- tf.puts 'TELEMETRY tgt2 pkt1 LITTLE_ENDIAN "TGT2 PKT1 Description"'
43
- tf.puts ' APPEND_ID_ITEM item1 8 UINT 3 "Item1"'
44
- tf.puts ' APPEND_ITEM item2 8 UINT "Item2"'
45
- tf.close
46
-
47
- pc = PacketConfig.new
48
- pc.process_file(tf.path, "SYSTEM")
49
- @tlm = Telemetry.new(pc)
50
- tf.unlink
51
- end
52
-
53
- describe "target_names" do
54
- it "should return an array with just UNKNOWN if no targets" do
55
- Telemetry.new(PacketConfig.new).target_names.should eql ["UNKNOWN"]
56
- end
57
-
58
- it "should return all target names" do
59
- @tlm.target_names.should eql ["TGT1","TGT2","UNKNOWN"]
60
- end
61
- end
62
-
63
- describe "packets" do
64
- it "should complain about non-existant targets" do
65
- expect { @tlm.packets("tgtX") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
66
- end
67
-
68
- it "should return all packets target TGT1" do
69
- pkts = @tlm.packets("TGT1")
70
- pkts.length.should eql 2
71
- pkts.keys.should include("PKT1")
72
- pkts.keys.should include("PKT2")
73
- end
74
-
75
- it "should return all packets target TGT2" do
76
- pkts = @tlm.packets("TGT2")
77
- pkts.length.should eql 1
78
- pkts.keys.should include("PKT1")
79
- end
80
- end
81
-
82
- describe "packet" do
83
- it "should complain about non-existant targets" do
84
- expect { @tlm.packet("tgtX","pkt1") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
85
- end
86
-
87
- it "should complain about non-existant packets" do
88
- expect { @tlm.packet("TGT1","PKTX") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 PKTX' does not exist")
89
- end
90
-
91
- it "should complain about the 'LATEST' packet" do
92
- expect { @tlm.packet("TGT1","LATEST") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 LATEST' does not exist")
93
- end
94
-
95
- it "should return the specified packet" do
96
- pkt = @tlm.packet("TGT1","PKT1")
97
- pkt.target_name.should eql "TGT1"
98
- pkt.packet_name.should eql "PKT1"
99
- end
100
- end
101
-
102
- describe "items" do
103
- it "should complain about non-existant targets" do
104
- expect { @tlm.items("tgtX","pkt1") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
105
- end
106
-
107
- it "should complain about non-existant packets" do
108
- expect { @tlm.items("TGT1","PKTX") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 PKTX' does not exist")
109
- end
110
-
111
- it "should complain about the 'LATEST' packet" do
112
- expect { @tlm.items("TGT1","LATEST") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 LATEST' does not exist")
113
- end
114
-
115
- it "should return all items from packet TGT1/PKT1" do
116
- items = @tlm.items("TGT1","PKT1")
117
- items.length.should eql 7
118
- items[0].name.should eql "RECEIVED_TIMESECONDS"
119
- items[1].name.should eql "RECEIVED_TIMEFORMATTED"
120
- items[2].name.should eql "RECEIVED_COUNT"
121
- items[3].name.should eql "ITEM1"
122
- items[4].name.should eql "ITEM2"
123
- items[5].name.should eql "ITEM3"
124
- items[6].name.should eql "ITEM4"
125
- end
126
- end
127
-
128
- describe "item_names" do
129
- it "should return all the items for a given target and packet" do
130
- items = @tlm.item_names("TGT1","PKT1")
131
- expect(items).to contain_exactly('RECEIVED_TIMEFORMATTED','RECEIVED_TIMESECONDS','RECEIVED_COUNT','ITEM1','ITEM2','ITEM3','ITEM4')
132
-
133
- items = @tlm.item_names("TGT1","LATEST")
134
- expect(items).to contain_exactly('ITEM1','ITEM2','ITEM3','ITEM4')
135
- end
136
- end
137
-
138
- describe "packet_and_item" do
139
- it "should complain about non-existant targets" do
140
- expect { @tlm.packet_and_item("tgtX","pkt1","item1") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
141
- end
142
-
143
- it "should complain about non-existant packets" do
144
- expect { @tlm.packet_and_item("TGT1","PKTX","ITEM1") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 PKTX' does not exist")
145
- end
146
-
147
- it "should complain about non-existant items" do
148
- expect { @tlm.packet_and_item("TGT1","PKT1","ITEMX") }.to raise_error(RuntimeError, "Packet item 'TGT1 PKT1 ITEMX' does not exist")
149
- end
150
-
151
- it "should return the packet and item" do
152
- pkt,item = @tlm.packet_and_item("TGT1","PKT1","ITEM1")
153
- item.name.should eql "ITEM1"
154
- end
155
-
156
- it "should return the LATEST packet and item if it exists" do
157
- pkt,item = @tlm.packet_and_item("TGT1","LATEST","ITEM1")
158
- pkt.packet_name.should eql "PKT2"
159
- item.name.should eql "ITEM1"
160
- end
161
- end
162
-
163
- describe "latest_packets" do
164
- it "should complain about non-existant targets" do
165
- expect { @tlm.latest_packets("tgtX","item1") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
166
- end
167
-
168
- it "should complain about non-existant items" do
169
- expect { @tlm.latest_packets("TGT1","ITEMX") }.to raise_error(RuntimeError, "Telemetry item 'TGT1 LATEST ITEMX' does not exist")
170
- end
171
-
172
- it "should return the packets that contain the item" do
173
- pkts = @tlm.latest_packets("TGT1","ITEM1")
174
- pkts.length.should eql 2
175
- pkts[0].packet_name.should eql "PKT1"
176
- pkts[1].packet_name.should eql "PKT2"
177
- end
178
- end
179
-
180
- describe "newest_packet" do
181
- it "should complain about non-existant targets" do
182
- expect { @tlm.newest_packet("tgtX","item1") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
183
- end
184
-
185
- it "should complain about non-existant items" do
186
- expect { @tlm.newest_packet("TGT1","ITEMX") }.to raise_error(RuntimeError, "Telemetry item 'TGT1 LATEST ITEMX' does not exist")
187
- end
188
-
189
- context "with two valid timestamps" do
190
- it "should return the latest packet (PKT1)" do
191
- time = Time.now
192
- @tlm.packet("TGT1","PKT1").received_time = time + 1
193
- @tlm.packet("TGT1","PKT2").received_time = time
194
- pkt = @tlm.newest_packet("TGT1","ITEM1")
195
- pkt.packet_name.should eql "PKT1"
196
- pkt.received_time.should eql(time + 1)
197
- end
198
-
199
- it "should return the latest packet (PKT2)" do
200
- time = Time.now
201
- @tlm.packet("TGT1","PKT1").received_time = time
202
- @tlm.packet("TGT1","PKT2").received_time = time + 1
203
- pkt = @tlm.newest_packet("TGT1","ITEM1")
204
- pkt.packet_name.should eql "PKT2"
205
- pkt.received_time.should eql(time + 1)
206
- end
207
-
208
- it "should return the last packet if timestamps are equal" do
209
- time = Time.now
210
- @tlm.packet("TGT1","PKT1").received_time = time
211
- @tlm.packet("TGT1","PKT2").received_time = time
212
- pkt = @tlm.newest_packet("TGT1","ITEM1")
213
- pkt.packet_name.should eql "PKT2"
214
- pkt.received_time.should eql(time)
215
- end
216
- end
217
-
218
- context "with one or more nil timestamps" do
219
- it "should return the last packet if neither has a timestamp" do
220
- pkt = @tlm.newest_packet("TGT1","ITEM1")
221
- pkt.packet_name.should eql "PKT2"
222
- pkt.received_time.should be_nil
223
- end
224
-
225
- it "should return the packet with a timestamp (PKT1)" do
226
- time = Time.now
227
- @tlm.packet("TGT1","PKT1").received_time = time
228
- pkt = @tlm.newest_packet("TGT1","ITEM1")
229
- pkt.packet_name.should eql "PKT1"
230
- pkt.received_time.should eql time
231
- end
232
-
233
- it "should return the packet with a timestamp (PKT2)" do
234
- time = Time.now
235
- @tlm.packet("TGT1","PKT2").received_time = time
236
- pkt = @tlm.newest_packet("TGT1","ITEM1")
237
- pkt.packet_name.should eql "PKT2"
238
- pkt.received_time.should eql time
239
- end
240
- end
241
- end
242
-
243
- describe "identify!" do
244
- it "should return nil with a nil buffer" do
245
- @tlm.identify!(nil).should be_nil
246
- end
247
-
248
- it "should only check the targets given" do
249
- buffer = "\x01\x02\x03\x04"
250
- @tlm.identify!(buffer,["TGT1"])
251
- pkt = @tlm.packet("TGT1","PKT1")
252
- pkt.enable_method_missing
253
- pkt.item1.should eql 1
254
- pkt.item2.should eql 2
255
- pkt.item3.should eql 6.0
256
- pkt.item4.should eql 8.0
257
- end
258
-
259
- it "should return nil with unknown targets given" do
260
- buffer = "\x01\x02\x03\x04"
261
- @tlm.identify!(buffer,["TGTX"]).should be_nil
262
- end
263
-
264
- context "with an unknown buffer" do
265
- it "should log an invalid sized buffer" do
266
- capture_io do |stdout|
267
- buffer = "\x01\x02\x03\x04\x05"
268
- @tlm.identify!(buffer)
269
- pkt = @tlm.packet("TGT1","PKT1")
270
- pkt.enable_method_missing
271
- pkt.item1.should eql 1
272
- pkt.item2.should eql 2
273
- pkt.item3.should eql 6.0
274
- pkt.item4.should eql 8.0
275
- stdout.string.should match(/ERROR: TGT1 PKT1 received with actual packet length of 5 but defined length of 4/)
276
- end
277
- end
278
-
279
- it "should identify TGT1 PKT1" do
280
- buffer = "\x01\x02\x03\x04"
281
- @tlm.identify!(buffer)
282
- pkt = @tlm.packet("TGT1","PKT1")
283
- pkt.enable_method_missing
284
- pkt.item1.should eql 1
285
- pkt.item2.should eql 2
286
- pkt.item3.should eql 6.0
287
- pkt.item4.should eql 8.0
288
- end
289
-
290
- it "should identify TGT1 PKT2" do
291
- buffer = "\x02\x02"
292
- @tlm.identify!(buffer)
293
- pkt = @tlm.packet("TGT1","PKT2")
294
- pkt.enable_method_missing
295
- pkt.item1.should eql 2
296
- pkt.item2.should eql 2
297
- end
298
-
299
- it "should identify TGT2 PKT1" do
300
- buffer = "\x03\x02"
301
- @tlm.identify!(buffer)
302
- pkt = @tlm.packet("TGT2","PKT1")
303
- pkt.enable_method_missing
304
- pkt.item1.should eql 3
305
- pkt.item2.should eql 2
306
- end
307
- end
308
- end
309
-
310
- describe "update!" do
311
- it "should complain about non-existant targets" do
312
- expect { @tlm.update!("TGTX","PKT1","\x00") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
313
- end
314
-
315
- it "should complain about non-existant packets" do
316
- expect { @tlm.update!("TGT1","PKTX","\x00") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 PKTX' does not exist")
317
- end
318
-
319
- it "should complain about the 'LATEST' packet" do
320
- expect { @tlm.update!("TGT1","LATEST","\x00") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 LATEST' does not exist")
321
- end
322
-
323
- it "should complain with a nil buffer" do
324
- expect { @tlm.update!("TGT1","PKT1",nil) }.to raise_error(ArgumentError, "Buffer class is NilClass but must be String")
325
- end
326
-
327
- it "should log an invalid sized buffer" do
328
- capture_io do |stdout|
329
- buffer = "\x01\x02\x03\x04\x05"
330
- @tlm.update!("TGT1","PKT1",buffer)
331
- pkt = @tlm.packet("TGT1","PKT1")
332
- pkt.enable_method_missing
333
- pkt.item1.should eql 1
334
- pkt.item2.should eql 2
335
- pkt.item3.should eql 6.0
336
- pkt.item4.should eql 8.0
337
- stdout.string.should match(/ERROR: TGT1 PKT1 received with actual packet length of 5 but defined length of 4/)
338
- end
339
- end
340
-
341
- it "should update a packet with the given data" do
342
- @tlm.update!("TGT1","PKT1","\x01\x02\x03\x04")
343
- pkt = @tlm.packet("TGT1","PKT1")
344
- pkt.enable_method_missing
345
- pkt.item1.should eql 1
346
- pkt.item2.should eql 2
347
- pkt.item3.should eql 6.0
348
- pkt.item4.should eql 8.0
349
- end
350
- end
351
-
352
- describe "limits_change_callback" do
353
- it "should assign a callback to each packet" do
354
- callback = Object.new
355
- expect(callback).to receive(:call).twice
356
- @tlm.limits_change_callback = callback
357
- @tlm.update!("TGT1","PKT1","\x01\x02\x03\x04")
358
- @tlm.update!("TGT1","PKT2","\x05\x06")
359
- @tlm.update!("TGT2","PKT1","\x07\x08")
360
- @tlm.packet("TGT1","PKT1").check_limits
361
- @tlm.packet("TGT1","PKT2").check_limits
362
- @tlm.packet("TGT2","PKT1").check_limits
363
- end
364
- end
365
-
366
- describe "check_stale" do
367
- it "should check each packet for staleness" do
368
- @tlm.check_stale
369
- @tlm.packet("TGT1","PKT1").stale.should be_truthy
370
- @tlm.packet("TGT1","PKT2").stale.should be_truthy
371
- @tlm.packet("TGT2","PKT1").stale.should be_truthy
372
-
373
- @tlm.packet("TGT1","PKT1").check_limits
374
- @tlm.packet("TGT1","PKT2").check_limits
375
- @tlm.packet("TGT2","PKT1").check_limits
376
- @tlm.check_stale
377
- @tlm.packet("TGT1","PKT1").stale.should be_falsey
378
- @tlm.packet("TGT1","PKT2").stale.should be_falsey
379
- @tlm.packet("TGT2","PKT1").stale.should be_falsey
380
- end
381
- end
382
-
383
- describe "clear_counters" do
384
- it "should clear each packet's receive count " do
385
- @tlm.packet("TGT1","PKT1").received_count = 1
386
- @tlm.packet("TGT1","PKT2").received_count = 2
387
- @tlm.packet("TGT2","PKT1").received_count = 3
388
- @tlm.clear_counters
389
- @tlm.packet("TGT1","PKT1").received_count.should eql 0
390
- @tlm.packet("TGT1","PKT2").received_count.should eql 0
391
- @tlm.packet("TGT2","PKT1").received_count.should eql 0
392
- end
393
- end
394
-
395
- describe "value" do
396
- it "should complain about non-existant targets" do
397
- expect { @tlm.value("TGTX","PKT1","ITEM1") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
398
- end
399
-
400
- it "should complain about non-existant packets" do
401
- expect { @tlm.value("TGT1","PKTX","ITEM1") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 PKTX' does not exist")
402
- end
403
-
404
- it "should complain about non-existant items" do
405
- expect { @tlm.value("TGT1","PKT1","ITEMX") }.to raise_error(RuntimeError, "Packet item 'TGT1 PKT1 ITEMX' does not exist")
406
- end
407
-
408
- it "should return the value" do
409
- @tlm.value("TGT1","PKT1","ITEM1").should eql 0
410
- end
411
-
412
- it "should return the value using LATEST" do
413
- @tlm.value("TGT1","LATEST","ITEM1").should eql 0
414
- end
415
- end
416
-
417
- describe "set_tlm" do
418
- it "should complain about non-existant targets" do
419
- expect { @tlm.set_value("TGTX","PKT1","ITEM1", 1) }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
420
- end
421
-
422
- it "should complain about non-existant packets" do
423
- expect { @tlm.set_value("TGT1","PKTX","ITEM1", 1) }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 PKTX' does not exist")
424
- end
425
-
426
- it "should complain about non-existant items" do
427
- expect { @tlm.set_value("TGT1","PKT1","ITEMX", 1) }.to raise_error(RuntimeError, "Packet item 'TGT1 PKT1 ITEMX' does not exist")
428
- end
429
-
430
- it "should set the value" do
431
- @tlm.set_value("TGT1","PKT1","ITEM1",1)
432
- @tlm.value("TGT1","PKT1","ITEM1").should eql 1
433
- end
434
-
435
- it "should set the value using LATEST" do
436
- @tlm.set_value("TGT1","LATEST","ITEM1",1)
437
- @tlm.value("TGT1","PKT1","ITEM1").should eql 0
438
- @tlm.value("TGT1","PKT2","ITEM1").should eql 1
439
- end
440
- end
441
-
442
- describe "values_and_limits_states" do
443
- it "should complain about non-existant targets" do
444
- expect { @tlm.values_and_limits_states([["TGTX","PKT1","ITEM1"]]) }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
445
- end
446
-
447
- it "should complain about non-existant packets" do
448
- expect { @tlm.values_and_limits_states([["TGT1","PKTX","ITEM1"]]) }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 PKTX' does not exist")
449
- end
450
-
451
- it "should complain about non-existant items" do
452
- expect { @tlm.values_and_limits_states([["TGT1","PKT1","ITEMX"]]) }.to raise_error(RuntimeError, "Packet item 'TGT1 PKT1 ITEMX' does not exist")
453
- end
454
-
455
- it "should complain about non-existant value_types" do
456
- expect { @tlm.values_and_limits_states([["TGT1","PKT1","ITEM1"]],:MINE) }.to raise_error(ArgumentError, "Unknown value type on read: MINE")
457
- end
458
-
459
- it "should complain if passed a single array" do
460
- expect { @tlm.values_and_limits_states(["TGT1","PKT1","ITEM1"]) }.to raise_error(ArgumentError, /item_array must be a nested array/)
461
- end
462
-
463
- it "should complain about the wrong number of parameters" do
464
- expect { @tlm.values_and_limits_states([["TGT1","PKT1","ITEM1"]],:RAW,:RAW) }.to raise_error(ArgumentError, /wrong number of arguments/)
465
- end
466
-
467
- it "should read all the specified values" do
468
- @tlm.update!("TGT1","PKT1","\x01\x02\x03\x04")
469
- @tlm.update!("TGT1","PKT2","\x05\x06")
470
- @tlm.update!("TGT2","PKT1","\x07\x08")
471
- @tlm.packet("TGT1","PKT1").check_limits
472
- @tlm.packet("TGT1","PKT2").check_limits
473
- @tlm.packet("TGT2","PKT1").check_limits
474
- items = []
475
- items << %w(TGT1 PKT1 ITEM1)
476
- items << %w(TGT1 PKT2 ITEM2)
477
- items << %w(TGT2 PKT1 ITEM1)
478
- vals = @tlm.values_and_limits_states(items)
479
- vals[0][0].should eql 1
480
- vals[0][1].should eql 6
481
- vals[0][2].should eql 7
482
- vals[1][0].should eql :RED_LOW
483
- vals[1][1].should be_nil
484
- vals[1][2].should be_nil
485
- vals[2][0].should eql [1.0, 2.0, 4.0, 5.0]
486
- vals[2][1].should be_nil
487
- vals[2][2].should be_nil
488
- end
489
-
490
- it "should read all the specified values with specified value_types" do
491
- @tlm.update!("TGT1","PKT1","\x01\x02\x03\x04")
492
- @tlm.update!("TGT1","PKT2","\x05\x06")
493
- @tlm.update!("TGT2","PKT1","\x07\x08")
494
- @tlm.packet("TGT1","PKT1").check_limits
495
- @tlm.packet("TGT1","PKT2").check_limits
496
- @tlm.packet("TGT2","PKT1").check_limits
497
- items = []
498
- items << %w(TGT1 PKT1 ITEM1)
499
- items << %w(TGT1 PKT1 ITEM2)
500
- items << %w(TGT1 PKT1 ITEM3)
501
- items << %w(TGT1 PKT1 ITEM4)
502
- items << %w(TGT1 PKT2 ITEM2)
503
- items << %w(TGT2 PKT1 ITEM1)
504
- formats = [:CONVERTED, :RAW, :CONVERTED, :RAW, :CONVERTED, :CONVERTED]
505
- vals = @tlm.values_and_limits_states(items,formats)
506
- vals[0][0].should eql 1
507
- vals[0][1].should eql 2
508
- vals[0][2].should eql 6.0
509
- vals[0][3].should eql 4
510
- vals[0][4].should eql 6
511
- vals[0][5].should eql 7
512
- vals[1][0].should eql :RED_LOW
513
- vals[1][1].should eql :YELLOW_LOW
514
- vals[1][2].should be_nil
515
- vals[1][3].should be_nil
516
- vals[1][4].should be_nil
517
- vals[1][5].should be_nil
518
- vals[2][0].should eql [1.0, 2.0, 4.0, 5.0]
519
- vals[2][1].should eql [1.0, 2.0, 4.0, 5.0]
520
- vals[2][2].should be_nil
521
- vals[2][3].should be_nil
522
- vals[2][4].should be_nil
523
- vals[2][5].should be_nil
524
- end
525
- end
526
-
527
- describe "all" do
528
- it "should return all packets" do
529
- @tlm.all.keys.should eql %w(UNKNOWN TGT1 TGT2)
530
- end
531
- end
532
-
533
- end
534
- end
535
-
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 'spec_helper'
12
+ require 'cosmos'
13
+ require 'cosmos/packets/telemetry'
14
+ require 'tempfile'
15
+
16
+ module Cosmos
17
+
18
+ describe Telemetry do
19
+
20
+ describe "initialize" do
21
+ it "should have no warnings" do
22
+ Telemetry.new(PacketConfig.new).warnings.should be_empty
23
+ end
24
+ end
25
+
26
+ before(:each) do
27
+ tf = Tempfile.new('unittest')
28
+ tf.puts '# This is a comment'
29
+ tf.puts '#'
30
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "TGT1 PKT1 Description"'
31
+ tf.puts ' APPEND_ID_ITEM item1 8 UINT 1 "Item1"'
32
+ tf.puts ' LIMITS DEFAULT 1 ENABLED 1 2 4 5'
33
+ tf.puts ' APPEND_ITEM item2 8 UINT "Item2"'
34
+ tf.puts ' LIMITS DEFAULT 1 ENABLED 1 2 4 5'
35
+ tf.puts ' APPEND_ITEM item3 8 UINT "Item3"'
36
+ tf.puts ' POLY_READ_CONVERSION 0 2'
37
+ tf.puts ' APPEND_ITEM item4 8 UINT "Item4"'
38
+ tf.puts ' POLY_READ_CONVERSION 0 2'
39
+ tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "TGT1 PKT2 Description"'
40
+ tf.puts ' APPEND_ID_ITEM item1 8 UINT 2 "Item1"'
41
+ tf.puts ' APPEND_ITEM item2 8 UINT "Item2"'
42
+ tf.puts 'TELEMETRY tgt2 pkt1 LITTLE_ENDIAN "TGT2 PKT1 Description"'
43
+ tf.puts ' APPEND_ID_ITEM item1 8 UINT 3 "Item1"'
44
+ tf.puts ' APPEND_ITEM item2 8 UINT "Item2"'
45
+ tf.close
46
+
47
+ pc = PacketConfig.new
48
+ pc.process_file(tf.path, "SYSTEM")
49
+ @tlm = Telemetry.new(pc)
50
+ tf.unlink
51
+ end
52
+
53
+ describe "target_names" do
54
+ it "should return an array with just UNKNOWN if no targets" do
55
+ Telemetry.new(PacketConfig.new).target_names.should eql ["UNKNOWN"]
56
+ end
57
+
58
+ it "should return all target names" do
59
+ @tlm.target_names.should eql ["TGT1","TGT2","UNKNOWN"]
60
+ end
61
+ end
62
+
63
+ describe "packets" do
64
+ it "should complain about non-existant targets" do
65
+ expect { @tlm.packets("tgtX") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
66
+ end
67
+
68
+ it "should return all packets target TGT1" do
69
+ pkts = @tlm.packets("TGT1")
70
+ pkts.length.should eql 2
71
+ pkts.keys.should include("PKT1")
72
+ pkts.keys.should include("PKT2")
73
+ end
74
+
75
+ it "should return all packets target TGT2" do
76
+ pkts = @tlm.packets("TGT2")
77
+ pkts.length.should eql 1
78
+ pkts.keys.should include("PKT1")
79
+ end
80
+ end
81
+
82
+ describe "packet" do
83
+ it "should complain about non-existant targets" do
84
+ expect { @tlm.packet("tgtX","pkt1") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
85
+ end
86
+
87
+ it "should complain about non-existant packets" do
88
+ expect { @tlm.packet("TGT1","PKTX") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 PKTX' does not exist")
89
+ end
90
+
91
+ it "should complain about the 'LATEST' packet" do
92
+ expect { @tlm.packet("TGT1","LATEST") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 LATEST' does not exist")
93
+ end
94
+
95
+ it "should return the specified packet" do
96
+ pkt = @tlm.packet("TGT1","PKT1")
97
+ pkt.target_name.should eql "TGT1"
98
+ pkt.packet_name.should eql "PKT1"
99
+ end
100
+ end
101
+
102
+ describe "items" do
103
+ it "should complain about non-existant targets" do
104
+ expect { @tlm.items("tgtX","pkt1") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
105
+ end
106
+
107
+ it "should complain about non-existant packets" do
108
+ expect { @tlm.items("TGT1","PKTX") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 PKTX' does not exist")
109
+ end
110
+
111
+ it "should complain about the 'LATEST' packet" do
112
+ expect { @tlm.items("TGT1","LATEST") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 LATEST' does not exist")
113
+ end
114
+
115
+ it "should return all items from packet TGT1/PKT1" do
116
+ items = @tlm.items("TGT1","PKT1")
117
+ items.length.should eql 7
118
+ items[0].name.should eql "RECEIVED_TIMESECONDS"
119
+ items[1].name.should eql "RECEIVED_TIMEFORMATTED"
120
+ items[2].name.should eql "RECEIVED_COUNT"
121
+ items[3].name.should eql "ITEM1"
122
+ items[4].name.should eql "ITEM2"
123
+ items[5].name.should eql "ITEM3"
124
+ items[6].name.should eql "ITEM4"
125
+ end
126
+ end
127
+
128
+ describe "item_names" do
129
+ it "should return all the items for a given target and packet" do
130
+ items = @tlm.item_names("TGT1","PKT1")
131
+ expect(items).to contain_exactly('RECEIVED_TIMEFORMATTED','RECEIVED_TIMESECONDS','RECEIVED_COUNT','ITEM1','ITEM2','ITEM3','ITEM4')
132
+
133
+ items = @tlm.item_names("TGT1","LATEST")
134
+ expect(items).to contain_exactly('ITEM1','ITEM2','ITEM3','ITEM4')
135
+ end
136
+ end
137
+
138
+ describe "packet_and_item" do
139
+ it "should complain about non-existant targets" do
140
+ expect { @tlm.packet_and_item("tgtX","pkt1","item1") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
141
+ end
142
+
143
+ it "should complain about non-existant packets" do
144
+ expect { @tlm.packet_and_item("TGT1","PKTX","ITEM1") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 PKTX' does not exist")
145
+ end
146
+
147
+ it "should complain about non-existant items" do
148
+ expect { @tlm.packet_and_item("TGT1","PKT1","ITEMX") }.to raise_error(RuntimeError, "Packet item 'TGT1 PKT1 ITEMX' does not exist")
149
+ end
150
+
151
+ it "should return the packet and item" do
152
+ pkt,item = @tlm.packet_and_item("TGT1","PKT1","ITEM1")
153
+ item.name.should eql "ITEM1"
154
+ end
155
+
156
+ it "should return the LATEST packet and item if it exists" do
157
+ pkt,item = @tlm.packet_and_item("TGT1","LATEST","ITEM1")
158
+ pkt.packet_name.should eql "PKT2"
159
+ item.name.should eql "ITEM1"
160
+ end
161
+ end
162
+
163
+ describe "latest_packets" do
164
+ it "should complain about non-existant targets" do
165
+ expect { @tlm.latest_packets("tgtX","item1") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
166
+ end
167
+
168
+ it "should complain about non-existant items" do
169
+ expect { @tlm.latest_packets("TGT1","ITEMX") }.to raise_error(RuntimeError, "Telemetry item 'TGT1 LATEST ITEMX' does not exist")
170
+ end
171
+
172
+ it "should return the packets that contain the item" do
173
+ pkts = @tlm.latest_packets("TGT1","ITEM1")
174
+ pkts.length.should eql 2
175
+ pkts[0].packet_name.should eql "PKT1"
176
+ pkts[1].packet_name.should eql "PKT2"
177
+ end
178
+ end
179
+
180
+ describe "newest_packet" do
181
+ it "should complain about non-existant targets" do
182
+ expect { @tlm.newest_packet("tgtX","item1") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
183
+ end
184
+
185
+ it "should complain about non-existant items" do
186
+ expect { @tlm.newest_packet("TGT1","ITEMX") }.to raise_error(RuntimeError, "Telemetry item 'TGT1 LATEST ITEMX' does not exist")
187
+ end
188
+
189
+ context "with two valid timestamps" do
190
+ it "should return the latest packet (PKT1)" do
191
+ time = Time.now
192
+ @tlm.packet("TGT1","PKT1").received_time = time + 1
193
+ @tlm.packet("TGT1","PKT2").received_time = time
194
+ pkt = @tlm.newest_packet("TGT1","ITEM1")
195
+ pkt.packet_name.should eql "PKT1"
196
+ pkt.received_time.should eql(time + 1)
197
+ end
198
+
199
+ it "should return the latest packet (PKT2)" do
200
+ time = Time.now
201
+ @tlm.packet("TGT1","PKT1").received_time = time
202
+ @tlm.packet("TGT1","PKT2").received_time = time + 1
203
+ pkt = @tlm.newest_packet("TGT1","ITEM1")
204
+ pkt.packet_name.should eql "PKT2"
205
+ pkt.received_time.should eql(time + 1)
206
+ end
207
+
208
+ it "should return the last packet if timestamps are equal" do
209
+ time = Time.now
210
+ @tlm.packet("TGT1","PKT1").received_time = time
211
+ @tlm.packet("TGT1","PKT2").received_time = time
212
+ pkt = @tlm.newest_packet("TGT1","ITEM1")
213
+ pkt.packet_name.should eql "PKT2"
214
+ pkt.received_time.should eql(time)
215
+ end
216
+ end
217
+
218
+ context "with one or more nil timestamps" do
219
+ it "should return the last packet if neither has a timestamp" do
220
+ pkt = @tlm.newest_packet("TGT1","ITEM1")
221
+ pkt.packet_name.should eql "PKT2"
222
+ pkt.received_time.should be_nil
223
+ end
224
+
225
+ it "should return the packet with a timestamp (PKT1)" do
226
+ time = Time.now
227
+ @tlm.packet("TGT1","PKT1").received_time = time
228
+ pkt = @tlm.newest_packet("TGT1","ITEM1")
229
+ pkt.packet_name.should eql "PKT1"
230
+ pkt.received_time.should eql time
231
+ end
232
+
233
+ it "should return the packet with a timestamp (PKT2)" do
234
+ time = Time.now
235
+ @tlm.packet("TGT1","PKT2").received_time = time
236
+ pkt = @tlm.newest_packet("TGT1","ITEM1")
237
+ pkt.packet_name.should eql "PKT2"
238
+ pkt.received_time.should eql time
239
+ end
240
+ end
241
+ end
242
+
243
+ describe "identify!" do
244
+ it "should return nil with a nil buffer" do
245
+ @tlm.identify!(nil).should be_nil
246
+ end
247
+
248
+ it "should only check the targets given" do
249
+ buffer = "\x01\x02\x03\x04"
250
+ @tlm.identify!(buffer,["TGT1"])
251
+ pkt = @tlm.packet("TGT1","PKT1")
252
+ pkt.enable_method_missing
253
+ pkt.item1.should eql 1
254
+ pkt.item2.should eql 2
255
+ pkt.item3.should eql 6.0
256
+ pkt.item4.should eql 8.0
257
+ end
258
+
259
+ it "should return nil with unknown targets given" do
260
+ buffer = "\x01\x02\x03\x04"
261
+ @tlm.identify!(buffer,["TGTX"]).should be_nil
262
+ end
263
+
264
+ context "with an unknown buffer" do
265
+ it "should log an invalid sized buffer" do
266
+ capture_io do |stdout|
267
+ buffer = "\x01\x02\x03\x04\x05"
268
+ @tlm.identify!(buffer)
269
+ pkt = @tlm.packet("TGT1","PKT1")
270
+ pkt.enable_method_missing
271
+ pkt.item1.should eql 1
272
+ pkt.item2.should eql 2
273
+ pkt.item3.should eql 6.0
274
+ pkt.item4.should eql 8.0
275
+ stdout.string.should match(/ERROR: TGT1 PKT1 received with actual packet length of 5 but defined length of 4/)
276
+ end
277
+ end
278
+
279
+ it "should identify TGT1 PKT1" do
280
+ buffer = "\x01\x02\x03\x04"
281
+ @tlm.identify!(buffer)
282
+ pkt = @tlm.packet("TGT1","PKT1")
283
+ pkt.enable_method_missing
284
+ pkt.item1.should eql 1
285
+ pkt.item2.should eql 2
286
+ pkt.item3.should eql 6.0
287
+ pkt.item4.should eql 8.0
288
+ end
289
+
290
+ it "should identify TGT1 PKT2" do
291
+ buffer = "\x02\x02"
292
+ @tlm.identify!(buffer)
293
+ pkt = @tlm.packet("TGT1","PKT2")
294
+ pkt.enable_method_missing
295
+ pkt.item1.should eql 2
296
+ pkt.item2.should eql 2
297
+ end
298
+
299
+ it "should identify TGT2 PKT1" do
300
+ buffer = "\x03\x02"
301
+ @tlm.identify!(buffer)
302
+ pkt = @tlm.packet("TGT2","PKT1")
303
+ pkt.enable_method_missing
304
+ pkt.item1.should eql 3
305
+ pkt.item2.should eql 2
306
+ end
307
+ end
308
+ end
309
+
310
+ describe "update!" do
311
+ it "should complain about non-existant targets" do
312
+ expect { @tlm.update!("TGTX","PKT1","\x00") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
313
+ end
314
+
315
+ it "should complain about non-existant packets" do
316
+ expect { @tlm.update!("TGT1","PKTX","\x00") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 PKTX' does not exist")
317
+ end
318
+
319
+ it "should complain about the 'LATEST' packet" do
320
+ expect { @tlm.update!("TGT1","LATEST","\x00") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 LATEST' does not exist")
321
+ end
322
+
323
+ it "should complain with a nil buffer" do
324
+ expect { @tlm.update!("TGT1","PKT1",nil) }.to raise_error(ArgumentError, "Buffer class is NilClass but must be String")
325
+ end
326
+
327
+ it "should log an invalid sized buffer" do
328
+ capture_io do |stdout|
329
+ buffer = "\x01\x02\x03\x04\x05"
330
+ @tlm.update!("TGT1","PKT1",buffer)
331
+ pkt = @tlm.packet("TGT1","PKT1")
332
+ pkt.enable_method_missing
333
+ pkt.item1.should eql 1
334
+ pkt.item2.should eql 2
335
+ pkt.item3.should eql 6.0
336
+ pkt.item4.should eql 8.0
337
+ stdout.string.should match(/ERROR: TGT1 PKT1 received with actual packet length of 5 but defined length of 4/)
338
+ end
339
+ end
340
+
341
+ it "should update a packet with the given data" do
342
+ @tlm.update!("TGT1","PKT1","\x01\x02\x03\x04")
343
+ pkt = @tlm.packet("TGT1","PKT1")
344
+ pkt.enable_method_missing
345
+ pkt.item1.should eql 1
346
+ pkt.item2.should eql 2
347
+ pkt.item3.should eql 6.0
348
+ pkt.item4.should eql 8.0
349
+ end
350
+ end
351
+
352
+ describe "limits_change_callback" do
353
+ it "should assign a callback to each packet" do
354
+ callback = Object.new
355
+ expect(callback).to receive(:call).twice
356
+ @tlm.limits_change_callback = callback
357
+ @tlm.update!("TGT1","PKT1","\x01\x02\x03\x04")
358
+ @tlm.update!("TGT1","PKT2","\x05\x06")
359
+ @tlm.update!("TGT2","PKT1","\x07\x08")
360
+ @tlm.packet("TGT1","PKT1").check_limits
361
+ @tlm.packet("TGT1","PKT2").check_limits
362
+ @tlm.packet("TGT2","PKT1").check_limits
363
+ end
364
+ end
365
+
366
+ describe "check_stale" do
367
+ it "should check each packet for staleness" do
368
+ @tlm.check_stale
369
+ @tlm.packet("TGT1","PKT1").stale.should be_truthy
370
+ @tlm.packet("TGT1","PKT2").stale.should be_truthy
371
+ @tlm.packet("TGT2","PKT1").stale.should be_truthy
372
+
373
+ @tlm.packet("TGT1","PKT1").check_limits
374
+ @tlm.packet("TGT1","PKT2").check_limits
375
+ @tlm.packet("TGT2","PKT1").check_limits
376
+ @tlm.check_stale
377
+ @tlm.packet("TGT1","PKT1").stale.should be_falsey
378
+ @tlm.packet("TGT1","PKT2").stale.should be_falsey
379
+ @tlm.packet("TGT2","PKT1").stale.should be_falsey
380
+ end
381
+ end
382
+
383
+ describe "clear_counters" do
384
+ it "should clear each packet's receive count " do
385
+ @tlm.packet("TGT1","PKT1").received_count = 1
386
+ @tlm.packet("TGT1","PKT2").received_count = 2
387
+ @tlm.packet("TGT2","PKT1").received_count = 3
388
+ @tlm.clear_counters
389
+ @tlm.packet("TGT1","PKT1").received_count.should eql 0
390
+ @tlm.packet("TGT1","PKT2").received_count.should eql 0
391
+ @tlm.packet("TGT2","PKT1").received_count.should eql 0
392
+ end
393
+ end
394
+
395
+ describe "value" do
396
+ it "should complain about non-existant targets" do
397
+ expect { @tlm.value("TGTX","PKT1","ITEM1") }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
398
+ end
399
+
400
+ it "should complain about non-existant packets" do
401
+ expect { @tlm.value("TGT1","PKTX","ITEM1") }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 PKTX' does not exist")
402
+ end
403
+
404
+ it "should complain about non-existant items" do
405
+ expect { @tlm.value("TGT1","PKT1","ITEMX") }.to raise_error(RuntimeError, "Packet item 'TGT1 PKT1 ITEMX' does not exist")
406
+ end
407
+
408
+ it "should return the value" do
409
+ @tlm.value("TGT1","PKT1","ITEM1").should eql 0
410
+ end
411
+
412
+ it "should return the value using LATEST" do
413
+ @tlm.value("TGT1","LATEST","ITEM1").should eql 0
414
+ end
415
+ end
416
+
417
+ describe "set_tlm" do
418
+ it "should complain about non-existant targets" do
419
+ expect { @tlm.set_value("TGTX","PKT1","ITEM1", 1) }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
420
+ end
421
+
422
+ it "should complain about non-existant packets" do
423
+ expect { @tlm.set_value("TGT1","PKTX","ITEM1", 1) }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 PKTX' does not exist")
424
+ end
425
+
426
+ it "should complain about non-existant items" do
427
+ expect { @tlm.set_value("TGT1","PKT1","ITEMX", 1) }.to raise_error(RuntimeError, "Packet item 'TGT1 PKT1 ITEMX' does not exist")
428
+ end
429
+
430
+ it "should set the value" do
431
+ @tlm.set_value("TGT1","PKT1","ITEM1",1)
432
+ @tlm.value("TGT1","PKT1","ITEM1").should eql 1
433
+ end
434
+
435
+ it "should set the value using LATEST" do
436
+ @tlm.set_value("TGT1","LATEST","ITEM1",1)
437
+ @tlm.value("TGT1","PKT1","ITEM1").should eql 0
438
+ @tlm.value("TGT1","PKT2","ITEM1").should eql 1
439
+ end
440
+ end
441
+
442
+ describe "values_and_limits_states" do
443
+ it "should complain about non-existant targets" do
444
+ expect { @tlm.values_and_limits_states([["TGTX","PKT1","ITEM1"]]) }.to raise_error(RuntimeError, "Telemetry target 'TGTX' does not exist")
445
+ end
446
+
447
+ it "should complain about non-existant packets" do
448
+ expect { @tlm.values_and_limits_states([["TGT1","PKTX","ITEM1"]]) }.to raise_error(RuntimeError, "Telemetry packet 'TGT1 PKTX' does not exist")
449
+ end
450
+
451
+ it "should complain about non-existant items" do
452
+ expect { @tlm.values_and_limits_states([["TGT1","PKT1","ITEMX"]]) }.to raise_error(RuntimeError, "Packet item 'TGT1 PKT1 ITEMX' does not exist")
453
+ end
454
+
455
+ it "should complain about non-existant value_types" do
456
+ expect { @tlm.values_and_limits_states([["TGT1","PKT1","ITEM1"]],:MINE) }.to raise_error(ArgumentError, "Unknown value type on read: MINE")
457
+ end
458
+
459
+ it "should complain if passed a single array" do
460
+ expect { @tlm.values_and_limits_states(["TGT1","PKT1","ITEM1"]) }.to raise_error(ArgumentError, /item_array must be a nested array/)
461
+ end
462
+
463
+ it "should complain about the wrong number of parameters" do
464
+ expect { @tlm.values_and_limits_states([["TGT1","PKT1","ITEM1"]],:RAW,:RAW) }.to raise_error(ArgumentError, /wrong number of arguments/)
465
+ end
466
+
467
+ it "should read all the specified values" do
468
+ @tlm.update!("TGT1","PKT1","\x01\x02\x03\x04")
469
+ @tlm.update!("TGT1","PKT2","\x05\x06")
470
+ @tlm.update!("TGT2","PKT1","\x07\x08")
471
+ @tlm.packet("TGT1","PKT1").check_limits
472
+ @tlm.packet("TGT1","PKT2").check_limits
473
+ @tlm.packet("TGT2","PKT1").check_limits
474
+ items = []
475
+ items << %w(TGT1 PKT1 ITEM1)
476
+ items << %w(TGT1 PKT2 ITEM2)
477
+ items << %w(TGT2 PKT1 ITEM1)
478
+ vals = @tlm.values_and_limits_states(items)
479
+ vals[0][0].should eql 1
480
+ vals[0][1].should eql 6
481
+ vals[0][2].should eql 7
482
+ vals[1][0].should eql :RED_LOW
483
+ vals[1][1].should be_nil
484
+ vals[1][2].should be_nil
485
+ vals[2][0].should eql [1.0, 2.0, 4.0, 5.0]
486
+ vals[2][1].should be_nil
487
+ vals[2][2].should be_nil
488
+ end
489
+
490
+ it "should read all the specified values with specified value_types" do
491
+ @tlm.update!("TGT1","PKT1","\x01\x02\x03\x04")
492
+ @tlm.update!("TGT1","PKT2","\x05\x06")
493
+ @tlm.update!("TGT2","PKT1","\x07\x08")
494
+ @tlm.packet("TGT1","PKT1").check_limits
495
+ @tlm.packet("TGT1","PKT2").check_limits
496
+ @tlm.packet("TGT2","PKT1").check_limits
497
+ items = []
498
+ items << %w(TGT1 PKT1 ITEM1)
499
+ items << %w(TGT1 PKT1 ITEM2)
500
+ items << %w(TGT1 PKT1 ITEM3)
501
+ items << %w(TGT1 PKT1 ITEM4)
502
+ items << %w(TGT1 PKT2 ITEM2)
503
+ items << %w(TGT2 PKT1 ITEM1)
504
+ formats = [:CONVERTED, :RAW, :CONVERTED, :RAW, :CONVERTED, :CONVERTED]
505
+ vals = @tlm.values_and_limits_states(items,formats)
506
+ vals[0][0].should eql 1
507
+ vals[0][1].should eql 2
508
+ vals[0][2].should eql 6.0
509
+ vals[0][3].should eql 4
510
+ vals[0][4].should eql 6
511
+ vals[0][5].should eql 7
512
+ vals[1][0].should eql :RED_LOW
513
+ vals[1][1].should eql :YELLOW_LOW
514
+ vals[1][2].should be_nil
515
+ vals[1][3].should be_nil
516
+ vals[1][4].should be_nil
517
+ vals[1][5].should be_nil
518
+ vals[2][0].should eql [1.0, 2.0, 4.0, 5.0]
519
+ vals[2][1].should eql [1.0, 2.0, 4.0, 5.0]
520
+ vals[2][2].should be_nil
521
+ vals[2][3].should be_nil
522
+ vals[2][4].should be_nil
523
+ vals[2][5].should be_nil
524
+ end
525
+ end
526
+
527
+ describe "all" do
528
+ it "should return all packets" do
529
+ @tlm.all.keys.should eql %w(UNKNOWN TGT1 TGT2)
530
+ end
531
+ end
532
+
533
+ end
534
+ end
535
+