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,77 +1,77 @@
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
- module Cosmos
12
-
13
- class CmdSenderItemDelegate < Qt::StyledItemDelegate
14
- def initialize(parent)
15
- @table = parent
16
- super(parent)
17
- end
18
-
19
- def createEditor(parent, option, index)
20
- packet_item, _, _ = CmdSender.param_widgets[index.row]
21
- if index.column == 1 and packet_item and packet_item.states
22
- combo = Qt::ComboBox.new(parent)
23
- sorted_states = packet_item.states.sort {|a, b| a[1] <=> b[1]}
24
- items = sorted_states.map {|state_name, state_value| state_name}
25
- items << CmdSender::MANUALLY
26
- combo.addItems(items)
27
- combo.setCurrentText(@table.item(index.row, index.column).text.to_s)
28
- combo.setMaxVisibleItems(6)
29
- connect(combo, SIGNAL('activated(int)')) do
30
- emit commitData(combo)
31
- CmdSender.table.closeEditor(combo, 0)
32
- end
33
- return combo
34
- else
35
- return super(parent, option, index)
36
- end
37
- end
38
-
39
- def paint(painter, option, index)
40
- packet_item, _, _ = CmdSender.param_widgets[index.row]
41
- if index.column == 1 and packet_item and packet_item.states
42
- # This code simply draws the current combo box text inside a button to
43
- # give the user an idea that they have to click it to activate it
44
- opt = Qt::StyleOptionButton.new
45
- opt.rect = option.rect
46
- opt.text = @table.item(index.row, index.column).text.to_s
47
- Qt::Application.style.drawControl(Qt::Style::CE_PushButton, opt, painter)
48
- opt.dispose
49
- else
50
- super(painter, option, index)
51
- end
52
- end
53
-
54
- def setModelData(editor, model, index)
55
- if Qt::ComboBox === editor
56
- model.setData(index, Qt::Variant.new(editor.currentText), Qt::EditRole)
57
- else
58
- super(editor, model, index)
59
- end
60
- end
61
-
62
- def setEditorData(editor, index)
63
- if Qt::ComboBox === editor
64
- v = index.data(Qt::EditRole)
65
- combo_index = editor.findText(v.toString)
66
- if combo_index >= 0
67
- editor.setCurrentIndex(combo_index)
68
- else
69
- editor.setCurrentIndex(0)
70
- end
71
- else
72
- super(editor, index)
73
- end
74
- end
75
- end
76
-
77
- end # module Cosmos
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ module Cosmos
12
+
13
+ class CmdSenderItemDelegate < Qt::StyledItemDelegate
14
+ def initialize(parent)
15
+ @table = parent
16
+ super(parent)
17
+ end
18
+
19
+ def createEditor(parent, option, index)
20
+ packet_item, _, _ = CmdSender.param_widgets[index.row]
21
+ if index.column == 1 and packet_item and packet_item.states
22
+ combo = Qt::ComboBox.new(parent)
23
+ sorted_states = packet_item.states.sort {|a, b| a[1] <=> b[1]}
24
+ items = sorted_states.map {|state_name, state_value| state_name}
25
+ items << CmdSender::MANUALLY
26
+ combo.addItems(items)
27
+ combo.setCurrentText(@table.item(index.row, index.column).text.to_s)
28
+ combo.setMaxVisibleItems(6)
29
+ connect(combo, SIGNAL('activated(int)')) do
30
+ emit commitData(combo)
31
+ CmdSender.table.closeEditor(combo, 0)
32
+ end
33
+ return combo
34
+ else
35
+ return super(parent, option, index)
36
+ end
37
+ end
38
+
39
+ def paint(painter, option, index)
40
+ packet_item, _, _ = CmdSender.param_widgets[index.row]
41
+ if index.column == 1 and packet_item and packet_item.states
42
+ # This code simply draws the current combo box text inside a button to
43
+ # give the user an idea that they have to click it to activate it
44
+ opt = Qt::StyleOptionButton.new
45
+ opt.rect = option.rect
46
+ opt.text = @table.item(index.row, index.column).text.to_s
47
+ Qt::Application.style.drawControl(Qt::Style::CE_PushButton, opt, painter)
48
+ opt.dispose
49
+ else
50
+ super(painter, option, index)
51
+ end
52
+ end
53
+
54
+ def setModelData(editor, model, index)
55
+ if Qt::ComboBox === editor
56
+ model.setData(index, Qt::Variant.new(editor.currentText), Qt::EditRole)
57
+ else
58
+ super(editor, model, index)
59
+ end
60
+ end
61
+
62
+ def setEditorData(editor, index)
63
+ if Qt::ComboBox === editor
64
+ v = index.data(Qt::EditRole)
65
+ combo_index = editor.findText(v.toString)
66
+ if combo_index >= 0
67
+ editor.setCurrentIndex(combo_index)
68
+ else
69
+ editor.setCurrentIndex(0)
70
+ end
71
+ else
72
+ super(editor, index)
73
+ end
74
+ end
75
+ end
76
+
77
+ end # module Cosmos
@@ -1,70 +1,70 @@
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
- module Cosmos
12
- # CmdSenderTextEdit is a subclass of TextEdit that creates a CosmosCompletion class to
13
- # allow for code completion when creating new commands in the command history
14
- # window. It also monitors for the Enter key to allow for commands in the
15
- # command history to be executed.
16
- class CmdSenderTextEdit < Qt::TextEdit
17
- def initialize(status_bar)
18
- super()
19
- @status_bar = status_bar
20
- @c = Completion.new(self)
21
- end
22
-
23
- def keyPressEvent(event)
24
- # If the completion popup is visible then ignore the event and allow the popup to handle it
25
- if (@c and @c.popup.isVisible)
26
- case event.key
27
- when Qt::Key_Return, Qt::Key_Enter
28
- event.ignore
29
- return
30
- end
31
- end
32
-
33
- case event.key
34
- # The return key means we need to execute the current line
35
- when Qt::Key_Return, Qt::Key_Enter
36
- # If the cursor is at the beginning of the line allow the newline
37
- if textCursor.atBlockStart
38
- super(event)
39
- # If the line isn't blank then execute it
40
- elsif textCursor.block.text.strip != ""
41
- begin
42
- eval(textCursor.block.text, $eval_binding)
43
- CmdSender.send_count += 1
44
- @status_bar.showMessage("#{textCursor.block.text} sent. (#{CmdSender.send_count})")
45
- rescue Exception => error
46
- if error.class == DRb::DRbConnError
47
- message = "Error Connecting to Command and Telemetry Server"
48
- else
49
- message = "Error sending command due to #{error}"
50
- end
51
- @status_bar.showMessage(message)
52
- Qt::MessageBox.critical(self, 'Error', message)
53
- end
54
- end
55
- # Handle Key_Down to automatically create a newline if they Key_Down at
56
- # the bottom of the document
57
- when Qt::Key_Down
58
- # If the number of lines equals the current line (plus one since it is 0
59
- # based) then we append a newline to allow the Key_Down to go to a new line
60
- if self.toPlainText.split("\n").length == (textCursor.block.blockNumber + 1)
61
- self.append("")
62
- end
63
- super(event)
64
- else # All other keys are handled by this widget as well as being passed to the completion handler
65
- super(event)
66
- @c.handle_keypress(event)
67
- end
68
- end
69
- end
70
- end # module Cosmos
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ module Cosmos
12
+ # CmdSenderTextEdit is a subclass of TextEdit that creates a CosmosCompletion class to
13
+ # allow for code completion when creating new commands in the command history
14
+ # window. It also monitors for the Enter key to allow for commands in the
15
+ # command history to be executed.
16
+ class CmdSenderTextEdit < Qt::TextEdit
17
+ def initialize(status_bar)
18
+ super()
19
+ @status_bar = status_bar
20
+ @c = Completion.new(self)
21
+ end
22
+
23
+ def keyPressEvent(event)
24
+ # If the completion popup is visible then ignore the event and allow the popup to handle it
25
+ if (@c and @c.popup.isVisible)
26
+ case event.key
27
+ when Qt::Key_Return, Qt::Key_Enter
28
+ event.ignore
29
+ return
30
+ end
31
+ end
32
+
33
+ case event.key
34
+ # The return key means we need to execute the current line
35
+ when Qt::Key_Return, Qt::Key_Enter
36
+ # If the cursor is at the beginning of the line allow the newline
37
+ if textCursor.atBlockStart
38
+ super(event)
39
+ # If the line isn't blank then execute it
40
+ elsif textCursor.block.text.strip != ""
41
+ begin
42
+ eval(textCursor.block.text, $eval_binding)
43
+ CmdSender.send_count += 1
44
+ @status_bar.showMessage("#{textCursor.block.text} sent. (#{CmdSender.send_count})")
45
+ rescue Exception => error
46
+ if error.class == DRb::DRbConnError
47
+ message = "Error Connecting to Command and Telemetry Server"
48
+ else
49
+ message = "Error sending command due to #{error}"
50
+ end
51
+ @status_bar.showMessage(message)
52
+ Qt::MessageBox.critical(self, 'Error', message)
53
+ end
54
+ end
55
+ # Handle Key_Down to automatically create a newline if they Key_Down at
56
+ # the bottom of the document
57
+ when Qt::Key_Down
58
+ # If the number of lines equals the current line (plus one since it is 0
59
+ # based) then we append a newline to allow the Key_Down to go to a new line
60
+ if self.toPlainText.split("\n").length == (textCursor.block.blockNumber + 1)
61
+ self.append("")
62
+ end
63
+ super(event)
64
+ else # All other keys are handled by this widget as well as being passed to the completion handler
65
+ super(event)
66
+ @c.handle_keypress(event)
67
+ end
68
+ end
69
+ end
70
+ end # module Cosmos
@@ -1,1034 +1,1034 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'cosmos/script/extract'
12
-
13
- module Cosmos
14
-
15
- module Api
16
- include Extract
17
-
18
- # Sets api_requests to 0 and initializes the whitelist of allowable API
19
- # method calls
20
- def initialize
21
- @api_whitelist = [
22
- 'cmd',
23
- 'cmd_no_range_check',
24
- 'cmd_no_hazardous_check',
25
- 'cmd_no_checks',
26
- 'cmd_raw',
27
- 'cmd_raw_no_range_check',
28
- 'cmd_raw_no_hazardous_check',
29
- 'cmd_raw_no_checks',
30
- 'send_raw',
31
- 'get_cmd_list',
32
- 'get_cmd_param_list',
33
- 'get_cmd_hazardous',
34
- 'get_cmd_value',
35
- 'get_cmd_time',
36
- 'tlm',
37
- 'tlm_raw',
38
- 'tlm_formatted',
39
- 'tlm_with_units',
40
- 'tlm_variable',
41
- 'set_tlm',
42
- 'set_tlm_raw',
43
- 'get_tlm_packet',
44
- 'get_tlm_values',
45
- 'get_tlm_list',
46
- 'get_tlm_item_list',
47
- 'get_tlm_details',
48
- 'get_out_of_limits',
49
- 'get_overall_limits_state',
50
- 'limits_enabled?',
51
- 'enable_limits',
52
- 'disable_limits',
53
- 'get_stale',
54
- 'get_limits',
55
- 'set_limits',
56
- 'get_limits_groups',
57
- 'enable_limits_group',
58
- 'disable_limits_group',
59
- 'get_limits_sets',
60
- 'set_limits_set',
61
- 'get_limits_set',
62
- 'get_target_list',
63
- 'subscribe_limits_events',
64
- 'unsubscribe_limits_events',
65
- 'get_limits_event',
66
- 'subscribe_packet_data',
67
- 'unsubscribe_packet_data',
68
- 'get_packet_data',
69
- 'get_interface_names',
70
- 'connect_interface',
71
- 'disconnect_interface',
72
- 'interface_state',
73
- 'map_target_to_interface',
74
- 'get_router_names',
75
- 'connect_router',
76
- 'disconnect_router',
77
- 'router_state',
78
- 'get_cmd_log_filename',
79
- 'get_tlm_log_filename',
80
- 'start_logging',
81
- 'stop_logging',
82
- 'start_cmd_log',
83
- 'start_tlm_log',
84
- 'stop_cmd_log',
85
- 'stop_tlm_log',
86
- 'start_raw_logging_interface',
87
- 'stop_raw_logging_interface',
88
- 'start_raw_logging_router',
89
- 'stop_raw_logging_router',
90
- 'get_server_message_log_filename',
91
- 'start_new_server_message_log']
92
- end
93
-
94
- ############################################################################
95
- # Methods Used by cosmos/script
96
- ############################################################################
97
-
98
- # Send a command packet to a target.
99
- #
100
- # Accepts two different calling styles:
101
- # cmd("TGT CMD with PARAM1 val, PARAM2 val")
102
- # cmd('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
103
- #
104
- # Favor the first syntax where possible as it is more succinct.
105
- #
106
- # @param args [String|Array<String>] See the description for calling style
107
- # @return [Array<String, String, Hash>] target_name, command_name, parameters
108
- def cmd(*args)
109
- cmd_implementation(true, true, false, 'cmd', *args)
110
- end
111
-
112
- # Send a command packet to a target without performing any value range
113
- # checks on the parameters. Useful for testing to allow sending command
114
- # parameters outside the allowable range as defined in the configuration.
115
- #
116
- # Accepts two different calling styles:
117
- # cmd_no_range_check("TGT CMD with PARAM1 val, PARAM2 val")
118
- # cmd_no_range_check('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
119
- #
120
- # Favor the first syntax where possible as it is more succinct.
121
- #
122
- # @param (see #cmd)
123
- # @return (see #cmd)
124
- def cmd_no_range_check(*args)
125
- cmd_implementation(false, true, false, 'cmd_no_range_check', *args)
126
- end
127
-
128
- # Send a command packet to a target without performing any hazardous checks
129
- # both on the command itself and its parameters. Useful in scripts to
130
- # prevent popping up warnings to the user.
131
- #
132
- # Accepts two different calling styles:
133
- # cmd_no_hazardous_check("TGT CMD with PARAM1 val, PARAM2 val")
134
- # cmd_no_hazardous_check('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
135
- #
136
- # Favor the first syntax where possible as it is more succinct.
137
- #
138
- # @param (see #cmd)
139
- # @return (see #cmd)
140
- def cmd_no_hazardous_check(*args)
141
- cmd_implementation(true, false, false, 'cmd_no_hazardous_check', *args)
142
- end
143
-
144
- # Send a command packet to a target without performing any value range
145
- # checks or hazardous checks both on the command itself and its parameters.
146
- #
147
- # Accepts two different calling styles:
148
- # cmd_no_checks("TGT CMD with PARAM1 val, PARAM2 val")
149
- # cmd_no_checks('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
150
- #
151
- # Favor the first syntax where possible as it is more succinct.
152
- #
153
- # @param (see #cmd)
154
- # @return (see #cmd)
155
- def cmd_no_checks(*args)
156
- cmd_implementation(false, false, false, 'cmd_no_checks', *args)
157
- end
158
-
159
- # Send a command packet to a target without running conversions.
160
- #
161
- # Accepts two different calling styles:
162
- # cmd_raw("TGT CMD with PARAM1 val, PARAM2 val")
163
- # cmd_raw('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
164
- #
165
- # Favor the first syntax where possible as it is more succinct.
166
- #
167
- # @param args [String|Array<String>] See the description for calling style
168
- # @return [Array<String, String, Hash>] target_name, command_name, parameters
169
- def cmd_raw(*args)
170
- cmd_implementation(true, true, true, 'cmd_raw', *args)
171
- end
172
-
173
- # Send a command packet to a target without performing any value range
174
- # checks on the parameters or running conversions. Useful for testing to allow sending command
175
- # parameters outside the allowable range as defined in the configuration.
176
- #
177
- # Accepts two different calling styles:
178
- # cmd_raw_no_range_check("TGT CMD with PARAM1 val, PARAM2 val")
179
- # cmd_raw_no_range_check('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
180
- #
181
- # Favor the first syntax where possible as it is more succinct.
182
- #
183
- # @param (see #cmd)
184
- # @return (see #cmd)
185
- def cmd_raw_no_range_check(*args)
186
- cmd_implementation(false, true, true, 'cmd_raw_no_range_check', *args)
187
- end
188
-
189
- # Send a command packet to a target without running conversions or performing any hazardous checks
190
- # both on the command itself and its parameters. Useful in scripts to
191
- # prevent popping up warnings to the user.
192
- #
193
- # Accepts two different calling styles:
194
- # cmd_raw_no_hazardous_check("TGT CMD with PARAM1 val, PARAM2 val")
195
- # cmd_raw_no_hazardous_check('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
196
- #
197
- # Favor the first syntax where possible as it is more succinct.
198
- #
199
- # @param (see #cmd)
200
- # @return (see #cmd)
201
- def cmd_raw_no_hazardous_check(*args)
202
- cmd_implementation(true, false, true, 'cmd_raw_no_hazardous_check', *args)
203
- end
204
-
205
- # Send a command packet to a target without running conversions or performing any value range
206
- # checks or hazardous checks both on the command itself and its parameters.
207
- #
208
- # Accepts two different calling styles:
209
- # cmd_raw_no_checks("TGT CMD with PARAM1 val, PARAM2 val")
210
- # cmd_raw_no_checks('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
211
- #
212
- # Favor the first syntax where possible as it is more succinct.
213
- #
214
- # @param (see #cmd)
215
- # @return (see #cmd)
216
- def cmd_raw_no_checks(*args)
217
- cmd_implementation(false, false, true, 'cmd_raw_no_checks', *args)
218
- end
219
-
220
- # Send a raw binary string to the specified interface.
221
- #
222
- # @param interface_name [String] The interface to send the raw binary
223
- # @param data [String] The raw binary data
224
- def send_raw(interface_name, data)
225
- CmdTlmServer.commanding.send_raw(interface_name, data)
226
- nil
227
- end
228
-
229
- # Returns the list of all the command names and their descriptions from the
230
- # given target.
231
- #
232
- # @param target_name [String] Name of the target
233
- # @return [Array<Array<String, String>>] Array containing \[command name,
234
- # command description] for all commands in the target
235
- def get_cmd_list(target_name)
236
- list = []
237
- System.commands.packets(target_name).each do |name, command|
238
- list << [name, command.description]
239
- end
240
- return list.sort
241
- end
242
-
243
- # Returns the list of all the parameters for the given command.
244
- #
245
- # @param target_name (see #get_cmd_list)
246
- # @param command_name [String] Name of the command
247
- # @return [Array<Array<String, Object, nil|Array, nil|String, nil|String,
248
- # nil|String, Boolean>] Array containing \[name, default, states,
249
- # description, units_full, units, required] for all parameters in the
250
- # command
251
- def get_cmd_param_list(target_name, command_name)
252
- list = []
253
- System.commands.params(target_name, command_name).each do |parameter|
254
- if parameter.format_string
255
- unless parameter.default.kind_of?(Array)
256
- list << [parameter.name, sprintf(parameter.format_string, parameter.default), parameter.states, parameter.description, parameter.units_full, parameter.units, parameter.required]
257
- else
258
- list << [parameter.name, "[]", parameter.states, parameter.description, parameter.units_full, parameter.units, parameter.required]
259
- end
260
- else
261
- list << [parameter.name, parameter.default, parameter.states, parameter.description, parameter.units_full, parameter.units, parameter.required]
262
- end
263
- end
264
- return list
265
- end
266
-
267
- # Returns whether the specified command is hazardous
268
- #
269
- # @param target_name (see #get_cmd_param_list)
270
- # @param command_name (see #get_cmd_param_list)
271
- # @param params [Hash] Command parameter hash to test whether a particular
272
- # parameter setting makes the command hazardous
273
- # @return [Boolean] Whether the command is hazardous
274
- def get_cmd_hazardous(target_name, command_name, params = {})
275
- hazardous, _ = System.commands.cmd_hazardous?(target_name, command_name, params)
276
- return hazardous
277
- end
278
-
279
- # Returns a value from the specified command
280
- #
281
- # @param target_name [String] Target name of the command
282
- # @param command_name [String] Packet name of the command
283
- # @param parameter_name [String] Parameter name in the command
284
- # @param value_type [Symbol] How the values should be converted. Must be
285
- # one of {Packet::VALUE_TYPES}
286
- # @return [Varies] value
287
- def get_cmd_value(target_name, command_name, parameter_name, value_type = :CONVERTED)
288
- packet = System.commands.packet(target_name, command_name)
289
- # Virtually support RECEIVED_TIMEFORMATTED, RECEIVED_TIMESECONDS, RECEIVED_COUNT
290
- case parameter_name.to_s.upcase
291
- when 'RECEIVED_TIMEFORMATTED'
292
- if packet.received_time
293
- return packet.received_time.formatted
294
- else
295
- return 'No Packet Received Time'
296
- end
297
- when 'RECEIVED_TIMESECONDS'
298
- if packet.received_time
299
- return packet.received_time.to_f
300
- else
301
- return 0.0
302
- end
303
- when 'RECEIVED_COUNT'
304
- return packet.received_count
305
- else
306
- return packet.read(parameter_name, value_type.intern)
307
- end
308
- end
309
-
310
- # Returns the time the most recent command was sent
311
- #
312
- # @param target_name [String] Target name of the command. If not given then
313
- # the most recent time from all commands will be returned
314
- # @param command_name [String] Packet name of the command. If not given then
315
- # then most recent time from the given target will be returned.
316
- # @return [Array<Target Name, Command Name, Time Seconds, Time Microseconds>]
317
- def get_cmd_time(target_name = nil, command_name = nil)
318
- last_command = nil
319
- if target_name
320
- if command_name
321
- last_command = System.commands.packet(target_name, command_name)
322
- else
323
- System.commands.packets(target_name).each do |packet_name, command|
324
- last_command = command if !last_command and command.received_time
325
- if command.received_time and command.received_time > last_command.received_time
326
- last_command = command
327
- end
328
- end
329
- end
330
- else
331
- commands = System.commands.all
332
- commands.each do |target_name, target_commands|
333
- target_commands.each do |packet_name, command|
334
- last_command = command if !last_command and command.received_time
335
- if command.received_time and command.received_time > last_command.received_time
336
- last_command = command
337
- end
338
- end
339
- end
340
- end
341
-
342
- if last_command
343
- if last_command.received_time
344
- return [last_command.target_name, last_command.packet_name, last_command.received_time.tv_sec, last_command.received_time.tv_usec]
345
- else
346
- return [last_command.target_name, last_command.packet_name, nil, nil]
347
- end
348
- else
349
- return [nil, nil, nil, nil]
350
- end
351
- end
352
-
353
- # Request a converted telemetry item from a packet.
354
- #
355
- # Accepts two different calling styles:
356
- # tlm("TGT PKT ITEM")
357
- # tlm('TGT','PKT','ITEM')
358
- #
359
- # Favor the first syntax where possible as it is more succinct.
360
- #
361
- # @param args [String|Array<String>] See the description for calling style
362
- # @return [Numeric] The converted telemetry value without formatting or
363
- # units
364
- def tlm(*args)
365
- target_name, packet_name, item_name = tlm_process_args(args, 'tlm')
366
- System.telemetry.value(target_name, packet_name, item_name, :CONVERTED)
367
- end
368
-
369
- # Request a raw telemetry item from a packet.
370
- #
371
- # Accepts two different calling styles:
372
- # tlm_raw("TGT PKT ITEM")
373
- # tlm_raw('TGT','PKT','ITEM')
374
- #
375
- # Favor the first syntax where possible as it is more succinct.
376
- #
377
- # @param args (see #tlm)
378
- # @return [Numeric] The unconverted telemetry value without formatting or
379
- # units
380
- def tlm_raw(*args)
381
- target_name, packet_name, item_name = tlm_process_args(args, 'tlm_raw')
382
- System.telemetry.value(target_name, packet_name, item_name, :RAW)
383
- end
384
-
385
- # Request a formatted telemetry item from a packet.
386
- #
387
- # Accepts two different calling styles:
388
- # tlm_formatted("TGT PKT ITEM")
389
- # tlm_formatted('TGT','PKT','ITEM')
390
- #
391
- # Favor the first syntax where possible as it is more succinct.
392
- #
393
- # @param args (see #tlm)
394
- # @return [String] The converted telemetry value with formatting but
395
- # without units
396
- def tlm_formatted(*args)
397
- target_name, packet_name, item_name = tlm_process_args(args, 'tlm_formatted')
398
- System.telemetry.value(target_name, packet_name, item_name, :FORMATTED)
399
- end
400
-
401
- # Request a telemetry item with units from a packet.
402
- #
403
- # Accepts two different calling styles:
404
- # tlm_with_units("TGT PKT ITEM")
405
- # tlm_with_units('TGT','PKT','ITEM')
406
- #
407
- # Favor the first syntax where possible as it is more succinct.
408
- #
409
- # @param args (see #tlm)
410
- # @return [String] The converted, formatted telemetry value with units
411
- def tlm_with_units(*args)
412
- target_name, packet_name, item_name = tlm_process_args(args, 'tlm_with_units')
413
- System.telemetry.value(target_name, packet_name, item_name, :WITH_UNITS)
414
- end
415
-
416
- # Request a telemetry item from a packet with the specified conversion
417
- # applied. This method is equivalent to calling the other tlm_xxx methods.
418
- #
419
- # Accepts two different calling styles:
420
- # tlm_variable("TGT PKT ITEM", :RAW)
421
- # tlm_variable('TGT','PKT','ITEM', :RAW)
422
- #
423
- # Favor the first syntax where possible as it is more succinct.
424
- #
425
- # @param args The args must either be a string followed by a symbol or
426
- # three strings followed by a symbol (see the calling style in the
427
- # description). The symbol must be one of {Packet::VALUE_TYPES}.
428
- # @return [Object] The converted telemetry value
429
- def tlm_variable(*args)
430
- target_name, packet_name, item_name, value_type = tlm_variable_process_args(args, 'tlm_variable')
431
- System.telemetry.value(target_name, packet_name, item_name, value_type)
432
- end
433
-
434
- # Set a telemetry item in a packet to a particular value and then verifies
435
- # the value is within the acceptable limits. This method uses any
436
- # conversions that apply to the item when setting the value.
437
- #
438
- # Note: If this is done while COSMOS is currently receiving telemetry,
439
- # this value could get overwritten at any time. Thus this capability is
440
- # best used for testing or for telemetry items that are not received
441
- # regularly through the target interface.
442
- #
443
- # Accepts two different calling styles:
444
- # set_tlm("TGT PKT ITEM = 1.0")
445
- # set_tlm('TGT','PKT','ITEM', 10.0)
446
- #
447
- # Favor the first syntax where possible as it is more succinct.
448
- #
449
- # @param args The args must either be a string followed by a value or
450
- # three strings followed by a value (see the calling style in the
451
- # description).
452
- def set_tlm(*args)
453
- target_name, packet_name, item_name, value = set_tlm_process_args(args, 'set_tlm')
454
- System.telemetry.set_value(target_name, packet_name, item_name, value, :CONVERTED)
455
- System.telemetry.packet(target_name, packet_name).check_limits(System.limits_set, true)
456
- nil
457
- end
458
-
459
- # Set a telemetry item in a packet to a particular value and then verifies
460
- # the value is within the acceptable limits. No conversions are applied.
461
- #
462
- # Note: If this is done while COSMOS is currently receiving telemetry,
463
- # this value could get overwritten at any time. Thus this capability is
464
- # best used for testing or for telemetry items that are not received
465
- # regularly through the target interface.
466
- #
467
- # Accepts two different calling styles:
468
- # set_tlm_raw("TGT PKT ITEM = 1.0")
469
- # set_tlm_raw('TGT','PKT','ITEM', 10.0)
470
- #
471
- # Favor the first syntax where possible as it is more succinct.
472
- #
473
- # @param args The args must either be a string followed by a value or
474
- # three strings followed by a value (see the calling style in the
475
- # description).
476
- def set_tlm_raw(*args)
477
- target_name, packet_name, item_name, value = set_tlm_process_args(args, 'set_tlm_raw')
478
- System.telemetry.set_value(target_name, packet_name, item_name, value, :RAW)
479
- System.telemetry.packet(target_name, packet_name).check_limits(System.limits_set, true)
480
- nil
481
- end
482
-
483
- # Returns all the values (along with their limits state) for a packet.
484
- #
485
- # @param target_name [String] Name of the target
486
- # @param packet_name [String] Name of the packet
487
- # @param value_type [Symbol] How the values should be converted. Must be
488
- # one of {Packet::VALUE_TYPES}
489
- # @return (see Cosmos::Packet#read_all_with_limits_states)
490
- def get_tlm_packet(target_name, packet_name, value_type = :CONVERTED)
491
- packet = System.telemetry.packet(target_name, packet_name)
492
- return packet.read_all_with_limits_states(value_type.to_s.intern)
493
- end
494
-
495
- # Returns all the item values (along with their limits state). The items
496
- # can be from any target and packet and thus must be fully qualified with
497
- # their target and packet names.
498
- #
499
- # @param (see Cosmos::Telemetry#values_and_limits_states)
500
- # @return [Array< Array<Object>, Array<Symbol>, Array<Array<Numeric>>, String>]
501
- # Array consisting of an Array of item values, an Array of item limits state
502
- # given as symbols such as :RED, :YELLOW, :STALE, an Array of Arrays including
503
- # the limits setting such as red low, yellow low, yellow high, red high and
504
- # optionally green low and high, and the overall limits state which is
505
- # one of {Cosmos::Limits::LIMITS_STATES}.
506
- def get_tlm_values(item_array, value_types = :CONVERTED)
507
- if !item_array.is_a?(Array) || (!item_array[0].is_a?(Array) and !item_array.empty?)
508
- raise ArgumentError, "item_array must be nested array: [['TGT','PKT','ITEM'],...]"
509
- end
510
- return [[], [], [], System.limits_set] if item_array.empty?
511
- if value_types.is_a?(Array)
512
- elem = value_types[0]
513
- else
514
- elem = value_types
515
- end
516
- # Due to JSON round tripping from scripts, value_types can be a String
517
- # so we must check for both Symbol and String
518
- if !elem.is_a?(Symbol) && !elem.is_a?(String)
519
- raise ArgumentError, "value_types must be a single symbol or array of symbols specifying the conversion method (:RAW, :CONVERTED, :FORMATTED, :WITH_UNITS)"
520
- end
521
- array = System.telemetry.values_and_limits_states(item_array, value_types)
522
- array << System.limits_set
523
- return array
524
- end
525
-
526
- # Returns the sorted packet names and their descriptions for a particular
527
- # target.
528
- #
529
- # @param target_name (see #get_tlm_packet)
530
- # @return [Array<String, String>] Array of \[packet name, packet
531
- # description] sorted by packet name
532
- def get_tlm_list(target_name)
533
- list = []
534
- packets = System.telemetry.packets(target_name)
535
- packets.each do |packet_name, packet|
536
- list << [packet_name, packet.description]
537
- end
538
- list.sort
539
- end
540
-
541
- # Returns the item names and their states and descriptions for a particular
542
- # packet.
543
- #
544
- # @param target_name (see #get_tlm_packet)
545
- # @param packet_name (see #get_tlm_packet)
546
- # @return [Array<String, Hash, String>] Array of \[item name, item states,
547
- # item description]
548
- def get_tlm_item_list(target_name, packet_name)
549
- list = []
550
- System.telemetry.items(target_name, packet_name).each do |item|
551
- list << [item.name, item.states, item.description]
552
- end
553
- list
554
- end
555
-
556
- # Returns an array of Hashes with all the attributes of the item.
557
- #
558
- # @param (see Cosmos::Telemetry#values_and_limits_states)
559
- # @return [Array<Hash>] Array of hashes describing the items. All the
560
- # attributes in {Cosmos::PacketItem} and {Cosmos::StructItem} are
561
- # present in the Hash.
562
- def get_tlm_details(item_array)
563
- if !item_array.is_a?(Array) || !item_array[0].is_a?(Array)
564
- raise ArgumentError, "item_array must be nested array: [['TGT','PKT','ITEM'],...]"
565
- end
566
- details = []
567
- item_array.each do |target_name, packet_name, item_name|
568
- _, item = System.telemetry.packet_and_item(target_name, packet_name, item_name)
569
- details << item.to_hash
570
- end
571
- details
572
- end
573
-
574
- # (see Cosmos::Limits#out_of_limits)
575
- def get_out_of_limits
576
- return System.limits.out_of_limits
577
- end
578
-
579
- # (see Cosmos::Limits#overall_limits_state)
580
- def get_overall_limits_state (ignored_items = nil)
581
- return System.limits.overall_limits_state(ignored_items)
582
- end
583
-
584
- # Whether the limits are enabled for the given item
585
- #
586
- # Accepts two different calling styles:
587
- # limits_enabled?("TGT PKT ITEM")
588
- # limits_enabled?('TGT','PKT','ITEM')
589
- #
590
- # Favor the first syntax where possible as it is more succinct.
591
- #
592
- # @param args [String|Array<String>] See the description for calling style
593
- # @return [Boolean] Whether limits are enable for the itme
594
- def limits_enabled?(*args)
595
- target_name, packet_name, item_name = tlm_process_args(args, 'limits_enabled?')
596
- return System.limits.enabled?(target_name, packet_name, item_name)
597
- end
598
-
599
- # Enable limits checking for a telemetry item
600
- #
601
- # Accepts two different calling styles:
602
- # enable_limits("TGT PKT ITEM")
603
- # enable_limits('TGT','PKT','ITEM')
604
- #
605
- # Favor the first syntax where possible as it is more succinct.
606
- #
607
- # @param args [String|Array<String>] See the description for calling style
608
- def enable_limits(*args)
609
- target_name, packet_name, item_name = tlm_process_args(args, 'enable_limits')
610
- System.limits.enable(target_name, packet_name, item_name)
611
- nil
612
- end
613
-
614
- # Disable limit checking for a telemetry item
615
- #
616
- # Accepts two different calling styles:
617
- # disable_limits("TGT PKT ITEM")
618
- # disable_limits('TGT','PKT','ITEM')
619
- #
620
- # Favor the first syntax where possible as it is more succinct.
621
- #
622
- # @param args [String|Array<String>] See the description for calling style
623
- def disable_limits(*args)
624
- target_name, packet_name, item_name = tlm_process_args(args, 'disable_limits')
625
- System.limits.disable(target_name, packet_name, item_name)
626
- nil
627
- end
628
-
629
- # Get the list of stale packets for a specific target or pass nil to list
630
- # all stale packets
631
- #
632
- # @param with_limits_only [Boolean] Return only the stale packets
633
- # that have limits items and thus affect the overall limits
634
- # state of the system
635
- # @param target [String] The target to find stale packets for or nil to list
636
- # all stale packets in the system
637
- # @return [Array<Array<String, String>>] Array of arrays listing the target
638
- # name and packet name
639
- def get_stale(with_limits_only = false, target = nil)
640
- stale = []
641
- System.telemetry.stale(with_limits_only, target).each do |packet|
642
- stale << [packet.target_name, packet.packet_name]
643
- end
644
- stale
645
- end
646
-
647
- # (see Cosmos::Limits#get)
648
- def get_limits(target_name, packet_name, item_name, limits_set = nil)
649
- System.limits.get(target_name, packet_name, item_name, limits_set)
650
- end
651
-
652
- # (see Cosmos::Limits#set)
653
- def set_limits(target_name, packet_name, item_name, red_low, yellow_low, yellow_high, red_high, green_low = nil, green_high = nil, limits_set = :CUSTOM, persistence = nil, enabled = true)
654
- result = System.limits.set(target_name, packet_name, item_name, red_low, yellow_low, yellow_high, red_high, green_low, green_high, limits_set, persistence, enabled)
655
- if result[0] != nil
656
- limits_settings = [target_name, packet_name, item_name].concat(result)
657
- CmdTlmServer.instance.post_limits_event(:LIMITS_SETTINGS, limits_settings)
658
- Logger.info("Limits Settings Changed: #{limits_settings}")
659
- end
660
- result
661
- end
662
-
663
- # (see Cosmos::Limits#groups)
664
- def get_limits_groups
665
- return System.limits.groups.keys
666
- end
667
-
668
- # (see Cosmos::Limits#enable_group)
669
- def enable_limits_group(group_name)
670
- System.limits.enable_group(group_name)
671
- nil
672
- end
673
-
674
- # (see Cosmos::Limits#disable_group)
675
- def disable_limits_group(group_name)
676
- System.limits.disable_group(group_name)
677
- nil
678
- end
679
-
680
- # Returns all defined limits sets
681
- #
682
- # @return [Array<Symbol>] All defined limits sets
683
- def get_limits_sets
684
- return System.limits.sets
685
- end
686
-
687
- # Changes the active limits set that applies to all telemetry
688
- #
689
- # @param limits_set [String] The name of the limits set
690
- def set_limits_set(limits_set)
691
- System.limits_set = limits_set if System.limits_set != limits_set.to_s.upcase.intern
692
- end
693
-
694
- # Returns the active limits set that applies to all telemetry
695
- #
696
- # @return [String] The current limits set
697
- def get_limits_set
698
- return System.limits_set.to_s
699
- end
700
-
701
- #
702
- # General Purpose Methods
703
- #
704
-
705
- # Returns the list of all target names
706
- #
707
- # @return [Array<String>] All target names
708
- def get_target_list
709
- list = []
710
- System.targets.each_key {|target_name| list << target_name }
711
- return list.sort
712
- end
713
-
714
- # @see CmdTlmServer.subscribe_limits_events
715
- def subscribe_limits_events(queue_size = CmdTlmServer::DEFAULT_LIMITS_EVENT_QUEUE_SIZE)
716
- CmdTlmServer.subscribe_limits_events(queue_size)
717
- end
718
-
719
- # @see CmdTlmServer.unsubscribe_limits_events
720
- def unsubscribe_limits_events(id)
721
- CmdTlmServer.unsubscribe_limits_events(id)
722
- end
723
-
724
- # @see CmdTlmServer.get_limits_event
725
- def get_limits_event(id, non_block = false)
726
- CmdTlmServer.get_limits_event(id, non_block)
727
- end
728
-
729
- # @see CmdTlmServer.subscribe_packet_data
730
- def subscribe_packet_data(packets,
731
- queue_size = CmdTlmServer::DEFAULT_PACKET_DATA_QUEUE_SIZE)
732
- CmdTlmServer.subscribe_packet_data(packets, queue_size)
733
- end
734
-
735
- # @see CmdTlmServer.unsubscribe_packet_data
736
- def unsubscribe_packet_data(id)
737
- CmdTlmServer.unsubscribe_packet_data(id)
738
- end
739
-
740
- # @see CmdTlmServer.get_packet_data
741
- def get_packet_data(id, non_block = false)
742
- CmdTlmServer.get_packet_data(id, non_block)
743
- end
744
-
745
- #
746
- # Methods for scripting
747
- #
748
-
749
- # @return [Array<String>] All the interface names
750
- def get_interface_names
751
- CmdTlmServer.interfaces.names
752
- end
753
-
754
- # Connects to an interface and starts its telemetry gathering thread. If
755
- # optional parameters are given, the interface is recreated with new
756
- # parameters.
757
- #
758
- # @param interface_name [String] The name of the interface
759
- # @param params [Array] Parameters to pass to the interface.
760
- def connect_interface(interface_name, *params)
761
- CmdTlmServer.interfaces.connect(interface_name, *params)
762
- nil
763
- end
764
-
765
- # Disconnects from an interface and kills its telemetry gathering thread
766
- #
767
- # @param interface_name (see #connect_interface)
768
- def disconnect_interface(interface_name)
769
- CmdTlmServer.interfaces.disconnect(interface_name)
770
- nil
771
- end
772
-
773
- # @param interface_name (see #connect_interface)
774
- # @return [String] The state of the interface which is one of 'CONNECTED',
775
- # 'ATTEMPTING' or 'DISCONNECTED'.
776
- def interface_state(interface_name)
777
- CmdTlmServer.interfaces.state(interface_name)
778
- end
779
-
780
- # Associates a target and all its commands and telemetry with a particular
781
- # interface. All the commands will go out over and telemetry be received
782
- # from that interface.
783
- #
784
- # @param target_name [String] The name of the target
785
- # @param interface_name (see #connect_interface)
786
- def map_target_to_interface(target_name, interface_name)
787
- CmdTlmServer.interfaces.map_target(target_name, interface_name)
788
- nil
789
- end
790
-
791
- # @return [Array<String>] All the router names
792
- def get_router_names
793
- CmdTlmServer.routers.names
794
- end
795
-
796
- # Connects a router and starts its command gathering thread. If
797
- # optional parameters are given, the router is recreated with new
798
- # parameters.
799
- #
800
- # @param router_name [String] The name of the router
801
- # @param params [Array] Parameters to pass to the router.
802
- def connect_router(router_name, *params)
803
- CmdTlmServer.routers.connect(router_name, *params)
804
- nil
805
- end
806
-
807
- # Disconnects a router and kills its command gathering thread
808
- #
809
- # @param router_name (see #connect_router)
810
- def disconnect_router(router_name)
811
- CmdTlmServer.routers.disconnect(router_name)
812
- nil
813
- end
814
-
815
- # @param router_name (see #connect_router)
816
- # @return [String] The state of the router which is one of 'CONNECTED',
817
- # 'ATTEMPTING' or 'DISCONNECTED'.
818
- def router_state(router_name)
819
- CmdTlmServer.routers.state(router_name)
820
- end
821
-
822
- # @param packet_log_writer_name [String] The name of the packet log writer which
823
- # is writing the command packet log
824
- # @return [String] The command packet log filename
825
- def get_cmd_log_filename(packet_log_writer_name = 'DEFAULT')
826
- CmdTlmServer.packet_logging.cmd_filename(packet_log_writer_name)
827
- end
828
-
829
- # @param packet_log_writer_name [String] The name of the packet log writer which
830
- # is writing the telemetry packet log
831
- # @return [String] The telemetry packet log filename
832
- def get_tlm_log_filename(packet_log_writer_name = 'DEFAULT')
833
- CmdTlmServer.packet_logging.tlm_filename(packet_log_writer_name)
834
- end
835
-
836
- # Start both command and telemetry packet logging.
837
- #
838
- # @param packet_log_writer_name [String] The name of the packet log writer which
839
- # is writing both the command and telemetry logs
840
- # @param label [String] Optional label to apply to both the command and
841
- # telemetry packet log filename
842
- def start_logging(packet_log_writer_name = 'ALL', label = nil)
843
- CmdTlmServer.packet_logging.start(packet_log_writer_name, label)
844
- nil
845
- end
846
-
847
- # Stop both command and telemetry packet logging.
848
- #
849
- # @param packet_log_writer_name [String] The name of the packet log writer which
850
- # is writing both the command and telemetry logs
851
- def stop_logging(packet_log_writer_name = 'ALL')
852
- CmdTlmServer.packet_logging.stop(packet_log_writer_name)
853
- nil
854
- end
855
-
856
- # Start command packet logging.
857
- #
858
- # @param packet_log_writer_name [String] The name of the packet log writer which
859
- # is writing the command logs
860
- # @param label [String] Optional label to apply to the command packet log
861
- # filename
862
- def start_cmd_log(packet_log_writer_name = 'ALL', label = nil)
863
- CmdTlmServer.packet_logging.start_cmd(packet_log_writer_name, label)
864
- nil
865
- end
866
-
867
- # Start telemetry packet logging.
868
- #
869
- # @param packet_log_writer_name [String] The name of the packet log writer which
870
- # is writing the telemetry logs
871
- # @param label [String] Optional label to apply to the telemetry packet log
872
- # filename
873
- def start_tlm_log(packet_log_writer_name = 'ALL', label = nil)
874
- CmdTlmServer.packet_logging.start_tlm(packet_log_writer_name, label)
875
- nil
876
- end
877
-
878
- # Stop command packet logging.
879
- #
880
- # @param packet_log_writer_name [String] The name of the packet log writer which
881
- # is writing the command log
882
- def stop_cmd_log(packet_log_writer_name = 'ALL')
883
- CmdTlmServer.packet_logging.stop_cmd(packet_log_writer_name)
884
- nil
885
- end
886
-
887
- # Stop telemetry packet logging.
888
- #
889
- # @param packet_log_writer_name [String] The name of the packet log writer which
890
- # is writing the telemetry log
891
- def stop_tlm_log(packet_log_writer_name = 'ALL')
892
- CmdTlmServer.packet_logging.stop_tlm(packet_log_writer_name)
893
- nil
894
- end
895
-
896
- # Starts raw logging for an interface
897
- #
898
- # @param interface_name [String] The name of the interface
899
- def start_raw_logging_interface(interface_name = 'ALL')
900
- CmdTlmServer.interfaces.start_raw_logging(interface_name)
901
- nil
902
- end
903
-
904
- # Stop raw logging for an interface
905
- #
906
- # @param interface_name [String] The name of the interface
907
- def stop_raw_logging_interface(interface_name = 'ALL')
908
- CmdTlmServer.interfaces.stop_raw_logging(interface_name)
909
- nil
910
- end
911
-
912
- # Starts raw logging for a router
913
- #
914
- # @param router_name [String] The name of the router
915
- def start_raw_logging_router(router_name = 'ALL')
916
- CmdTlmServer.routers.start_raw_logging(router_name)
917
- nil
918
- end
919
-
920
- # Stops raw logging for a router
921
- #
922
- # @param router_name [String] The name of the router
923
- def stop_raw_logging_router(router_name = 'ALL')
924
- CmdTlmServer.routers.stop_raw_logging(router_name)
925
- nil
926
- end
927
-
928
- # @return [String] The server message log filename
929
- def get_server_message_log_filename
930
- CmdTlmServer.message_log.filename
931
- end
932
-
933
- # Starts a new server message log
934
- def start_new_server_message_log
935
- CmdTlmServer.message_log.start
936
- nil
937
- end
938
-
939
- private
940
-
941
- def cmd_implementation(range_check, hazardous_check, raw, method_name, *args)
942
- case args.length
943
- when 1
944
- target_name, cmd_name, cmd_params = extract_fields_from_cmd_text(args[0])
945
- when 2, 3
946
- target_name = args[0]
947
- cmd_name = args[1]
948
- if args.length == 2
949
- cmd_params = {}
950
- else
951
- cmd_params = args[2]
952
- end
953
- else
954
- # Invalid number of arguments
955
- raise "ERROR: Invalid number of arguments (#{args.length}) passed to #{method_name}()"
956
- end
957
-
958
- if hazardous_check
959
- hazardous, hazardous_description = System.commands.cmd_hazardous?(target_name, cmd_name, cmd_params)
960
- if hazardous
961
- error = HazardousError.new
962
- error.target_name = target_name
963
- error.cmd_name = cmd_name
964
- error.cmd_params = cmd_params
965
- error.hazardous_description = hazardous_description
966
- raise error
967
- end
968
- end
969
-
970
- # Build the command
971
- begin
972
- command = System.commands.build_cmd(target_name, cmd_name, cmd_params, range_check, raw)
973
- rescue Exception => e
974
- Logger.error e.message
975
- raise e
976
- end
977
-
978
- # Send the command
979
- @disconnect = false unless defined? @disconnect
980
- CmdTlmServer.commanding.send_command_to_target(target_name, command) unless @disconnect
981
-
982
- [target_name, cmd_name, cmd_params]
983
- end
984
-
985
- def tlm_process_args(args, function_name)
986
- case args.length
987
- when 1
988
- target_name, packet_name, item_name = extract_fields_from_tlm_text(args[0])
989
- when 3
990
- target_name = args[0]
991
- packet_name = args[1]
992
- item_name = args[2]
993
- else
994
- # Invalid number of arguments
995
- raise "ERROR: Invalid number of arguments (#{args.length}) passed to #{function_name}()"
996
- end
997
- return [target_name, packet_name, item_name]
998
- end
999
-
1000
- def tlm_variable_process_args(args, function_name)
1001
- case args.length
1002
- when 2
1003
- target_name, packet_name, item_name = extract_fields_from_tlm_text(args[0])
1004
- value_type = args[1].to_s.intern
1005
- when 4
1006
- target_name = args[0]
1007
- packet_name = args[1]
1008
- item_name = args[2]
1009
- value_type = args[3].to_s.intern
1010
- else
1011
- # Invalid number of arguments
1012
- raise "ERROR: Invalid number of arguments (#{args.length}) passed to #{function_name}()"
1013
- end
1014
- return [target_name, packet_name, item_name, value_type]
1015
- end
1016
-
1017
- def set_tlm_process_args(args, function_name)
1018
- case args.length
1019
- when 1
1020
- target_name, packet_name, item_name, value = extract_fields_from_set_tlm_text(args[0])
1021
- when 4
1022
- target_name = args[0]
1023
- packet_name = args[1]
1024
- item_name = args[2]
1025
- value = args[3]
1026
- else
1027
- # Invalid number of arguments
1028
- raise "ERROR: Invalid number of arguments (#{args.length}) passed to #{function_name}()"
1029
- end
1030
- return [target_name, packet_name, item_name, value]
1031
- end
1032
-
1033
- end # module Api
1034
- end # module Cosmos
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos/script/extract'
12
+
13
+ module Cosmos
14
+
15
+ module Api
16
+ include Extract
17
+
18
+ # Sets api_requests to 0 and initializes the whitelist of allowable API
19
+ # method calls
20
+ def initialize
21
+ @api_whitelist = [
22
+ 'cmd',
23
+ 'cmd_no_range_check',
24
+ 'cmd_no_hazardous_check',
25
+ 'cmd_no_checks',
26
+ 'cmd_raw',
27
+ 'cmd_raw_no_range_check',
28
+ 'cmd_raw_no_hazardous_check',
29
+ 'cmd_raw_no_checks',
30
+ 'send_raw',
31
+ 'get_cmd_list',
32
+ 'get_cmd_param_list',
33
+ 'get_cmd_hazardous',
34
+ 'get_cmd_value',
35
+ 'get_cmd_time',
36
+ 'tlm',
37
+ 'tlm_raw',
38
+ 'tlm_formatted',
39
+ 'tlm_with_units',
40
+ 'tlm_variable',
41
+ 'set_tlm',
42
+ 'set_tlm_raw',
43
+ 'get_tlm_packet',
44
+ 'get_tlm_values',
45
+ 'get_tlm_list',
46
+ 'get_tlm_item_list',
47
+ 'get_tlm_details',
48
+ 'get_out_of_limits',
49
+ 'get_overall_limits_state',
50
+ 'limits_enabled?',
51
+ 'enable_limits',
52
+ 'disable_limits',
53
+ 'get_stale',
54
+ 'get_limits',
55
+ 'set_limits',
56
+ 'get_limits_groups',
57
+ 'enable_limits_group',
58
+ 'disable_limits_group',
59
+ 'get_limits_sets',
60
+ 'set_limits_set',
61
+ 'get_limits_set',
62
+ 'get_target_list',
63
+ 'subscribe_limits_events',
64
+ 'unsubscribe_limits_events',
65
+ 'get_limits_event',
66
+ 'subscribe_packet_data',
67
+ 'unsubscribe_packet_data',
68
+ 'get_packet_data',
69
+ 'get_interface_names',
70
+ 'connect_interface',
71
+ 'disconnect_interface',
72
+ 'interface_state',
73
+ 'map_target_to_interface',
74
+ 'get_router_names',
75
+ 'connect_router',
76
+ 'disconnect_router',
77
+ 'router_state',
78
+ 'get_cmd_log_filename',
79
+ 'get_tlm_log_filename',
80
+ 'start_logging',
81
+ 'stop_logging',
82
+ 'start_cmd_log',
83
+ 'start_tlm_log',
84
+ 'stop_cmd_log',
85
+ 'stop_tlm_log',
86
+ 'start_raw_logging_interface',
87
+ 'stop_raw_logging_interface',
88
+ 'start_raw_logging_router',
89
+ 'stop_raw_logging_router',
90
+ 'get_server_message_log_filename',
91
+ 'start_new_server_message_log']
92
+ end
93
+
94
+ ############################################################################
95
+ # Methods Used by cosmos/script
96
+ ############################################################################
97
+
98
+ # Send a command packet to a target.
99
+ #
100
+ # Accepts two different calling styles:
101
+ # cmd("TGT CMD with PARAM1 val, PARAM2 val")
102
+ # cmd('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
103
+ #
104
+ # Favor the first syntax where possible as it is more succinct.
105
+ #
106
+ # @param args [String|Array<String>] See the description for calling style
107
+ # @return [Array<String, String, Hash>] target_name, command_name, parameters
108
+ def cmd(*args)
109
+ cmd_implementation(true, true, false, 'cmd', *args)
110
+ end
111
+
112
+ # Send a command packet to a target without performing any value range
113
+ # checks on the parameters. Useful for testing to allow sending command
114
+ # parameters outside the allowable range as defined in the configuration.
115
+ #
116
+ # Accepts two different calling styles:
117
+ # cmd_no_range_check("TGT CMD with PARAM1 val, PARAM2 val")
118
+ # cmd_no_range_check('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
119
+ #
120
+ # Favor the first syntax where possible as it is more succinct.
121
+ #
122
+ # @param (see #cmd)
123
+ # @return (see #cmd)
124
+ def cmd_no_range_check(*args)
125
+ cmd_implementation(false, true, false, 'cmd_no_range_check', *args)
126
+ end
127
+
128
+ # Send a command packet to a target without performing any hazardous checks
129
+ # both on the command itself and its parameters. Useful in scripts to
130
+ # prevent popping up warnings to the user.
131
+ #
132
+ # Accepts two different calling styles:
133
+ # cmd_no_hazardous_check("TGT CMD with PARAM1 val, PARAM2 val")
134
+ # cmd_no_hazardous_check('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
135
+ #
136
+ # Favor the first syntax where possible as it is more succinct.
137
+ #
138
+ # @param (see #cmd)
139
+ # @return (see #cmd)
140
+ def cmd_no_hazardous_check(*args)
141
+ cmd_implementation(true, false, false, 'cmd_no_hazardous_check', *args)
142
+ end
143
+
144
+ # Send a command packet to a target without performing any value range
145
+ # checks or hazardous checks both on the command itself and its parameters.
146
+ #
147
+ # Accepts two different calling styles:
148
+ # cmd_no_checks("TGT CMD with PARAM1 val, PARAM2 val")
149
+ # cmd_no_checks('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
150
+ #
151
+ # Favor the first syntax where possible as it is more succinct.
152
+ #
153
+ # @param (see #cmd)
154
+ # @return (see #cmd)
155
+ def cmd_no_checks(*args)
156
+ cmd_implementation(false, false, false, 'cmd_no_checks', *args)
157
+ end
158
+
159
+ # Send a command packet to a target without running conversions.
160
+ #
161
+ # Accepts two different calling styles:
162
+ # cmd_raw("TGT CMD with PARAM1 val, PARAM2 val")
163
+ # cmd_raw('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
164
+ #
165
+ # Favor the first syntax where possible as it is more succinct.
166
+ #
167
+ # @param args [String|Array<String>] See the description for calling style
168
+ # @return [Array<String, String, Hash>] target_name, command_name, parameters
169
+ def cmd_raw(*args)
170
+ cmd_implementation(true, true, true, 'cmd_raw', *args)
171
+ end
172
+
173
+ # Send a command packet to a target without performing any value range
174
+ # checks on the parameters or running conversions. Useful for testing to allow sending command
175
+ # parameters outside the allowable range as defined in the configuration.
176
+ #
177
+ # Accepts two different calling styles:
178
+ # cmd_raw_no_range_check("TGT CMD with PARAM1 val, PARAM2 val")
179
+ # cmd_raw_no_range_check('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
180
+ #
181
+ # Favor the first syntax where possible as it is more succinct.
182
+ #
183
+ # @param (see #cmd)
184
+ # @return (see #cmd)
185
+ def cmd_raw_no_range_check(*args)
186
+ cmd_implementation(false, true, true, 'cmd_raw_no_range_check', *args)
187
+ end
188
+
189
+ # Send a command packet to a target without running conversions or performing any hazardous checks
190
+ # both on the command itself and its parameters. Useful in scripts to
191
+ # prevent popping up warnings to the user.
192
+ #
193
+ # Accepts two different calling styles:
194
+ # cmd_raw_no_hazardous_check("TGT CMD with PARAM1 val, PARAM2 val")
195
+ # cmd_raw_no_hazardous_check('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
196
+ #
197
+ # Favor the first syntax where possible as it is more succinct.
198
+ #
199
+ # @param (see #cmd)
200
+ # @return (see #cmd)
201
+ def cmd_raw_no_hazardous_check(*args)
202
+ cmd_implementation(true, false, true, 'cmd_raw_no_hazardous_check', *args)
203
+ end
204
+
205
+ # Send a command packet to a target without running conversions or performing any value range
206
+ # checks or hazardous checks both on the command itself and its parameters.
207
+ #
208
+ # Accepts two different calling styles:
209
+ # cmd_raw_no_checks("TGT CMD with PARAM1 val, PARAM2 val")
210
+ # cmd_raw_no_checks('TGT','CMD','PARAM1'=>val,'PARAM2'=>val)
211
+ #
212
+ # Favor the first syntax where possible as it is more succinct.
213
+ #
214
+ # @param (see #cmd)
215
+ # @return (see #cmd)
216
+ def cmd_raw_no_checks(*args)
217
+ cmd_implementation(false, false, true, 'cmd_raw_no_checks', *args)
218
+ end
219
+
220
+ # Send a raw binary string to the specified interface.
221
+ #
222
+ # @param interface_name [String] The interface to send the raw binary
223
+ # @param data [String] The raw binary data
224
+ def send_raw(interface_name, data)
225
+ CmdTlmServer.commanding.send_raw(interface_name, data)
226
+ nil
227
+ end
228
+
229
+ # Returns the list of all the command names and their descriptions from the
230
+ # given target.
231
+ #
232
+ # @param target_name [String] Name of the target
233
+ # @return [Array<Array<String, String>>] Array containing \[command name,
234
+ # command description] for all commands in the target
235
+ def get_cmd_list(target_name)
236
+ list = []
237
+ System.commands.packets(target_name).each do |name, command|
238
+ list << [name, command.description]
239
+ end
240
+ return list.sort
241
+ end
242
+
243
+ # Returns the list of all the parameters for the given command.
244
+ #
245
+ # @param target_name (see #get_cmd_list)
246
+ # @param command_name [String] Name of the command
247
+ # @return [Array<Array<String, Object, nil|Array, nil|String, nil|String,
248
+ # nil|String, Boolean>] Array containing \[name, default, states,
249
+ # description, units_full, units, required] for all parameters in the
250
+ # command
251
+ def get_cmd_param_list(target_name, command_name)
252
+ list = []
253
+ System.commands.params(target_name, command_name).each do |parameter|
254
+ if parameter.format_string
255
+ unless parameter.default.kind_of?(Array)
256
+ list << [parameter.name, sprintf(parameter.format_string, parameter.default), parameter.states, parameter.description, parameter.units_full, parameter.units, parameter.required]
257
+ else
258
+ list << [parameter.name, "[]", parameter.states, parameter.description, parameter.units_full, parameter.units, parameter.required]
259
+ end
260
+ else
261
+ list << [parameter.name, parameter.default, parameter.states, parameter.description, parameter.units_full, parameter.units, parameter.required]
262
+ end
263
+ end
264
+ return list
265
+ end
266
+
267
+ # Returns whether the specified command is hazardous
268
+ #
269
+ # @param target_name (see #get_cmd_param_list)
270
+ # @param command_name (see #get_cmd_param_list)
271
+ # @param params [Hash] Command parameter hash to test whether a particular
272
+ # parameter setting makes the command hazardous
273
+ # @return [Boolean] Whether the command is hazardous
274
+ def get_cmd_hazardous(target_name, command_name, params = {})
275
+ hazardous, _ = System.commands.cmd_hazardous?(target_name, command_name, params)
276
+ return hazardous
277
+ end
278
+
279
+ # Returns a value from the specified command
280
+ #
281
+ # @param target_name [String] Target name of the command
282
+ # @param command_name [String] Packet name of the command
283
+ # @param parameter_name [String] Parameter name in the command
284
+ # @param value_type [Symbol] How the values should be converted. Must be
285
+ # one of {Packet::VALUE_TYPES}
286
+ # @return [Varies] value
287
+ def get_cmd_value(target_name, command_name, parameter_name, value_type = :CONVERTED)
288
+ packet = System.commands.packet(target_name, command_name)
289
+ # Virtually support RECEIVED_TIMEFORMATTED, RECEIVED_TIMESECONDS, RECEIVED_COUNT
290
+ case parameter_name.to_s.upcase
291
+ when 'RECEIVED_TIMEFORMATTED'
292
+ if packet.received_time
293
+ return packet.received_time.formatted
294
+ else
295
+ return 'No Packet Received Time'
296
+ end
297
+ when 'RECEIVED_TIMESECONDS'
298
+ if packet.received_time
299
+ return packet.received_time.to_f
300
+ else
301
+ return 0.0
302
+ end
303
+ when 'RECEIVED_COUNT'
304
+ return packet.received_count
305
+ else
306
+ return packet.read(parameter_name, value_type.intern)
307
+ end
308
+ end
309
+
310
+ # Returns the time the most recent command was sent
311
+ #
312
+ # @param target_name [String] Target name of the command. If not given then
313
+ # the most recent time from all commands will be returned
314
+ # @param command_name [String] Packet name of the command. If not given then
315
+ # then most recent time from the given target will be returned.
316
+ # @return [Array<Target Name, Command Name, Time Seconds, Time Microseconds>]
317
+ def get_cmd_time(target_name = nil, command_name = nil)
318
+ last_command = nil
319
+ if target_name
320
+ if command_name
321
+ last_command = System.commands.packet(target_name, command_name)
322
+ else
323
+ System.commands.packets(target_name).each do |packet_name, command|
324
+ last_command = command if !last_command and command.received_time
325
+ if command.received_time and command.received_time > last_command.received_time
326
+ last_command = command
327
+ end
328
+ end
329
+ end
330
+ else
331
+ commands = System.commands.all
332
+ commands.each do |target_name, target_commands|
333
+ target_commands.each do |packet_name, command|
334
+ last_command = command if !last_command and command.received_time
335
+ if command.received_time and command.received_time > last_command.received_time
336
+ last_command = command
337
+ end
338
+ end
339
+ end
340
+ end
341
+
342
+ if last_command
343
+ if last_command.received_time
344
+ return [last_command.target_name, last_command.packet_name, last_command.received_time.tv_sec, last_command.received_time.tv_usec]
345
+ else
346
+ return [last_command.target_name, last_command.packet_name, nil, nil]
347
+ end
348
+ else
349
+ return [nil, nil, nil, nil]
350
+ end
351
+ end
352
+
353
+ # Request a converted telemetry item from a packet.
354
+ #
355
+ # Accepts two different calling styles:
356
+ # tlm("TGT PKT ITEM")
357
+ # tlm('TGT','PKT','ITEM')
358
+ #
359
+ # Favor the first syntax where possible as it is more succinct.
360
+ #
361
+ # @param args [String|Array<String>] See the description for calling style
362
+ # @return [Numeric] The converted telemetry value without formatting or
363
+ # units
364
+ def tlm(*args)
365
+ target_name, packet_name, item_name = tlm_process_args(args, 'tlm')
366
+ System.telemetry.value(target_name, packet_name, item_name, :CONVERTED)
367
+ end
368
+
369
+ # Request a raw telemetry item from a packet.
370
+ #
371
+ # Accepts two different calling styles:
372
+ # tlm_raw("TGT PKT ITEM")
373
+ # tlm_raw('TGT','PKT','ITEM')
374
+ #
375
+ # Favor the first syntax where possible as it is more succinct.
376
+ #
377
+ # @param args (see #tlm)
378
+ # @return [Numeric] The unconverted telemetry value without formatting or
379
+ # units
380
+ def tlm_raw(*args)
381
+ target_name, packet_name, item_name = tlm_process_args(args, 'tlm_raw')
382
+ System.telemetry.value(target_name, packet_name, item_name, :RAW)
383
+ end
384
+
385
+ # Request a formatted telemetry item from a packet.
386
+ #
387
+ # Accepts two different calling styles:
388
+ # tlm_formatted("TGT PKT ITEM")
389
+ # tlm_formatted('TGT','PKT','ITEM')
390
+ #
391
+ # Favor the first syntax where possible as it is more succinct.
392
+ #
393
+ # @param args (see #tlm)
394
+ # @return [String] The converted telemetry value with formatting but
395
+ # without units
396
+ def tlm_formatted(*args)
397
+ target_name, packet_name, item_name = tlm_process_args(args, 'tlm_formatted')
398
+ System.telemetry.value(target_name, packet_name, item_name, :FORMATTED)
399
+ end
400
+
401
+ # Request a telemetry item with units from a packet.
402
+ #
403
+ # Accepts two different calling styles:
404
+ # tlm_with_units("TGT PKT ITEM")
405
+ # tlm_with_units('TGT','PKT','ITEM')
406
+ #
407
+ # Favor the first syntax where possible as it is more succinct.
408
+ #
409
+ # @param args (see #tlm)
410
+ # @return [String] The converted, formatted telemetry value with units
411
+ def tlm_with_units(*args)
412
+ target_name, packet_name, item_name = tlm_process_args(args, 'tlm_with_units')
413
+ System.telemetry.value(target_name, packet_name, item_name, :WITH_UNITS)
414
+ end
415
+
416
+ # Request a telemetry item from a packet with the specified conversion
417
+ # applied. This method is equivalent to calling the other tlm_xxx methods.
418
+ #
419
+ # Accepts two different calling styles:
420
+ # tlm_variable("TGT PKT ITEM", :RAW)
421
+ # tlm_variable('TGT','PKT','ITEM', :RAW)
422
+ #
423
+ # Favor the first syntax where possible as it is more succinct.
424
+ #
425
+ # @param args The args must either be a string followed by a symbol or
426
+ # three strings followed by a symbol (see the calling style in the
427
+ # description). The symbol must be one of {Packet::VALUE_TYPES}.
428
+ # @return [Object] The converted telemetry value
429
+ def tlm_variable(*args)
430
+ target_name, packet_name, item_name, value_type = tlm_variable_process_args(args, 'tlm_variable')
431
+ System.telemetry.value(target_name, packet_name, item_name, value_type)
432
+ end
433
+
434
+ # Set a telemetry item in a packet to a particular value and then verifies
435
+ # the value is within the acceptable limits. This method uses any
436
+ # conversions that apply to the item when setting the value.
437
+ #
438
+ # Note: If this is done while COSMOS is currently receiving telemetry,
439
+ # this value could get overwritten at any time. Thus this capability is
440
+ # best used for testing or for telemetry items that are not received
441
+ # regularly through the target interface.
442
+ #
443
+ # Accepts two different calling styles:
444
+ # set_tlm("TGT PKT ITEM = 1.0")
445
+ # set_tlm('TGT','PKT','ITEM', 10.0)
446
+ #
447
+ # Favor the first syntax where possible as it is more succinct.
448
+ #
449
+ # @param args The args must either be a string followed by a value or
450
+ # three strings followed by a value (see the calling style in the
451
+ # description).
452
+ def set_tlm(*args)
453
+ target_name, packet_name, item_name, value = set_tlm_process_args(args, 'set_tlm')
454
+ System.telemetry.set_value(target_name, packet_name, item_name, value, :CONVERTED)
455
+ System.telemetry.packet(target_name, packet_name).check_limits(System.limits_set, true)
456
+ nil
457
+ end
458
+
459
+ # Set a telemetry item in a packet to a particular value and then verifies
460
+ # the value is within the acceptable limits. No conversions are applied.
461
+ #
462
+ # Note: If this is done while COSMOS is currently receiving telemetry,
463
+ # this value could get overwritten at any time. Thus this capability is
464
+ # best used for testing or for telemetry items that are not received
465
+ # regularly through the target interface.
466
+ #
467
+ # Accepts two different calling styles:
468
+ # set_tlm_raw("TGT PKT ITEM = 1.0")
469
+ # set_tlm_raw('TGT','PKT','ITEM', 10.0)
470
+ #
471
+ # Favor the first syntax where possible as it is more succinct.
472
+ #
473
+ # @param args The args must either be a string followed by a value or
474
+ # three strings followed by a value (see the calling style in the
475
+ # description).
476
+ def set_tlm_raw(*args)
477
+ target_name, packet_name, item_name, value = set_tlm_process_args(args, 'set_tlm_raw')
478
+ System.telemetry.set_value(target_name, packet_name, item_name, value, :RAW)
479
+ System.telemetry.packet(target_name, packet_name).check_limits(System.limits_set, true)
480
+ nil
481
+ end
482
+
483
+ # Returns all the values (along with their limits state) for a packet.
484
+ #
485
+ # @param target_name [String] Name of the target
486
+ # @param packet_name [String] Name of the packet
487
+ # @param value_type [Symbol] How the values should be converted. Must be
488
+ # one of {Packet::VALUE_TYPES}
489
+ # @return (see Cosmos::Packet#read_all_with_limits_states)
490
+ def get_tlm_packet(target_name, packet_name, value_type = :CONVERTED)
491
+ packet = System.telemetry.packet(target_name, packet_name)
492
+ return packet.read_all_with_limits_states(value_type.to_s.intern)
493
+ end
494
+
495
+ # Returns all the item values (along with their limits state). The items
496
+ # can be from any target and packet and thus must be fully qualified with
497
+ # their target and packet names.
498
+ #
499
+ # @param (see Cosmos::Telemetry#values_and_limits_states)
500
+ # @return [Array< Array<Object>, Array<Symbol>, Array<Array<Numeric>>, String>]
501
+ # Array consisting of an Array of item values, an Array of item limits state
502
+ # given as symbols such as :RED, :YELLOW, :STALE, an Array of Arrays including
503
+ # the limits setting such as red low, yellow low, yellow high, red high and
504
+ # optionally green low and high, and the overall limits state which is
505
+ # one of {Cosmos::Limits::LIMITS_STATES}.
506
+ def get_tlm_values(item_array, value_types = :CONVERTED)
507
+ if !item_array.is_a?(Array) || (!item_array[0].is_a?(Array) and !item_array.empty?)
508
+ raise ArgumentError, "item_array must be nested array: [['TGT','PKT','ITEM'],...]"
509
+ end
510
+ return [[], [], [], System.limits_set] if item_array.empty?
511
+ if value_types.is_a?(Array)
512
+ elem = value_types[0]
513
+ else
514
+ elem = value_types
515
+ end
516
+ # Due to JSON round tripping from scripts, value_types can be a String
517
+ # so we must check for both Symbol and String
518
+ if !elem.is_a?(Symbol) && !elem.is_a?(String)
519
+ raise ArgumentError, "value_types must be a single symbol or array of symbols specifying the conversion method (:RAW, :CONVERTED, :FORMATTED, :WITH_UNITS)"
520
+ end
521
+ array = System.telemetry.values_and_limits_states(item_array, value_types)
522
+ array << System.limits_set
523
+ return array
524
+ end
525
+
526
+ # Returns the sorted packet names and their descriptions for a particular
527
+ # target.
528
+ #
529
+ # @param target_name (see #get_tlm_packet)
530
+ # @return [Array<String, String>] Array of \[packet name, packet
531
+ # description] sorted by packet name
532
+ def get_tlm_list(target_name)
533
+ list = []
534
+ packets = System.telemetry.packets(target_name)
535
+ packets.each do |packet_name, packet|
536
+ list << [packet_name, packet.description]
537
+ end
538
+ list.sort
539
+ end
540
+
541
+ # Returns the item names and their states and descriptions for a particular
542
+ # packet.
543
+ #
544
+ # @param target_name (see #get_tlm_packet)
545
+ # @param packet_name (see #get_tlm_packet)
546
+ # @return [Array<String, Hash, String>] Array of \[item name, item states,
547
+ # item description]
548
+ def get_tlm_item_list(target_name, packet_name)
549
+ list = []
550
+ System.telemetry.items(target_name, packet_name).each do |item|
551
+ list << [item.name, item.states, item.description]
552
+ end
553
+ list
554
+ end
555
+
556
+ # Returns an array of Hashes with all the attributes of the item.
557
+ #
558
+ # @param (see Cosmos::Telemetry#values_and_limits_states)
559
+ # @return [Array<Hash>] Array of hashes describing the items. All the
560
+ # attributes in {Cosmos::PacketItem} and {Cosmos::StructItem} are
561
+ # present in the Hash.
562
+ def get_tlm_details(item_array)
563
+ if !item_array.is_a?(Array) || !item_array[0].is_a?(Array)
564
+ raise ArgumentError, "item_array must be nested array: [['TGT','PKT','ITEM'],...]"
565
+ end
566
+ details = []
567
+ item_array.each do |target_name, packet_name, item_name|
568
+ _, item = System.telemetry.packet_and_item(target_name, packet_name, item_name)
569
+ details << item.to_hash
570
+ end
571
+ details
572
+ end
573
+
574
+ # (see Cosmos::Limits#out_of_limits)
575
+ def get_out_of_limits
576
+ return System.limits.out_of_limits
577
+ end
578
+
579
+ # (see Cosmos::Limits#overall_limits_state)
580
+ def get_overall_limits_state (ignored_items = nil)
581
+ return System.limits.overall_limits_state(ignored_items)
582
+ end
583
+
584
+ # Whether the limits are enabled for the given item
585
+ #
586
+ # Accepts two different calling styles:
587
+ # limits_enabled?("TGT PKT ITEM")
588
+ # limits_enabled?('TGT','PKT','ITEM')
589
+ #
590
+ # Favor the first syntax where possible as it is more succinct.
591
+ #
592
+ # @param args [String|Array<String>] See the description for calling style
593
+ # @return [Boolean] Whether limits are enable for the itme
594
+ def limits_enabled?(*args)
595
+ target_name, packet_name, item_name = tlm_process_args(args, 'limits_enabled?')
596
+ return System.limits.enabled?(target_name, packet_name, item_name)
597
+ end
598
+
599
+ # Enable limits checking for a telemetry item
600
+ #
601
+ # Accepts two different calling styles:
602
+ # enable_limits("TGT PKT ITEM")
603
+ # enable_limits('TGT','PKT','ITEM')
604
+ #
605
+ # Favor the first syntax where possible as it is more succinct.
606
+ #
607
+ # @param args [String|Array<String>] See the description for calling style
608
+ def enable_limits(*args)
609
+ target_name, packet_name, item_name = tlm_process_args(args, 'enable_limits')
610
+ System.limits.enable(target_name, packet_name, item_name)
611
+ nil
612
+ end
613
+
614
+ # Disable limit checking for a telemetry item
615
+ #
616
+ # Accepts two different calling styles:
617
+ # disable_limits("TGT PKT ITEM")
618
+ # disable_limits('TGT','PKT','ITEM')
619
+ #
620
+ # Favor the first syntax where possible as it is more succinct.
621
+ #
622
+ # @param args [String|Array<String>] See the description for calling style
623
+ def disable_limits(*args)
624
+ target_name, packet_name, item_name = tlm_process_args(args, 'disable_limits')
625
+ System.limits.disable(target_name, packet_name, item_name)
626
+ nil
627
+ end
628
+
629
+ # Get the list of stale packets for a specific target or pass nil to list
630
+ # all stale packets
631
+ #
632
+ # @param with_limits_only [Boolean] Return only the stale packets
633
+ # that have limits items and thus affect the overall limits
634
+ # state of the system
635
+ # @param target [String] The target to find stale packets for or nil to list
636
+ # all stale packets in the system
637
+ # @return [Array<Array<String, String>>] Array of arrays listing the target
638
+ # name and packet name
639
+ def get_stale(with_limits_only = false, target = nil)
640
+ stale = []
641
+ System.telemetry.stale(with_limits_only, target).each do |packet|
642
+ stale << [packet.target_name, packet.packet_name]
643
+ end
644
+ stale
645
+ end
646
+
647
+ # (see Cosmos::Limits#get)
648
+ def get_limits(target_name, packet_name, item_name, limits_set = nil)
649
+ System.limits.get(target_name, packet_name, item_name, limits_set)
650
+ end
651
+
652
+ # (see Cosmos::Limits#set)
653
+ def set_limits(target_name, packet_name, item_name, red_low, yellow_low, yellow_high, red_high, green_low = nil, green_high = nil, limits_set = :CUSTOM, persistence = nil, enabled = true)
654
+ result = System.limits.set(target_name, packet_name, item_name, red_low, yellow_low, yellow_high, red_high, green_low, green_high, limits_set, persistence, enabled)
655
+ if result[0] != nil
656
+ limits_settings = [target_name, packet_name, item_name].concat(result)
657
+ CmdTlmServer.instance.post_limits_event(:LIMITS_SETTINGS, limits_settings)
658
+ Logger.info("Limits Settings Changed: #{limits_settings}")
659
+ end
660
+ result
661
+ end
662
+
663
+ # (see Cosmos::Limits#groups)
664
+ def get_limits_groups
665
+ return System.limits.groups.keys
666
+ end
667
+
668
+ # (see Cosmos::Limits#enable_group)
669
+ def enable_limits_group(group_name)
670
+ System.limits.enable_group(group_name)
671
+ nil
672
+ end
673
+
674
+ # (see Cosmos::Limits#disable_group)
675
+ def disable_limits_group(group_name)
676
+ System.limits.disable_group(group_name)
677
+ nil
678
+ end
679
+
680
+ # Returns all defined limits sets
681
+ #
682
+ # @return [Array<Symbol>] All defined limits sets
683
+ def get_limits_sets
684
+ return System.limits.sets
685
+ end
686
+
687
+ # Changes the active limits set that applies to all telemetry
688
+ #
689
+ # @param limits_set [String] The name of the limits set
690
+ def set_limits_set(limits_set)
691
+ System.limits_set = limits_set if System.limits_set != limits_set.to_s.upcase.intern
692
+ end
693
+
694
+ # Returns the active limits set that applies to all telemetry
695
+ #
696
+ # @return [String] The current limits set
697
+ def get_limits_set
698
+ return System.limits_set.to_s
699
+ end
700
+
701
+ #
702
+ # General Purpose Methods
703
+ #
704
+
705
+ # Returns the list of all target names
706
+ #
707
+ # @return [Array<String>] All target names
708
+ def get_target_list
709
+ list = []
710
+ System.targets.each_key {|target_name| list << target_name }
711
+ return list.sort
712
+ end
713
+
714
+ # @see CmdTlmServer.subscribe_limits_events
715
+ def subscribe_limits_events(queue_size = CmdTlmServer::DEFAULT_LIMITS_EVENT_QUEUE_SIZE)
716
+ CmdTlmServer.subscribe_limits_events(queue_size)
717
+ end
718
+
719
+ # @see CmdTlmServer.unsubscribe_limits_events
720
+ def unsubscribe_limits_events(id)
721
+ CmdTlmServer.unsubscribe_limits_events(id)
722
+ end
723
+
724
+ # @see CmdTlmServer.get_limits_event
725
+ def get_limits_event(id, non_block = false)
726
+ CmdTlmServer.get_limits_event(id, non_block)
727
+ end
728
+
729
+ # @see CmdTlmServer.subscribe_packet_data
730
+ def subscribe_packet_data(packets,
731
+ queue_size = CmdTlmServer::DEFAULT_PACKET_DATA_QUEUE_SIZE)
732
+ CmdTlmServer.subscribe_packet_data(packets, queue_size)
733
+ end
734
+
735
+ # @see CmdTlmServer.unsubscribe_packet_data
736
+ def unsubscribe_packet_data(id)
737
+ CmdTlmServer.unsubscribe_packet_data(id)
738
+ end
739
+
740
+ # @see CmdTlmServer.get_packet_data
741
+ def get_packet_data(id, non_block = false)
742
+ CmdTlmServer.get_packet_data(id, non_block)
743
+ end
744
+
745
+ #
746
+ # Methods for scripting
747
+ #
748
+
749
+ # @return [Array<String>] All the interface names
750
+ def get_interface_names
751
+ CmdTlmServer.interfaces.names
752
+ end
753
+
754
+ # Connects to an interface and starts its telemetry gathering thread. If
755
+ # optional parameters are given, the interface is recreated with new
756
+ # parameters.
757
+ #
758
+ # @param interface_name [String] The name of the interface
759
+ # @param params [Array] Parameters to pass to the interface.
760
+ def connect_interface(interface_name, *params)
761
+ CmdTlmServer.interfaces.connect(interface_name, *params)
762
+ nil
763
+ end
764
+
765
+ # Disconnects from an interface and kills its telemetry gathering thread
766
+ #
767
+ # @param interface_name (see #connect_interface)
768
+ def disconnect_interface(interface_name)
769
+ CmdTlmServer.interfaces.disconnect(interface_name)
770
+ nil
771
+ end
772
+
773
+ # @param interface_name (see #connect_interface)
774
+ # @return [String] The state of the interface which is one of 'CONNECTED',
775
+ # 'ATTEMPTING' or 'DISCONNECTED'.
776
+ def interface_state(interface_name)
777
+ CmdTlmServer.interfaces.state(interface_name)
778
+ end
779
+
780
+ # Associates a target and all its commands and telemetry with a particular
781
+ # interface. All the commands will go out over and telemetry be received
782
+ # from that interface.
783
+ #
784
+ # @param target_name [String] The name of the target
785
+ # @param interface_name (see #connect_interface)
786
+ def map_target_to_interface(target_name, interface_name)
787
+ CmdTlmServer.interfaces.map_target(target_name, interface_name)
788
+ nil
789
+ end
790
+
791
+ # @return [Array<String>] All the router names
792
+ def get_router_names
793
+ CmdTlmServer.routers.names
794
+ end
795
+
796
+ # Connects a router and starts its command gathering thread. If
797
+ # optional parameters are given, the router is recreated with new
798
+ # parameters.
799
+ #
800
+ # @param router_name [String] The name of the router
801
+ # @param params [Array] Parameters to pass to the router.
802
+ def connect_router(router_name, *params)
803
+ CmdTlmServer.routers.connect(router_name, *params)
804
+ nil
805
+ end
806
+
807
+ # Disconnects a router and kills its command gathering thread
808
+ #
809
+ # @param router_name (see #connect_router)
810
+ def disconnect_router(router_name)
811
+ CmdTlmServer.routers.disconnect(router_name)
812
+ nil
813
+ end
814
+
815
+ # @param router_name (see #connect_router)
816
+ # @return [String] The state of the router which is one of 'CONNECTED',
817
+ # 'ATTEMPTING' or 'DISCONNECTED'.
818
+ def router_state(router_name)
819
+ CmdTlmServer.routers.state(router_name)
820
+ end
821
+
822
+ # @param packet_log_writer_name [String] The name of the packet log writer which
823
+ # is writing the command packet log
824
+ # @return [String] The command packet log filename
825
+ def get_cmd_log_filename(packet_log_writer_name = 'DEFAULT')
826
+ CmdTlmServer.packet_logging.cmd_filename(packet_log_writer_name)
827
+ end
828
+
829
+ # @param packet_log_writer_name [String] The name of the packet log writer which
830
+ # is writing the telemetry packet log
831
+ # @return [String] The telemetry packet log filename
832
+ def get_tlm_log_filename(packet_log_writer_name = 'DEFAULT')
833
+ CmdTlmServer.packet_logging.tlm_filename(packet_log_writer_name)
834
+ end
835
+
836
+ # Start both command and telemetry packet logging.
837
+ #
838
+ # @param packet_log_writer_name [String] The name of the packet log writer which
839
+ # is writing both the command and telemetry logs
840
+ # @param label [String] Optional label to apply to both the command and
841
+ # telemetry packet log filename
842
+ def start_logging(packet_log_writer_name = 'ALL', label = nil)
843
+ CmdTlmServer.packet_logging.start(packet_log_writer_name, label)
844
+ nil
845
+ end
846
+
847
+ # Stop both command and telemetry packet logging.
848
+ #
849
+ # @param packet_log_writer_name [String] The name of the packet log writer which
850
+ # is writing both the command and telemetry logs
851
+ def stop_logging(packet_log_writer_name = 'ALL')
852
+ CmdTlmServer.packet_logging.stop(packet_log_writer_name)
853
+ nil
854
+ end
855
+
856
+ # Start command packet logging.
857
+ #
858
+ # @param packet_log_writer_name [String] The name of the packet log writer which
859
+ # is writing the command logs
860
+ # @param label [String] Optional label to apply to the command packet log
861
+ # filename
862
+ def start_cmd_log(packet_log_writer_name = 'ALL', label = nil)
863
+ CmdTlmServer.packet_logging.start_cmd(packet_log_writer_name, label)
864
+ nil
865
+ end
866
+
867
+ # Start telemetry packet logging.
868
+ #
869
+ # @param packet_log_writer_name [String] The name of the packet log writer which
870
+ # is writing the telemetry logs
871
+ # @param label [String] Optional label to apply to the telemetry packet log
872
+ # filename
873
+ def start_tlm_log(packet_log_writer_name = 'ALL', label = nil)
874
+ CmdTlmServer.packet_logging.start_tlm(packet_log_writer_name, label)
875
+ nil
876
+ end
877
+
878
+ # Stop command packet logging.
879
+ #
880
+ # @param packet_log_writer_name [String] The name of the packet log writer which
881
+ # is writing the command log
882
+ def stop_cmd_log(packet_log_writer_name = 'ALL')
883
+ CmdTlmServer.packet_logging.stop_cmd(packet_log_writer_name)
884
+ nil
885
+ end
886
+
887
+ # Stop telemetry packet logging.
888
+ #
889
+ # @param packet_log_writer_name [String] The name of the packet log writer which
890
+ # is writing the telemetry log
891
+ def stop_tlm_log(packet_log_writer_name = 'ALL')
892
+ CmdTlmServer.packet_logging.stop_tlm(packet_log_writer_name)
893
+ nil
894
+ end
895
+
896
+ # Starts raw logging for an interface
897
+ #
898
+ # @param interface_name [String] The name of the interface
899
+ def start_raw_logging_interface(interface_name = 'ALL')
900
+ CmdTlmServer.interfaces.start_raw_logging(interface_name)
901
+ nil
902
+ end
903
+
904
+ # Stop raw logging for an interface
905
+ #
906
+ # @param interface_name [String] The name of the interface
907
+ def stop_raw_logging_interface(interface_name = 'ALL')
908
+ CmdTlmServer.interfaces.stop_raw_logging(interface_name)
909
+ nil
910
+ end
911
+
912
+ # Starts raw logging for a router
913
+ #
914
+ # @param router_name [String] The name of the router
915
+ def start_raw_logging_router(router_name = 'ALL')
916
+ CmdTlmServer.routers.start_raw_logging(router_name)
917
+ nil
918
+ end
919
+
920
+ # Stops raw logging for a router
921
+ #
922
+ # @param router_name [String] The name of the router
923
+ def stop_raw_logging_router(router_name = 'ALL')
924
+ CmdTlmServer.routers.stop_raw_logging(router_name)
925
+ nil
926
+ end
927
+
928
+ # @return [String] The server message log filename
929
+ def get_server_message_log_filename
930
+ CmdTlmServer.message_log.filename
931
+ end
932
+
933
+ # Starts a new server message log
934
+ def start_new_server_message_log
935
+ CmdTlmServer.message_log.start
936
+ nil
937
+ end
938
+
939
+ private
940
+
941
+ def cmd_implementation(range_check, hazardous_check, raw, method_name, *args)
942
+ case args.length
943
+ when 1
944
+ target_name, cmd_name, cmd_params = extract_fields_from_cmd_text(args[0])
945
+ when 2, 3
946
+ target_name = args[0]
947
+ cmd_name = args[1]
948
+ if args.length == 2
949
+ cmd_params = {}
950
+ else
951
+ cmd_params = args[2]
952
+ end
953
+ else
954
+ # Invalid number of arguments
955
+ raise "ERROR: Invalid number of arguments (#{args.length}) passed to #{method_name}()"
956
+ end
957
+
958
+ if hazardous_check
959
+ hazardous, hazardous_description = System.commands.cmd_hazardous?(target_name, cmd_name, cmd_params)
960
+ if hazardous
961
+ error = HazardousError.new
962
+ error.target_name = target_name
963
+ error.cmd_name = cmd_name
964
+ error.cmd_params = cmd_params
965
+ error.hazardous_description = hazardous_description
966
+ raise error
967
+ end
968
+ end
969
+
970
+ # Build the command
971
+ begin
972
+ command = System.commands.build_cmd(target_name, cmd_name, cmd_params, range_check, raw)
973
+ rescue Exception => e
974
+ Logger.error e.message
975
+ raise e
976
+ end
977
+
978
+ # Send the command
979
+ @disconnect = false unless defined? @disconnect
980
+ CmdTlmServer.commanding.send_command_to_target(target_name, command) unless @disconnect
981
+
982
+ [target_name, cmd_name, cmd_params]
983
+ end
984
+
985
+ def tlm_process_args(args, function_name)
986
+ case args.length
987
+ when 1
988
+ target_name, packet_name, item_name = extract_fields_from_tlm_text(args[0])
989
+ when 3
990
+ target_name = args[0]
991
+ packet_name = args[1]
992
+ item_name = args[2]
993
+ else
994
+ # Invalid number of arguments
995
+ raise "ERROR: Invalid number of arguments (#{args.length}) passed to #{function_name}()"
996
+ end
997
+ return [target_name, packet_name, item_name]
998
+ end
999
+
1000
+ def tlm_variable_process_args(args, function_name)
1001
+ case args.length
1002
+ when 2
1003
+ target_name, packet_name, item_name = extract_fields_from_tlm_text(args[0])
1004
+ value_type = args[1].to_s.intern
1005
+ when 4
1006
+ target_name = args[0]
1007
+ packet_name = args[1]
1008
+ item_name = args[2]
1009
+ value_type = args[3].to_s.intern
1010
+ else
1011
+ # Invalid number of arguments
1012
+ raise "ERROR: Invalid number of arguments (#{args.length}) passed to #{function_name}()"
1013
+ end
1014
+ return [target_name, packet_name, item_name, value_type]
1015
+ end
1016
+
1017
+ def set_tlm_process_args(args, function_name)
1018
+ case args.length
1019
+ when 1
1020
+ target_name, packet_name, item_name, value = extract_fields_from_set_tlm_text(args[0])
1021
+ when 4
1022
+ target_name = args[0]
1023
+ packet_name = args[1]
1024
+ item_name = args[2]
1025
+ value = args[3]
1026
+ else
1027
+ # Invalid number of arguments
1028
+ raise "ERROR: Invalid number of arguments (#{args.length}) passed to #{function_name}()"
1029
+ end
1030
+ return [target_name, packet_name, item_name, value]
1031
+ end
1032
+
1033
+ end # module Api
1034
+ end # module Cosmos