cosmos 3.5.1 → 3.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1158) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -1
  3. data/.gitattributes +3 -3
  4. data/.gitignore +48 -48
  5. data/.travis.yml +8 -8
  6. data/CONTRIBUTING.txt +50 -50
  7. data/Gemfile +10 -10
  8. data/Guardfile +27 -27
  9. data/LICENSE.txt +879 -879
  10. data/Manifest.txt +1414 -1414
  11. data/README.md +111 -111
  12. data/Rakefile +218 -214
  13. data/autohotkey/config/data/diamond.STL +57 -57
  14. data/autohotkey/config/system/system.txt +34 -34
  15. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  16. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  17. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  18. data/autohotkey/config/targets/COSMOS/target.txt +5 -5
  19. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  20. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -270
  21. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
  22. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
  23. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -305
  24. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
  25. data/autohotkey/config/targets/INST/screens/array.txt +7 -7
  26. data/autohotkey/config/targets/INST/screens/block.txt +8 -8
  27. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
  28. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
  29. data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
  30. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
  31. data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
  32. data/autohotkey/config/targets/INST/screens/image.txt +21 -21
  33. data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
  34. data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
  35. data/autohotkey/config/targets/INST/screens/other.txt +25 -25
  36. data/autohotkey/config/targets/INST/screens/params.txt +25 -25
  37. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
  38. data/autohotkey/config/targets/INST/target.txt +26 -26
  39. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  40. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
  41. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  42. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
  43. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
  44. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
  45. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
  46. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  47. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  48. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  49. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
  50. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  51. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  52. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  53. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  54. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  55. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  56. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  57. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  58. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
  59. data/autohotkey/config/tools/launcher/launcher.txt +38 -38
  60. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
  61. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
  62. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
  63. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
  64. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
  65. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
  66. data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
  67. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  68. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  69. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
  70. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
  71. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
  72. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
  73. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
  74. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
  75. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
  76. data/autohotkey/lib/example_background_task.rb +42 -42
  77. data/autohotkey/lib/user_version.rb +3 -3
  78. data/autohotkey/procedures/clear_util.rb +7 -7
  79. data/autohotkey/procedures/collect_util.rb +14 -14
  80. data/autohotkey/procedures/example_test.rb +67 -67
  81. data/autohotkey/procedures/example_test2.rb +74 -74
  82. data/autohotkey/procedures/script_test.rb +17 -17
  83. data/autohotkey/procedures/syntax_error.rb +18 -18
  84. data/autohotkey/tools/CmdExtractorAHK +16 -16
  85. data/autohotkey/tools/CmdSender +14 -14
  86. data/autohotkey/tools/CmdSenderAHK +18 -18
  87. data/autohotkey/tools/CmdTlmServer +14 -14
  88. data/autohotkey/tools/CmdTlmServerAHK +28 -28
  89. data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
  90. data/autohotkey/tools/DataViewer +14 -14
  91. data/autohotkey/tools/DataViewerAHK +17 -17
  92. data/autohotkey/tools/HandbookCreatorAHK +20 -20
  93. data/autohotkey/tools/LauncherAHK +17 -17
  94. data/autohotkey/tools/LimitsMonitorAHK +20 -20
  95. data/autohotkey/tools/OpenGLBuilderAHK +24 -24
  96. data/autohotkey/tools/PacketViewer +14 -14
  97. data/autohotkey/tools/PacketViewerAHK +18 -18
  98. data/autohotkey/tools/PacketViewerAHK2 +17 -17
  99. data/autohotkey/tools/Replay +14 -14
  100. data/autohotkey/tools/ReplayAHK +17 -17
  101. data/autohotkey/tools/ScriptRunner +14 -14
  102. data/autohotkey/tools/ScriptRunnerAHK +20 -20
  103. data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
  104. data/autohotkey/tools/TableManager +14 -14
  105. data/autohotkey/tools/TableManagerAHK +30 -30
  106. data/autohotkey/tools/TestRunner +15 -15
  107. data/autohotkey/tools/TestRunnerAHK +17 -17
  108. data/autohotkey/tools/TestRunnerAHK2 +17 -17
  109. data/autohotkey/tools/TestRunnerAHK3 +17 -17
  110. data/autohotkey/tools/TestRunnerAHK4 +17 -17
  111. data/autohotkey/tools/TestRunnerAHK5 +17 -17
  112. data/autohotkey/tools/TestRunnerAHK6 +17 -17
  113. data/autohotkey/tools/TlmExtractor +15 -15
  114. data/autohotkey/tools/TlmExtractorAHK +19 -19
  115. data/autohotkey/tools/TlmExtractorAHK2 +16 -16
  116. data/autohotkey/tools/TlmExtractorAHK3 +16 -16
  117. data/autohotkey/tools/TlmGrapher +14 -14
  118. data/autohotkey/tools/TlmGrapherAHK +19 -19
  119. data/autohotkey/tools/TlmGrapherAHK2 +23 -23
  120. data/autohotkey/tools/TlmGrapherAHK3 +17 -17
  121. data/autohotkey/tools/TlmGrapherAHK4 +17 -17
  122. data/autohotkey/tools/TlmViewer +14 -14
  123. data/autohotkey/tools/TlmViewerAHK +28 -28
  124. data/autohotkey/tools/TlmViewerAHK2 +22 -22
  125. data/autohotkey/tools/TlmViewerAHK3 +23 -23
  126. data/autohotkey/tools/TlmViewerAHK4 +22 -22
  127. data/autohotkey/tools/TlmViewerAHK5 +18 -18
  128. data/autohotkey/tools/autohotkey.rb +37 -37
  129. data/autohotkey/tools/cmd_extractor.ahk +33 -33
  130. data/autohotkey/tools/cmd_sender.ahk +182 -182
  131. data/autohotkey/tools/cmd_tlm_server.ahk +90 -90
  132. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
  133. data/autohotkey/tools/data_viewer.ahk +141 -141
  134. data/autohotkey/tools/handbook_creator.ahk +32 -32
  135. data/autohotkey/tools/launcher.ahk +41 -41
  136. data/autohotkey/tools/limits_monitor.ahk +123 -123
  137. data/autohotkey/tools/open_gl_builder.ahk +134 -134
  138. data/autohotkey/tools/packet_viewer.ahk +196 -196
  139. data/autohotkey/tools/packet_viewer2.ahk +9 -9
  140. data/autohotkey/tools/replay.ahk +104 -104
  141. data/autohotkey/tools/script_runner.ahk +589 -589
  142. data/autohotkey/tools/script_runner2.ahk +38 -38
  143. data/autohotkey/tools/table_manager.ahk +220 -220
  144. data/autohotkey/tools/test_runner.ahk +262 -262
  145. data/autohotkey/tools/test_runner2.ahk +53 -53
  146. data/autohotkey/tools/test_runner3.ahk +13 -13
  147. data/autohotkey/tools/test_runner5.ahk +8 -8
  148. data/autohotkey/tools/test_runner6.ahk +5 -5
  149. data/autohotkey/tools/tlm_extractor.ahk +296 -296
  150. data/autohotkey/tools/tlm_grapher.ahk +660 -660
  151. data/autohotkey/tools/tlm_grapher2.ahk +115 -115
  152. data/autohotkey/tools/tlm_grapher3.ahk +24 -24
  153. data/autohotkey/tools/tlm_viewer.ahk +133 -133
  154. data/autohotkey/tools/tlm_viewer2.ahk +50 -50
  155. data/autohotkey/tools/tlm_viewer4.ahk +4 -4
  156. data/autohotkey/tools/tlm_viewer5.ahk +20 -20
  157. data/bin/cosmos +96 -96
  158. data/bin/cstol_converter +1166 -1166
  159. data/bin/rubysloc +85 -85
  160. data/cosmos.gemspec +99 -99
  161. data/data/about.txt +4 -4
  162. data/data/crc.txt +326 -326
  163. data/data/diamond.STL +57 -57
  164. data/data/legal.txt +9 -9
  165. data/demo/Gemfile +10 -10
  166. data/demo/Launcher +16 -16
  167. data/demo/Launcher.bat +0 -0
  168. data/demo/Rakefile +77 -77
  169. data/demo/config/data/crc.txt +224 -226
  170. data/demo/config/data/diamond.STL +57 -57
  171. data/demo/config/data/meta_init.txt +4 -4
  172. data/demo/config/system/system.txt +35 -35
  173. data/demo/config/system/system2.txt +33 -33
  174. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  175. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  176. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  177. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
  178. data/demo/config/targets/COSMOS/screens/version.txt +19 -19
  179. data/demo/config/targets/COSMOS/target.txt +11 -11
  180. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
  181. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -5
  182. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
  183. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
  184. data/demo/config/targets/EXAMPLE/target.txt +6 -6
  185. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  186. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  187. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
  188. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
  189. data/demo/config/targets/INST/lib/sim_inst.rb +305 -305
  190. data/demo/config/targets/INST/screens/adcs.txt +46 -46
  191. data/demo/config/targets/INST/screens/array.txt +15 -15
  192. data/demo/config/targets/INST/screens/block.txt +8 -8
  193. data/demo/config/targets/INST/screens/commanding.txt +30 -30
  194. data/demo/config/targets/INST/screens/graphs.txt +14 -14
  195. data/demo/config/targets/INST/screens/ground.txt +25 -25
  196. data/demo/config/targets/INST/screens/hs.txt +44 -44
  197. data/demo/config/targets/INST/screens/latest.txt +23 -23
  198. data/demo/config/targets/INST/screens/other.txt +29 -29
  199. data/demo/config/targets/INST/screens/tabs.txt +70 -70
  200. data/demo/config/targets/INST/target.txt +33 -33
  201. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  202. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
  203. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  204. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
  205. data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
  206. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -13
  207. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
  208. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
  209. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +56 -56
  210. data/demo/config/targets/TEMPLATED/target.txt +6 -6
  211. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +39 -39
  212. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +34 -34
  213. data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
  214. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
  215. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -88
  216. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  217. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  218. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
  219. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  220. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  221. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  222. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  223. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  224. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  225. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -82
  226. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  227. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
  228. data/demo/config/tools/launcher/launcher.txt +45 -45
  229. data/demo/config/tools/launcher/launcher2.txt +45 -45
  230. data/demo/config/tools/script_runner/script_runner.txt +3 -3
  231. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
  232. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  233. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  234. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  235. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  236. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  237. data/demo/config/tools/test_runner/test_runner.txt +17 -17
  238. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  239. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  240. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  241. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  242. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
  243. data/demo/lib/example_background_task.rb +57 -57
  244. data/demo/lib/example_target.rb +113 -113
  245. data/demo/lib/scpi_target.rb +74 -74
  246. data/demo/lib/user_version.rb +3 -3
  247. data/demo/procedures/checks.rb +11 -11
  248. data/demo/procedures/clear_util.rb +7 -7
  249. data/demo/procedures/collect.rb +18 -18
  250. data/demo/procedures/collect_util.rb +14 -14
  251. data/demo/procedures/cosmos_api_test.rb +293 -293
  252. data/demo/procedures/disconnect.rb +29 -29
  253. data/demo/procedures/example_test.rb +183 -183
  254. data/demo/procedures/plot_test.rb +8 -8
  255. data/demo/procedures/run_example_test.rb +3 -3
  256. data/demo/procedures/test.rb +51 -51
  257. data/demo/tools/CmdExtractor +16 -16
  258. data/demo/tools/CmdExtractor.bat +0 -0
  259. data/demo/tools/CmdSender +16 -16
  260. data/demo/tools/CmdSender.bat +0 -0
  261. data/demo/tools/CmdTlmServer +16 -16
  262. data/demo/tools/CmdTlmServer.bat +0 -0
  263. data/demo/tools/DataViewer +16 -16
  264. data/demo/tools/DataViewer.bat +0 -0
  265. data/demo/tools/ExampleTarget +16 -16
  266. data/demo/tools/ExampleTarget.bat +0 -0
  267. data/demo/tools/HandbookCreator +16 -16
  268. data/demo/tools/HandbookCreator.bat +0 -0
  269. data/demo/tools/Launcher +16 -16
  270. data/demo/tools/Launcher.bat +0 -0
  271. data/demo/tools/LimitsMonitor +16 -16
  272. data/demo/tools/LimitsMonitor.bat +0 -0
  273. data/demo/tools/OpenGLBuilder +16 -16
  274. data/demo/tools/OpenGLBuilder.bat +0 -0
  275. data/demo/tools/PacketViewer +16 -16
  276. data/demo/tools/PacketViewer.bat +0 -0
  277. data/demo/tools/Replay +16 -16
  278. data/demo/tools/Replay.bat +0 -0
  279. data/demo/tools/ScpiTarget +16 -16
  280. data/demo/tools/ScpiTarget.bat +0 -0
  281. data/demo/tools/ScriptRunner +16 -16
  282. data/demo/tools/ScriptRunner.bat +0 -0
  283. data/demo/tools/TableManager +16 -16
  284. data/demo/tools/TableManager.bat +0 -0
  285. data/demo/tools/TestRunner +16 -16
  286. data/demo/tools/TestRunner.bat +0 -0
  287. data/demo/tools/TlmExtractor +16 -16
  288. data/demo/tools/TlmExtractor.bat +0 -0
  289. data/demo/tools/TlmGrapher +16 -16
  290. data/demo/tools/TlmGrapher.bat +0 -0
  291. data/demo/tools/TlmViewer +16 -16
  292. data/demo/tools/TlmViewer.bat +0 -0
  293. data/demo/tools/ToolLaunch.bat +14 -5
  294. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  295. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  296. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  297. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  298. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  299. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  300. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  301. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  302. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  303. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  304. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  305. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  306. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  307. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  308. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  309. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  310. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  311. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  312. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  313. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  314. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  315. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  316. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  317. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  318. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  319. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  320. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  321. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  322. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  323. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  324. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  325. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  326. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  327. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  328. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  329. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  330. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
  331. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  332. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  333. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  334. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  335. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  336. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  337. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  338. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  339. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  340. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  341. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  342. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  343. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  344. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  345. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  346. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  347. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  348. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  349. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  350. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  351. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  352. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  353. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  354. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  355. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  356. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  357. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  358. data/demo/tools/tool_launch.rb +38 -38
  359. data/ext/cosmos/ext/array/array.c +111 -111
  360. data/ext/cosmos/ext/array/extconf.rb +13 -13
  361. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
  362. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
  363. data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
  364. data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
  365. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
  366. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
  367. data/ext/cosmos/ext/crc/crc.c +341 -341
  368. data/ext/cosmos/ext/crc/extconf.rb +12 -12
  369. data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
  370. data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
  371. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
  372. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -265
  373. data/ext/cosmos/ext/packet/extconf.rb +13 -13
  374. data/ext/cosmos/ext/packet/packet.c +339 -339
  375. data/ext/cosmos/ext/platform/extconf.rb +13 -13
  376. data/ext/cosmos/ext/platform/platform.c +101 -101
  377. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
  378. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
  379. data/ext/cosmos/ext/string/extconf.rb +13 -13
  380. data/ext/cosmos/ext/string/string.c +49 -49
  381. data/ext/cosmos/ext/structure/structure.c +1428 -1428
  382. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
  383. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
  384. data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
  385. data/ext/cosmos/ext/telemetry/telemetry.c +307 -307
  386. data/ext/mkrf_conf.rb +40 -40
  387. data/install/Gemfile +10 -10
  388. data/install/Launcher +16 -16
  389. data/install/Launcher.bat +0 -0
  390. data/install/Rakefile +77 -77
  391. data/install/config/data/crc.txt +151 -151
  392. data/install/config/system/system.txt +29 -29
  393. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  394. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  395. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  396. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  397. data/install/config/targets/COSMOS/screens/version.txt +19 -19
  398. data/install/config/targets/COSMOS/target.txt +8 -8
  399. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  400. data/install/config/tools/data_viewer/data_viewer.txt +3 -3
  401. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
  402. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  403. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  404. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  405. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
  406. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  407. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  408. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  409. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  410. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  411. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  412. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  413. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  414. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
  415. data/install/config/tools/launcher/launcher.txt +40 -40
  416. data/install/config/tools/script_runner/script_runner.txt +3 -3
  417. data/install/config/tools/test_runner/test_runner.txt +8 -8
  418. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  419. data/install/lib/user_version.rb +3 -3
  420. data/install/tools/CmdExtractor +16 -16
  421. data/install/tools/CmdExtractor.bat +0 -0
  422. data/install/tools/CmdSender +16 -16
  423. data/install/tools/CmdSender.bat +0 -0
  424. data/install/tools/CmdTlmServer +16 -16
  425. data/install/tools/CmdTlmServer.bat +0 -0
  426. data/install/tools/DataViewer +16 -16
  427. data/install/tools/DataViewer.bat +0 -0
  428. data/install/tools/HandbookCreator +16 -16
  429. data/install/tools/HandbookCreator.bat +0 -0
  430. data/install/tools/Launcher +16 -16
  431. data/install/tools/Launcher.bat +0 -0
  432. data/install/tools/LimitsMonitor +16 -16
  433. data/install/tools/LimitsMonitor.bat +0 -0
  434. data/install/tools/OpenGLBuilder +16 -16
  435. data/install/tools/OpenGLBuilder.bat +0 -0
  436. data/install/tools/PacketViewer +16 -16
  437. data/install/tools/PacketViewer.bat +0 -0
  438. data/install/tools/Replay +16 -16
  439. data/install/tools/Replay.bat +0 -0
  440. data/install/tools/ScriptRunner +16 -16
  441. data/install/tools/ScriptRunner.bat +0 -0
  442. data/install/tools/TableManager +16 -16
  443. data/install/tools/TableManager.bat +0 -0
  444. data/install/tools/TestRunner +16 -16
  445. data/install/tools/TestRunner.bat +0 -0
  446. data/install/tools/TlmExtractor +16 -16
  447. data/install/tools/TlmExtractor.bat +0 -0
  448. data/install/tools/TlmGrapher +16 -16
  449. data/install/tools/TlmGrapher.bat +0 -0
  450. data/install/tools/TlmViewer +16 -16
  451. data/install/tools/TlmViewer.bat +0 -0
  452. data/install/tools/ToolLaunch.bat +14 -5
  453. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  454. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  455. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  456. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  457. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  458. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  459. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  460. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  461. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  462. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  463. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  464. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  465. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  466. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  467. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  468. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  469. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  470. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  471. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  472. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  473. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  474. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  475. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  476. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  477. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  478. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  479. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  480. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  481. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  482. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  483. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  484. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  485. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  486. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  487. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  488. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  489. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
  490. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  491. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  492. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  493. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  494. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  495. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  496. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  497. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  498. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  499. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  500. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  501. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  502. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  503. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  504. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  505. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  506. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  507. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  508. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  509. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  510. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  511. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  512. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  513. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  514. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  515. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  516. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  517. data/install/tools/tool_launch.rb +38 -38
  518. data/lib/cosmos.rb +63 -63
  519. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
  520. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
  521. data/lib/cosmos/config/config_parser.rb +324 -324
  522. data/lib/cosmos/conversions.rb +13 -13
  523. data/lib/cosmos/conversions/conversion.rb +47 -47
  524. data/lib/cosmos/conversions/generic_conversion.rb +55 -55
  525. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
  526. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
  527. data/lib/cosmos/conversions/processor_conversion.rb +46 -46
  528. data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
  529. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
  530. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
  531. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
  532. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
  533. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
  534. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
  535. data/lib/cosmos/core_ext.rb +18 -18
  536. data/lib/cosmos/core_ext/array.rb +354 -354
  537. data/lib/cosmos/core_ext/class.rb +51 -51
  538. data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
  539. data/lib/cosmos/core_ext/exception.rb +52 -52
  540. data/lib/cosmos/core_ext/file.rb +75 -75
  541. data/lib/cosmos/core_ext/hash.rb +28 -28
  542. data/lib/cosmos/core_ext/io.rb +75 -75
  543. data/lib/cosmos/core_ext/kernel.rb +38 -38
  544. data/lib/cosmos/core_ext/math.rb +119 -119
  545. data/lib/cosmos/core_ext/matrix.rb +146 -146
  546. data/lib/cosmos/core_ext/objectspace.rb +29 -29
  547. data/lib/cosmos/core_ext/range.rb +22 -22
  548. data/lib/cosmos/core_ext/socket.rb +32 -32
  549. data/lib/cosmos/core_ext/string.rb +311 -311
  550. data/lib/cosmos/core_ext/stringio.rb +24 -24
  551. data/lib/cosmos/core_ext/time.rb +448 -448
  552. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
  553. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
  554. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
  555. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
  556. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
  557. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -326
  558. data/lib/cosmos/gui/dialogs/about_dialog.rb +137 -137
  559. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
  560. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
  561. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
  562. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
  563. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
  564. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
  565. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +260 -260
  566. data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -169
  567. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
  568. data/lib/cosmos/gui/dialogs/progress_dialog.rb +276 -276
  569. data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -165
  570. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
  571. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
  572. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
  573. data/lib/cosmos/gui/dialogs/splash.rb +135 -135
  574. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
  575. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
  576. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
  577. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
  578. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +473 -473
  579. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
  580. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +451 -451
  581. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
  582. data/lib/cosmos/gui/line_graph/lines.rb +290 -290
  583. data/lib/cosmos/gui/line_graph/overview_graph.rb +469 -469
  584. data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
  585. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
  586. data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
  587. data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
  588. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
  589. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
  590. data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -724
  591. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
  592. data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
  593. data/lib/cosmos/gui/opengl/opengl.rb +8 -8
  594. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
  595. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
  596. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
  597. data/lib/cosmos/gui/qt.rb +860 -860
  598. data/lib/cosmos/gui/qt_tool.rb +380 -380
  599. data/lib/cosmos/gui/text/completion.rb +381 -381
  600. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
  601. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
  602. data/lib/cosmos/gui/text/ruby_editor.rb +415 -415
  603. data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
  604. data/lib/cosmos/gui/utilities/script_module_gui.rb +330 -330
  605. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
  606. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
  607. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
  608. data/lib/cosmos/interfaces.rb +11 -11
  609. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -153
  610. data/lib/cosmos/interfaces/interface.rb +225 -225
  611. data/lib/cosmos/interfaces/linc_interface.rb +360 -360
  612. data/lib/cosmos/interfaces/serial_interface.rb +76 -76
  613. data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -129
  614. data/lib/cosmos/interfaces/stream_interface.rb +136 -136
  615. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
  616. data/lib/cosmos/interfaces/tcpip_server_interface.rb +164 -164
  617. data/lib/cosmos/interfaces/udp_interface.rb +161 -161
  618. data/lib/cosmos/io/buffered_file.rb +11 -11
  619. data/lib/cosmos/io/cosmos_snmp.rb +50 -50
  620. data/lib/cosmos/io/io_multiplexer.rb +89 -89
  621. data/lib/cosmos/io/json_drb.rb +376 -376
  622. data/lib/cosmos/io/json_drb_object.rb +198 -198
  623. data/lib/cosmos/io/json_rpc.rb +365 -365
  624. data/lib/cosmos/io/posix_serial_driver.rb +145 -145
  625. data/lib/cosmos/io/raw_logger.rb +174 -174
  626. data/lib/cosmos/io/raw_logger_pair.rb +71 -71
  627. data/lib/cosmos/io/serial_driver.rb +85 -85
  628. data/lib/cosmos/io/stderr.rb +36 -36
  629. data/lib/cosmos/io/stdout.rb +36 -36
  630. data/lib/cosmos/io/tcpip_server.rb +571 -571
  631. data/lib/cosmos/io/udp_sockets.rb +152 -152
  632. data/lib/cosmos/io/win32_serial_driver.rb +145 -145
  633. data/lib/cosmos/packet_logs.rb +7 -7
  634. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -104
  635. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
  636. data/lib/cosmos/packet_logs/packet_log_reader.rb +450 -450
  637. data/lib/cosmos/packet_logs/packet_log_writer.rb +323 -323
  638. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
  639. data/lib/cosmos/packets/binary_accessor.rb +634 -634
  640. data/lib/cosmos/packets/commands.rb +293 -293
  641. data/lib/cosmos/packets/limits.rb +267 -267
  642. data/lib/cosmos/packets/limits_response.rb +38 -38
  643. data/lib/cosmos/packets/packet.rb +786 -786
  644. data/lib/cosmos/packets/packet_config.rb +482 -482
  645. data/lib/cosmos/packets/packet_item.rb +317 -317
  646. data/lib/cosmos/packets/packet_item_limits.rb +128 -128
  647. data/lib/cosmos/packets/parsers/format_string_parser.rb +58 -58
  648. data/lib/cosmos/packets/parsers/limits_parser.rb +146 -146
  649. data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -52
  650. data/lib/cosmos/packets/parsers/macro_parser.rb +116 -116
  651. data/lib/cosmos/packets/parsers/packet_item_parser.rb +215 -215
  652. data/lib/cosmos/packets/parsers/packet_parser.rb +123 -123
  653. data/lib/cosmos/packets/parsers/processor_parser.rb +63 -63
  654. data/lib/cosmos/packets/parsers/state_parser.rb +116 -116
  655. data/lib/cosmos/packets/structure.rb +458 -458
  656. data/lib/cosmos/packets/structure_item.rb +233 -233
  657. data/lib/cosmos/packets/telemetry.rb +350 -350
  658. data/lib/cosmos/processors.rb +6 -6
  659. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
  660. data/lib/cosmos/processors/processor.rb +71 -71
  661. data/lib/cosmos/processors/statistics_processor.rb +65 -65
  662. data/lib/cosmos/processors/watermark_processor.rb +44 -44
  663. data/lib/cosmos/script.rb +9 -9
  664. data/lib/cosmos/script/cmd_tlm_server.rb +110 -110
  665. data/lib/cosmos/script/commands.rb +184 -184
  666. data/lib/cosmos/script/extract.rb +123 -123
  667. data/lib/cosmos/script/limits.rb +114 -114
  668. data/lib/cosmos/script/script.rb +76 -76
  669. data/lib/cosmos/script/scripting.rb +897 -897
  670. data/lib/cosmos/script/telemetry.rb +174 -174
  671. data/lib/cosmos/script/tools.rb +138 -138
  672. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
  673. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
  674. data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
  675. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
  676. data/lib/cosmos/streams/serial_stream.rb +157 -157
  677. data/lib/cosmos/streams/stream.rb +63 -63
  678. data/lib/cosmos/streams/stream_protocol.rb +373 -373
  679. data/lib/cosmos/streams/tcpip_client_stream.rb +113 -113
  680. data/lib/cosmos/streams/tcpip_socket_stream.rb +143 -143
  681. data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
  682. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
  683. data/lib/cosmos/system.rb +4 -4
  684. data/lib/cosmos/system/system.rb +618 -618
  685. data/lib/cosmos/system/target.rb +197 -197
  686. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +255 -255
  687. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +717 -717
  688. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
  689. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
  690. data/lib/cosmos/tools/cmd_tlm_server/api.rb +1034 -1034
  691. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
  692. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -67
  693. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +515 -515
  694. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +253 -253
  695. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +408 -408
  696. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
  697. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -175
  698. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +200 -200
  699. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -176
  700. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +150 -150
  701. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +244 -244
  702. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +90 -90
  703. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +266 -266
  704. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
  705. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
  706. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
  707. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
  708. data/lib/cosmos/tools/data_viewer/data_viewer.rb +621 -621
  709. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +134 -134
  710. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
  711. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -156
  712. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -382
  713. data/lib/cosmos/tools/launcher/launcher.rb +188 -188
  714. data/lib/cosmos/tools/launcher/launcher_config.rb +256 -256
  715. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -40
  716. data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -116
  717. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +837 -837
  718. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
  719. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
  720. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +542 -542
  721. data/lib/cosmos/tools/replay/replay.rb +501 -501
  722. data/lib/cosmos/tools/replay/replay_server.rb +91 -91
  723. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -147
  724. data/lib/cosmos/tools/script_runner/script_runner.rb +922 -922
  725. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
  726. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1798 -1798
  727. data/lib/cosmos/tools/table_manager/table.rb +70 -70
  728. data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
  729. data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
  730. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
  731. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
  732. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
  733. data/lib/cosmos/tools/test_runner/test.rb +539 -539
  734. data/lib/cosmos/tools/test_runner/test_runner.rb +1189 -1189
  735. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -341
  736. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
  737. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1016 -1016
  738. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
  739. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
  740. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
  741. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
  742. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -95
  743. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
  744. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +181 -181
  745. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
  746. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
  747. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -174
  748. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -193
  749. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +407 -407
  750. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
  751. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
  752. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -323
  753. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
  754. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
  755. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
  756. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
  757. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
  758. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
  759. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
  760. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
  761. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
  762. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
  763. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
  764. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -1291
  765. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
  766. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
  767. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -114
  768. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
  769. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -78
  770. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
  771. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
  772. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
  773. data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -486
  774. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +561 -561
  775. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +290 -290
  776. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
  777. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
  778. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -66
  779. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -57
  780. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
  781. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
  782. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
  783. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
  784. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
  785. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
  786. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
  787. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
  788. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
  789. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
  790. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
  791. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
  792. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
  793. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
  794. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
  795. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
  796. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
  797. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
  798. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
  799. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
  800. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
  801. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
  802. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
  803. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
  804. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
  805. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
  806. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
  807. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
  808. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
  809. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
  810. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
  811. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
  812. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
  813. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
  814. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
  815. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
  816. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
  817. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
  818. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
  819. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
  820. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
  821. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
  822. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
  823. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
  824. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
  825. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
  826. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
  827. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
  828. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
  829. data/lib/cosmos/top_level.rb +759 -759
  830. data/lib/cosmos/utilities.rb +11 -11
  831. data/lib/cosmos/utilities/crc.rb +166 -166
  832. data/lib/cosmos/utilities/csv.rb +83 -83
  833. data/lib/cosmos/utilities/logger.rb +137 -137
  834. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
  835. data/lib/cosmos/utilities/message_log.rb +79 -79
  836. data/lib/cosmos/utilities/quaternion.rb +258 -258
  837. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
  838. data/lib/cosmos/utilities/simulated_target.rb +99 -99
  839. data/lib/cosmos/utilities/sleeper.rb +44 -44
  840. data/lib/cosmos/version.rb +12 -12
  841. data/lib/cosmos/win32/excel.rb +66 -66
  842. data/lib/cosmos/win32/win32.rb +387 -387
  843. data/lib/cosmos/win32/win32_main.rb +321 -321
  844. data/roodi.yml +24 -24
  845. data/run_gui_tests.bat +0 -0
  846. data/spec/ccsds/ccsds_packet_spec.rb +67 -67
  847. data/spec/ccsds/ccsds_parser_spec.rb +148 -148
  848. data/spec/config/config_parser_spec.rb +322 -322
  849. data/spec/conversions/conversion_spec.rb +31 -31
  850. data/spec/conversions/generic_conversion_spec.rb +45 -45
  851. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
  852. data/spec/conversions/polynomial_conversion_spec.rb +40 -40
  853. data/spec/conversions/processor_conversion_spec.rb +45 -45
  854. data/spec/conversions/received_count_conversion_spec.rb +43 -43
  855. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
  856. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
  857. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
  858. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
  859. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
  860. data/spec/core_ext/array_spec.rb +186 -186
  861. data/spec/core_ext/class_spec.rb +36 -36
  862. data/spec/core_ext/cosmos_io_spec.rb +77 -77
  863. data/spec/core_ext/exception_spec.rb +91 -91
  864. data/spec/core_ext/file_spec.rb +72 -72
  865. data/spec/core_ext/hash_spec.rb +24 -24
  866. data/spec/core_ext/io_spec.rb +46 -46
  867. data/spec/core_ext/kernel_spec.rb +54 -54
  868. data/spec/core_ext/math_spec.rb +116 -116
  869. data/spec/core_ext/matrix_spec.rb +66 -66
  870. data/spec/core_ext/objectspace_spec.rb +29 -29
  871. data/spec/core_ext/range_spec.rb +21 -21
  872. data/spec/core_ext/socket_spec.rb +32 -32
  873. data/spec/core_ext/string_spec.rb +223 -223
  874. data/spec/core_ext/stringio_spec.rb +21 -21
  875. data/spec/core_ext/time_spec.rb +202 -202
  876. data/spec/gui/line_graph/line_clip_spec.rb +322 -322
  877. data/spec/gui/qt_spec.rb +102 -102
  878. data/spec/install/config/system/system.txt +33 -33
  879. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  880. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  881. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  882. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  883. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
  884. data/spec/install/config/targets/COSMOS/target.txt +5 -5
  885. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
  886. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
  887. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
  888. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
  889. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
  890. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -305
  891. data/spec/install/config/targets/INST/target.txt +10 -10
  892. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
  893. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
  894. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  895. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
  896. data/spec/interfaces/interface_spec.rb +130 -130
  897. data/spec/interfaces/linc_interface_spec.rb +259 -259
  898. data/spec/interfaces/serial_interface_spec.rb +56 -56
  899. data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
  900. data/spec/interfaces/stream_interface_spec.rb +157 -157
  901. data/spec/interfaces/tcpip_client_interface_spec.rb +55 -55
  902. data/spec/interfaces/tcpip_server_interface_spec.rb +160 -160
  903. data/spec/interfaces/udp_interface_spec.rb +175 -175
  904. data/spec/io/buffered_file_spec.rb +113 -113
  905. data/spec/io/io_multiplexer_spec.rb +94 -94
  906. data/spec/io/json_drb_object_spec.rb +119 -119
  907. data/spec/io/json_drb_spec.rb +311 -311
  908. data/spec/io/json_rpc_spec.rb +264 -264
  909. data/spec/io/raw_logger_pair_spec.rb +76 -76
  910. data/spec/io/raw_logger_spec.rb +133 -133
  911. data/spec/io/serial_driver_spec.rb +60 -60
  912. data/spec/io/stderr_spec.rb +32 -32
  913. data/spec/io/stdout_spec.rb +32 -32
  914. data/spec/io/tcpip_server_spec.rb +338 -338
  915. data/spec/io/udp_sockets_spec.rb +94 -94
  916. data/spec/io/win32_serial_driver_spec.rb +88 -88
  917. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
  918. data/spec/packet_logs/packet_log_reader_spec.rb +468 -468
  919. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
  920. data/spec/packet_logs/packet_log_writer_spec.rb +225 -225
  921. data/spec/packets/binary_accessor_spec.rb +2326 -2326
  922. data/spec/packets/commands_spec.rb +369 -369
  923. data/spec/packets/limits_response_spec.rb +25 -25
  924. data/spec/packets/limits_spec.rb +344 -344
  925. data/spec/packets/packet_config_spec.rb +805 -805
  926. data/spec/packets/packet_item_limits_spec.rb +161 -161
  927. data/spec/packets/packet_item_spec.rb +386 -386
  928. data/spec/packets/packet_spec.rb +1317 -1317
  929. data/spec/packets/parsers/format_string_parser_spec.rb +122 -122
  930. data/spec/packets/parsers/limits_parser_spec.rb +282 -282
  931. data/spec/packets/parsers/limits_response_parser_spec.rb +149 -149
  932. data/spec/packets/parsers/macro_parser_spec.rb +212 -212
  933. data/spec/packets/parsers/packet_item_parser_spec.rb +306 -306
  934. data/spec/packets/parsers/packet_parser_spec.rb +99 -99
  935. data/spec/packets/parsers/processor_parser_spec.rb +114 -114
  936. data/spec/packets/parsers/state_parser_spec.rb +156 -156
  937. data/spec/packets/structure_item_spec.rb +195 -195
  938. data/spec/packets/structure_spec.rb +565 -565
  939. data/spec/packets/telemetry_spec.rb +578 -578
  940. data/spec/processors/new_packet_log_processor_spec.rb +39 -39
  941. data/spec/processors/processor_spec.rb +55 -55
  942. data/spec/processors/statistics_processor_spec.rb +60 -60
  943. data/spec/processors/watermark_processor_spec.rb +51 -51
  944. data/spec/script/cmd_tlm_server_spec.rb +110 -110
  945. data/spec/script/commands_disconnect_spec.rb +270 -270
  946. data/spec/script/commands_spec.rb +302 -302
  947. data/spec/script/limits_spec.rb +153 -153
  948. data/spec/script/script_spec.rb +86 -86
  949. data/spec/script/scripting_spec.rb +440 -440
  950. data/spec/script/telemetry_spec.rb +165 -165
  951. data/spec/script/tools_spec.rb +117 -117
  952. data/spec/spec_helper.rb +190 -190
  953. data/spec/streams/burst_stream_protocol_spec.rb +32 -32
  954. data/spec/streams/fixed_stream_protocol_spec.rb +113 -113
  955. data/spec/streams/length_stream_protocol_spec.rb +300 -300
  956. data/spec/streams/preidentified_stream_protocol_spec.rb +121 -121
  957. data/spec/streams/serial_stream_spec.rb +117 -117
  958. data/spec/streams/stream_protocol_spec.rb +346 -346
  959. data/spec/streams/stream_spec.rb +30 -30
  960. data/spec/streams/tcpip_client_stream_spec.rb +57 -57
  961. data/spec/streams/tcpip_socket_stream_spec.rb +193 -193
  962. data/spec/streams/template_stream_protocol_spec.rb +156 -156
  963. data/spec/streams/terminated_stream_protocol_spec.rb +127 -127
  964. data/spec/system/system_spec.rb +665 -665
  965. data/spec/system/target_spec.rb +250 -250
  966. data/spec/tools/cmd_tlm_server/api_spec.rb +1117 -1117
  967. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
  968. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
  969. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +453 -453
  970. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
  971. data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -151
  972. data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -235
  973. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
  974. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -252
  975. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
  976. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +151 -151
  977. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -223
  978. data/spec/tools/launcher/launcher_config_spec.rb +464 -464
  979. data/spec/top_level/top_level_spec.rb +334 -334
  980. data/spec/utilities/crc_spec.rb +45 -45
  981. data/spec/utilities/csv_spec.rb +97 -97
  982. data/spec/utilities/logger_spec.rb +102 -102
  983. data/spec/utilities/message_log_spec.rb +89 -89
  984. data/spec/utilities/quaternion_spec.rb +107 -107
  985. data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
  986. data/tasks/manifest.rake +22 -22
  987. data/tasks/spec.rake +23 -23
  988. data/test/benchmarks/binary_accessor_benchmark.rb +14 -14
  989. data/test/benchmarks/gsub_benchmark.rb +152 -152
  990. data/test/benchmarks/is_a_benchmark.rb +34 -34
  991. data/test/performance/PACKETS.bat +0 -0
  992. data/test/performance/Rakefile +77 -77
  993. data/test/performance/THREADS.bat +0 -0
  994. data/test/performance/config/data/crc.txt +196 -196
  995. data/test/performance/config/data/diamond.STL +57 -57
  996. data/test/performance/config/data/meta_init.txt +4 -4
  997. data/test/performance/config/system/system_packets.txt +39 -39
  998. data/test/performance/config/system/system_threads.txt +59 -59
  999. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -46
  1000. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  1001. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  1002. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -20
  1003. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -19
  1004. data/test/performance/config/targets/COSMOS/target.txt +11 -11
  1005. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -20
  1006. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -98
  1007. data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -6
  1008. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -22
  1009. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -24
  1010. data/test/performance/config/targets/PACKET/screens/status.txt +25 -25
  1011. data/test/performance/config/targets/PACKET/target.txt +28 -28
  1012. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -12
  1013. data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -17
  1014. data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -18
  1015. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -6
  1016. data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -22
  1017. data/test/performance/config/targets/THREAD/screens/status.txt +25 -25
  1018. data/test/performance/config/targets/THREAD/target.txt +6 -6
  1019. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -28
  1020. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -68
  1021. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -11
  1022. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -66
  1023. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  1024. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  1025. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  1026. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -25
  1027. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  1028. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  1029. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  1030. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  1031. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  1032. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  1033. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  1034. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  1035. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -1
  1036. data/test/performance/config/tools/launcher/launcher_packets.txt +34 -34
  1037. data/test/performance/config/tools/launcher/launcher_threads.txt +83 -83
  1038. data/test/performance/config/tools/script_runner/script_runner.txt +3 -3
  1039. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -8
  1040. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  1041. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  1042. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  1043. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  1044. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  1045. data/test/performance/config/tools/test_runner/test_runner.txt +17 -17
  1046. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  1047. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  1048. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  1049. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  1050. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -204
  1051. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -13
  1052. data/test/performance/lib/packet_target.rb +126 -126
  1053. data/test/performance/lib/thread_target.rb +120 -120
  1054. data/test/performance/lib/user_version.rb +3 -3
  1055. data/test/performance/procedures/checks.rb +11 -11
  1056. data/test/performance/procedures/clear_util.rb +7 -7
  1057. data/test/performance/procedures/collect.rb +18 -18
  1058. data/test/performance/procedures/collect_util.rb +14 -14
  1059. data/test/performance/procedures/cosmos_api_test.rb +293 -293
  1060. data/test/performance/procedures/disconnect.rb +29 -29
  1061. data/test/performance/procedures/example_test.rb +182 -182
  1062. data/test/performance/procedures/plot_test.rb +8 -8
  1063. data/test/performance/procedures/procedure.rb +2 -2
  1064. data/test/performance/procedures/run_example_test.rb +3 -3
  1065. data/test/performance/procedures/test.rb +51 -51
  1066. data/test/performance/tools/CmdExtractor +14 -14
  1067. data/test/performance/tools/CmdExtractor.bat +0 -0
  1068. data/test/performance/tools/CmdSender +14 -14
  1069. data/test/performance/tools/CmdSender.bat +0 -0
  1070. data/test/performance/tools/CmdTlmServer +16 -16
  1071. data/test/performance/tools/CmdTlmServer.bat +0 -0
  1072. data/test/performance/tools/CmdTlmServerMemProf +20 -20
  1073. data/test/performance/tools/CmdTlmServerMemProf.bat +0 -0
  1074. data/test/performance/tools/DataViewer +14 -14
  1075. data/test/performance/tools/DataViewer.bat +0 -0
  1076. data/test/performance/tools/HandbookCreator +14 -14
  1077. data/test/performance/tools/HandbookCreator.bat +0 -0
  1078. data/test/performance/tools/Launcher +14 -14
  1079. data/test/performance/tools/Launcher.bat +0 -0
  1080. data/test/performance/tools/LimitsMonitor +14 -14
  1081. data/test/performance/tools/LimitsMonitor.bat +0 -0
  1082. data/test/performance/tools/OpenGLBuilder +14 -14
  1083. data/test/performance/tools/OpenGLBuilder.bat +0 -0
  1084. data/test/performance/tools/PacketTarget +14 -14
  1085. data/test/performance/tools/PacketTarget.bat +0 -0
  1086. data/test/performance/tools/PacketViewer +14 -14
  1087. data/test/performance/tools/PacketViewer.bat +0 -0
  1088. data/test/performance/tools/Replay +14 -14
  1089. data/test/performance/tools/Replay.bat +0 -0
  1090. data/test/performance/tools/ScpiTarget +14 -14
  1091. data/test/performance/tools/ScpiTarget.bat +0 -0
  1092. data/test/performance/tools/ScriptRunner +14 -14
  1093. data/test/performance/tools/ScriptRunner.bat +0 -0
  1094. data/test/performance/tools/TableManager +14 -14
  1095. data/test/performance/tools/TableManager.bat +0 -0
  1096. data/test/performance/tools/TestRunner +14 -14
  1097. data/test/performance/tools/TestRunner.bat +0 -0
  1098. data/test/performance/tools/ThreadTarget +14 -14
  1099. data/test/performance/tools/ThreadTarget.bat +0 -0
  1100. data/test/performance/tools/TlmExtractor +14 -14
  1101. data/test/performance/tools/TlmExtractor.bat +0 -0
  1102. data/test/performance/tools/TlmGrapher +14 -14
  1103. data/test/performance/tools/TlmGrapher.bat +0 -0
  1104. data/test/performance/tools/TlmGrapherMemProf +19 -19
  1105. data/test/performance/tools/TlmGrapherMemProf.bat +0 -0
  1106. data/test/performance/tools/TlmViewer +14 -14
  1107. data/test/performance/tools/TlmViewer.bat +0 -0
  1108. data/test/performance/tools/TlmViewerMemProf +19 -19
  1109. data/test/performance/tools/TlmViewerMemProf.bat +0 -0
  1110. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  1111. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  1112. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  1113. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  1114. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  1115. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  1116. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  1117. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  1118. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  1119. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  1120. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  1121. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  1122. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  1123. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  1124. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  1125. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  1126. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  1127. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  1128. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  1129. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  1130. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  1131. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  1132. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  1133. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  1134. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  1135. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  1136. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  1137. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -38
  1138. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  1139. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  1140. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  1141. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  1142. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  1143. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  1144. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  1145. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  1146. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  1147. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  1148. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  1149. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  1150. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  1151. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  1152. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  1153. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  1154. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  1155. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  1156. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  1157. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  1158. metadata +3 -3
