cosmos 3.5.1 → 3.5.2

Sign up to get free protection for your applications and to get access to all the features.
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