@@ -1,1117 +1,1117 @@
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/tools/cmd_tlm_server/cmd_tlm_server'
14
- require 'cosmos/tools/cmd_tlm_server/api'
15
-
16
- module Cosmos
17
-
18
- describe Api do
19
-
20
- before(:all) do
21
- cts = File.join(Cosmos::USERPATH,'config','tools','cmd_tlm_server','cmd_tlm_server.txt')
22
- FileUtils.mkdir_p(File.dirname(cts))
23
- File.open(cts,'w') do |file|
24
- file.puts 'INTERFACE INT interface.rb'
25
- file.puts 'ROUTER ROUTE interface.rb'
26
- end
27
- end
28
-
29
- after(:all) do
30
- clean_config()
31
- FileUtils.rm_rf File.join(Cosmos::USERPATH,'config','tools')
32
- end
33
-
34
- before(:each) do
35
- allow_any_instance_of(Interface).to receive(:connected?)
36
- allow_any_instance_of(Interface).to receive(:connect)
37
- allow_any_instance_of(Interface).to receive(:disconnect)
38
- allow_any_instance_of(Interface).to receive(:write_raw)
39
- allow_any_instance_of(Interface).to receive(:read)
40
- @api = CmdTlmServer.new
41
- allow(@api.commanding).to receive(:send_command_to_target)
42
- end
43
-
44
- after(:each) do
45
- @api.stop
46
- end
47
-
48
- def test_cmd_unknown(method)
49
- expect { @api.send(method,"BLAH COLLECT with TYPE NORMAL") }.to raise_error(/does not exist/)
50
- expect { @api.send(method,"INST UNKNOWN with TYPE NORMAL") }.to raise_error(/does not exist/)
51
- expect { @api.send(method,"INST COLLECT with BLAH NORMAL") }.to raise_error(/does not exist/)
52
- expect { @api.send(method,"BLAH","COLLECT","TYPE"=>"NORMAL") }.to raise_error(/does not exist/)
53
- expect { @api.send(method,"INST","UNKNOWN","TYPE"=>"NORMAL") }.to raise_error(/does not exist/)
54
- expect { @api.send(method,"INST","COLLECT","BLAH"=>"NORMAL") }.to raise_error(/does not exist/)
55
- end
56
-
57
- describe "cmd" do
58
- it "complains about unknown targets, commands, and parameters" do
59
- test_cmd_unknown(:cmd)
60
- sleep(0.5)
61
- end
62
-
63
- it "processes a string" do
64
- target_name, cmd_name, params = @api.cmd("INST COLLECT with TYPE NORMAL, DURATION 5")
65
- expect(target_name).to eql 'INST'
66
- expect(cmd_name).to eql 'COLLECT'
67
- expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
68
- end
69
-
70
- it "complains if parameters are not separated by commas" do
71
- expect { @api.cmd("INST COLLECT with TYPE NORMAL DURATION 5") }.to raise_error(/Missing comma/)
72
- end
73
-
74
- it "complains if parameters don't have values" do
75
- expect { @api.cmd("INST COLLECT with TYPE") }.to raise_error(/Missing value/)
76
- end
77
-
78
- it "processes parameters" do
79
- target_name, cmd_name, params = @api.cmd("INST","COLLECT","TYPE"=>"NORMAL","DURATION"=>5)
80
- expect(target_name).to eql 'INST'
81
- expect(cmd_name).to eql 'COLLECT'
82
- expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
83
- end
84
-
85
- it "processes commands without parameters" do
86
- target_name, cmd_name, params = @api.cmd("INST","ABORT")
87
- expect(target_name).to eql 'INST'
88
- expect(cmd_name).to eql 'ABORT'
89
- expect(params).to be {}
90
- end
91
-
92
- it "complains about too many parameters" do
93
- expect { @api.cmd("INST","COLLECT","TYPE","DURATION") }.to raise_error(/Invalid number of arguments/)
94
- end
95
-
96
- it "warns about required parameters" do
97
- expect { @api.cmd("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
98
- end
99
-
100
- it "warns about out of range parameters" do
101
- expect { @api.cmd("INST COLLECT with TYPE NORMAL, DURATION 1000") }.to raise_error(/not in valid range/)
102
- end
103
-
104
- it "warns about hazardous parameters" do
105
- expect { @api.cmd("INST COLLECT with TYPE SPECIAL") }.to raise_error(/Hazardous/)
106
- end
107
-
108
- it "warns about hazardous commands" do
109
- expect { @api.cmd("INST CLEAR") }.to raise_error(/Hazardous/)
110
- end
111
- end
112
-
113
- describe "cmd_no_range_check" do
114
- it "complains about unknown targets, commands, and parameters" do
115
- test_cmd_unknown(:cmd_no_range_check)
116
- end
117
-
118
- it "processes a string" do
119
- target_name, cmd_no_range_check_name, params = @api.cmd_no_range_check("INST COLLECT with TYPE NORMAL, DURATION 5")
120
- expect(target_name).to eql 'INST'
121
- expect(cmd_no_range_check_name).to eql 'COLLECT'
122
- expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
123
- end
124
-
125
- it "processes parameters" do
126
- target_name, cmd_no_range_check_name, params = @api.cmd_no_range_check("INST","COLLECT","TYPE"=>"NORMAL","DURATION"=>5)
127
- expect(target_name).to eql 'INST'
128
- expect(cmd_no_range_check_name).to eql 'COLLECT'
129
- expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
130
- end
131
-
132
- it "warns about required parameters" do
133
- expect { @api.cmd_no_range_check("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
134
- end
135
-
136
- it "does not warn about out of range parameters" do
137
- expect { @api.cmd_no_range_check("INST COLLECT with TYPE NORMAL, DURATION 1000") }.to_not raise_error
138
- end
139
-
140
- it "warns about hazardous parameters" do
141
- expect { @api.cmd_no_range_check("INST COLLECT with TYPE SPECIAL") }.to raise_error(/Hazardous/)
142
- end
143
-
144
- it "warns about hazardous commands" do
145
- expect { @api.cmd_no_range_check("INST CLEAR") }.to raise_error(/Hazardous/)
146
- end
147
- end
148
-
149
- describe "cmd_no_hazardous_check" do
150
- it "complains about unknown targets, commands, and parameters" do
151
- test_cmd_unknown(:cmd_no_hazardous_check)
152
- end
153
-
154
- it "processes a string" do
155
- target_name, cmd_no_hazardous_check_name, params = @api.cmd_no_hazardous_check("INST COLLECT with TYPE NORMAL, DURATION 5")
156
- expect(target_name).to eql 'INST'
157
- expect(cmd_no_hazardous_check_name).to eql 'COLLECT'
158
- expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
159
- end
160
-
161
- it "processes parameters" do
162
- target_name, cmd_no_hazardous_check_name, params = @api.cmd_no_hazardous_check("INST","COLLECT","TYPE"=>"NORMAL","DURATION"=>5)
163
- expect(target_name).to eql 'INST'
164
- expect(cmd_no_hazardous_check_name).to eql 'COLLECT'
165
- expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
166
- end
167
-
168
- it "processes parameters that are strings" do
169
- target_name, cmd_name, params = @api.cmd_no_hazardous_check("INST ASCIICMD with STRING 'ARM LASER'")
170
- expect(target_name).to eql 'INST'
171
- expect(cmd_name).to eql 'ASCIICMD'
172
- expect(params).to include('STRING'=>'ARM LASER')
173
- end
174
-
175
- it "warns about required parameters" do
176
- expect { @api.cmd_no_hazardous_check("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
177
- end
178
-
179
- it "warns about out of range parameters" do
180
- expect { @api.cmd_no_hazardous_check("INST COLLECT with TYPE NORMAL, DURATION 1000") }.to raise_error(/not in valid range/)
181
- end
182
-
183
- it "does not warn about hazardous parameters" do
184
- expect { @api.cmd_no_hazardous_check("INST COLLECT with TYPE SPECIAL") }.to_not raise_error
185
- end
186
-
187
- it "does not warn about hazardous commands" do
188
- expect { @api.cmd_no_hazardous_check("INST CLEAR") }.to_not raise_error
189
- end
190
- end
191
-
192
- describe "cmd_no_checks" do
193
- it "complains about unknown targets, commands, and parameters" do
194
- test_cmd_unknown(:cmd_no_checks)
195
- end
196
-
197
- it "processes a string" do
198
- target_name, cmd_no_checks_name, params = @api.cmd_no_checks("INST COLLECT with TYPE NORMAL, DURATION 5")
199
- expect(target_name).to eql 'INST'
200
- expect(cmd_no_checks_name).to eql 'COLLECT'
201
- expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
202
- end
203
-
204
- it "processes parameters" do
205
- target_name, cmd_no_checks_name, params = @api.cmd_no_checks("INST","COLLECT","TYPE"=>"NORMAL","DURATION"=>5)
206
- expect(target_name).to eql 'INST'
207
- expect(cmd_no_checks_name).to eql 'COLLECT'
208
- expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
209
- end
210
-
211
- it "warns about required parameters" do
212
- expect { @api.cmd_no_checks("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
213
- end
214
-
215
- it "does not warn about out of range parameters" do
216
- expect { @api.cmd_no_checks("INST COLLECT with TYPE NORMAL, DURATION 1000") }.to_not raise_error
217
- end
218
-
219
- it "does not warn about hazardous parameters" do
220
- expect { @api.cmd_no_checks("INST COLLECT with TYPE SPECIAL") }.to_not raise_error
221
- end
222
-
223
- it "does not warn about hazardous commands" do
224
- expect { @api.cmd_no_checks("INST CLEAR") }.to_not raise_error
225
- end
226
- end
227
-
228
- describe "cmd_raw" do
229
- it "complains about unknown targets, commands, and parameters" do
230
- test_cmd_unknown(:cmd_raw)
231
- end
232
-
233
- it "processes a string" do
234
- target_name, cmd_name, params = @api.cmd_raw("INST COLLECT with TYPE 0, DURATION 5")
235
- expect(target_name).to eql 'INST'
236
- expect(cmd_name).to eql 'COLLECT'
237
- expect(params).to include('TYPE'=>0, 'DURATION'=>5)
238
- end
239
-
240
- it "complains if parameters are not separated by commas" do
241
- expect { @api.cmd_raw("INST COLLECT with TYPE 0 DURATION 5") }.to raise_error(/Missing comma/)
242
- end
243
-
244
- it "complains if parameters don't have values" do
245
- expect { @api.cmd_raw("INST COLLECT with TYPE") }.to raise_error(/Missing value/)
246
- end
247
-
248
- it "processes parameters" do
249
- target_name, cmd_name, params = @api.cmd_raw("INST","COLLECT","TYPE"=>0,"DURATION"=>5)
250
- expect(target_name).to eql 'INST'
251
- expect(cmd_name).to eql 'COLLECT'
252
- expect(params).to include('TYPE'=>0, 'DURATION'=>5)
253
- end
254
-
255
- it "processes commands without parameters" do
256
- target_name, cmd_name, params = @api.cmd_raw("INST","ABORT")
257
- expect(target_name).to eql 'INST'
258
- expect(cmd_name).to eql 'ABORT'
259
- expect(params).to be {}
260
- end
261
-
262
- it "complains about too many parameters" do
263
- expect { @api.cmd_raw("INST","COLLECT","TYPE","DURATION") }.to raise_error(/Invalid number of arguments/)
264
- end
265
-
266
- it "warns about required parameters" do
267
- expect { @api.cmd_raw("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
268
- end
269
-
270
- it "warns about out of range parameters" do
271
- expect { @api.cmd_raw("INST COLLECT with TYPE 0, DURATION 1000") }.to raise_error(/not in valid range/)
272
- end
273
-
274
- it "warns about hazardous parameters" do
275
- expect { @api.cmd_raw("INST COLLECT with TYPE 1") }.to raise_error(/Hazardous/)
276
- end
277
-
278
- it "warns about hazardous commands" do
279
- expect { @api.cmd_raw("INST CLEAR") }.to raise_error(/Hazardous/)
280
- end
281
- end
282
-
283
- describe "cmd_no_range_check" do
284
- it "complains about unknown targets, commands, and parameters" do
285
- test_cmd_unknown(:cmd_raw_no_range_check)
286
- end
287
-
288
- it "processes a string" do
289
- target_name, cmd_no_range_check_name, params = @api.cmd_raw_no_range_check("INST COLLECT with TYPE 0, DURATION 5")
290
- expect(target_name).to eql 'INST'
291
- expect(cmd_no_range_check_name).to eql 'COLLECT'
292
- expect(params).to include('TYPE'=>0, 'DURATION'=>5)
293
- end
294
-
295
- it "processes parameters" do
296
- target_name, cmd_no_range_check_name, params = @api.cmd_raw_no_range_check("INST","COLLECT","TYPE"=>0,"DURATION"=>5)
297
- expect(target_name).to eql 'INST'
298
- expect(cmd_no_range_check_name).to eql 'COLLECT'
299
- expect(params).to include('TYPE'=>0, 'DURATION'=>5)
300
- end
301
-
302
- it "warns about required parameters" do
303
- expect { @api.cmd_raw_no_range_check("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
304
- end
305
-
306
- it "does not warn about out of range parameters" do
307
- expect { @api.cmd_raw_no_range_check("INST COLLECT with TYPE 0, DURATION 1000") }.to_not raise_error
308
- end
309
-
310
- it "warns about hazardous parameters" do
311
- expect { @api.cmd_raw_no_range_check("INST COLLECT with TYPE 1") }.to raise_error(/Hazardous/)
312
- end
313
-
314
- it "warns about hazardous commands" do
315
- expect { @api.cmd_raw_no_range_check("INST CLEAR") }.to raise_error(/Hazardous/)
316
- end
317
- end
318
-
319
- describe "cmd_raw_no_hazardous_check" do
320
- it "complains about unknown targets, commands, and parameters" do
321
- test_cmd_unknown(:cmd_raw_no_hazardous_check)
322
- end
323
-
324
- it "processes a string" do
325
- target_name, cmd_no_hazardous_check_name, params = @api.cmd_raw_no_hazardous_check("INST COLLECT with TYPE 0, DURATION 5")
326
- expect(target_name).to eql 'INST'
327
- expect(cmd_no_hazardous_check_name).to eql 'COLLECT'
328
- expect(params).to include('TYPE'=>0, 'DURATION'=>5)
329
- end
330
-
331
- it "processes parameters" do
332
- target_name, cmd_no_hazardous_check_name, params = @api.cmd_raw_no_hazardous_check("INST","COLLECT","TYPE"=>0,"DURATION"=>5)
333
- expect(target_name).to eql 'INST'
334
- expect(cmd_no_hazardous_check_name).to eql 'COLLECT'
335
- expect(params).to include('TYPE'=>0, 'DURATION'=>5)
336
- end
337
-
338
- it "processes parameters that are strings" do
339
- target_name, cmd_name, params = @api.cmd_raw_no_hazardous_check("INST ASCIICMD with STRING 'ARM LASER'")
340
- expect(target_name).to eql 'INST'
341
- expect(cmd_name).to eql 'ASCIICMD'
342
- expect(params).to include('STRING'=>'ARM LASER')
343
- end
344
-
345
- it "warns about required parameters" do
346
- expect { @api.cmd_raw_no_hazardous_check("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
347
- end
348
-
349
- it "warns about out of range parameters" do
350
- expect { @api.cmd_raw_no_hazardous_check("INST COLLECT with TYPE 0, DURATION 1000") }.to raise_error(/not in valid range/)
351
- end
352
-
353
- it "does not warn about hazardous parameters" do
354
- expect { @api.cmd_raw_no_hazardous_check("INST COLLECT with TYPE 1") }.to_not raise_error
355
- end
356
-
357
- it "does not warn about hazardous commands" do
358
- expect { @api.cmd_raw_no_hazardous_check("INST CLEAR") }.to_not raise_error
359
- end
360
- end
361
-
362
- describe "cmd_raw_no_checks" do
363
- it "complains about unknown targets, commands, and parameters" do
364
- test_cmd_unknown(:cmd_raw_no_checks)
365
- end
366
-
367
- it "processes a string" do
368
- target_name, cmd_no_checks_name, params = @api.cmd_raw_no_checks("INST COLLECT with TYPE 0, DURATION 5")
369
- expect(target_name).to eql 'INST'
370
- expect(cmd_no_checks_name).to eql 'COLLECT'
371
- expect(params).to include('TYPE'=>0, 'DURATION'=>5)
372
- end
373
-
374
- it "processes parameters" do
375
- target_name, cmd_no_checks_name, params = @api.cmd_raw_no_checks("INST","COLLECT","TYPE"=>0,"DURATION"=>5)
376
- expect(target_name).to eql 'INST'
377
- expect(cmd_no_checks_name).to eql 'COLLECT'
378
- expect(params).to include('TYPE'=>0, 'DURATION'=>5)
379
- end
380
-
381
- it "warns about required parameters" do
382
- expect { @api.cmd_raw_no_checks("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
383
- end
384
-
385
- it "does not warn about out of range parameters" do
386
- expect { @api.cmd_raw_no_checks("INST COLLECT with TYPE 0, DURATION 1000") }.to_not raise_error
387
- end
388
-
389
- it "does not warn about hazardous parameters" do
390
- expect { @api.cmd_raw_no_checks("INST COLLECT with TYPE 1") }.to_not raise_error
391
- end
392
-
393
- it "does not warn about hazardous commands" do
394
- expect { @api.cmd_raw_no_checks("INST CLEAR") }.to_not raise_error
395
- end
396
- end
397
-
398
- describe "get_cmd_list" do
399
- it "returns command names sorted" do
400
- result = @api.get_cmd_list("INST")
401
- expect(result.sort).to eql result
402
- end
403
-
404
- it "complains with a unknown target" do
405
- expect { @api.get_cmd_list("BLAH") }.to raise_error(/does not exist/)
406
- end
407
-
408
- it "returns command names and descriptions for a given target" do
409
- result = @api.get_cmd_list("INST")
410
- expect(result[0][0]).to eql "ABORT"
411
- # The second parameter is the description ... only test one
412
- expect(result[0][1]).to eql "Aborts a collect on the instrument"
413
- expect(result[1][0]).to eql "ARYCMD"
414
- expect(result[2][0]).to eql "ASCIICMD"
415
- expect(result[3][0]).to eql "CLEAR"
416
- expect(result[4][0]).to eql "COLLECT"
417
- expect(result[5][0]).to eql "COSMOS_ERROR_HANDLE"
418
- expect(result[6][0]).to eql "COSMOS_ERROR_IGNORE"
419
- expect(result[7][0]).to eql "COSMOS_HANDSHAKE_DS"
420
- expect(result[8][0]).to eql "COSMOS_HANDSHAKE_EN"
421
- expect(result[9][0]).to eql "FLTCMD"
422
- expect(result[10][0]).to eql "LINC_COMMAND"
423
- expect(result[11][0]).to eql "SETPARAMS"
424
- expect(result[12][0]).to eql "SLRPNLDEPLOY"
425
- expect(result[13][0]).to eql "SLRPNLRESET"
426
- end
427
- end
428
-
429
- describe "get_cmd_param_list" do
430
- it "returns parameters for the command" do
431
- result = @api.get_cmd_param_list("INST","COLLECT")
432
- # Each element in the results array contains:
433
- # name, default, states, description, full units, units, required
434
- expect(result).to include ['TYPE',0,{"NORMAL"=>0,"SPECIAL"=>1},'Collect type',nil,nil,true]
435
- expect(result).to include ['TEMP',0.0,nil,'Collect temperature','Celcius','C',false]
436
- end
437
-
438
- it "returns array parameters for the command" do
439
- result = @api.get_cmd_param_list("INST","ARYCMD")
440
- # Each element in the results array contains:
441
- # name, default, states, description, full units, units, required
442
- expect(result).to include ['ARRAY',[],nil,'Array parameter',nil,nil,false]
443
- end
444
- end
445
-
446
- describe "get_cmd_hazardous" do
447
- it "returns whether the command with parameters is hazardous" do
448
- expect(@api.get_cmd_hazardous("INST","COLLECT",{"TYPE"=>"NORMAL"})).to be false
449
- expect(@api.get_cmd_hazardous("INST","COLLECT",{"TYPE"=>"SPECIAL"})).to be true
450
- end
451
-
452
- it "returns whether the command is hazardous" do
453
- expect(@api.get_cmd_hazardous("INST","CLEAR")).to be true
454
- end
455
- end
456
-
457
- describe "get_cmd_value" do
458
- it "returns command values" do
459
- time = Time.now
460
- packet = System.commands.packet("INST", "COLLECT")
461
- packet.received_time = time
462
- packet.restore_defaults
463
- packet.received_count = 5
464
- expect(@api.get_cmd_value("INST", "COLLECT", "TYPE")).to eql 'NORMAL'
465
- expect(@api.get_cmd_value("INST", "COLLECT", "RECEIVED_TIMEFORMATTED")).to eql time.formatted
466
- expect(@api.get_cmd_value("INST", "COLLECT", "RECEIVED_TIMESECONDS")).to eql time.to_f
467
- expect(@api.get_cmd_value("INST", "COLLECT", "RECEIVED_COUNT")).to eql 5
468
- end
469
- end
470
-
471
- describe "get_cmd_time" do
472
- it "returns command times" do
473
- time = Time.now
474
- time2 = Time.now + 2
475
- packet = System.commands.packet("INST", "COLLECT")
476
- packet.received_time = time
477
- packet2 = System.commands.packet("COSMOS", "STARTLOGGING")
478
- packet2.received_time = time2
479
- expect(@api.get_cmd_time()).to eql ['COSMOS', 'STARTLOGGING', time2.tv_sec, time2.tv_usec]
480
- expect(@api.get_cmd_time('INST')).to eql ['INST', 'COLLECT', time.tv_sec, time.tv_usec]
481
- expect(@api.get_cmd_time('COSMOS')).to eql ['COSMOS', 'STARTLOGGING', time2.tv_sec, time2.tv_usec]
482
- expect(@api.get_cmd_time('INST', 'COLLECT')).to eql ['INST', 'COLLECT', time.tv_sec, time.tv_usec]
483
- expect(@api.get_cmd_time('COSMOS', 'STARTLOGGING')).to eql ['COSMOS', 'STARTLOGGING', time2.tv_sec, time2.tv_usec]
484
- end
485
- end
486
-
487
- def test_tlm_unknown(method)
488
- expect { @api.send(method,"BLAH HEALTH_STATUS COLLECTS") }.to raise_error(/does not exist/)
489
- expect { @api.send(method,"INST UNKNOWN COLLECTS") }.to raise_error(/does not exist/)
490
- expect { @api.send(method,"INST HEALTH_STATUS BLAH") }.to raise_error(/does not exist/)
491
- expect { @api.send(method,"BLAH","HEALTH_STATUS","COLLECTS") }.to raise_error(/does not exist/)
492
- expect { @api.send(method,"INST","UNKNOWN","COLLECTS") }.to raise_error(/does not exist/)
493
- expect { @api.send(method,"INST","HEALTH_STATUS","BLAH") }.to raise_error(/does not exist/)
494
- end
495
-
496
- describe "tlm" do
497
- it "complains about unknown targets, commands, and parameters" do
498
- test_tlm_unknown(:tlm)
499
- end
500
-
501
- it "processes a string" do
502
- value = @api.tlm("INST HEALTH_STATUS TEMP1")
503
- expect(value).to eql -100.0
504
- end
505
-
506
- it "processes parameters" do
507
- value = @api.tlm("INST","HEALTH_STATUS","TEMP1")
508
- end
509
-
510
- it "complains if too many parameters" do
511
- expect { @api.tlm("INST","HEALTH_STATUS","TEMP1","TEMP2") }.to raise_error(/Invalid number of arguments/)
512
- end
513
- end
514
-
515
- describe "tlm_raw" do
516
- it "complains about unknown targets, commands, and parameters" do
517
- test_tlm_unknown(:tlm_raw)
518
- end
519
-
520
- it "processes a string" do
521
- expect(@api.tlm_raw("INST HEALTH_STATUS TEMP1")).to eql 0
522
- end
523
-
524
- it "returns the value using LATEST" do
525
- expect(@api.tlm_raw("INST LATEST TEMP1")).to eql 0
526
- end
527
-
528
- it "processes parameters" do
529
- expect(@api.tlm_raw("INST","HEALTH_STATUS","TEMP1")).to eql 0
530
- end
531
- end
532
-
533
- describe "tlm_formatted" do
534
- it "complains about unknown targets, commands, and parameters" do
535
- test_tlm_unknown(:tlm_formatted)
536
- end
537
-
538
- it "processes a string" do
539
- expect(@api.tlm_formatted("INST HEALTH_STATUS TEMP1")).to eql "-100.000"
540
- end
541
-
542
- it "returns the value using LATEST" do
543
- expect(@api.tlm_formatted("INST LATEST TEMP1")).to eql "-100.000"
544
- end
545
-
546
- it "processes parameters" do
547
- expect(@api.tlm_formatted("INST","HEALTH_STATUS","TEMP1")).to eql "-100.000"
548
- end
549
- end
550
-
551
- describe "tlm_with_units" do
552
- it "complains about unknown targets, commands, and parameters" do
553
- test_tlm_unknown(:tlm_with_units)
554
- end
555
-
556
- it "processes a string" do
557
- expect(@api.tlm_with_units("INST HEALTH_STATUS TEMP1")).to eql "-100.000 C"
558
- end
559
-
560
- it "returns the value using LATEST" do
561
- expect(@api.tlm_with_units("INST LATEST TEMP1")).to eql "-100.000 C"
562
- end
563
-
564
- it "processes parameters" do
565
- expect(@api.tlm_with_units("INST","HEALTH_STATUS","TEMP1")).to eql "-100.000 C"
566
- end
567
- end
568
-
569
- describe "tlm_variable" do
570
- it "complains about unknown targets, commands, and parameters" do
571
- expect { @api.tlm_variable("BLAH HEALTH_STATUS COLLECTS",:RAW) }.to raise_error(/does not exist/)
572
- expect { @api.tlm_variable("INST UNKNOWN COLLECTS",:RAW) }.to raise_error(/does not exist/)
573
- expect { @api.tlm_variable("INST HEALTH_STATUS BLAH",:RAW) }.to raise_error(/does not exist/)
574
- expect { @api.tlm_variable("BLAH","HEALTH_STATUS","COLLECTS",:RAW) }.to raise_error(/does not exist/)
575
- expect { @api.tlm_variable("INST","UNKNOWN","COLLECTS",:RAW) }.to raise_error(/does not exist/)
576
- expect { @api.tlm_variable("INST","HEALTH_STATUS","BLAH",:RAW) }.to raise_error(/does not exist/)
577
- end
578
-
579
- it "processes a string" do
580
- expect(@api.tlm_variable("INST HEALTH_STATUS TEMP1",:CONVERTED)).to eql -100.0
581
- expect(@api.tlm_variable("INST HEALTH_STATUS TEMP1",:RAW)).to eql 0
582
- expect(@api.tlm_variable("INST HEALTH_STATUS TEMP1",:FORMATTED)).to eql "-100.000"
583
- expect(@api.tlm_variable("INST HEALTH_STATUS TEMP1",:WITH_UNITS)).to eql "-100.000 C"
584
- end
585
-
586
- it "returns the value using LATEST" do
587
- expect(@api.tlm_variable("INST LATEST TEMP1",:CONVERTED)).to eql -100.0
588
- expect(@api.tlm_variable("INST LATEST TEMP1",:RAW)).to eql 0
589
- expect(@api.tlm_variable("INST LATEST TEMP1",:FORMATTED)).to eql "-100.000"
590
- expect(@api.tlm_variable("INST LATEST TEMP1",:WITH_UNITS)).to eql "-100.000 C"
591
- end
592
-
593
- it "processes parameters" do
594
- expect(@api.tlm_variable("INST","HEALTH_STATUS","TEMP1",:CONVERTED)).to eql -100.0
595
- expect(@api.tlm_variable("INST","HEALTH_STATUS","TEMP1",:RAW)).to eql 0
596
- expect(@api.tlm_variable("INST","HEALTH_STATUS","TEMP1",:FORMATTED)).to eql "-100.000"
597
- expect(@api.tlm_variable("INST","HEALTH_STATUS","TEMP1",:WITH_UNITS)).to eql "-100.000 C"
598
- end
599
-
600
- it "complains with too many parameters" do
601
- expect { @api.tlm_variable("INST","HEALTH_STATUS","TEMP1","TEMP2",:CONVERTED) }.to raise_error(/Invalid number of arguments/)
602
- end
603
- end
604
-
605
- describe "set_tlm" do
606
- it "complains about unknown targets, commands, and parameters" do
607
- expect { @api.set_tlm("BLAH HEALTH_STATUS COLLECTS = 1") }.to raise_error(/does not exist/)
608
- expect { @api.set_tlm("INST UNKNOWN COLLECTS = 1") }.to raise_error(/does not exist/)
609
- expect { @api.set_tlm("INST HEALTH_STATUS BLAH = 1") }.to raise_error(/does not exist/)
610
- expect { @api.set_tlm("BLAH","HEALTH_STATUS","COLLECTS",1) }.to raise_error(/does not exist/)
611
- expect { @api.set_tlm("INST","UNKNOWN","COLLECTS",1) }.to raise_error(/does not exist/)
612
- expect { @api.set_tlm("INST","HEALTH_STATUS","BLAH",1) }.to raise_error(/does not exist/)
613
- end
614
-
615
- it "processes a string" do
616
- @api.set_tlm("INST HEALTH_STATUS TEMP1 = 0.0")
617
- expect(@api.tlm("INST HEALTH_STATUS TEMP1")).to be_within(0.00001).of(-0.05759)
618
- end
619
-
620
- it "processes parameters" do
621
- @api.set_tlm("INST","HEALTH_STATUS","TEMP1", 0.0)
622
- expect(@api.tlm("INST HEALTH_STATUS TEMP1")).to be_within(0.00001).of(-0.05759)
623
- end
624
-
625
- it "complains with too many parameters" do
626
- expect { @api.set_tlm("INST","HEALTH_STATUS","TEMP1","TEMP2",0.0) }.to raise_error(/Invalid number of arguments/)
627
- end
628
- end
629
-
630
- describe "set_tlm_raw" do
631
- it "complains about unknown targets, commands, and parameters" do
632
- expect { @api.set_tlm_raw("BLAH HEALTH_STATUS COLLECTS = 1") }.to raise_error(/does not exist/)
633
- expect { @api.set_tlm_raw("INST UNKNOWN COLLECTS = 1") }.to raise_error(/does not exist/)
634
- expect { @api.set_tlm_raw("INST HEALTH_STATUS BLAH = 1") }.to raise_error(/does not exist/)
635
- expect { @api.set_tlm_raw("BLAH","HEALTH_STATUS","COLLECTS",1) }.to raise_error(/does not exist/)
636
- expect { @api.set_tlm_raw("INST","UNKNOWN","COLLECTS",1) }.to raise_error(/does not exist/)
637
- expect { @api.set_tlm_raw("INST","HEALTH_STATUS","BLAH",1) }.to raise_error(/does not exist/)
638
- end
639
-
640
- it "processes a string" do
641
- @api.set_tlm_raw("INST HEALTH_STATUS TEMP1 = 0.0")
642
- expect(@api.tlm("INST HEALTH_STATUS TEMP1")).to eql -100.0
643
- end
644
-
645
- it "processes parameters" do
646
- @api.set_tlm_raw("INST","HEALTH_STATUS","TEMP1", 0.0)
647
- expect(@api.tlm("INST HEALTH_STATUS TEMP1")).to eql -100.0
648
- end
649
- end
650
-
651
- describe "get_tlm_packet" do
652
- it "complains about non-existant targets" do
653
- expect { @api.get_tlm_packet("BLAH","HEALTH_STATUS") }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
654
- end
655
-
656
- it "complains about non-existant packets" do
657
- expect { @api.get_tlm_packet("INST","BLAH") }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
658
- end
659
-
660
- it "complains using LATEST" do
661
- expect { @api.get_tlm_packet("INST","LATEST") }.to raise_error(RuntimeError, "Telemetry packet 'INST LATEST' does not exist")
662
- end
663
-
664
- it "complains about non-existant value_types" do
665
- expect { @api.get_tlm_packet("INST","HEALTH_STATUS",:MINE) }.to raise_error(ArgumentError, "Unknown value type on read: MINE")
666
- end
667
-
668
- it "reads all telemetry items with their limits states" do
669
- vals = @api.get_tlm_packet("INST","HEALTH_STATUS")
670
- expect(vals[0][0]).to eql "RECEIVED_TIMESECONDS"
671
- expect(vals[0][1]).to eql 0.0
672
- expect(vals[0][2]).to be_nil
673
- expect(vals[1][0]).to eql "RECEIVED_TIMEFORMATTED"
674
- expect(vals[1][1]).to eql "No Packet Received Time"
675
- expect(vals[1][2]).to be_nil
676
- expect(vals[2][0]).to eql "RECEIVED_COUNT"
677
- expect(vals[2][1]).to eql 0
678
- expect(vals[2][2]).to be_nil
679
- # Spot check a few more
680
- expect(vals[22][0]).to eql "TEMP1"
681
- expect(vals[22][1]).to eql -100.0
682
- expect(vals[22][2]).to eql :RED_LOW
683
- expect(vals[23][0]).to eql "TEMP2"
684
- expect(vals[23][1]).to eql -100.0
685
- expect(vals[23][2]).to eql :RED_LOW
686
- expect(vals[24][0]).to eql "TEMP3"
687
- expect(vals[24][1]).to eql -100.0
688
- expect(vals[24][2]).to eql :RED_LOW
689
- expect(vals[25][0]).to eql "TEMP4"
690
- expect(vals[25][1]).to eql -100.0
691
- expect(vals[25][2]).to eql :RED_LOW
692
- end
693
- end
694
-
695
- describe "get_tlm_values" do
696
- it "handles an empty request" do
697
- expect(@api.get_tlm_values([])).to eql [[], [], [], :DEFAULT]
698
- end
699
-
700
- it "complains about non-existant targets" do
701
- expect { @api.get_tlm_values([["BLAH","HEALTH_STATUS","TEMP1"]]) }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
702
- end
703
-
704
- it "complains about non-existant packets" do
705
- expect { @api.get_tlm_values([["INST","BLAH","TEMP1"]]) }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
706
- end
707
-
708
- it "complains about non-existant items" do
709
- expect { @api.get_tlm_values([["INST","LATEST","BLAH"]]) }.to raise_error(RuntimeError, "Telemetry item 'INST LATEST BLAH' does not exist")
710
- end
711
-
712
- it "complains about non-existant value_types" do
713
- expect { @api.get_tlm_values([["INST","HEALTH_STATUS","TEMP1"]],:MINE) }.to raise_error(ArgumentError, "Unknown value type on read: MINE")
714
- end
715
-
716
- it "complains about bad arguments" do
717
- expect { @api.get_tlm_values("INST",:MINE) }.to raise_error(ArgumentError, /item_array must be nested array/)
718
- expect { @api.get_tlm_values(["INST","HEALTH_STATUS","TEMP1"],:MINE) }.to raise_error(ArgumentError, /item_array must be nested array/)
719
- expect { @api.get_tlm_values([["INST","HEALTH_STATUS","TEMP1"]],10) }.to raise_error(ArgumentError, /value_types must be a single symbol or array of symbols/)
720
- expect { @api.get_tlm_values([["INST","HEALTH_STATUS","TEMP1"]],[10]) }.to raise_error(ArgumentError, /value_types must be a single symbol or array of symbols/)
721
- end
722
-
723
- it "reads all the specified items" do
724
- items = []
725
- items << %w(INST HEALTH_STATUS TEMP1)
726
- items << %w(INST HEALTH_STATUS TEMP2)
727
- items << %w(INST HEALTH_STATUS TEMP3)
728
- items << %w(INST HEALTH_STATUS TEMP4)
729
- vals = @api.get_tlm_values(items)
730
- expect(vals[0][0]).to eql -100.0
731
- expect(vals[0][1]).to eql -100.0
732
- expect(vals[0][2]).to eql -100.0
733
- expect(vals[0][3]).to eql -100.0
734
- expect(vals[1][0]).to eql :RED_LOW
735
- expect(vals[1][1]).to eql :RED_LOW
736
- expect(vals[1][2]).to eql :RED_LOW
737
- expect(vals[1][3]).to eql :RED_LOW
738
- expect(vals[2][0]).to eql [-80.0, -70.0, 60.0, 80.0, -20.0, 20.0]
739
- expect(vals[2][1]).to eql [-60.0, -55.0, 30.0, 35.0]
740
- expect(vals[2][2]).to eql [-25.0, -10.0, 50.0, 55.0]
741
- expect(vals[2][3]).to eql [-80.0, -70.0, 60.0, 80.0]
742
- expect(vals[3]).to eql :DEFAULT
743
- end
744
-
745
- it "reads all the specified items with one conversion" do
746
- items = []
747
- items << %w(INST HEALTH_STATUS TEMP1)
748
- items << %w(INST HEALTH_STATUS TEMP2)
749
- items << %w(INST HEALTH_STATUS TEMP3)
750
- items << %w(INST HEALTH_STATUS TEMP4)
751
- vals = @api.get_tlm_values(items, :RAW)
752
- expect(vals[0][0]).to eql 0
753
- expect(vals[0][1]).to eql 0
754
- expect(vals[0][2]).to eql 0
755
- expect(vals[0][3]).to eql 0
756
- expect(vals[1][0]).to eql :RED_LOW
757
- expect(vals[1][1]).to eql :RED_LOW
758
- expect(vals[1][2]).to eql :RED_LOW
759
- expect(vals[1][3]).to eql :RED_LOW
760
- expect(vals[2][0]).to eql [-80.0, -70.0, 60.0, 80.0, -20.0, 20.0]
761
- expect(vals[2][1]).to eql [-60.0, -55.0, 30.0, 35.0]
762
- expect(vals[2][2]).to eql [-25.0, -10.0, 50.0, 55.0]
763
- expect(vals[2][3]).to eql [-80.0, -70.0, 60.0, 80.0]
764
- expect(vals[3]).to eql :DEFAULT
765
- end
766
-
767
- it "reads all the specified items with different conversions" do
768
- items = []
769
- items << %w(INST HEALTH_STATUS TEMP1)
770
- items << %w(INST HEALTH_STATUS TEMP2)
771
- items << %w(INST HEALTH_STATUS TEMP3)
772
- items << %w(INST HEALTH_STATUS TEMP4)
773
- vals = @api.get_tlm_values(items, [:RAW, :CONVERTED, :FORMATTED, :WITH_UNITS])
774
- expect(vals[0][0]).to eql 0
775
- expect(vals[0][1]).to eql -100.0
776
- expect(vals[0][2]).to eql "-100.000"
777
- expect(vals[0][3]).to eql "-100.000 C"
778
- expect(vals[1][0]).to eql :RED_LOW
779
- expect(vals[1][1]).to eql :RED_LOW
780
- expect(vals[1][2]).to eql :RED_LOW
781
- expect(vals[1][3]).to eql :RED_LOW
782
- expect(vals[2][0]).to eql [-80.0, -70.0, 60.0, 80.0, -20.0, 20.0]
783
- expect(vals[2][1]).to eql [-60.0, -55.0, 30.0, 35.0]
784
- expect(vals[2][2]).to eql [-25.0, -10.0, 50.0, 55.0]
785
- expect(vals[2][3]).to eql [-80.0, -70.0, 60.0, 80.0]
786
- expect(vals[3]).to eql :DEFAULT
787
- end
788
-
789
- it "complains if items length != conversions length" do
790
- items = []
791
- items << %w(INST HEALTH_STATUS TEMP1)
792
- items << %w(INST HEALTH_STATUS TEMP2)
793
- items << %w(INST HEALTH_STATUS TEMP3)
794
- items << %w(INST HEALTH_STATUS TEMP4)
795
- expect { @api.get_tlm_values(items, [:RAW, :CONVERTED]) }.to raise_error(ArgumentError, "Passed 4 items but only 2 value types")
796
- end
797
- end
798
-
799
- describe "get_tlm_list" do
800
- it "complains about non-existant targets" do
801
- expect { @api.get_tlm_list("BLAH") }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
802
- end
803
-
804
- it "returns the sorted packet names for a target" do
805
- pkts = @api.get_tlm_list("INST")
806
- expect(pkts[0][0]).to eql "ADCS"
807
- expect(pkts[1][0]).to eql "ERROR"
808
- expect(pkts[2][0]).to eql "HANDSHAKE"
809
- expect(pkts[3][0]).to eql "HEALTH_STATUS"
810
- expect(pkts[4][0]).to eql "IMAGE"
811
- expect(pkts[5][0]).to eql "MECH"
812
- expect(pkts[6][0]).to eql "PARAMS"
813
- end
814
- end
815
-
816
- describe "get_tlm_item_list" do
817
- it "complains about non-existant targets" do
818
- expect { @api.get_tlm_item_list("BLAH","HEALTH_STATUS") }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
819
- end
820
-
821
- it "complains about non-existant packets" do
822
- expect { @api.get_tlm_item_list("INST","BLAH") }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
823
- end
824
-
825
- it "returns all the items for a target/packet" do
826
- items = @api.get_tlm_item_list("INST","HEALTH_STATUS")
827
- expect(items[0][0]).to eql "RECEIVED_TIMESECONDS"
828
- expect(items[1][0]).to eql "RECEIVED_TIMEFORMATTED"
829
- expect(items[2][0]).to eql "RECEIVED_COUNT"
830
- # Spot check a few more
831
- expect(items[22][0]).to eql "TEMP1"
832
- expect(items[22][1]).to be_nil
833
- expect(items[22][2]).to eql "Temperature #1"
834
- expect(items[28][0]).to eql "COLLECT_TYPE"
835
- expect(items[28][1]).to include("NORMAL"=>0, "SPECIAL"=>1)
836
- expect(items[28][2]).to eql "Most recent collect type"
837
- end
838
- end
839
-
840
- describe "get_tlm_details" do
841
- it "complains about non-existant targets" do
842
- expect { @api.get_tlm_details([["BLAH","HEALTH_STATUS","TEMP1"]]) }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
843
- end
844
-
845
- it "complains about non-existant packets" do
846
- expect { @api.get_tlm_details([["INST","BLAH","TEMP1"]]) }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
847
- end
848
-
849
- it "complains about non-existant items" do
850
- expect { @api.get_tlm_details([["INST","LATEST","BLAH"]]) }.to raise_error(RuntimeError, "Telemetry item 'INST LATEST BLAH' does not exist")
851
- end
852
-
853
- it "complains about bad parameters" do
854
- expect { @api.get_tlm_details("INST") }.to raise_error(ArgumentError, /item_array must be nested array/)
855
- expect { @api.get_tlm_details(["INST","LATEST","BLAH"]) }.to raise_error(ArgumentError, /item_array must be nested array/)
856
- end
857
-
858
- it "reads all the specified items" do
859
- items = []
860
- items << %w(INST HEALTH_STATUS TEMP1)
861
- items << %w(INST HEALTH_STATUS TEMP2)
862
- items << %w(INST HEALTH_STATUS TEMP3)
863
- items << %w(INST HEALTH_STATUS TEMP4)
864
- details = @api.get_tlm_details(items)
865
- expect(details.length).to eql 4
866
- expect(details[0]["name"]).to eql "TEMP1"
867
- expect(details[1]["name"]).to eql "TEMP2"
868
- expect(details[2]["name"]).to eql "TEMP3"
869
- expect(details[3]["name"]).to eql "TEMP4"
870
- end
871
- end
872
-
873
- describe "get_out_of_limits" do
874
- it "returns all out of limits items" do
875
- items = @api.get_out_of_limits
876
- (0..3).each do |i|
877
- expect(items[i][0]).to eql "INST"
878
- expect(items[i][1]).to eql "HEALTH_STATUS"
879
- expect(items[i][2]).to eql "TEMP#{i+1}"
880
- expect(items[i][3]).to eql :RED_LOW
881
- end
882
- end
883
- end
884
-
885
- describe "limits_enabled?" do
886
- it "complains about non-existant targets" do
887
- expect { @api.limits_enabled?("BLAH","HEALTH_STATUS","TEMP1") }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
888
- end
889
-
890
- it "complains about non-existant packets" do
891
- expect { @api.limits_enabled?("INST","BLAH","TEMP1") }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
892
- end
893
-
894
- it "complains about non-existant items" do
895
- expect { @api.limits_enabled?("INST","HEALTH_STATUS","BLAH") }.to raise_error(RuntimeError, "Packet item 'INST HEALTH_STATUS BLAH' does not exist")
896
- end
897
-
898
- it "returns whether limits are enable for an item" do
899
- expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be true
900
- end
901
- end
902
-
903
- describe "enable_limits" do
904
- it "complains about non-existant targets" do
905
- expect { @api.enable_limits("BLAH","HEALTH_STATUS","TEMP1") }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
906
- end
907
-
908
- it "complains about non-existant packets" do
909
- expect { @api.enable_limits("INST","BLAH","TEMP1") }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
910
- end
911
-
912
- it "complains about non-existant items" do
913
- expect { @api.enable_limits("INST","HEALTH_STATUS","BLAH") }.to raise_error(RuntimeError, "Packet item 'INST HEALTH_STATUS BLAH' does not exist")
914
- end
915
-
916
- it "enables limits for an item" do
917
- expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be true
918
- @api.disable_limits("INST","HEALTH_STATUS","TEMP1")
919
- expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be false
920
- @api.enable_limits("INST","HEALTH_STATUS","TEMP1")
921
- expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be true
922
- end
923
- end
924
-
925
- describe "disable_limits" do
926
- it "complains about non-existant targets" do
927
- expect { @api.disable_limits("BLAH","HEALTH_STATUS","TEMP1") }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
928
- end
929
-
930
- it "complains about non-existant packets" do
931
- expect { @api.disable_limits("INST","BLAH","TEMP1") }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
932
- end
933
-
934
- it "complains about non-existant items" do
935
- expect { @api.disable_limits("INST","HEALTH_STATUS","BLAH") }.to raise_error(RuntimeError, "Packet item 'INST HEALTH_STATUS BLAH' does not exist")
936
- end
937
-
938
- it "disables limits for an item" do
939
- expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be true
940
- @api.disable_limits("INST","HEALTH_STATUS","TEMP1")
941
- expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be false
942
- @api.enable_limits("INST","HEALTH_STATUS","TEMP1")
943
- end
944
- end
945
-
946
- describe "get_limits" do
947
- it "complains about non-existant targets" do
948
- expect { @api.get_limits("BLAH","HEALTH_STATUS","TEMP1") }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
949
- end
950
-
951
- it "complains about non-existant packets" do
952
- expect { @api.get_limits("INST","BLAH","TEMP1") }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
953
- end
954
-
955
- it "complains about non-existant items" do
956
- expect { @api.get_limits("INST","HEALTH_STATUS","BLAH") }.to raise_error(RuntimeError, "Packet item 'INST HEALTH_STATUS BLAH' does not exist")
957
- end
958
-
959
- it "gets limits for an item" do
960
- expect(@api.get_limits("INST","HEALTH_STATUS","TEMP1")).to eql([:DEFAULT, 1, true, -80.0, -70.0, 60.0, 80.0, -20.0, 20.0])
961
- expect(@api.get_limits("INST","HEALTH_STATUS","TEMP1",:TVAC)).to eql([:TVAC, 1, true, -80.0, -30.0, 30.0, 80.0, nil, nil])
962
- end
963
- end
964
-
965
- describe "set_limits" do
966
- it "complains about non-existant targets" do
967
- expect { @api.set_limits("BLAH","HEALTH_STATUS","TEMP1",0.0,10.0,20.0,30.0) }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
968
- end
969
-
970
- it "complains about non-existant packets" do
971
- expect { @api.set_limits("INST","BLAH","TEMP1",0.0,10.0,20.0,30.0) }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
972
- end
973
-
974
- it "complains about non-existant items" do
975
- expect { @api.set_limits("INST","HEALTH_STATUS","BLAH",0.0,10.0,20.0,30.0) }.to raise_error(RuntimeError, "Packet item 'INST HEALTH_STATUS BLAH' does not exist")
976
- end
977
-
978
- it "gets limits for an item" do
979
- expect(@api.set_limits("INST","HEALTH_STATUS","TEMP1",0.0,10.0,20.0,30.0)).to eql([:CUSTOM, 1, true, 0.0, 10.0, 20.0, 30.0, nil, nil])
980
- expect(@api.set_limits("INST","HEALTH_STATUS","TEMP1",0.0,10.0,20.0,30.0,12.0,15.0,:CUSTOM2,2,false)).to eql([:CUSTOM2, 2, false, 0.0, 10.0, 20.0, 30.0, 12.0, 15.0])
981
- expect(@api.set_limits("INST","HEALTH_STATUS","TEMP1",0.0,10.0,20.0,30.0,12.0,15.0,:CUSTOM,1,true)).to eql([:CUSTOM, 1, true, 0.0, 10.0, 20.0, 30.0, 12.0, 15.0])
982
- end
983
- end
984
-
985
- describe "get_limits_groups" do
986
- it "returns all the limits groups" do
987
- expect(@api.get_limits_groups).to eql %w(FIRST SECOND)
988
- end
989
- end
990
-
991
- describe "enable_limits_group" do
992
- it "complains about undefined limits groups" do
993
- expect { @api.enable_limits_group("MINE") }.to raise_error(RuntimeError, "LIMITS_GROUP MINE undefined. Ensure your telemetry definition contains the line: LIMITS_GROUP MINE")
994
- end
995
-
996
- it "enables limits for all items in the group" do
997
- @api.disable_limits("INST","HEALTH_STATUS","TEMP1")
998
- @api.disable_limits("INST","HEALTH_STATUS","TEMP3")
999
- expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be false
1000
- expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP3")).to be false
1001
- @api.enable_limits_group("FIRST")
1002
- expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be true
1003
- expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP3")).to be true
1004
- end
1005
- end
1006
-
1007
- describe "disable_limits_group" do
1008
- it "complains about undefined limits groups" do
1009
- expect { @api.disable_limits_group("MINE") }.to raise_error(RuntimeError, "LIMITS_GROUP MINE undefined. Ensure your telemetry definition contains the line: LIMITS_GROUP MINE")
1010
- end
1011
-
1012
- it "disables limits for all items in the group" do
1013
- @api.enable_limits("INST","HEALTH_STATUS","TEMP1")
1014
- @api.enable_limits("INST","HEALTH_STATUS","TEMP3")
1015
- expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be true
1016
- expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP3")).to be true
1017
- @api.disable_limits_group("FIRST")
1018
- expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be false
1019
- expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP3")).to be false
1020
- end
1021
- end
1022
-
1023
- describe "get_limits_sets, get_limits_set, set_limits_set" do
1024
- it "gets and set the active limits set" do
1025
- if @api.get_limits_sets.include?(:CUSTOM)
1026
- expect(@api.get_limits_sets).to eql [:DEFAULT,:TVAC, :CUSTOM, :CUSTOM2]
1027
- else
1028
- expect(@api.get_limits_sets).to eql [:DEFAULT,:TVAC]
1029
- end
1030
- @api.set_limits_set("TVAC")
1031
- expect(@api.get_limits_set).to eql "TVAC"
1032
- @api.set_limits_set("DEFAULT")
1033
- expect(@api.get_limits_set).to eql "DEFAULT"
1034
- end
1035
- end
1036
-
1037
- describe "get_target_list" do
1038
- it "returns all target names" do
1039
- expect(@api.get_target_list).to eql %w(COSMOS INST META SYSTEM)
1040
- end
1041
- end
1042
-
1043
- describe "subscribe_limits_events" do
1044
- it "calls CmdTlmServer" do
1045
- stub_const("Cosmos::CmdTlmServer::DEFAULT_LIMITS_EVENT_QUEUE_SIZE", 100)
1046
- expect(CmdTlmServer).to receive(:subscribe_limits_events)
1047
- @api.subscribe_limits_events
1048
- end
1049
- end
1050
-
1051
- describe "unsubscribe_limits_events" do
1052
- it "calls CmdTlmServer" do
1053
- expect(CmdTlmServer).to receive(:unsubscribe_limits_events)
1054
- @api.unsubscribe_limits_events(0)
1055
- end
1056
- end
1057
-
1058
- describe "get_limits_event" do
1059
- it "gets a limits event" do
1060
- expect(CmdTlmServer).to receive(:get_limits_event)
1061
- @api.get_limits_event(0)
1062
- end
1063
- end
1064
-
1065
- describe "subscribe_packet_data" do
1066
- it "calls CmdTlmServer" do
1067
- stub_const("Cosmos::CmdTlmServer::DEFAULT_PACKET_DATA_QUEUE_SIZE", 100)
1068
- expect(CmdTlmServer).to receive(:subscribe_packet_data)
1069
- @api.subscribe_packet_data([["TGT","PKT1"],["TGT","PKT2"]])
1070
- end
1071
- end
1072
-
1073
- describe "unsubscribe_packet_datas" do
1074
- it "calls CmdTlmServer" do
1075
- expect(CmdTlmServer).to receive(:unsubscribe_packet_data)
1076
- @api.unsubscribe_packet_data(10)
1077
- end
1078
- end
1079
-
1080
- describe "get_packet_data" do
1081
- it "calls CmdTlmServer" do
1082
- expect(CmdTlmServer).to receive(:get_packet_data)
1083
- @api.get_packet_data(10)
1084
- end
1085
- end
1086
-
1087
- # All these methods simply pass through directly to CmdTlmServer without
1088
- # adding any functionality. Thus we just test that they are are received
1089
- # by the CmdTlmServer.
1090
- describe "CmdTlmServer pass-throughs" do
1091
- it "calls through to the CmdTlmServer" do
1092
- @api.get_interface_names
1093
- @api.connect_interface("INT")
1094
- @api.disconnect_interface("INT")
1095
- @api.interface_state("INT")
1096
- @api.map_target_to_interface("INST", "INT")
1097
- @api.get_router_names
1098
- @api.connect_router("ROUTE")
1099
- @api.disconnect_router("ROUTE")
1100
- @api.router_state("ROUTE")
1101
- @api.send_raw("INT","\x00\x01")
1102
- @api.get_cmd_log_filename('DEFAULT')
1103
- @api.get_tlm_log_filename('DEFAULT')
1104
- @api.start_logging('ALL')
1105
- @api.stop_logging('ALL')
1106
- @api.start_cmd_log('ALL')
1107
- @api.start_tlm_log('ALL')
1108
- @api.stop_cmd_log('ALL')
1109
- @api.stop_tlm_log('ALL')
1110
- @api.get_server_message_log_filename
1111
- @api.start_new_server_message_log
1112
- end
1113
- end
1114
-
1115
- end
1116
- end
1117
-
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/tools/cmd_tlm_server/cmd_tlm_server'
14
+ require 'cosmos/tools/cmd_tlm_server/api'
15
+
16
+ module Cosmos
17
+
18
+ describe Api do
19
+
20
+ before(:all) do
21
+ cts = File.join(Cosmos::USERPATH,'config','tools','cmd_tlm_server','cmd_tlm_server.txt')
22
+ FileUtils.mkdir_p(File.dirname(cts))
23
+ File.open(cts,'w') do |file|
24
+ file.puts 'INTERFACE INT interface.rb'
25
+ file.puts 'ROUTER ROUTE interface.rb'
26
+ end
27
+ end
28
+
29
+ after(:all) do
30
+ clean_config()
31
+ FileUtils.rm_rf File.join(Cosmos::USERPATH,'config','tools')
32
+ end
33
+
34
+ before(:each) do
35
+ allow_any_instance_of(Interface).to receive(:connected?)
36
+ allow_any_instance_of(Interface).to receive(:connect)
37
+ allow_any_instance_of(Interface).to receive(:disconnect)
38
+ allow_any_instance_of(Interface).to receive(:write_raw)
39
+ allow_any_instance_of(Interface).to receive(:read)
40
+ @api = CmdTlmServer.new
41
+ allow(@api.commanding).to receive(:send_command_to_target)
42
+ end
43
+
44
+ after(:each) do
45
+ @api.stop
46
+ end
47
+
48
+ def test_cmd_unknown(method)
49
+ expect { @api.send(method,"BLAH COLLECT with TYPE NORMAL") }.to raise_error(/does not exist/)
50
+ expect { @api.send(method,"INST UNKNOWN with TYPE NORMAL") }.to raise_error(/does not exist/)
51
+ expect { @api.send(method,"INST COLLECT with BLAH NORMAL") }.to raise_error(/does not exist/)
52
+ expect { @api.send(method,"BLAH","COLLECT","TYPE"=>"NORMAL") }.to raise_error(/does not exist/)
53
+ expect { @api.send(method,"INST","UNKNOWN","TYPE"=>"NORMAL") }.to raise_error(/does not exist/)
54
+ expect { @api.send(method,"INST","COLLECT","BLAH"=>"NORMAL") }.to raise_error(/does not exist/)
55
+ end
56
+
57
+ describe "cmd" do
58
+ it "complains about unknown targets, commands, and parameters" do
59
+ test_cmd_unknown(:cmd)
60
+ sleep(0.5)
61
+ end
62
+
63
+ it "processes a string" do
64
+ target_name, cmd_name, params = @api.cmd("INST COLLECT with TYPE NORMAL, DURATION 5")
65
+ expect(target_name).to eql 'INST'
66
+ expect(cmd_name).to eql 'COLLECT'
67
+ expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
68
+ end
69
+
70
+ it "complains if parameters are not separated by commas" do
71
+ expect { @api.cmd("INST COLLECT with TYPE NORMAL DURATION 5") }.to raise_error(/Missing comma/)
72
+ end
73
+
74
+ it "complains if parameters don't have values" do
75
+ expect { @api.cmd("INST COLLECT with TYPE") }.to raise_error(/Missing value/)
76
+ end
77
+
78
+ it "processes parameters" do
79
+ target_name, cmd_name, params = @api.cmd("INST","COLLECT","TYPE"=>"NORMAL","DURATION"=>5)
80
+ expect(target_name).to eql 'INST'
81
+ expect(cmd_name).to eql 'COLLECT'
82
+ expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
83
+ end
84
+
85
+ it "processes commands without parameters" do
86
+ target_name, cmd_name, params = @api.cmd("INST","ABORT")
87
+ expect(target_name).to eql 'INST'
88
+ expect(cmd_name).to eql 'ABORT'
89
+ expect(params).to be {}
90
+ end
91
+
92
+ it "complains about too many parameters" do
93
+ expect { @api.cmd("INST","COLLECT","TYPE","DURATION") }.to raise_error(/Invalid number of arguments/)
94
+ end
95
+
96
+ it "warns about required parameters" do
97
+ expect { @api.cmd("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
98
+ end
99
+
100
+ it "warns about out of range parameters" do
101
+ expect { @api.cmd("INST COLLECT with TYPE NORMAL, DURATION 1000") }.to raise_error(/not in valid range/)
102
+ end
103
+
104
+ it "warns about hazardous parameters" do
105
+ expect { @api.cmd("INST COLLECT with TYPE SPECIAL") }.to raise_error(/Hazardous/)
106
+ end
107
+
108
+ it "warns about hazardous commands" do
109
+ expect { @api.cmd("INST CLEAR") }.to raise_error(/Hazardous/)
110
+ end
111
+ end
112
+
113
+ describe "cmd_no_range_check" do
114
+ it "complains about unknown targets, commands, and parameters" do
115
+ test_cmd_unknown(:cmd_no_range_check)
116
+ end
117
+
118
+ it "processes a string" do
119
+ target_name, cmd_no_range_check_name, params = @api.cmd_no_range_check("INST COLLECT with TYPE NORMAL, DURATION 5")
120
+ expect(target_name).to eql 'INST'
121
+ expect(cmd_no_range_check_name).to eql 'COLLECT'
122
+ expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
123
+ end
124
+
125
+ it "processes parameters" do
126
+ target_name, cmd_no_range_check_name, params = @api.cmd_no_range_check("INST","COLLECT","TYPE"=>"NORMAL","DURATION"=>5)
127
+ expect(target_name).to eql 'INST'
128
+ expect(cmd_no_range_check_name).to eql 'COLLECT'
129
+ expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
130
+ end
131
+
132
+ it "warns about required parameters" do
133
+ expect { @api.cmd_no_range_check("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
134
+ end
135
+
136
+ it "does not warn about out of range parameters" do
137
+ expect { @api.cmd_no_range_check("INST COLLECT with TYPE NORMAL, DURATION 1000") }.to_not raise_error
138
+ end
139
+
140
+ it "warns about hazardous parameters" do
141
+ expect { @api.cmd_no_range_check("INST COLLECT with TYPE SPECIAL") }.to raise_error(/Hazardous/)
142
+ end
143
+
144
+ it "warns about hazardous commands" do
145
+ expect { @api.cmd_no_range_check("INST CLEAR") }.to raise_error(/Hazardous/)
146
+ end
147
+ end
148
+
149
+ describe "cmd_no_hazardous_check" do
150
+ it "complains about unknown targets, commands, and parameters" do
151
+ test_cmd_unknown(:cmd_no_hazardous_check)
152
+ end
153
+
154
+ it "processes a string" do
155
+ target_name, cmd_no_hazardous_check_name, params = @api.cmd_no_hazardous_check("INST COLLECT with TYPE NORMAL, DURATION 5")
156
+ expect(target_name).to eql 'INST'
157
+ expect(cmd_no_hazardous_check_name).to eql 'COLLECT'
158
+ expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
159
+ end
160
+
161
+ it "processes parameters" do
162
+ target_name, cmd_no_hazardous_check_name, params = @api.cmd_no_hazardous_check("INST","COLLECT","TYPE"=>"NORMAL","DURATION"=>5)
163
+ expect(target_name).to eql 'INST'
164
+ expect(cmd_no_hazardous_check_name).to eql 'COLLECT'
165
+ expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
166
+ end
167
+
168
+ it "processes parameters that are strings" do
169
+ target_name, cmd_name, params = @api.cmd_no_hazardous_check("INST ASCIICMD with STRING 'ARM LASER'")
170
+ expect(target_name).to eql 'INST'
171
+ expect(cmd_name).to eql 'ASCIICMD'
172
+ expect(params).to include('STRING'=>'ARM LASER')
173
+ end
174
+
175
+ it "warns about required parameters" do
176
+ expect { @api.cmd_no_hazardous_check("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
177
+ end
178
+
179
+ it "warns about out of range parameters" do
180
+ expect { @api.cmd_no_hazardous_check("INST COLLECT with TYPE NORMAL, DURATION 1000") }.to raise_error(/not in valid range/)
181
+ end
182
+
183
+ it "does not warn about hazardous parameters" do
184
+ expect { @api.cmd_no_hazardous_check("INST COLLECT with TYPE SPECIAL") }.to_not raise_error
185
+ end
186
+
187
+ it "does not warn about hazardous commands" do
188
+ expect { @api.cmd_no_hazardous_check("INST CLEAR") }.to_not raise_error
189
+ end
190
+ end
191
+
192
+ describe "cmd_no_checks" do
193
+ it "complains about unknown targets, commands, and parameters" do
194
+ test_cmd_unknown(:cmd_no_checks)
195
+ end
196
+
197
+ it "processes a string" do
198
+ target_name, cmd_no_checks_name, params = @api.cmd_no_checks("INST COLLECT with TYPE NORMAL, DURATION 5")
199
+ expect(target_name).to eql 'INST'
200
+ expect(cmd_no_checks_name).to eql 'COLLECT'
201
+ expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
202
+ end
203
+
204
+ it "processes parameters" do
205
+ target_name, cmd_no_checks_name, params = @api.cmd_no_checks("INST","COLLECT","TYPE"=>"NORMAL","DURATION"=>5)
206
+ expect(target_name).to eql 'INST'
207
+ expect(cmd_no_checks_name).to eql 'COLLECT'
208
+ expect(params).to include('TYPE'=>'NORMAL', 'DURATION'=>5)
209
+ end
210
+
211
+ it "warns about required parameters" do
212
+ expect { @api.cmd_no_checks("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
213
+ end
214
+
215
+ it "does not warn about out of range parameters" do
216
+ expect { @api.cmd_no_checks("INST COLLECT with TYPE NORMAL, DURATION 1000") }.to_not raise_error
217
+ end
218
+
219
+ it "does not warn about hazardous parameters" do
220
+ expect { @api.cmd_no_checks("INST COLLECT with TYPE SPECIAL") }.to_not raise_error
221
+ end
222
+
223
+ it "does not warn about hazardous commands" do
224
+ expect { @api.cmd_no_checks("INST CLEAR") }.to_not raise_error
225
+ end
226
+ end
227
+
228
+ describe "cmd_raw" do
229
+ it "complains about unknown targets, commands, and parameters" do
230
+ test_cmd_unknown(:cmd_raw)
231
+ end
232
+
233
+ it "processes a string" do
234
+ target_name, cmd_name, params = @api.cmd_raw("INST COLLECT with TYPE 0, DURATION 5")
235
+ expect(target_name).to eql 'INST'
236
+ expect(cmd_name).to eql 'COLLECT'
237
+ expect(params).to include('TYPE'=>0, 'DURATION'=>5)
238
+ end
239
+
240
+ it "complains if parameters are not separated by commas" do
241
+ expect { @api.cmd_raw("INST COLLECT with TYPE 0 DURATION 5") }.to raise_error(/Missing comma/)
242
+ end
243
+
244
+ it "complains if parameters don't have values" do
245
+ expect { @api.cmd_raw("INST COLLECT with TYPE") }.to raise_error(/Missing value/)
246
+ end
247
+
248
+ it "processes parameters" do
249
+ target_name, cmd_name, params = @api.cmd_raw("INST","COLLECT","TYPE"=>0,"DURATION"=>5)
250
+ expect(target_name).to eql 'INST'
251
+ expect(cmd_name).to eql 'COLLECT'
252
+ expect(params).to include('TYPE'=>0, 'DURATION'=>5)
253
+ end
254
+
255
+ it "processes commands without parameters" do
256
+ target_name, cmd_name, params = @api.cmd_raw("INST","ABORT")
257
+ expect(target_name).to eql 'INST'
258
+ expect(cmd_name).to eql 'ABORT'
259
+ expect(params).to be {}
260
+ end
261
+
262
+ it "complains about too many parameters" do
263
+ expect { @api.cmd_raw("INST","COLLECT","TYPE","DURATION") }.to raise_error(/Invalid number of arguments/)
264
+ end
265
+
266
+ it "warns about required parameters" do
267
+ expect { @api.cmd_raw("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
268
+ end
269
+
270
+ it "warns about out of range parameters" do
271
+ expect { @api.cmd_raw("INST COLLECT with TYPE 0, DURATION 1000") }.to raise_error(/not in valid range/)
272
+ end
273
+
274
+ it "warns about hazardous parameters" do
275
+ expect { @api.cmd_raw("INST COLLECT with TYPE 1") }.to raise_error(/Hazardous/)
276
+ end
277
+
278
+ it "warns about hazardous commands" do
279
+ expect { @api.cmd_raw("INST CLEAR") }.to raise_error(/Hazardous/)
280
+ end
281
+ end
282
+
283
+ describe "cmd_no_range_check" do
284
+ it "complains about unknown targets, commands, and parameters" do
285
+ test_cmd_unknown(:cmd_raw_no_range_check)
286
+ end
287
+
288
+ it "processes a string" do
289
+ target_name, cmd_no_range_check_name, params = @api.cmd_raw_no_range_check("INST COLLECT with TYPE 0, DURATION 5")
290
+ expect(target_name).to eql 'INST'
291
+ expect(cmd_no_range_check_name).to eql 'COLLECT'
292
+ expect(params).to include('TYPE'=>0, 'DURATION'=>5)
293
+ end
294
+
295
+ it "processes parameters" do
296
+ target_name, cmd_no_range_check_name, params = @api.cmd_raw_no_range_check("INST","COLLECT","TYPE"=>0,"DURATION"=>5)
297
+ expect(target_name).to eql 'INST'
298
+ expect(cmd_no_range_check_name).to eql 'COLLECT'
299
+ expect(params).to include('TYPE'=>0, 'DURATION'=>5)
300
+ end
301
+
302
+ it "warns about required parameters" do
303
+ expect { @api.cmd_raw_no_range_check("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
304
+ end
305
+
306
+ it "does not warn about out of range parameters" do
307
+ expect { @api.cmd_raw_no_range_check("INST COLLECT with TYPE 0, DURATION 1000") }.to_not raise_error
308
+ end
309
+
310
+ it "warns about hazardous parameters" do
311
+ expect { @api.cmd_raw_no_range_check("INST COLLECT with TYPE 1") }.to raise_error(/Hazardous/)
312
+ end
313
+
314
+ it "warns about hazardous commands" do
315
+ expect { @api.cmd_raw_no_range_check("INST CLEAR") }.to raise_error(/Hazardous/)
316
+ end
317
+ end
318
+
319
+ describe "cmd_raw_no_hazardous_check" do
320
+ it "complains about unknown targets, commands, and parameters" do
321
+ test_cmd_unknown(:cmd_raw_no_hazardous_check)
322
+ end
323
+
324
+ it "processes a string" do
325
+ target_name, cmd_no_hazardous_check_name, params = @api.cmd_raw_no_hazardous_check("INST COLLECT with TYPE 0, DURATION 5")
326
+ expect(target_name).to eql 'INST'
327
+ expect(cmd_no_hazardous_check_name).to eql 'COLLECT'
328
+ expect(params).to include('TYPE'=>0, 'DURATION'=>5)
329
+ end
330
+
331
+ it "processes parameters" do
332
+ target_name, cmd_no_hazardous_check_name, params = @api.cmd_raw_no_hazardous_check("INST","COLLECT","TYPE"=>0,"DURATION"=>5)
333
+ expect(target_name).to eql 'INST'
334
+ expect(cmd_no_hazardous_check_name).to eql 'COLLECT'
335
+ expect(params).to include('TYPE'=>0, 'DURATION'=>5)
336
+ end
337
+
338
+ it "processes parameters that are strings" do
339
+ target_name, cmd_name, params = @api.cmd_raw_no_hazardous_check("INST ASCIICMD with STRING 'ARM LASER'")
340
+ expect(target_name).to eql 'INST'
341
+ expect(cmd_name).to eql 'ASCIICMD'
342
+ expect(params).to include('STRING'=>'ARM LASER')
343
+ end
344
+
345
+ it "warns about required parameters" do
346
+ expect { @api.cmd_raw_no_hazardous_check("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
347
+ end
348
+
349
+ it "warns about out of range parameters" do
350
+ expect { @api.cmd_raw_no_hazardous_check("INST COLLECT with TYPE 0, DURATION 1000") }.to raise_error(/not in valid range/)
351
+ end
352
+
353
+ it "does not warn about hazardous parameters" do
354
+ expect { @api.cmd_raw_no_hazardous_check("INST COLLECT with TYPE 1") }.to_not raise_error
355
+ end
356
+
357
+ it "does not warn about hazardous commands" do
358
+ expect { @api.cmd_raw_no_hazardous_check("INST CLEAR") }.to_not raise_error
359
+ end
360
+ end
361
+
362
+ describe "cmd_raw_no_checks" do
363
+ it "complains about unknown targets, commands, and parameters" do
364
+ test_cmd_unknown(:cmd_raw_no_checks)
365
+ end
366
+
367
+ it "processes a string" do
368
+ target_name, cmd_no_checks_name, params = @api.cmd_raw_no_checks("INST COLLECT with TYPE 0, DURATION 5")
369
+ expect(target_name).to eql 'INST'
370
+ expect(cmd_no_checks_name).to eql 'COLLECT'
371
+ expect(params).to include('TYPE'=>0, 'DURATION'=>5)
372
+ end
373
+
374
+ it "processes parameters" do
375
+ target_name, cmd_no_checks_name, params = @api.cmd_raw_no_checks("INST","COLLECT","TYPE"=>0,"DURATION"=>5)
376
+ expect(target_name).to eql 'INST'
377
+ expect(cmd_no_checks_name).to eql 'COLLECT'
378
+ expect(params).to include('TYPE'=>0, 'DURATION'=>5)
379
+ end
380
+
381
+ it "warns about required parameters" do
382
+ expect { @api.cmd_raw_no_checks("INST COLLECT with DURATION 5") }.to raise_error(/Required/)
383
+ end
384
+
385
+ it "does not warn about out of range parameters" do
386
+ expect { @api.cmd_raw_no_checks("INST COLLECT with TYPE 0, DURATION 1000") }.to_not raise_error
387
+ end
388
+
389
+ it "does not warn about hazardous parameters" do
390
+ expect { @api.cmd_raw_no_checks("INST COLLECT with TYPE 1") }.to_not raise_error
391
+ end
392
+
393
+ it "does not warn about hazardous commands" do
394
+ expect { @api.cmd_raw_no_checks("INST CLEAR") }.to_not raise_error
395
+ end
396
+ end
397
+
398
+ describe "get_cmd_list" do
399
+ it "returns command names sorted" do
400
+ result = @api.get_cmd_list("INST")
401
+ expect(result.sort).to eql result
402
+ end
403
+
404
+ it "complains with a unknown target" do
405
+ expect { @api.get_cmd_list("BLAH") }.to raise_error(/does not exist/)
406
+ end
407
+
408
+ it "returns command names and descriptions for a given target" do
409
+ result = @api.get_cmd_list("INST")
410
+ expect(result[0][0]).to eql "ABORT"
411
+ # The second parameter is the description ... only test one
412
+ expect(result[0][1]).to eql "Aborts a collect on the instrument"
413
+ expect(result[1][0]).to eql "ARYCMD"
414
+ expect(result[2][0]).to eql "ASCIICMD"
415
+ expect(result[3][0]).to eql "CLEAR"
416
+ expect(result[4][0]).to eql "COLLECT"
417
+ expect(result[5][0]).to eql "COSMOS_ERROR_HANDLE"
418
+ expect(result[6][0]).to eql "COSMOS_ERROR_IGNORE"
419
+ expect(result[7][0]).to eql "COSMOS_HANDSHAKE_DS"
420
+ expect(result[8][0]).to eql "COSMOS_HANDSHAKE_EN"
421
+ expect(result[9][0]).to eql "FLTCMD"
422
+ expect(result[10][0]).to eql "LINC_COMMAND"
423
+ expect(result[11][0]).to eql "SETPARAMS"
424
+ expect(result[12][0]).to eql "SLRPNLDEPLOY"
425
+ expect(result[13][0]).to eql "SLRPNLRESET"
426
+ end
427
+ end
428
+
429
+ describe "get_cmd_param_list" do
430
+ it "returns parameters for the command" do
431
+ result = @api.get_cmd_param_list("INST","COLLECT")
432
+ # Each element in the results array contains:
433
+ # name, default, states, description, full units, units, required
434
+ expect(result).to include ['TYPE',0,{"NORMAL"=>0,"SPECIAL"=>1},'Collect type',nil,nil,true]
435
+ expect(result).to include ['TEMP',0.0,nil,'Collect temperature','Celcius','C',false]
436
+ end
437
+
438
+ it "returns array parameters for the command" do
439
+ result = @api.get_cmd_param_list("INST","ARYCMD")
440
+ # Each element in the results array contains:
441
+ # name, default, states, description, full units, units, required
442
+ expect(result).to include ['ARRAY',[],nil,'Array parameter',nil,nil,false]
443
+ end
444
+ end
445
+
446
+ describe "get_cmd_hazardous" do
447
+ it "returns whether the command with parameters is hazardous" do
448
+ expect(@api.get_cmd_hazardous("INST","COLLECT",{"TYPE"=>"NORMAL"})).to be false
449
+ expect(@api.get_cmd_hazardous("INST","COLLECT",{"TYPE"=>"SPECIAL"})).to be true
450
+ end
451
+
452
+ it "returns whether the command is hazardous" do
453
+ expect(@api.get_cmd_hazardous("INST","CLEAR")).to be true
454
+ end
455
+ end
456
+
457
+ describe "get_cmd_value" do
458
+ it "returns command values" do
459
+ time = Time.now
460
+ packet = System.commands.packet("INST", "COLLECT")
461
+ packet.received_time = time
462
+ packet.restore_defaults
463
+ packet.received_count = 5
464
+ expect(@api.get_cmd_value("INST", "COLLECT", "TYPE")).to eql 'NORMAL'
465
+ expect(@api.get_cmd_value("INST", "COLLECT", "RECEIVED_TIMEFORMATTED")).to eql time.formatted
466
+ expect(@api.get_cmd_value("INST", "COLLECT", "RECEIVED_TIMESECONDS")).to eql time.to_f
467
+ expect(@api.get_cmd_value("INST", "COLLECT", "RECEIVED_COUNT")).to eql 5
468
+ end
469
+ end
470
+
471
+ describe "get_cmd_time" do
472
+ it "returns command times" do
473
+ time = Time.now
474
+ time2 = Time.now + 2
475
+ packet = System.commands.packet("INST", "COLLECT")
476
+ packet.received_time = time
477
+ packet2 = System.commands.packet("COSMOS", "STARTLOGGING")
478
+ packet2.received_time = time2
479
+ expect(@api.get_cmd_time()).to eql ['COSMOS', 'STARTLOGGING', time2.tv_sec, time2.tv_usec]
480
+ expect(@api.get_cmd_time('INST')).to eql ['INST', 'COLLECT', time.tv_sec, time.tv_usec]
481
+ expect(@api.get_cmd_time('COSMOS')).to eql ['COSMOS', 'STARTLOGGING', time2.tv_sec, time2.tv_usec]
482
+ expect(@api.get_cmd_time('INST', 'COLLECT')).to eql ['INST', 'COLLECT', time.tv_sec, time.tv_usec]
483
+ expect(@api.get_cmd_time('COSMOS', 'STARTLOGGING')).to eql ['COSMOS', 'STARTLOGGING', time2.tv_sec, time2.tv_usec]
484
+ end
485
+ end
486
+
487
+ def test_tlm_unknown(method)
488
+ expect { @api.send(method,"BLAH HEALTH_STATUS COLLECTS") }.to raise_error(/does not exist/)
489
+ expect { @api.send(method,"INST UNKNOWN COLLECTS") }.to raise_error(/does not exist/)
490
+ expect { @api.send(method,"INST HEALTH_STATUS BLAH") }.to raise_error(/does not exist/)
491
+ expect { @api.send(method,"BLAH","HEALTH_STATUS","COLLECTS") }.to raise_error(/does not exist/)
492
+ expect { @api.send(method,"INST","UNKNOWN","COLLECTS") }.to raise_error(/does not exist/)
493
+ expect { @api.send(method,"INST","HEALTH_STATUS","BLAH") }.to raise_error(/does not exist/)
494
+ end
495
+
496
+ describe "tlm" do
497
+ it "complains about unknown targets, commands, and parameters" do
498
+ test_tlm_unknown(:tlm)
499
+ end
500
+
501
+ it "processes a string" do
502
+ value = @api.tlm("INST HEALTH_STATUS TEMP1")
503
+ expect(value).to eql -100.0
504
+ end
505
+
506
+ it "processes parameters" do
507
+ value = @api.tlm("INST","HEALTH_STATUS","TEMP1")
508
+ end
509
+
510
+ it "complains if too many parameters" do
511
+ expect { @api.tlm("INST","HEALTH_STATUS","TEMP1","TEMP2") }.to raise_error(/Invalid number of arguments/)
512
+ end
513
+ end
514
+
515
+ describe "tlm_raw" do
516
+ it "complains about unknown targets, commands, and parameters" do
517
+ test_tlm_unknown(:tlm_raw)
518
+ end
519
+
520
+ it "processes a string" do
521
+ expect(@api.tlm_raw("INST HEALTH_STATUS TEMP1")).to eql 0
522
+ end
523
+
524
+ it "returns the value using LATEST" do
525
+ expect(@api.tlm_raw("INST LATEST TEMP1")).to eql 0
526
+ end
527
+
528
+ it "processes parameters" do
529
+ expect(@api.tlm_raw("INST","HEALTH_STATUS","TEMP1")).to eql 0
530
+ end
531
+ end
532
+
533
+ describe "tlm_formatted" do
534
+ it "complains about unknown targets, commands, and parameters" do
535
+ test_tlm_unknown(:tlm_formatted)
536
+ end
537
+
538
+ it "processes a string" do
539
+ expect(@api.tlm_formatted("INST HEALTH_STATUS TEMP1")).to eql "-100.000"
540
+ end
541
+
542
+ it "returns the value using LATEST" do
543
+ expect(@api.tlm_formatted("INST LATEST TEMP1")).to eql "-100.000"
544
+ end
545
+
546
+ it "processes parameters" do
547
+ expect(@api.tlm_formatted("INST","HEALTH_STATUS","TEMP1")).to eql "-100.000"
548
+ end
549
+ end
550
+
551
+ describe "tlm_with_units" do
552
+ it "complains about unknown targets, commands, and parameters" do
553
+ test_tlm_unknown(:tlm_with_units)
554
+ end
555
+
556
+ it "processes a string" do
557
+ expect(@api.tlm_with_units("INST HEALTH_STATUS TEMP1")).to eql "-100.000 C"
558
+ end
559
+
560
+ it "returns the value using LATEST" do
561
+ expect(@api.tlm_with_units("INST LATEST TEMP1")).to eql "-100.000 C"
562
+ end
563
+
564
+ it "processes parameters" do
565
+ expect(@api.tlm_with_units("INST","HEALTH_STATUS","TEMP1")).to eql "-100.000 C"
566
+ end
567
+ end
568
+
569
+ describe "tlm_variable" do
570
+ it "complains about unknown targets, commands, and parameters" do
571
+ expect { @api.tlm_variable("BLAH HEALTH_STATUS COLLECTS",:RAW) }.to raise_error(/does not exist/)
572
+ expect { @api.tlm_variable("INST UNKNOWN COLLECTS",:RAW) }.to raise_error(/does not exist/)
573
+ expect { @api.tlm_variable("INST HEALTH_STATUS BLAH",:RAW) }.to raise_error(/does not exist/)
574
+ expect { @api.tlm_variable("BLAH","HEALTH_STATUS","COLLECTS",:RAW) }.to raise_error(/does not exist/)
575
+ expect { @api.tlm_variable("INST","UNKNOWN","COLLECTS",:RAW) }.to raise_error(/does not exist/)
576
+ expect { @api.tlm_variable("INST","HEALTH_STATUS","BLAH",:RAW) }.to raise_error(/does not exist/)
577
+ end
578
+
579
+ it "processes a string" do
580
+ expect(@api.tlm_variable("INST HEALTH_STATUS TEMP1",:CONVERTED)).to eql -100.0
581
+ expect(@api.tlm_variable("INST HEALTH_STATUS TEMP1",:RAW)).to eql 0
582
+ expect(@api.tlm_variable("INST HEALTH_STATUS TEMP1",:FORMATTED)).to eql "-100.000"
583
+ expect(@api.tlm_variable("INST HEALTH_STATUS TEMP1",:WITH_UNITS)).to eql "-100.000 C"
584
+ end
585
+
586
+ it "returns the value using LATEST" do
587
+ expect(@api.tlm_variable("INST LATEST TEMP1",:CONVERTED)).to eql -100.0
588
+ expect(@api.tlm_variable("INST LATEST TEMP1",:RAW)).to eql 0
589
+ expect(@api.tlm_variable("INST LATEST TEMP1",:FORMATTED)).to eql "-100.000"
590
+ expect(@api.tlm_variable("INST LATEST TEMP1",:WITH_UNITS)).to eql "-100.000 C"
591
+ end
592
+
593
+ it "processes parameters" do
594
+ expect(@api.tlm_variable("INST","HEALTH_STATUS","TEMP1",:CONVERTED)).to eql -100.0
595
+ expect(@api.tlm_variable("INST","HEALTH_STATUS","TEMP1",:RAW)).to eql 0
596
+ expect(@api.tlm_variable("INST","HEALTH_STATUS","TEMP1",:FORMATTED)).to eql "-100.000"
597
+ expect(@api.tlm_variable("INST","HEALTH_STATUS","TEMP1",:WITH_UNITS)).to eql "-100.000 C"
598
+ end
599
+
600
+ it "complains with too many parameters" do
601
+ expect { @api.tlm_variable("INST","HEALTH_STATUS","TEMP1","TEMP2",:CONVERTED) }.to raise_error(/Invalid number of arguments/)
602
+ end
603
+ end
604
+
605
+ describe "set_tlm" do
606
+ it "complains about unknown targets, commands, and parameters" do
607
+ expect { @api.set_tlm("BLAH HEALTH_STATUS COLLECTS = 1") }.to raise_error(/does not exist/)
608
+ expect { @api.set_tlm("INST UNKNOWN COLLECTS = 1") }.to raise_error(/does not exist/)
609
+ expect { @api.set_tlm("INST HEALTH_STATUS BLAH = 1") }.to raise_error(/does not exist/)
610
+ expect { @api.set_tlm("BLAH","HEALTH_STATUS","COLLECTS",1) }.to raise_error(/does not exist/)
611
+ expect { @api.set_tlm("INST","UNKNOWN","COLLECTS",1) }.to raise_error(/does not exist/)
612
+ expect { @api.set_tlm("INST","HEALTH_STATUS","BLAH",1) }.to raise_error(/does not exist/)
613
+ end
614
+
615
+ it "processes a string" do
616
+ @api.set_tlm("INST HEALTH_STATUS TEMP1 = 0.0")
617
+ expect(@api.tlm("INST HEALTH_STATUS TEMP1")).to be_within(0.00001).of(-0.05759)
618
+ end
619
+
620
+ it "processes parameters" do
621
+ @api.set_tlm("INST","HEALTH_STATUS","TEMP1", 0.0)
622
+ expect(@api.tlm("INST HEALTH_STATUS TEMP1")).to be_within(0.00001).of(-0.05759)
623
+ end
624
+
625
+ it "complains with too many parameters" do
626
+ expect { @api.set_tlm("INST","HEALTH_STATUS","TEMP1","TEMP2",0.0) }.to raise_error(/Invalid number of arguments/)
627
+ end
628
+ end
629
+
630
+ describe "set_tlm_raw" do
631
+ it "complains about unknown targets, commands, and parameters" do
632
+ expect { @api.set_tlm_raw("BLAH HEALTH_STATUS COLLECTS = 1") }.to raise_error(/does not exist/)
633
+ expect { @api.set_tlm_raw("INST UNKNOWN COLLECTS = 1") }.to raise_error(/does not exist/)
634
+ expect { @api.set_tlm_raw("INST HEALTH_STATUS BLAH = 1") }.to raise_error(/does not exist/)
635
+ expect { @api.set_tlm_raw("BLAH","HEALTH_STATUS","COLLECTS",1) }.to raise_error(/does not exist/)
636
+ expect { @api.set_tlm_raw("INST","UNKNOWN","COLLECTS",1) }.to raise_error(/does not exist/)
637
+ expect { @api.set_tlm_raw("INST","HEALTH_STATUS","BLAH",1) }.to raise_error(/does not exist/)
638
+ end
639
+
640
+ it "processes a string" do
641
+ @api.set_tlm_raw("INST HEALTH_STATUS TEMP1 = 0.0")
642
+ expect(@api.tlm("INST HEALTH_STATUS TEMP1")).to eql -100.0
643
+ end
644
+
645
+ it "processes parameters" do
646
+ @api.set_tlm_raw("INST","HEALTH_STATUS","TEMP1", 0.0)
647
+ expect(@api.tlm("INST HEALTH_STATUS TEMP1")).to eql -100.0
648
+ end
649
+ end
650
+
651
+ describe "get_tlm_packet" do
652
+ it "complains about non-existant targets" do
653
+ expect { @api.get_tlm_packet("BLAH","HEALTH_STATUS") }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
654
+ end
655
+
656
+ it "complains about non-existant packets" do
657
+ expect { @api.get_tlm_packet("INST","BLAH") }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
658
+ end
659
+
660
+ it "complains using LATEST" do
661
+ expect { @api.get_tlm_packet("INST","LATEST") }.to raise_error(RuntimeError, "Telemetry packet 'INST LATEST' does not exist")
662
+ end
663
+
664
+ it "complains about non-existant value_types" do
665
+ expect { @api.get_tlm_packet("INST","HEALTH_STATUS",:MINE) }.to raise_error(ArgumentError, "Unknown value type on read: MINE")
666
+ end
667
+
668
+ it "reads all telemetry items with their limits states" do
669
+ vals = @api.get_tlm_packet("INST","HEALTH_STATUS")
670
+ expect(vals[0][0]).to eql "RECEIVED_TIMESECONDS"
671
+ expect(vals[0][1]).to eql 0.0
672
+ expect(vals[0][2]).to be_nil
673
+ expect(vals[1][0]).to eql "RECEIVED_TIMEFORMATTED"
674
+ expect(vals[1][1]).to eql "No Packet Received Time"
675
+ expect(vals[1][2]).to be_nil
676
+ expect(vals[2][0]).to eql "RECEIVED_COUNT"
677
+ expect(vals[2][1]).to eql 0
678
+ expect(vals[2][2]).to be_nil
679
+ # Spot check a few more
680
+ expect(vals[22][0]).to eql "TEMP1"
681
+ expect(vals[22][1]).to eql -100.0
682
+ expect(vals[22][2]).to eql :RED_LOW
683
+ expect(vals[23][0]).to eql "TEMP2"
684
+ expect(vals[23][1]).to eql -100.0
685
+ expect(vals[23][2]).to eql :RED_LOW
686
+ expect(vals[24][0]).to eql "TEMP3"
687
+ expect(vals[24][1]).to eql -100.0
688
+ expect(vals[24][2]).to eql :RED_LOW
689
+ expect(vals[25][0]).to eql "TEMP4"
690
+ expect(vals[25][1]).to eql -100.0
691
+ expect(vals[25][2]).to eql :RED_LOW
692
+ end
693
+ end
694
+
695
+ describe "get_tlm_values" do
696
+ it "handles an empty request" do
697
+ expect(@api.get_tlm_values([])).to eql [[], [], [], :DEFAULT]
698
+ end
699
+
700
+ it "complains about non-existant targets" do
701
+ expect { @api.get_tlm_values([["BLAH","HEALTH_STATUS","TEMP1"]]) }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
702
+ end
703
+
704
+ it "complains about non-existant packets" do
705
+ expect { @api.get_tlm_values([["INST","BLAH","TEMP1"]]) }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
706
+ end
707
+
708
+ it "complains about non-existant items" do
709
+ expect { @api.get_tlm_values([["INST","LATEST","BLAH"]]) }.to raise_error(RuntimeError, "Telemetry item 'INST LATEST BLAH' does not exist")
710
+ end
711
+
712
+ it "complains about non-existant value_types" do
713
+ expect { @api.get_tlm_values([["INST","HEALTH_STATUS","TEMP1"]],:MINE) }.to raise_error(ArgumentError, "Unknown value type on read: MINE")
714
+ end
715
+
716
+ it "complains about bad arguments" do
717
+ expect { @api.get_tlm_values("INST",:MINE) }.to raise_error(ArgumentError, /item_array must be nested array/)
718
+ expect { @api.get_tlm_values(["INST","HEALTH_STATUS","TEMP1"],:MINE) }.to raise_error(ArgumentError, /item_array must be nested array/)
719
+ expect { @api.get_tlm_values([["INST","HEALTH_STATUS","TEMP1"]],10) }.to raise_error(ArgumentError, /value_types must be a single symbol or array of symbols/)
720
+ expect { @api.get_tlm_values([["INST","HEALTH_STATUS","TEMP1"]],[10]) }.to raise_error(ArgumentError, /value_types must be a single symbol or array of symbols/)
721
+ end
722
+
723
+ it "reads all the specified items" do
724
+ items = []
725
+ items << %w(INST HEALTH_STATUS TEMP1)
726
+ items << %w(INST HEALTH_STATUS TEMP2)
727
+ items << %w(INST HEALTH_STATUS TEMP3)
728
+ items << %w(INST HEALTH_STATUS TEMP4)
729
+ vals = @api.get_tlm_values(items)
730
+ expect(vals[0][0]).to eql -100.0
731
+ expect(vals[0][1]).to eql -100.0
732
+ expect(vals[0][2]).to eql -100.0
733
+ expect(vals[0][3]).to eql -100.0
734
+ expect(vals[1][0]).to eql :RED_LOW
735
+ expect(vals[1][1]).to eql :RED_LOW
736
+ expect(vals[1][2]).to eql :RED_LOW
737
+ expect(vals[1][3]).to eql :RED_LOW
738
+ expect(vals[2][0]).to eql [-80.0, -70.0, 60.0, 80.0, -20.0, 20.0]
739
+ expect(vals[2][1]).to eql [-60.0, -55.0, 30.0, 35.0]
740
+ expect(vals[2][2]).to eql [-25.0, -10.0, 50.0, 55.0]
741
+ expect(vals[2][3]).to eql [-80.0, -70.0, 60.0, 80.0]
742
+ expect(vals[3]).to eql :DEFAULT
743
+ end
744
+
745
+ it "reads all the specified items with one conversion" do
746
+ items = []
747
+ items << %w(INST HEALTH_STATUS TEMP1)
748
+ items << %w(INST HEALTH_STATUS TEMP2)
749
+ items << %w(INST HEALTH_STATUS TEMP3)
750
+ items << %w(INST HEALTH_STATUS TEMP4)
751
+ vals = @api.get_tlm_values(items, :RAW)
752
+ expect(vals[0][0]).to eql 0
753
+ expect(vals[0][1]).to eql 0
754
+ expect(vals[0][2]).to eql 0
755
+ expect(vals[0][3]).to eql 0
756
+ expect(vals[1][0]).to eql :RED_LOW
757
+ expect(vals[1][1]).to eql :RED_LOW
758
+ expect(vals[1][2]).to eql :RED_LOW
759
+ expect(vals[1][3]).to eql :RED_LOW
760
+ expect(vals[2][0]).to eql [-80.0, -70.0, 60.0, 80.0, -20.0, 20.0]
761
+ expect(vals[2][1]).to eql [-60.0, -55.0, 30.0, 35.0]
762
+ expect(vals[2][2]).to eql [-25.0, -10.0, 50.0, 55.0]
763
+ expect(vals[2][3]).to eql [-80.0, -70.0, 60.0, 80.0]
764
+ expect(vals[3]).to eql :DEFAULT
765
+ end
766
+
767
+ it "reads all the specified items with different conversions" do
768
+ items = []
769
+ items << %w(INST HEALTH_STATUS TEMP1)
770
+ items << %w(INST HEALTH_STATUS TEMP2)
771
+ items << %w(INST HEALTH_STATUS TEMP3)
772
+ items << %w(INST HEALTH_STATUS TEMP4)
773
+ vals = @api.get_tlm_values(items, [:RAW, :CONVERTED, :FORMATTED, :WITH_UNITS])
774
+ expect(vals[0][0]).to eql 0
775
+ expect(vals[0][1]).to eql -100.0
776
+ expect(vals[0][2]).to eql "-100.000"
777
+ expect(vals[0][3]).to eql "-100.000 C"
778
+ expect(vals[1][0]).to eql :RED_LOW
779
+ expect(vals[1][1]).to eql :RED_LOW
780
+ expect(vals[1][2]).to eql :RED_LOW
781
+ expect(vals[1][3]).to eql :RED_LOW
782
+ expect(vals[2][0]).to eql [-80.0, -70.0, 60.0, 80.0, -20.0, 20.0]
783
+ expect(vals[2][1]).to eql [-60.0, -55.0, 30.0, 35.0]
784
+ expect(vals[2][2]).to eql [-25.0, -10.0, 50.0, 55.0]
785
+ expect(vals[2][3]).to eql [-80.0, -70.0, 60.0, 80.0]
786
+ expect(vals[3]).to eql :DEFAULT
787
+ end
788
+
789
+ it "complains if items length != conversions length" do
790
+ items = []
791
+ items << %w(INST HEALTH_STATUS TEMP1)
792
+ items << %w(INST HEALTH_STATUS TEMP2)
793
+ items << %w(INST HEALTH_STATUS TEMP3)
794
+ items << %w(INST HEALTH_STATUS TEMP4)
795
+ expect { @api.get_tlm_values(items, [:RAW, :CONVERTED]) }.to raise_error(ArgumentError, "Passed 4 items but only 2 value types")
796
+ end
797
+ end
798
+
799
+ describe "get_tlm_list" do
800
+ it "complains about non-existant targets" do
801
+ expect { @api.get_tlm_list("BLAH") }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
802
+ end
803
+
804
+ it "returns the sorted packet names for a target" do
805
+ pkts = @api.get_tlm_list("INST")
806
+ expect(pkts[0][0]).to eql "ADCS"
807
+ expect(pkts[1][0]).to eql "ERROR"
808
+ expect(pkts[2][0]).to eql "HANDSHAKE"
809
+ expect(pkts[3][0]).to eql "HEALTH_STATUS"
810
+ expect(pkts[4][0]).to eql "IMAGE"
811
+ expect(pkts[5][0]).to eql "MECH"
812
+ expect(pkts[6][0]).to eql "PARAMS"
813
+ end
814
+ end
815
+
816
+ describe "get_tlm_item_list" do
817
+ it "complains about non-existant targets" do
818
+ expect { @api.get_tlm_item_list("BLAH","HEALTH_STATUS") }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
819
+ end
820
+
821
+ it "complains about non-existant packets" do
822
+ expect { @api.get_tlm_item_list("INST","BLAH") }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
823
+ end
824
+
825
+ it "returns all the items for a target/packet" do
826
+ items = @api.get_tlm_item_list("INST","HEALTH_STATUS")
827
+ expect(items[0][0]).to eql "RECEIVED_TIMESECONDS"
828
+ expect(items[1][0]).to eql "RECEIVED_TIMEFORMATTED"
829
+ expect(items[2][0]).to eql "RECEIVED_COUNT"
830
+ # Spot check a few more
831
+ expect(items[22][0]).to eql "TEMP1"
832
+ expect(items[22][1]).to be_nil
833
+ expect(items[22][2]).to eql "Temperature #1"
834
+ expect(items[28][0]).to eql "COLLECT_TYPE"
835
+ expect(items[28][1]).to include("NORMAL"=>0, "SPECIAL"=>1)
836
+ expect(items[28][2]).to eql "Most recent collect type"
837
+ end
838
+ end
839
+
840
+ describe "get_tlm_details" do
841
+ it "complains about non-existant targets" do
842
+ expect { @api.get_tlm_details([["BLAH","HEALTH_STATUS","TEMP1"]]) }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
843
+ end
844
+
845
+ it "complains about non-existant packets" do
846
+ expect { @api.get_tlm_details([["INST","BLAH","TEMP1"]]) }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
847
+ end
848
+
849
+ it "complains about non-existant items" do
850
+ expect { @api.get_tlm_details([["INST","LATEST","BLAH"]]) }.to raise_error(RuntimeError, "Telemetry item 'INST LATEST BLAH' does not exist")
851
+ end
852
+
853
+ it "complains about bad parameters" do
854
+ expect { @api.get_tlm_details("INST") }.to raise_error(ArgumentError, /item_array must be nested array/)
855
+ expect { @api.get_tlm_details(["INST","LATEST","BLAH"]) }.to raise_error(ArgumentError, /item_array must be nested array/)
856
+ end
857
+
858
+ it "reads all the specified items" do
859
+ items = []
860
+ items << %w(INST HEALTH_STATUS TEMP1)
861
+ items << %w(INST HEALTH_STATUS TEMP2)
862
+ items << %w(INST HEALTH_STATUS TEMP3)
863
+ items << %w(INST HEALTH_STATUS TEMP4)
864
+ details = @api.get_tlm_details(items)
865
+ expect(details.length).to eql 4
866
+ expect(details[0]["name"]).to eql "TEMP1"
867
+ expect(details[1]["name"]).to eql "TEMP2"
868
+ expect(details[2]["name"]).to eql "TEMP3"
869
+ expect(details[3]["name"]).to eql "TEMP4"
870
+ end
871
+ end
872
+
873
+ describe "get_out_of_limits" do
874
+ it "returns all out of limits items" do
875
+ items = @api.get_out_of_limits
876
+ (0..3).each do |i|
877
+ expect(items[i][0]).to eql "INST"
878
+ expect(items[i][1]).to eql "HEALTH_STATUS"
879
+ expect(items[i][2]).to eql "TEMP#{i+1}"
880
+ expect(items[i][3]).to eql :RED_LOW
881
+ end
882
+ end
883
+ end
884
+
885
+ describe "limits_enabled?" do
886
+ it "complains about non-existant targets" do
887
+ expect { @api.limits_enabled?("BLAH","HEALTH_STATUS","TEMP1") }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
888
+ end
889
+
890
+ it "complains about non-existant packets" do
891
+ expect { @api.limits_enabled?("INST","BLAH","TEMP1") }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
892
+ end
893
+
894
+ it "complains about non-existant items" do
895
+ expect { @api.limits_enabled?("INST","HEALTH_STATUS","BLAH") }.to raise_error(RuntimeError, "Packet item 'INST HEALTH_STATUS BLAH' does not exist")
896
+ end
897
+
898
+ it "returns whether limits are enable for an item" do
899
+ expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be true
900
+ end
901
+ end
902
+
903
+ describe "enable_limits" do
904
+ it "complains about non-existant targets" do
905
+ expect { @api.enable_limits("BLAH","HEALTH_STATUS","TEMP1") }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
906
+ end
907
+
908
+ it "complains about non-existant packets" do
909
+ expect { @api.enable_limits("INST","BLAH","TEMP1") }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
910
+ end
911
+
912
+ it "complains about non-existant items" do
913
+ expect { @api.enable_limits("INST","HEALTH_STATUS","BLAH") }.to raise_error(RuntimeError, "Packet item 'INST HEALTH_STATUS BLAH' does not exist")
914
+ end
915
+
916
+ it "enables limits for an item" do
917
+ expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be true
918
+ @api.disable_limits("INST","HEALTH_STATUS","TEMP1")
919
+ expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be false
920
+ @api.enable_limits("INST","HEALTH_STATUS","TEMP1")
921
+ expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be true
922
+ end
923
+ end
924
+
925
+ describe "disable_limits" do
926
+ it "complains about non-existant targets" do
927
+ expect { @api.disable_limits("BLAH","HEALTH_STATUS","TEMP1") }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
928
+ end
929
+
930
+ it "complains about non-existant packets" do
931
+ expect { @api.disable_limits("INST","BLAH","TEMP1") }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
932
+ end
933
+
934
+ it "complains about non-existant items" do
935
+ expect { @api.disable_limits("INST","HEALTH_STATUS","BLAH") }.to raise_error(RuntimeError, "Packet item 'INST HEALTH_STATUS BLAH' does not exist")
936
+ end
937
+
938
+ it "disables limits for an item" do
939
+ expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be true
940
+ @api.disable_limits("INST","HEALTH_STATUS","TEMP1")
941
+ expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be false
942
+ @api.enable_limits("INST","HEALTH_STATUS","TEMP1")
943
+ end
944
+ end
945
+
946
+ describe "get_limits" do
947
+ it "complains about non-existant targets" do
948
+ expect { @api.get_limits("BLAH","HEALTH_STATUS","TEMP1") }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
949
+ end
950
+
951
+ it "complains about non-existant packets" do
952
+ expect { @api.get_limits("INST","BLAH","TEMP1") }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
953
+ end
954
+
955
+ it "complains about non-existant items" do
956
+ expect { @api.get_limits("INST","HEALTH_STATUS","BLAH") }.to raise_error(RuntimeError, "Packet item 'INST HEALTH_STATUS BLAH' does not exist")
957
+ end
958
+
959
+ it "gets limits for an item" do
960
+ expect(@api.get_limits("INST","HEALTH_STATUS","TEMP1")).to eql([:DEFAULT, 1, true, -80.0, -70.0, 60.0, 80.0, -20.0, 20.0])
961
+ expect(@api.get_limits("INST","HEALTH_STATUS","TEMP1",:TVAC)).to eql([:TVAC, 1, true, -80.0, -30.0, 30.0, 80.0, nil, nil])
962
+ end
963
+ end
964
+
965
+ describe "set_limits" do
966
+ it "complains about non-existant targets" do
967
+ expect { @api.set_limits("BLAH","HEALTH_STATUS","TEMP1",0.0,10.0,20.0,30.0) }.to raise_error(RuntimeError, "Telemetry target 'BLAH' does not exist")
968
+ end
969
+
970
+ it "complains about non-existant packets" do
971
+ expect { @api.set_limits("INST","BLAH","TEMP1",0.0,10.0,20.0,30.0) }.to raise_error(RuntimeError, "Telemetry packet 'INST BLAH' does not exist")
972
+ end
973
+
974
+ it "complains about non-existant items" do
975
+ expect { @api.set_limits("INST","HEALTH_STATUS","BLAH",0.0,10.0,20.0,30.0) }.to raise_error(RuntimeError, "Packet item 'INST HEALTH_STATUS BLAH' does not exist")
976
+ end
977
+
978
+ it "gets limits for an item" do
979
+ expect(@api.set_limits("INST","HEALTH_STATUS","TEMP1",0.0,10.0,20.0,30.0)).to eql([:CUSTOM, 1, true, 0.0, 10.0, 20.0, 30.0, nil, nil])
980
+ expect(@api.set_limits("INST","HEALTH_STATUS","TEMP1",0.0,10.0,20.0,30.0,12.0,15.0,:CUSTOM2,2,false)).to eql([:CUSTOM2, 2, false, 0.0, 10.0, 20.0, 30.0, 12.0, 15.0])
981
+ expect(@api.set_limits("INST","HEALTH_STATUS","TEMP1",0.0,10.0,20.0,30.0,12.0,15.0,:CUSTOM,1,true)).to eql([:CUSTOM, 1, true, 0.0, 10.0, 20.0, 30.0, 12.0, 15.0])
982
+ end
983
+ end
984
+
985
+ describe "get_limits_groups" do
986
+ it "returns all the limits groups" do
987
+ expect(@api.get_limits_groups).to eql %w(FIRST SECOND)
988
+ end
989
+ end
990
+
991
+ describe "enable_limits_group" do
992
+ it "complains about undefined limits groups" do
993
+ expect { @api.enable_limits_group("MINE") }.to raise_error(RuntimeError, "LIMITS_GROUP MINE undefined. Ensure your telemetry definition contains the line: LIMITS_GROUP MINE")
994
+ end
995
+
996
+ it "enables limits for all items in the group" do
997
+ @api.disable_limits("INST","HEALTH_STATUS","TEMP1")
998
+ @api.disable_limits("INST","HEALTH_STATUS","TEMP3")
999
+ expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be false
1000
+ expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP3")).to be false
1001
+ @api.enable_limits_group("FIRST")
1002
+ expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be true
1003
+ expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP3")).to be true
1004
+ end
1005
+ end
1006
+
1007
+ describe "disable_limits_group" do
1008
+ it "complains about undefined limits groups" do
1009
+ expect { @api.disable_limits_group("MINE") }.to raise_error(RuntimeError, "LIMITS_GROUP MINE undefined. Ensure your telemetry definition contains the line: LIMITS_GROUP MINE")
1010
+ end
1011
+
1012
+ it "disables limits for all items in the group" do
1013
+ @api.enable_limits("INST","HEALTH_STATUS","TEMP1")
1014
+ @api.enable_limits("INST","HEALTH_STATUS","TEMP3")
1015
+ expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be true
1016
+ expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP3")).to be true
1017
+ @api.disable_limits_group("FIRST")
1018
+ expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP1")).to be false
1019
+ expect(@api.limits_enabled?("INST","HEALTH_STATUS","TEMP3")).to be false
1020
+ end
1021
+ end
1022
+
1023
+ describe "get_limits_sets, get_limits_set, set_limits_set" do
1024
+ it "gets and set the active limits set" do
1025
+ if @api.get_limits_sets.include?(:CUSTOM)
1026
+ expect(@api.get_limits_sets).to eql [:DEFAULT,:TVAC, :CUSTOM, :CUSTOM2]
1027
+ else
1028
+ expect(@api.get_limits_sets).to eql [:DEFAULT,:TVAC]
1029
+ end
1030
+ @api.set_limits_set("TVAC")
1031
+ expect(@api.get_limits_set).to eql "TVAC"
1032
+ @api.set_limits_set("DEFAULT")
1033
+ expect(@api.get_limits_set).to eql "DEFAULT"
1034
+ end
1035
+ end
1036
+
1037
+ describe "get_target_list" do
1038
+ it "returns all target names" do
1039
+ expect(@api.get_target_list).to eql %w(COSMOS INST META SYSTEM)
1040
+ end
1041
+ end
1042
+
1043
+ describe "subscribe_limits_events" do
1044
+ it "calls CmdTlmServer" do
1045
+ stub_const("Cosmos::CmdTlmServer::DEFAULT_LIMITS_EVENT_QUEUE_SIZE", 100)
1046
+ expect(CmdTlmServer).to receive(:subscribe_limits_events)
1047
+ @api.subscribe_limits_events
1048
+ end
1049
+ end
1050
+
1051
+ describe "unsubscribe_limits_events" do
1052
+ it "calls CmdTlmServer" do
1053
+ expect(CmdTlmServer).to receive(:unsubscribe_limits_events)
1054
+ @api.unsubscribe_limits_events(0)
1055
+ end
1056
+ end
1057
+
1058
+ describe "get_limits_event" do
1059
+ it "gets a limits event" do
1060
+ expect(CmdTlmServer).to receive(:get_limits_event)
1061
+ @api.get_limits_event(0)
1062
+ end
1063
+ end
1064
+
1065
+ describe "subscribe_packet_data" do
1066
+ it "calls CmdTlmServer" do
1067
+ stub_const("Cosmos::CmdTlmServer::DEFAULT_PACKET_DATA_QUEUE_SIZE", 100)
1068
+ expect(CmdTlmServer).to receive(:subscribe_packet_data)
1069
+ @api.subscribe_packet_data([["TGT","PKT1"],["TGT","PKT2"]])
1070
+ end
1071
+ end
1072
+
1073
+ describe "unsubscribe_packet_datas" do
1074
+ it "calls CmdTlmServer" do
1075
+ expect(CmdTlmServer).to receive(:unsubscribe_packet_data)
1076
+ @api.unsubscribe_packet_data(10)
1077
+ end
1078
+ end
1079
+
1080
+ describe "get_packet_data" do
1081
+ it "calls CmdTlmServer" do
1082
+ expect(CmdTlmServer).to receive(:get_packet_data)
1083
+ @api.get_packet_data(10)
1084
+ end
1085
+ end
1086
+
1087
+ # All these methods simply pass through directly to CmdTlmServer without
1088
+ # adding any functionality. Thus we just test that they are are received
1089
+ # by the CmdTlmServer.
1090
+ describe "CmdTlmServer pass-throughs" do
1091
+ it "calls through to the CmdTlmServer" do
1092
+ @api.get_interface_names
1093
+ @api.connect_interface("INT")
1094
+ @api.disconnect_interface("INT")
1095
+ @api.interface_state("INT")
1096
+ @api.map_target_to_interface("INST", "INT")
1097
+ @api.get_router_names
1098
+ @api.connect_router("ROUTE")
1099
+ @api.disconnect_router("ROUTE")
1100
+ @api.router_state("ROUTE")
1101
+ @api.send_raw("INT","\x00\x01")
1102
+ @api.get_cmd_log_filename('DEFAULT')
1103
+ @api.get_tlm_log_filename('DEFAULT')
1104
+ @api.start_logging('ALL')
1105
+ @api.stop_logging('ALL')
1106
+ @api.start_cmd_log('ALL')
1107
+ @api.start_tlm_log('ALL')
1108
+ @api.stop_cmd_log('ALL')
1109
+ @api.stop_tlm_log('ALL')
1110
+ @api.get_server_message_log_filename
1111
+ @api.start_new_server_message_log
1112
+ end
1113
+ end
1114
+
1115
+ end
1116
+ end
1117
+