cosmos 3.5.1 → 3.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1158) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -1
  3. data/.gitattributes +3 -3
  4. data/.gitignore +48 -48
  5. data/.travis.yml +8 -8
  6. data/CONTRIBUTING.txt +50 -50
  7. data/Gemfile +10 -10
  8. data/Guardfile +27 -27
  9. data/LICENSE.txt +879 -879
  10. data/Manifest.txt +1414 -1414
  11. data/README.md +111 -111
  12. data/Rakefile +218 -214
  13. data/autohotkey/config/data/diamond.STL +57 -57
  14. data/autohotkey/config/system/system.txt +34 -34
  15. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  16. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  17. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  18. data/autohotkey/config/targets/COSMOS/target.txt +5 -5
  19. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  20. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -270
  21. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
  22. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
  23. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -305
  24. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
  25. data/autohotkey/config/targets/INST/screens/array.txt +7 -7
  26. data/autohotkey/config/targets/INST/screens/block.txt +8 -8
  27. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
  28. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
  29. data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
  30. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
  31. data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
  32. data/autohotkey/config/targets/INST/screens/image.txt +21 -21
  33. data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
  34. data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
  35. data/autohotkey/config/targets/INST/screens/other.txt +25 -25
  36. data/autohotkey/config/targets/INST/screens/params.txt +25 -25
  37. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
  38. data/autohotkey/config/targets/INST/target.txt +26 -26
  39. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  40. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
  41. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  42. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
  43. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
  44. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
  45. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
  46. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  47. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  48. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  49. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
  50. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  51. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  52. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  53. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  54. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  55. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  56. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  57. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  58. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
  59. data/autohotkey/config/tools/launcher/launcher.txt +38 -38
  60. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
  61. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
  62. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
  63. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
  64. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
  65. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
  66. data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
  67. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  68. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  69. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
  70. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
  71. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
  72. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
  73. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
  74. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
  75. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
  76. data/autohotkey/lib/example_background_task.rb +42 -42
  77. data/autohotkey/lib/user_version.rb +3 -3
  78. data/autohotkey/procedures/clear_util.rb +7 -7
  79. data/autohotkey/procedures/collect_util.rb +14 -14
  80. data/autohotkey/procedures/example_test.rb +67 -67
  81. data/autohotkey/procedures/example_test2.rb +74 -74
  82. data/autohotkey/procedures/script_test.rb +17 -17
  83. data/autohotkey/procedures/syntax_error.rb +18 -18
  84. data/autohotkey/tools/CmdExtractorAHK +16 -16
  85. data/autohotkey/tools/CmdSender +14 -14
  86. data/autohotkey/tools/CmdSenderAHK +18 -18
  87. data/autohotkey/tools/CmdTlmServer +14 -14
  88. data/autohotkey/tools/CmdTlmServerAHK +28 -28
  89. data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
  90. data/autohotkey/tools/DataViewer +14 -14
  91. data/autohotkey/tools/DataViewerAHK +17 -17
  92. data/autohotkey/tools/HandbookCreatorAHK +20 -20
  93. data/autohotkey/tools/LauncherAHK +17 -17
  94. data/autohotkey/tools/LimitsMonitorAHK +20 -20
  95. data/autohotkey/tools/OpenGLBuilderAHK +24 -24
  96. data/autohotkey/tools/PacketViewer +14 -14
  97. data/autohotkey/tools/PacketViewerAHK +18 -18
  98. data/autohotkey/tools/PacketViewerAHK2 +17 -17
  99. data/autohotkey/tools/Replay +14 -14
  100. data/autohotkey/tools/ReplayAHK +17 -17
  101. data/autohotkey/tools/ScriptRunner +14 -14
  102. data/autohotkey/tools/ScriptRunnerAHK +20 -20
  103. data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
  104. data/autohotkey/tools/TableManager +14 -14
  105. data/autohotkey/tools/TableManagerAHK +30 -30
  106. data/autohotkey/tools/TestRunner +15 -15
  107. data/autohotkey/tools/TestRunnerAHK +17 -17
  108. data/autohotkey/tools/TestRunnerAHK2 +17 -17
  109. data/autohotkey/tools/TestRunnerAHK3 +17 -17
  110. data/autohotkey/tools/TestRunnerAHK4 +17 -17
  111. data/autohotkey/tools/TestRunnerAHK5 +17 -17
  112. data/autohotkey/tools/TestRunnerAHK6 +17 -17
  113. data/autohotkey/tools/TlmExtractor +15 -15
  114. data/autohotkey/tools/TlmExtractorAHK +19 -19
  115. data/autohotkey/tools/TlmExtractorAHK2 +16 -16
  116. data/autohotkey/tools/TlmExtractorAHK3 +16 -16
  117. data/autohotkey/tools/TlmGrapher +14 -14
  118. data/autohotkey/tools/TlmGrapherAHK +19 -19
  119. data/autohotkey/tools/TlmGrapherAHK2 +23 -23
  120. data/autohotkey/tools/TlmGrapherAHK3 +17 -17
  121. data/autohotkey/tools/TlmGrapherAHK4 +17 -17
  122. data/autohotkey/tools/TlmViewer +14 -14
  123. data/autohotkey/tools/TlmViewerAHK +28 -28
  124. data/autohotkey/tools/TlmViewerAHK2 +22 -22
  125. data/autohotkey/tools/TlmViewerAHK3 +23 -23
  126. data/autohotkey/tools/TlmViewerAHK4 +22 -22
  127. data/autohotkey/tools/TlmViewerAHK5 +18 -18
  128. data/autohotkey/tools/autohotkey.rb +37 -37
  129. data/autohotkey/tools/cmd_extractor.ahk +33 -33
  130. data/autohotkey/tools/cmd_sender.ahk +182 -182
  131. data/autohotkey/tools/cmd_tlm_server.ahk +90 -90
  132. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
  133. data/autohotkey/tools/data_viewer.ahk +141 -141
  134. data/autohotkey/tools/handbook_creator.ahk +32 -32
  135. data/autohotkey/tools/launcher.ahk +41 -41
  136. data/autohotkey/tools/limits_monitor.ahk +123 -123
  137. data/autohotkey/tools/open_gl_builder.ahk +134 -134
  138. data/autohotkey/tools/packet_viewer.ahk +196 -196
  139. data/autohotkey/tools/packet_viewer2.ahk +9 -9
  140. data/autohotkey/tools/replay.ahk +104 -104
  141. data/autohotkey/tools/script_runner.ahk +589 -589
  142. data/autohotkey/tools/script_runner2.ahk +38 -38
  143. data/autohotkey/tools/table_manager.ahk +220 -220
  144. data/autohotkey/tools/test_runner.ahk +262 -262
  145. data/autohotkey/tools/test_runner2.ahk +53 -53
  146. data/autohotkey/tools/test_runner3.ahk +13 -13
  147. data/autohotkey/tools/test_runner5.ahk +8 -8
  148. data/autohotkey/tools/test_runner6.ahk +5 -5
  149. data/autohotkey/tools/tlm_extractor.ahk +296 -296
  150. data/autohotkey/tools/tlm_grapher.ahk +660 -660
  151. data/autohotkey/tools/tlm_grapher2.ahk +115 -115
  152. data/autohotkey/tools/tlm_grapher3.ahk +24 -24
  153. data/autohotkey/tools/tlm_viewer.ahk +133 -133
  154. data/autohotkey/tools/tlm_viewer2.ahk +50 -50
  155. data/autohotkey/tools/tlm_viewer4.ahk +4 -4
  156. data/autohotkey/tools/tlm_viewer5.ahk +20 -20
  157. data/bin/cosmos +96 -96
  158. data/bin/cstol_converter +1166 -1166
  159. data/bin/rubysloc +85 -85
  160. data/cosmos.gemspec +99 -99
  161. data/data/about.txt +4 -4
  162. data/data/crc.txt +326 -326
  163. data/data/diamond.STL +57 -57
  164. data/data/legal.txt +9 -9
  165. data/demo/Gemfile +10 -10
  166. data/demo/Launcher +16 -16
  167. data/demo/Launcher.bat +0 -0
  168. data/demo/Rakefile +77 -77
  169. data/demo/config/data/crc.txt +224 -226
  170. data/demo/config/data/diamond.STL +57 -57
  171. data/demo/config/data/meta_init.txt +4 -4
  172. data/demo/config/system/system.txt +35 -35
  173. data/demo/config/system/system2.txt +33 -33
  174. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  175. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  176. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  177. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
  178. data/demo/config/targets/COSMOS/screens/version.txt +19 -19
  179. data/demo/config/targets/COSMOS/target.txt +11 -11
  180. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
  181. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -5
  182. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
  183. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
  184. data/demo/config/targets/EXAMPLE/target.txt +6 -6
  185. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  186. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  187. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
  188. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
  189. data/demo/config/targets/INST/lib/sim_inst.rb +305 -305
  190. data/demo/config/targets/INST/screens/adcs.txt +46 -46
  191. data/demo/config/targets/INST/screens/array.txt +15 -15
  192. data/demo/config/targets/INST/screens/block.txt +8 -8
  193. data/demo/config/targets/INST/screens/commanding.txt +30 -30
  194. data/demo/config/targets/INST/screens/graphs.txt +14 -14
  195. data/demo/config/targets/INST/screens/ground.txt +25 -25
  196. data/demo/config/targets/INST/screens/hs.txt +44 -44
  197. data/demo/config/targets/INST/screens/latest.txt +23 -23
  198. data/demo/config/targets/INST/screens/other.txt +29 -29
  199. data/demo/config/targets/INST/screens/tabs.txt +70 -70
  200. data/demo/config/targets/INST/target.txt +33 -33
  201. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  202. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
  203. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  204. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
  205. data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
  206. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -13
  207. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
  208. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
  209. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +56 -56
  210. data/demo/config/targets/TEMPLATED/target.txt +6 -6
  211. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +39 -39
  212. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +34 -34
  213. data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
  214. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
  215. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -88
  216. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  217. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  218. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
  219. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  220. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  221. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  222. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  223. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  224. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  225. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -82
  226. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  227. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
  228. data/demo/config/tools/launcher/launcher.txt +45 -45
  229. data/demo/config/tools/launcher/launcher2.txt +45 -45
  230. data/demo/config/tools/script_runner/script_runner.txt +3 -3
  231. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
  232. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  233. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  234. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  235. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  236. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  237. data/demo/config/tools/test_runner/test_runner.txt +17 -17
  238. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  239. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  240. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  241. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  242. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
  243. data/demo/lib/example_background_task.rb +57 -57
  244. data/demo/lib/example_target.rb +113 -113
  245. data/demo/lib/scpi_target.rb +74 -74
  246. data/demo/lib/user_version.rb +3 -3
  247. data/demo/procedures/checks.rb +11 -11
  248. data/demo/procedures/clear_util.rb +7 -7
  249. data/demo/procedures/collect.rb +18 -18
  250. data/demo/procedures/collect_util.rb +14 -14
  251. data/demo/procedures/cosmos_api_test.rb +293 -293
  252. data/demo/procedures/disconnect.rb +29 -29
  253. data/demo/procedures/example_test.rb +183 -183
  254. data/demo/procedures/plot_test.rb +8 -8
  255. data/demo/procedures/run_example_test.rb +3 -3
  256. data/demo/procedures/test.rb +51 -51
  257. data/demo/tools/CmdExtractor +16 -16
  258. data/demo/tools/CmdExtractor.bat +0 -0
  259. data/demo/tools/CmdSender +16 -16
  260. data/demo/tools/CmdSender.bat +0 -0
  261. data/demo/tools/CmdTlmServer +16 -16
  262. data/demo/tools/CmdTlmServer.bat +0 -0
  263. data/demo/tools/DataViewer +16 -16
  264. data/demo/tools/DataViewer.bat +0 -0
  265. data/demo/tools/ExampleTarget +16 -16
  266. data/demo/tools/ExampleTarget.bat +0 -0
  267. data/demo/tools/HandbookCreator +16 -16
  268. data/demo/tools/HandbookCreator.bat +0 -0
  269. data/demo/tools/Launcher +16 -16
  270. data/demo/tools/Launcher.bat +0 -0
  271. data/demo/tools/LimitsMonitor +16 -16
  272. data/demo/tools/LimitsMonitor.bat +0 -0
  273. data/demo/tools/OpenGLBuilder +16 -16
  274. data/demo/tools/OpenGLBuilder.bat +0 -0
  275. data/demo/tools/PacketViewer +16 -16
  276. data/demo/tools/PacketViewer.bat +0 -0
  277. data/demo/tools/Replay +16 -16
  278. data/demo/tools/Replay.bat +0 -0
  279. data/demo/tools/ScpiTarget +16 -16
  280. data/demo/tools/ScpiTarget.bat +0 -0
  281. data/demo/tools/ScriptRunner +16 -16
  282. data/demo/tools/ScriptRunner.bat +0 -0
  283. data/demo/tools/TableManager +16 -16
  284. data/demo/tools/TableManager.bat +0 -0
  285. data/demo/tools/TestRunner +16 -16
  286. data/demo/tools/TestRunner.bat +0 -0
  287. data/demo/tools/TlmExtractor +16 -16
  288. data/demo/tools/TlmExtractor.bat +0 -0
  289. data/demo/tools/TlmGrapher +16 -16
  290. data/demo/tools/TlmGrapher.bat +0 -0
  291. data/demo/tools/TlmViewer +16 -16
  292. data/demo/tools/TlmViewer.bat +0 -0
  293. data/demo/tools/ToolLaunch.bat +14 -5
  294. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  295. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  296. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  297. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  298. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  299. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  300. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  301. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  302. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  303. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  304. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  305. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  306. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  307. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  308. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  309. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  310. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  311. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  312. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  313. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  314. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  315. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  316. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  317. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  318. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  319. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  320. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  321. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  322. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  323. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  324. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  325. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  326. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  327. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  328. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  329. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  330. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
  331. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  332. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  333. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  334. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  335. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  336. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  337. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  338. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  339. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  340. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  341. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  342. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  343. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  344. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  345. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  346. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  347. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  348. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  349. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  350. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  351. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  352. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  353. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  354. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  355. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  356. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  357. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  358. data/demo/tools/tool_launch.rb +38 -38
  359. data/ext/cosmos/ext/array/array.c +111 -111
  360. data/ext/cosmos/ext/array/extconf.rb +13 -13
  361. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
  362. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
  363. data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
  364. data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
  365. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
  366. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
  367. data/ext/cosmos/ext/crc/crc.c +341 -341
  368. data/ext/cosmos/ext/crc/extconf.rb +12 -12
  369. data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
  370. data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
  371. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
  372. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -265
  373. data/ext/cosmos/ext/packet/extconf.rb +13 -13
  374. data/ext/cosmos/ext/packet/packet.c +339 -339
  375. data/ext/cosmos/ext/platform/extconf.rb +13 -13
  376. data/ext/cosmos/ext/platform/platform.c +101 -101
  377. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
  378. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
  379. data/ext/cosmos/ext/string/extconf.rb +13 -13
  380. data/ext/cosmos/ext/string/string.c +49 -49
  381. data/ext/cosmos/ext/structure/structure.c +1428 -1428
  382. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
  383. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
  384. data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
  385. data/ext/cosmos/ext/telemetry/telemetry.c +307 -307
  386. data/ext/mkrf_conf.rb +40 -40
  387. data/install/Gemfile +10 -10
  388. data/install/Launcher +16 -16
  389. data/install/Launcher.bat +0 -0
  390. data/install/Rakefile +77 -77
  391. data/install/config/data/crc.txt +151 -151
  392. data/install/config/system/system.txt +29 -29
  393. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  394. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  395. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  396. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  397. data/install/config/targets/COSMOS/screens/version.txt +19 -19
  398. data/install/config/targets/COSMOS/target.txt +8 -8
  399. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  400. data/install/config/tools/data_viewer/data_viewer.txt +3 -3
  401. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
  402. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  403. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  404. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  405. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
  406. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  407. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  408. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  409. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  410. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  411. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  412. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  413. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  414. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
  415. data/install/config/tools/launcher/launcher.txt +40 -40
  416. data/install/config/tools/script_runner/script_runner.txt +3 -3
  417. data/install/config/tools/test_runner/test_runner.txt +8 -8
  418. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  419. data/install/lib/user_version.rb +3 -3
  420. data/install/tools/CmdExtractor +16 -16
  421. data/install/tools/CmdExtractor.bat +0 -0
  422. data/install/tools/CmdSender +16 -16
  423. data/install/tools/CmdSender.bat +0 -0
  424. data/install/tools/CmdTlmServer +16 -16
  425. data/install/tools/CmdTlmServer.bat +0 -0
  426. data/install/tools/DataViewer +16 -16
  427. data/install/tools/DataViewer.bat +0 -0
  428. data/install/tools/HandbookCreator +16 -16
  429. data/install/tools/HandbookCreator.bat +0 -0
  430. data/install/tools/Launcher +16 -16
  431. data/install/tools/Launcher.bat +0 -0
  432. data/install/tools/LimitsMonitor +16 -16
  433. data/install/tools/LimitsMonitor.bat +0 -0
  434. data/install/tools/OpenGLBuilder +16 -16
  435. data/install/tools/OpenGLBuilder.bat +0 -0
  436. data/install/tools/PacketViewer +16 -16
  437. data/install/tools/PacketViewer.bat +0 -0
  438. data/install/tools/Replay +16 -16
  439. data/install/tools/Replay.bat +0 -0
  440. data/install/tools/ScriptRunner +16 -16
  441. data/install/tools/ScriptRunner.bat +0 -0
  442. data/install/tools/TableManager +16 -16
  443. data/install/tools/TableManager.bat +0 -0
  444. data/install/tools/TestRunner +16 -16
  445. data/install/tools/TestRunner.bat +0 -0
  446. data/install/tools/TlmExtractor +16 -16
  447. data/install/tools/TlmExtractor.bat +0 -0
  448. data/install/tools/TlmGrapher +16 -16
  449. data/install/tools/TlmGrapher.bat +0 -0
  450. data/install/tools/TlmViewer +16 -16
  451. data/install/tools/TlmViewer.bat +0 -0
  452. data/install/tools/ToolLaunch.bat +14 -5
  453. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  454. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  455. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  456. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  457. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  458. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  459. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  460. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  461. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  462. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  463. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  464. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  465. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  466. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  467. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  468. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  469. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  470. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  471. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  472. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  473. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  474. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  475. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  476. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  477. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  478. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  479. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  480. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  481. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  482. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  483. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  484. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  485. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  486. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  487. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  488. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  489. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
  490. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  491. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  492. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  493. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  494. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  495. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  496. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  497. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  498. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  499. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  500. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  501. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  502. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  503. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  504. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  505. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  506. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  507. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  508. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  509. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  510. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  511. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  512. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  513. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  514. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  515. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  516. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  517. data/install/tools/tool_launch.rb +38 -38
  518. data/lib/cosmos.rb +63 -63
  519. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
  520. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
  521. data/lib/cosmos/config/config_parser.rb +324 -324
  522. data/lib/cosmos/conversions.rb +13 -13
  523. data/lib/cosmos/conversions/conversion.rb +47 -47
  524. data/lib/cosmos/conversions/generic_conversion.rb +55 -55
  525. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
  526. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
  527. data/lib/cosmos/conversions/processor_conversion.rb +46 -46
  528. data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
  529. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
  530. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
  531. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
  532. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
  533. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
  534. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
  535. data/lib/cosmos/core_ext.rb +18 -18
  536. data/lib/cosmos/core_ext/array.rb +354 -354
  537. data/lib/cosmos/core_ext/class.rb +51 -51
  538. data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
  539. data/lib/cosmos/core_ext/exception.rb +52 -52
  540. data/lib/cosmos/core_ext/file.rb +75 -75
  541. data/lib/cosmos/core_ext/hash.rb +28 -28
  542. data/lib/cosmos/core_ext/io.rb +75 -75
  543. data/lib/cosmos/core_ext/kernel.rb +38 -38
  544. data/lib/cosmos/core_ext/math.rb +119 -119
  545. data/lib/cosmos/core_ext/matrix.rb +146 -146
  546. data/lib/cosmos/core_ext/objectspace.rb +29 -29
  547. data/lib/cosmos/core_ext/range.rb +22 -22
  548. data/lib/cosmos/core_ext/socket.rb +32 -32
  549. data/lib/cosmos/core_ext/string.rb +311 -311
  550. data/lib/cosmos/core_ext/stringio.rb +24 -24
  551. data/lib/cosmos/core_ext/time.rb +448 -448
  552. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
  553. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
  554. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
  555. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
  556. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
  557. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -326
  558. data/lib/cosmos/gui/dialogs/about_dialog.rb +137 -137
  559. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
  560. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
  561. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
  562. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
  563. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
  564. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
  565. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +260 -260
  566. data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -169
  567. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
  568. data/lib/cosmos/gui/dialogs/progress_dialog.rb +276 -276
  569. data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -165
  570. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
  571. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
  572. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
  573. data/lib/cosmos/gui/dialogs/splash.rb +135 -135
  574. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
  575. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
  576. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
  577. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
  578. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +473 -473
  579. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
  580. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +451 -451
  581. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
  582. data/lib/cosmos/gui/line_graph/lines.rb +290 -290
  583. data/lib/cosmos/gui/line_graph/overview_graph.rb +469 -469
  584. data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
  585. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
  586. data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
  587. data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
  588. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
  589. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
  590. data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -724
  591. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
  592. data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
  593. data/lib/cosmos/gui/opengl/opengl.rb +8 -8
  594. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
  595. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
  596. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
  597. data/lib/cosmos/gui/qt.rb +860 -860
  598. data/lib/cosmos/gui/qt_tool.rb +380 -380
  599. data/lib/cosmos/gui/text/completion.rb +381 -381
  600. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
  601. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
  602. data/lib/cosmos/gui/text/ruby_editor.rb +415 -415
  603. data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
  604. data/lib/cosmos/gui/utilities/script_module_gui.rb +330 -330
  605. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
  606. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
  607. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
  608. data/lib/cosmos/interfaces.rb +11 -11
  609. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -153
  610. data/lib/cosmos/interfaces/interface.rb +225 -225
  611. data/lib/cosmos/interfaces/linc_interface.rb +360 -360
  612. data/lib/cosmos/interfaces/serial_interface.rb +76 -76
  613. data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -129
  614. data/lib/cosmos/interfaces/stream_interface.rb +136 -136
  615. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
  616. data/lib/cosmos/interfaces/tcpip_server_interface.rb +164 -164
  617. data/lib/cosmos/interfaces/udp_interface.rb +161 -161
  618. data/lib/cosmos/io/buffered_file.rb +11 -11
  619. data/lib/cosmos/io/cosmos_snmp.rb +50 -50
  620. data/lib/cosmos/io/io_multiplexer.rb +89 -89
  621. data/lib/cosmos/io/json_drb.rb +376 -376
  622. data/lib/cosmos/io/json_drb_object.rb +198 -198
  623. data/lib/cosmos/io/json_rpc.rb +365 -365
  624. data/lib/cosmos/io/posix_serial_driver.rb +145 -145
  625. data/lib/cosmos/io/raw_logger.rb +174 -174
  626. data/lib/cosmos/io/raw_logger_pair.rb +71 -71
  627. data/lib/cosmos/io/serial_driver.rb +85 -85
  628. data/lib/cosmos/io/stderr.rb +36 -36
  629. data/lib/cosmos/io/stdout.rb +36 -36
  630. data/lib/cosmos/io/tcpip_server.rb +571 -571
  631. data/lib/cosmos/io/udp_sockets.rb +152 -152
  632. data/lib/cosmos/io/win32_serial_driver.rb +145 -145
  633. data/lib/cosmos/packet_logs.rb +7 -7
  634. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -104
  635. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
  636. data/lib/cosmos/packet_logs/packet_log_reader.rb +450 -450
  637. data/lib/cosmos/packet_logs/packet_log_writer.rb +323 -323
  638. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
  639. data/lib/cosmos/packets/binary_accessor.rb +634 -634
  640. data/lib/cosmos/packets/commands.rb +293 -293
  641. data/lib/cosmos/packets/limits.rb +267 -267
  642. data/lib/cosmos/packets/limits_response.rb +38 -38
  643. data/lib/cosmos/packets/packet.rb +786 -786
  644. data/lib/cosmos/packets/packet_config.rb +482 -482
  645. data/lib/cosmos/packets/packet_item.rb +317 -317
  646. data/lib/cosmos/packets/packet_item_limits.rb +128 -128
  647. data/lib/cosmos/packets/parsers/format_string_parser.rb +58 -58
  648. data/lib/cosmos/packets/parsers/limits_parser.rb +146 -146
  649. data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -52
  650. data/lib/cosmos/packets/parsers/macro_parser.rb +116 -116
  651. data/lib/cosmos/packets/parsers/packet_item_parser.rb +215 -215
  652. data/lib/cosmos/packets/parsers/packet_parser.rb +123 -123
  653. data/lib/cosmos/packets/parsers/processor_parser.rb +63 -63
  654. data/lib/cosmos/packets/parsers/state_parser.rb +116 -116
  655. data/lib/cosmos/packets/structure.rb +458 -458
  656. data/lib/cosmos/packets/structure_item.rb +233 -233
  657. data/lib/cosmos/packets/telemetry.rb +350 -350
  658. data/lib/cosmos/processors.rb +6 -6
  659. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
  660. data/lib/cosmos/processors/processor.rb +71 -71
  661. data/lib/cosmos/processors/statistics_processor.rb +65 -65
  662. data/lib/cosmos/processors/watermark_processor.rb +44 -44
  663. data/lib/cosmos/script.rb +9 -9
  664. data/lib/cosmos/script/cmd_tlm_server.rb +110 -110
  665. data/lib/cosmos/script/commands.rb +184 -184
  666. data/lib/cosmos/script/extract.rb +123 -123
  667. data/lib/cosmos/script/limits.rb +114 -114
  668. data/lib/cosmos/script/script.rb +76 -76
  669. data/lib/cosmos/script/scripting.rb +897 -897
  670. data/lib/cosmos/script/telemetry.rb +174 -174
  671. data/lib/cosmos/script/tools.rb +138 -138
  672. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
  673. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
  674. data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
  675. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
  676. data/lib/cosmos/streams/serial_stream.rb +157 -157
  677. data/lib/cosmos/streams/stream.rb +63 -63
  678. data/lib/cosmos/streams/stream_protocol.rb +373 -373
  679. data/lib/cosmos/streams/tcpip_client_stream.rb +113 -113
  680. data/lib/cosmos/streams/tcpip_socket_stream.rb +143 -143
  681. data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
  682. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
  683. data/lib/cosmos/system.rb +4 -4
  684. data/lib/cosmos/system/system.rb +618 -618
  685. data/lib/cosmos/system/target.rb +197 -197
  686. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +255 -255
  687. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +717 -717
  688. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
  689. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
  690. data/lib/cosmos/tools/cmd_tlm_server/api.rb +1034 -1034
  691. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
  692. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -67
  693. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +515 -515
  694. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +253 -253
  695. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +408 -408
  696. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
  697. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -175
  698. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +200 -200
  699. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -176
  700. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +150 -150
  701. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +244 -244
  702. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +90 -90
  703. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +266 -266
  704. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
  705. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
  706. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
  707. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
  708. data/lib/cosmos/tools/data_viewer/data_viewer.rb +621 -621
  709. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +134 -134
  710. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
  711. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -156
  712. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -382
  713. data/lib/cosmos/tools/launcher/launcher.rb +188 -188
  714. data/lib/cosmos/tools/launcher/launcher_config.rb +256 -256
  715. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -40
  716. data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -116
  717. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +837 -837
  718. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
  719. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
  720. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +542 -542
  721. data/lib/cosmos/tools/replay/replay.rb +501 -501
  722. data/lib/cosmos/tools/replay/replay_server.rb +91 -91
  723. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -147
  724. data/lib/cosmos/tools/script_runner/script_runner.rb +922 -922
  725. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
  726. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1798 -1798
  727. data/lib/cosmos/tools/table_manager/table.rb +70 -70
  728. data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
  729. data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
  730. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
  731. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
  732. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
  733. data/lib/cosmos/tools/test_runner/test.rb +539 -539
  734. data/lib/cosmos/tools/test_runner/test_runner.rb +1189 -1189
  735. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -341
  736. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
  737. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1016 -1016
  738. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
  739. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
  740. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
  741. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
  742. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -95
  743. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
  744. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +181 -181
  745. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
  746. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
  747. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -174
  748. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -193
  749. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +407 -407
  750. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
  751. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
  752. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -323
  753. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
  754. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
  755. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
  756. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
  757. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
  758. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
  759. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
  760. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
  761. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
  762. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
  763. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
  764. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -1291
  765. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
  766. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
  767. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -114
  768. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
  769. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -78
  770. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
  771. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
  772. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
  773. data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -486
  774. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +561 -561
  775. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +290 -290
  776. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
  777. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
  778. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -66
  779. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -57
  780. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
  781. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
  782. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
  783. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
  784. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
  785. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
  786. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
  787. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
  788. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
  789. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
  790. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
  791. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
  792. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
  793. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
  794. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
  795. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
  796. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
  797. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
  798. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
  799. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
  800. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
  801. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
  802. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
  803. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
  804. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
  805. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
  806. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
  807. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
  808. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
  809. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
  810. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
  811. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
  812. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
  813. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
  814. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
  815. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
  816. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
  817. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
  818. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
  819. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
  820. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
  821. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
  822. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
  823. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
  824. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
  825. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
  826. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
  827. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
  828. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
  829. data/lib/cosmos/top_level.rb +759 -759
  830. data/lib/cosmos/utilities.rb +11 -11
  831. data/lib/cosmos/utilities/crc.rb +166 -166
  832. data/lib/cosmos/utilities/csv.rb +83 -83
  833. data/lib/cosmos/utilities/logger.rb +137 -137
  834. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
  835. data/lib/cosmos/utilities/message_log.rb +79 -79
  836. data/lib/cosmos/utilities/quaternion.rb +258 -258
  837. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
  838. data/lib/cosmos/utilities/simulated_target.rb +99 -99
  839. data/lib/cosmos/utilities/sleeper.rb +44 -44
  840. data/lib/cosmos/version.rb +12 -12
  841. data/lib/cosmos/win32/excel.rb +66 -66
  842. data/lib/cosmos/win32/win32.rb +387 -387
  843. data/lib/cosmos/win32/win32_main.rb +321 -321
  844. data/roodi.yml +24 -24
  845. data/run_gui_tests.bat +0 -0
  846. data/spec/ccsds/ccsds_packet_spec.rb +67 -67
  847. data/spec/ccsds/ccsds_parser_spec.rb +148 -148
  848. data/spec/config/config_parser_spec.rb +322 -322
  849. data/spec/conversions/conversion_spec.rb +31 -31
  850. data/spec/conversions/generic_conversion_spec.rb +45 -45
  851. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
  852. data/spec/conversions/polynomial_conversion_spec.rb +40 -40
  853. data/spec/conversions/processor_conversion_spec.rb +45 -45
  854. data/spec/conversions/received_count_conversion_spec.rb +43 -43
  855. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
  856. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
  857. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
  858. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
  859. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
  860. data/spec/core_ext/array_spec.rb +186 -186
  861. data/spec/core_ext/class_spec.rb +36 -36
  862. data/spec/core_ext/cosmos_io_spec.rb +77 -77
  863. data/spec/core_ext/exception_spec.rb +91 -91
  864. data/spec/core_ext/file_spec.rb +72 -72
  865. data/spec/core_ext/hash_spec.rb +24 -24
  866. data/spec/core_ext/io_spec.rb +46 -46
  867. data/spec/core_ext/kernel_spec.rb +54 -54
  868. data/spec/core_ext/math_spec.rb +116 -116
  869. data/spec/core_ext/matrix_spec.rb +66 -66
  870. data/spec/core_ext/objectspace_spec.rb +29 -29
  871. data/spec/core_ext/range_spec.rb +21 -21
  872. data/spec/core_ext/socket_spec.rb +32 -32
  873. data/spec/core_ext/string_spec.rb +223 -223
  874. data/spec/core_ext/stringio_spec.rb +21 -21
  875. data/spec/core_ext/time_spec.rb +202 -202
  876. data/spec/gui/line_graph/line_clip_spec.rb +322 -322
  877. data/spec/gui/qt_spec.rb +102 -102
  878. data/spec/install/config/system/system.txt +33 -33
  879. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  880. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  881. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  882. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  883. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
  884. data/spec/install/config/targets/COSMOS/target.txt +5 -5
  885. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
  886. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
  887. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
  888. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
  889. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
  890. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -305
  891. data/spec/install/config/targets/INST/target.txt +10 -10
  892. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
  893. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
  894. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  895. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
  896. data/spec/interfaces/interface_spec.rb +130 -130
  897. data/spec/interfaces/linc_interface_spec.rb +259 -259
  898. data/spec/interfaces/serial_interface_spec.rb +56 -56
  899. data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
  900. data/spec/interfaces/stream_interface_spec.rb +157 -157
  901. data/spec/interfaces/tcpip_client_interface_spec.rb +55 -55
  902. data/spec/interfaces/tcpip_server_interface_spec.rb +160 -160
  903. data/spec/interfaces/udp_interface_spec.rb +175 -175
  904. data/spec/io/buffered_file_spec.rb +113 -113
  905. data/spec/io/io_multiplexer_spec.rb +94 -94
  906. data/spec/io/json_drb_object_spec.rb +119 -119
  907. data/spec/io/json_drb_spec.rb +311 -311
  908. data/spec/io/json_rpc_spec.rb +264 -264
  909. data/spec/io/raw_logger_pair_spec.rb +76 -76
  910. data/spec/io/raw_logger_spec.rb +133 -133
  911. data/spec/io/serial_driver_spec.rb +60 -60
  912. data/spec/io/stderr_spec.rb +32 -32
  913. data/spec/io/stdout_spec.rb +32 -32
  914. data/spec/io/tcpip_server_spec.rb +338 -338
  915. data/spec/io/udp_sockets_spec.rb +94 -94
  916. data/spec/io/win32_serial_driver_spec.rb +88 -88
  917. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
  918. data/spec/packet_logs/packet_log_reader_spec.rb +468 -468
  919. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
  920. data/spec/packet_logs/packet_log_writer_spec.rb +225 -225
  921. data/spec/packets/binary_accessor_spec.rb +2326 -2326
  922. data/spec/packets/commands_spec.rb +369 -369
  923. data/spec/packets/limits_response_spec.rb +25 -25
  924. data/spec/packets/limits_spec.rb +344 -344
  925. data/spec/packets/packet_config_spec.rb +805 -805
  926. data/spec/packets/packet_item_limits_spec.rb +161 -161
  927. data/spec/packets/packet_item_spec.rb +386 -386
  928. data/spec/packets/packet_spec.rb +1317 -1317
  929. data/spec/packets/parsers/format_string_parser_spec.rb +122 -122
  930. data/spec/packets/parsers/limits_parser_spec.rb +282 -282
  931. data/spec/packets/parsers/limits_response_parser_spec.rb +149 -149
  932. data/spec/packets/parsers/macro_parser_spec.rb +212 -212
  933. data/spec/packets/parsers/packet_item_parser_spec.rb +306 -306
  934. data/spec/packets/parsers/packet_parser_spec.rb +99 -99
  935. data/spec/packets/parsers/processor_parser_spec.rb +114 -114
  936. data/spec/packets/parsers/state_parser_spec.rb +156 -156
  937. data/spec/packets/structure_item_spec.rb +195 -195
  938. data/spec/packets/structure_spec.rb +565 -565
  939. data/spec/packets/telemetry_spec.rb +578 -578
  940. data/spec/processors/new_packet_log_processor_spec.rb +39 -39
  941. data/spec/processors/processor_spec.rb +55 -55
  942. data/spec/processors/statistics_processor_spec.rb +60 -60
  943. data/spec/processors/watermark_processor_spec.rb +51 -51
  944. data/spec/script/cmd_tlm_server_spec.rb +110 -110
  945. data/spec/script/commands_disconnect_spec.rb +270 -270
  946. data/spec/script/commands_spec.rb +302 -302
  947. data/spec/script/limits_spec.rb +153 -153
  948. data/spec/script/script_spec.rb +86 -86
  949. data/spec/script/scripting_spec.rb +440 -440
  950. data/spec/script/telemetry_spec.rb +165 -165
  951. data/spec/script/tools_spec.rb +117 -117
  952. data/spec/spec_helper.rb +190 -190
  953. data/spec/streams/burst_stream_protocol_spec.rb +32 -32
  954. data/spec/streams/fixed_stream_protocol_spec.rb +113 -113
  955. data/spec/streams/length_stream_protocol_spec.rb +300 -300
  956. data/spec/streams/preidentified_stream_protocol_spec.rb +121 -121
  957. data/spec/streams/serial_stream_spec.rb +117 -117
  958. data/spec/streams/stream_protocol_spec.rb +346 -346
  959. data/spec/streams/stream_spec.rb +30 -30
  960. data/spec/streams/tcpip_client_stream_spec.rb +57 -57
  961. data/spec/streams/tcpip_socket_stream_spec.rb +193 -193
  962. data/spec/streams/template_stream_protocol_spec.rb +156 -156
  963. data/spec/streams/terminated_stream_protocol_spec.rb +127 -127
  964. data/spec/system/system_spec.rb +665 -665
  965. data/spec/system/target_spec.rb +250 -250
  966. data/spec/tools/cmd_tlm_server/api_spec.rb +1117 -1117
  967. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
  968. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
  969. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +453 -453
  970. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
  971. data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -151
  972. data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -235
  973. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
  974. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -252
  975. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
  976. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +151 -151
  977. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -223
  978. data/spec/tools/launcher/launcher_config_spec.rb +464 -464
  979. data/spec/top_level/top_level_spec.rb +334 -334
  980. data/spec/utilities/crc_spec.rb +45 -45
  981. data/spec/utilities/csv_spec.rb +97 -97
  982. data/spec/utilities/logger_spec.rb +102 -102
  983. data/spec/utilities/message_log_spec.rb +89 -89
  984. data/spec/utilities/quaternion_spec.rb +107 -107
  985. data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
  986. data/tasks/manifest.rake +22 -22
  987. data/tasks/spec.rake +23 -23
  988. data/test/benchmarks/binary_accessor_benchmark.rb +14 -14
  989. data/test/benchmarks/gsub_benchmark.rb +152 -152
  990. data/test/benchmarks/is_a_benchmark.rb +34 -34
  991. data/test/performance/PACKETS.bat +0 -0
  992. data/test/performance/Rakefile +77 -77
  993. data/test/performance/THREADS.bat +0 -0
  994. data/test/performance/config/data/crc.txt +196 -196
  995. data/test/performance/config/data/diamond.STL +57 -57
  996. data/test/performance/config/data/meta_init.txt +4 -4
  997. data/test/performance/config/system/system_packets.txt +39 -39
  998. data/test/performance/config/system/system_threads.txt +59 -59
  999. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -46
  1000. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  1001. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  1002. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -20
  1003. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -19
  1004. data/test/performance/config/targets/COSMOS/target.txt +11 -11
  1005. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -20
  1006. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -98
  1007. data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -6
  1008. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -22
  1009. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -24
  1010. data/test/performance/config/targets/PACKET/screens/status.txt +25 -25
  1011. data/test/performance/config/targets/PACKET/target.txt +28 -28
  1012. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -12
  1013. data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -17
  1014. data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -18
  1015. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -6
  1016. data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -22
  1017. data/test/performance/config/targets/THREAD/screens/status.txt +25 -25
  1018. data/test/performance/config/targets/THREAD/target.txt +6 -6
  1019. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -28
  1020. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -68
  1021. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -11
  1022. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -66
  1023. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  1024. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  1025. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  1026. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -25
  1027. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  1028. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  1029. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  1030. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  1031. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  1032. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  1033. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  1034. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  1035. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -1
  1036. data/test/performance/config/tools/launcher/launcher_packets.txt +34 -34
  1037. data/test/performance/config/tools/launcher/launcher_threads.txt +83 -83
  1038. data/test/performance/config/tools/script_runner/script_runner.txt +3 -3
  1039. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -8
  1040. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  1041. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  1042. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  1043. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  1044. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  1045. data/test/performance/config/tools/test_runner/test_runner.txt +17 -17
  1046. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  1047. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  1048. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  1049. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  1050. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -204
  1051. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -13
  1052. data/test/performance/lib/packet_target.rb +126 -126
  1053. data/test/performance/lib/thread_target.rb +120 -120
  1054. data/test/performance/lib/user_version.rb +3 -3
  1055. data/test/performance/procedures/checks.rb +11 -11
  1056. data/test/performance/procedures/clear_util.rb +7 -7
  1057. data/test/performance/procedures/collect.rb +18 -18
  1058. data/test/performance/procedures/collect_util.rb +14 -14
  1059. data/test/performance/procedures/cosmos_api_test.rb +293 -293
  1060. data/test/performance/procedures/disconnect.rb +29 -29
  1061. data/test/performance/procedures/example_test.rb +182 -182
  1062. data/test/performance/procedures/plot_test.rb +8 -8
  1063. data/test/performance/procedures/procedure.rb +2 -2
  1064. data/test/performance/procedures/run_example_test.rb +3 -3
  1065. data/test/performance/procedures/test.rb +51 -51
  1066. data/test/performance/tools/CmdExtractor +14 -14
  1067. data/test/performance/tools/CmdExtractor.bat +0 -0
  1068. data/test/performance/tools/CmdSender +14 -14
  1069. data/test/performance/tools/CmdSender.bat +0 -0
  1070. data/test/performance/tools/CmdTlmServer +16 -16
  1071. data/test/performance/tools/CmdTlmServer.bat +0 -0
  1072. data/test/performance/tools/CmdTlmServerMemProf +20 -20
  1073. data/test/performance/tools/CmdTlmServerMemProf.bat +0 -0
  1074. data/test/performance/tools/DataViewer +14 -14
  1075. data/test/performance/tools/DataViewer.bat +0 -0
  1076. data/test/performance/tools/HandbookCreator +14 -14
  1077. data/test/performance/tools/HandbookCreator.bat +0 -0
  1078. data/test/performance/tools/Launcher +14 -14
  1079. data/test/performance/tools/Launcher.bat +0 -0
  1080. data/test/performance/tools/LimitsMonitor +14 -14
  1081. data/test/performance/tools/LimitsMonitor.bat +0 -0
  1082. data/test/performance/tools/OpenGLBuilder +14 -14
  1083. data/test/performance/tools/OpenGLBuilder.bat +0 -0
  1084. data/test/performance/tools/PacketTarget +14 -14
  1085. data/test/performance/tools/PacketTarget.bat +0 -0
  1086. data/test/performance/tools/PacketViewer +14 -14
  1087. data/test/performance/tools/PacketViewer.bat +0 -0
  1088. data/test/performance/tools/Replay +14 -14
  1089. data/test/performance/tools/Replay.bat +0 -0
  1090. data/test/performance/tools/ScpiTarget +14 -14
  1091. data/test/performance/tools/ScpiTarget.bat +0 -0
  1092. data/test/performance/tools/ScriptRunner +14 -14
  1093. data/test/performance/tools/ScriptRunner.bat +0 -0
  1094. data/test/performance/tools/TableManager +14 -14
  1095. data/test/performance/tools/TableManager.bat +0 -0
  1096. data/test/performance/tools/TestRunner +14 -14
  1097. data/test/performance/tools/TestRunner.bat +0 -0
  1098. data/test/performance/tools/ThreadTarget +14 -14
  1099. data/test/performance/tools/ThreadTarget.bat +0 -0
  1100. data/test/performance/tools/TlmExtractor +14 -14
  1101. data/test/performance/tools/TlmExtractor.bat +0 -0
  1102. data/test/performance/tools/TlmGrapher +14 -14
  1103. data/test/performance/tools/TlmGrapher.bat +0 -0
  1104. data/test/performance/tools/TlmGrapherMemProf +19 -19
  1105. data/test/performance/tools/TlmGrapherMemProf.bat +0 -0
  1106. data/test/performance/tools/TlmViewer +14 -14
  1107. data/test/performance/tools/TlmViewer.bat +0 -0
  1108. data/test/performance/tools/TlmViewerMemProf +19 -19
  1109. data/test/performance/tools/TlmViewerMemProf.bat +0 -0
  1110. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  1111. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  1112. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  1113. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  1114. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  1115. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  1116. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  1117. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  1118. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  1119. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  1120. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  1121. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  1122. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  1123. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  1124. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  1125. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  1126. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  1127. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  1128. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  1129. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  1130. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  1131. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  1132. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  1133. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  1134. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  1135. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  1136. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  1137. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -38
  1138. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  1139. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  1140. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  1141. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  1142. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  1143. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  1144. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  1145. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  1146. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  1147. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  1148. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  1149. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  1150. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  1151. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  1152. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  1153. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  1154. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  1155. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  1156. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  1157. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  1158. metadata +3 -3
@@ -1,805 +1,805 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'spec_helper'
12
- require 'cosmos'
13
- require 'cosmos/packets/packet_config'
14
- require 'tempfile'
15
-
16
- module Cosmos
17
-
18
- describe PacketConfig do
19
-
20
- describe "process_file" do
21
- before(:each) do
22
- @pc = PacketConfig.new
23
- end
24
-
25
- it "complains about unknown keywords" do
26
- tf = Tempfile.new('unittest')
27
- tf.puts("BLAH")
28
- tf.close
29
- expect { @pc.process_file(tf.path, 'SYSTEM') }.to raise_error(ConfigParser::Error, "Unknown keyword 'BLAH'")
30
- tf.unlink
31
- end
32
-
33
- context "with all telemetry keywords" do
34
- before(:all) do
35
- # top level keywords
36
- @top_keywords = %w(SELECT_COMMAND SELECT_TELEMETRY LIMITS_GROUP LIMITS_GROUP_ITEM)
37
- # Keywords that require a current packet from TELEMETRY keyword
38
- @tlm_keywords = %w(SELECT_ITEM ITEM ID_ITEM ARRAY_ITEM APPEND_ITEM APPEND_ID_ITEM APPEND_ARRAY_ITEM PROCESSOR META)
39
- # Keywords that require both a current packet and current item
40
- @item_keywords = %w(STATE READ_CONVERSION WRITE_CONVERSION POLY_READ_CONVERSION POLY_WRITE_CONVERSION SEG_POLY_READ_CONVERSION SEG_POLY_WRITE_CONVERSION GENERIC_READ_CONVERSION_START GENERIC_WRITE_CONVERSION_START LIMITS LIMITS_RESPONSE UNITS FORMAT_STRING DESCRIPTION META)
41
- end
42
-
43
- it "complains if a current packet is not defined" do
44
- # Check for missing TELEMETRY line
45
- @tlm_keywords.each do |keyword|
46
- tf = Tempfile.new('unittest')
47
- tf.puts(keyword)
48
- tf.close
49
- expect { @pc.process_file(tf.path, "SYSTEM") }.to raise_error(ConfigParser::Error, "No current packet for #{keyword}")
50
- tf.unlink
51
- end # end for each tlm_keywords
52
- end
53
-
54
- it "complains if a current item is not defined" do
55
- # Check for missing ITEM definitions
56
- @item_keywords.each do |keyword|
57
- next if %w(META).include? keyword
58
- tf = Tempfile.new('unittest')
59
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
60
- tf.puts keyword
61
- tf.close
62
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "No current item for #{keyword}")
63
- tf.unlink
64
- end
65
- end
66
-
67
- it "complains if there are not enough parameters" do
68
- @top_keywords.each do |keyword|
69
- tf = Tempfile.new('unittest')
70
- tf.puts(keyword)
71
- tf.close
72
- expect { @pc.process_file(tf.path, "SYSTEM") }.to raise_error(ConfigParser::Error, /Not enough parameters for #{keyword}/)
73
- tf.unlink
74
- end
75
-
76
- @tlm_keywords.each do |keyword|
77
- tf = Tempfile.new('unittest')
78
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
79
- tf.puts keyword
80
- tf.close
81
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Not enough parameters for #{keyword}/)
82
- tf.unlink
83
- end
84
-
85
- @item_keywords.each do |keyword|
86
- next if %w(GENERIC_READ_CONVERSION_START GENERIC_WRITE_CONVERSION_START).include? keyword
87
- tf = Tempfile.new('unittest')
88
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
89
- tf.puts 'ITEM myitem 0 8 UINT "Test Item"'
90
- tf.puts keyword
91
- tf.close
92
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Not enough parameters for #{keyword}/)
93
- tf.unlink
94
- end
95
- end
96
-
97
- it "complains if there are too many parameters" do
98
- @top_keywords.each do |keyword|
99
- tf = Tempfile.new('unittest')
100
- case keyword
101
- when "SELECT_COMMAND"
102
- tf.puts 'SELECT_COMMAND tgt1 pkt1 extra'
103
- when "SELECT_TELEMETRY"
104
- tf.puts 'SELECT_TELEMETRY tgt1 pkt1 extra'
105
- when 'LIMITS_GROUP'
106
- tf.puts "LIMITS_GROUP name extra"
107
- when 'LIMITS_GROUP_ITEM'
108
- tf.puts "LIMITS_GROUP_ITEM target packet item extra"
109
- end
110
- tf.close
111
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Too many parameters for #{keyword}/)
112
- tf.unlink
113
- end
114
-
115
- @tlm_keywords.each do |keyword|
116
- next if %w(PROCESSOR META).include? keyword
117
- tf = Tempfile.new('unittest')
118
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
119
- case keyword
120
- when "ITEM"
121
- tf.puts 'ITEM myitem 0 8 UINT "Test Item" BIG_ENDIAN extra'
122
- when "APPEND_ITEM"
123
- tf.puts 'APPEND_ITEM myitem 8 UINT "Test Item" BIG_ENDIAN extra'
124
- when "ID_ITEM"
125
- tf.puts 'ID_ITEM myitem 0 8 UINT 1 "Test Item id=1" LITTLE_ENDIAN extra'
126
- when "APPEND_ID_ITEM"
127
- tf.puts 'APPEND_ID_ITEM myitem 8 UINT 1 "Test Item id=1" BIG_ENDIAN extra'
128
- when "ARRAY_ITEM"
129
- tf.puts 'ARRAY_ITEM myitem 0 8 UINT 24 "Test Item array" LITTLE_ENDIAN extra'
130
- when "APPEND_ARRAY_ITEM"
131
- tf.puts 'APPEND_ARRAY_ITEM myitem 0 8 UINT 24 "Test Item array" BIG_ENDIAN extra'
132
- when "SELECT_ITEM"
133
- tf.puts 'ITEM myitem 0 8 UINT'
134
- tf.puts 'SELECT_ITEM myitem extra'
135
- end
136
- tf.close
137
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Too many parameters for #{keyword}/)
138
- tf.unlink
139
- end
140
-
141
- @item_keywords.each do |keyword|
142
- # The following can have an "unlimited" number of arguments
143
- next if %w(POLY_READ_CONVERSION POLY_WRITE_CONVERSION READ_CONVERSION WRITE_CONVERSION SEG_POLY_READ_CONVERSION SEG_POLY_WRITE_CONVERSION LIMITS_RESPONSE META).include? keyword
144
- tf = Tempfile.new('unittest')
145
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
146
- tf.puts 'ITEM myitem 0 8 UINT "Test Item"'
147
- case keyword
148
- when "STATE"
149
- tf.puts 'STATE mystate 0 RED extra'
150
- when "GENERIC_READ_CONVERSION_START", "GENERIC_WRITE_CONVERSION_START"
151
- tf.puts "#{keyword} FLOAT 64 extra"
152
- when "LIMITS"
153
- tf.puts 'LIMITS mylimits 1 ENABLED 0 10 20 30 12 18 20'
154
- when "UNITS"
155
- tf.puts 'UNITS degrees deg extra'
156
- when "FORMAT_STRING", "DESCRIPTION"
157
- tf.puts "#{keyword} 'string' extra"
158
- end
159
- tf.close
160
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Too many parameters for #{keyword}/)
161
- tf.unlink
162
- end
163
- end
164
- end
165
-
166
- context "with SELECT_COMMAND or SELECT_TELEMETRY" do
167
- it "complains if the packet is not found" do
168
- %w(SELECT_COMMAND SELECT_TELEMETRY).each do |keyword|
169
- tf = Tempfile.new('unittest')
170
- tf.puts keyword + ' tgt1 pkt1'
171
- tf.puts 'SELECT_ITEM ITEM1'
172
- tf.puts ' DESCRIPTION "New description"'
173
- tf.close
174
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Packet not found/)
175
- tf.unlink
176
- end
177
- end
178
-
179
- it "selects a packet for modification" do
180
- %w(SELECT_COMMAND SELECT_TELEMETRY).each do |keyword|
181
- tf = Tempfile.new('unittest')
182
- tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
183
- tf.puts ' APPEND_PARAMETER item1 16 UINT 0 0 0 "Item"'
184
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
185
- tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
186
- tf.close
187
- @pc.process_file(tf.path, "TGT1")
188
- pkt = @pc.commands["TGT1"]["PKT1"] if keyword =~ /COMMAND/
189
- pkt = @pc.telemetry["TGT1"]["PKT1"] if keyword =~ /TELEMETRY/
190
- expect(pkt.get_item("ITEM1").description).to eql "Item"
191
- tf.unlink
192
-
193
- tf = Tempfile.new('unittest')
194
- tf.puts keyword + ' tgt1 pkt1'
195
- tf.puts 'SELECT_PARAMETER ITEM1' if keyword =~ /COMMAND/
196
- tf.puts 'SELECT_ITEM ITEM1' if keyword =~ /TELEMETRY/
197
- tf.puts ' DESCRIPTION "New description"'
198
- tf.close
199
- @pc.process_file(tf.path, "TGT1")
200
- pkt = @pc.commands["TGT1"]["PKT1"] if keyword =~ /COMMAND/
201
- pkt = @pc.telemetry["TGT1"]["PKT1"] if keyword =~ /TELEMETRY/
202
- expect(pkt.get_item("ITEM1").description).to eql "New description"
203
- tf.unlink
204
- end
205
- end
206
-
207
- it "substitutes the target name" do
208
- %w(SELECT_COMMAND SELECT_TELEMETRY).each do |keyword|
209
- tf = Tempfile.new('unittest')
210
- tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
211
- tf.puts ' APPEND_PARAMETER item1 16 UINT 0 0 0 "Item"'
212
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
213
- tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
214
- tf.close
215
- @pc.process_file(tf.path, "NEW")
216
- pkt = @pc.commands["NEW"]["PKT1"] if keyword =~ /COMMAND/
217
- pkt = @pc.telemetry["NEW"]["PKT1"] if keyword =~ /TELEMETRY/
218
- expect(pkt.get_item("ITEM1").description).to eql "Item"
219
- tf.unlink
220
-
221
- tf = Tempfile.new('unittest')
222
- tf.puts keyword + ' tgt1 pkt1'
223
- tf.puts 'SELECT_PARAMETER ITEM1' if keyword =~ /COMMAND/
224
- tf.puts 'SELECT_ITEM ITEM1' if keyword =~ /TELEMETRY/
225
- tf.puts ' DESCRIPTION "New description"'
226
- tf.close
227
- @pc.process_file(tf.path, "NEW")
228
- pkt = @pc.commands["NEW"]["PKT1"] if keyword =~ /COMMAND/
229
- pkt = @pc.telemetry["NEW"]["PKT1"] if keyword =~ /TELEMETRY/
230
- expect(pkt.get_item("ITEM1").description).to eql "New description"
231
- tf.unlink
232
- end
233
- end
234
- end
235
-
236
- context "with SELECT_PARAMETER" do
237
- it "complains if used with SELECT_TELEMETRY" do
238
- tf = Tempfile.new('unittest')
239
- tf.puts 'TELEMETRY TGT PKT LITTLE_ENDIAN "Packet"'
240
- tf.puts ' APPEND_ITEM ITEM 16 UINT "Item"'
241
- tf.puts 'SELECT_TELEMETRY TGT PKT'
242
- tf.puts ' SELECT_PARAMETER ITEM'
243
- tf.close
244
- expect { @pc.process_file(tf.path, "TGT") }.to raise_error(ConfigParser::Error, "SELECT_PARAMETER only applies to command packets")
245
- end
246
-
247
- it "complains if the parameter is not found" do
248
- tf = Tempfile.new('unittest')
249
- tf.puts 'COMMAND TGT PKT LITTLE_ENDIAN "Packet"'
250
- tf.puts ' APPEND_PARAMETER PARAM 16 UINT 0 0 0 "Param"'
251
- tf.close
252
- @pc.process_file(tf.path, "TGT")
253
- pkt = @pc.commands["TGT"]["PKT"]
254
- expect(pkt.get_item("PARAM").description).to eql "Param"
255
- tf.unlink
256
-
257
- tf = Tempfile.new('unittest')
258
- tf.puts 'SELECT_COMMAND TGT PKT'
259
- tf.puts ' SELECT_PARAMETER PARAMX'
260
- tf.puts ' DESCRIPTION "New description"'
261
- tf.close
262
- expect { @pc.process_file(tf.path, "TGT") }.to raise_error(ConfigParser::Error, "PARAMX not found in command packet TGT PKT")
263
- end
264
- end
265
-
266
- context "with SELECT_ITEM" do
267
- it "complains if used with SELECT_COMMAND" do
268
- tf = Tempfile.new('unittest')
269
- tf.puts 'COMMAND TGT PKT LITTLE_ENDIAN "Packet"'
270
- tf.puts ' APPEND_PARAMETER PARAM 16 UINT 0 0 0 "Param"'
271
- tf.puts 'SELECT_COMMAND TGT PKT'
272
- tf.puts ' SELECT_ITEM PARAM'
273
- tf.close
274
- expect { @pc.process_file(tf.path, "TGT") }.to raise_error(ConfigParser::Error, "SELECT_ITEM only applies to telemetry packets")
275
- end
276
-
277
- it "complains if the item is not found" do
278
- tf = Tempfile.new('unittest')
279
- tf.puts 'TELEMETRY TGT PKT LITTLE_ENDIAN "Packet"'
280
- tf.puts ' APPEND_ITEM ITEM 16 UINT "Item"'
281
- tf.close
282
- @pc.process_file(tf.path, "TGT")
283
- pkt = @pc.telemetry["TGT"]["PKT"]
284
- expect(pkt.get_item("ITEM").description).to eql "Item"
285
- tf.unlink
286
-
287
- tf = Tempfile.new('unittest')
288
- tf.puts 'SELECT_TELEMETRY TGT PKT'
289
- tf.puts ' SELECT_ITEM ITEMX'
290
- tf.puts ' DESCRIPTION "New description"'
291
- tf.close
292
- expect { @pc.process_file(tf.path, "TGT") }.to raise_error(ConfigParser::Error, "ITEMX not found in telemetry packet TGT PKT")
293
- end
294
- end
295
-
296
- context "with MACRO_APPEND" do
297
- it "creates a range of items" do
298
- tf = Tempfile.new('unittest')
299
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
300
- tf.puts 'MACRO_APPEND_START 1 3'
301
- tf.puts ' APPEND_ITEM BYTE 8 UINT "Setting #x"'
302
- tf.puts 'MACRO_APPEND_END'
303
- tf.close
304
- @pc.process_file(tf.path, "TGT1")
305
- pkt = @pc.telemetry["TGT1"]["PKT1"]
306
- expect(pkt.items.length).to eql 6 # 3 plus the RECEIVED_XXX items
307
- expect(pkt.items.keys).to include('BYTE1','BYTE2','BYTE3')
308
- expect(pkt.sorted_items[3].name).to eql 'BYTE1'
309
- expect(pkt.sorted_items[4].name).to eql 'BYTE2'
310
- expect(pkt.sorted_items[5].name).to eql 'BYTE3'
311
- tf.unlink
312
- end
313
- end
314
-
315
- context "with LIMITS_GROUP" do
316
- it "creates a new limits group" do
317
- tf = Tempfile.new('unittest')
318
- tf.puts 'LIMITS_GROUP TVAC'
319
- tf.puts 'LIMITS_GROUP VIBE'
320
- tf.close
321
- expect(@pc.limits_groups).to be_empty
322
- @pc.process_file(tf.path, "TGT1")
323
- expect(@pc.limits_groups).to include('TVAC','VIBE')
324
- tf.unlink
325
- end
326
- end
327
-
328
- context "with LIMITS_ITEM" do
329
- it "adds a new limits item to the group" do
330
- tf = Tempfile.new('unittest')
331
- tf.puts 'LIMITS_GROUP TVAC'
332
- tf.puts 'LIMITS_GROUP_ITEM TGT1 PKT1 ITEM1'
333
- tf.close
334
- expect(@pc.limits_groups).to be_empty
335
- @pc.process_file(tf.path, "TGT1")
336
- expect(@pc.limits_groups["TVAC"]).to eql [%w(TGT1 PKT1 ITEM1)]
337
- tf.unlink
338
-
339
- # Show we can 're-open' the group and add items
340
- tf = Tempfile.new('unittest')
341
- tf.puts 'LIMITS_GROUP TVAC'
342
- tf.puts 'LIMITS_GROUP_ITEM TGT1 PKT1 ITEM2'
343
- tf.close
344
- @pc.process_file(tf.path, "TGT1")
345
- expect(@pc.limits_groups["TVAC"]).to eql [%w(TGT1 PKT1 ITEM1), %w(TGT1 PKT1 ITEM2)]
346
- tf.unlink
347
- end
348
- end
349
-
350
- context "with ALLOW_SHORT" do
351
- it "marks the packet as allowing short buffers" do
352
- tf = Tempfile.new('unittest')
353
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
354
- tf.puts 'ALLOW_SHORT'
355
- tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "Description"'
356
- tf.close
357
- @pc.process_file(tf.path, "TGT1")
358
- expect(@pc.telemetry["TGT1"]["PKT1"].short_buffer_allowed).to be true
359
- expect(@pc.telemetry["TGT1"]["PKT2"].short_buffer_allowed).to be false
360
- tf.unlink
361
- end
362
- end
363
-
364
- context "with META" do
365
- it "saves metadata" do
366
- tf = Tempfile.new('unittest')
367
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
368
- tf.puts 'META TYPE "struct packet"'
369
- tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "Description"'
370
- tf.puts 'META TYPE "struct packet2"'
371
- tf.close
372
- @pc.process_file(tf.path, "TGT1")
373
- expect(@pc.telemetry["TGT1"]["PKT1"].meta['TYPE']).to eql ["struct packet"]
374
- expect(@pc.telemetry["TGT1"]["PKT2"].meta['TYPE']).to eql ["struct packet2"]
375
- tf.unlink
376
- end
377
- end
378
-
379
- context "with DISABLE_MESSAGES" do
380
- it "marks the packet as messages disabled" do
381
- tf = Tempfile.new('unittest')
382
- tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
383
- tf.puts 'DISABLE_MESSAGES'
384
- tf.puts 'COMMAND tgt1 pkt2 LITTLE_ENDIAN "Description"'
385
- tf.close
386
- @pc.process_file(tf.path, "TGT1")
387
- expect(@pc.commands["TGT1"]["PKT1"].messages_disabled).to be true
388
- expect(@pc.commands["TGT1"]["PKT2"].messages_disabled).to be false
389
- tf.unlink
390
- end
391
- end
392
-
393
- context "with HIDDEN" do
394
- it "marks the packet as hidden" do
395
- tf = Tempfile.new('unittest')
396
- tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
397
- tf.puts 'HIDDEN'
398
- tf.puts 'COMMAND tgt1 pkt2 LITTLE_ENDIAN "Description"'
399
- tf.close
400
- @pc.process_file(tf.path, "TGT1")
401
- expect(@pc.commands["TGT1"]["PKT1"].hidden).to be true
402
- expect(@pc.commands["TGT1"]["PKT1"].disabled).to be false
403
- expect(@pc.commands["TGT1"]["PKT2"].hidden).to be false
404
- expect(@pc.commands["TGT1"]["PKT2"].disabled).to be false
405
- tf.unlink
406
- end
407
- end
408
-
409
- context "with DISABLED" do
410
- it "marks the packet as disabled" do
411
- tf = Tempfile.new('unittest')
412
- tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
413
- tf.puts 'DISABLED'
414
- tf.puts 'COMMAND tgt1 pkt2 LITTLE_ENDIAN "Description"'
415
- tf.close
416
- @pc.process_file(tf.path, "TGT1")
417
- expect(@pc.commands["TGT1"]["PKT1"].hidden).to be true
418
- expect(@pc.commands["TGT1"]["PKT1"].disabled).to be true
419
- expect(@pc.commands["TGT1"]["PKT2"].hidden).to be false
420
- expect(@pc.commands["TGT1"]["PKT2"].disabled).to be false
421
- tf.unlink
422
- end
423
- end
424
-
425
- context "with HAZARDOUS" do
426
- it "marks the packet as hazardous" do
427
- tf = Tempfile.new('unittest')
428
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
429
- tf.puts 'HAZARDOUS'
430
- tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "Description"'
431
- tf.puts 'COMMAND tgt2 pkt1 LITTLE_ENDIAN "Description"'
432
- tf.puts 'HAZARDOUS'
433
- tf.puts 'COMMAND tgt2 pkt2 LITTLE_ENDIAN "Description"'
434
- tf.close
435
- @pc.process_file(tf.path, "SYSTEM")
436
- expect(@pc.telemetry["TGT1"]["PKT1"].hazardous).to be true
437
- expect(@pc.telemetry["TGT1"]["PKT2"].hazardous).to be false
438
- expect(@pc.commands["TGT2"]["PKT1"].hazardous).to be true
439
- expect(@pc.commands["TGT2"]["PKT2"].hazardous).to be false
440
- tf.unlink
441
- end
442
-
443
- it "takes a description" do
444
- tf = Tempfile.new('unittest')
445
- tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
446
- tf.puts 'HAZARDOUS "Hazardous description"'
447
- tf.close
448
- @pc.process_file(tf.path, "TGT1")
449
- expect(@pc.commands["TGT1"]["PKT1"].hazardous).to be true
450
- expect(@pc.commands["TGT1"]["PKT1"].hazardous_description).to eql "Hazardous description"
451
- tf.unlink
452
- end
453
- end
454
-
455
- context "with READ_CONVERSION and WRITE_CONVERSION" do
456
- it "complains about missing conversion file" do
457
- filename = File.join(File.dirname(__FILE__), "../test_only.rb")
458
- File.delete(filename) if File.exist?(filename)
459
- @pc = PacketConfig.new
460
-
461
- tf = Tempfile.new('unittest')
462
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
463
- tf.puts ' ITEM item1 0 16 INT "Integer Item"'
464
- tf.puts ' READ_CONVERSION test_only.rb'
465
- tf.close
466
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /TestOnly class not found/)
467
- tf.unlink
468
-
469
- tf = Tempfile.new('unittest')
470
- tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
471
- tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
472
- tf.puts ' WRITE_CONVERSION test_only.rb'
473
- tf.close
474
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /TestOnly class not found/)
475
- tf.unlink
476
- end
477
-
478
- it "complains about a non Cosmos::Conversion class" do
479
- filename = File.join(File.dirname(__FILE__), "../conversion1.rb")
480
- File.open(filename, 'w') do |file|
481
- file.puts "class Conversion1"
482
- file.puts " def call(value,packet,buffer)"
483
- file.puts " end"
484
- file.puts "end"
485
- end
486
- load 'conversion1.rb'
487
- File.delete(filename) if File.exist?(filename)
488
-
489
- tf = Tempfile.new('unittest')
490
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
491
- tf.puts ' ITEM item1 0 16 INT "Integer Item"'
492
- tf.puts ' READ_CONVERSION conversion1.rb'
493
- tf.close
494
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /read_conversion must be a Cosmos::Conversion but is a Conversion1/)
495
- tf.unlink
496
-
497
- tf = Tempfile.new('unittest')
498
- tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
499
- tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
500
- tf.puts ' WRITE_CONVERSION conversion1.rb'
501
- tf.close
502
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /write_conversion must be a Cosmos::Conversion but is a Conversion1/)
503
- tf.unlink
504
- end
505
-
506
- it "parses the conversion" do
507
- filename = File.join(File.dirname(__FILE__), "../conversion2.rb")
508
- File.open(filename, 'w') do |file|
509
- file.puts "require 'cosmos/conversions/conversion'"
510
- file.puts "class Conversion2 < Cosmos::Conversion"
511
- file.puts " def call(value,packet,buffer)"
512
- file.puts " value * 2"
513
- file.puts " end"
514
- file.puts "end"
515
- end
516
- load 'conversion2.rb'
517
-
518
- tf = Tempfile.new('unittest')
519
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
520
- tf.puts ' ITEM item1 0 16 INT "Integer Item"'
521
- tf.puts ' READ_CONVERSION conversion2.rb'
522
- tf.close
523
- @pc.process_file(tf.path, "TGT1")
524
- @pc.telemetry["TGT1"]["PKT1"].buffer = "\x01"
525
- expect(@pc.telemetry["TGT1"]["PKT1"].read("ITEM1")).to eql 2
526
- tf.unlink
527
-
528
- tf = Tempfile.new('unittest')
529
- tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
530
- tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
531
- tf.puts ' WRITE_CONVERSION conversion2.rb'
532
- tf.close
533
- @pc.process_file(tf.path, "TGT1")
534
- @pc.commands["TGT1"]["PKT1"].write("ITEM1", 3)
535
- expect(@pc.commands["TGT1"]["PKT1"].read("ITEM1")).to eql 6
536
- tf.unlink
537
-
538
- File.delete(filename) if File.exist?(filename)
539
- end
540
- end
541
-
542
- context "with POLY_READ_CONVERSION and POLY_WRITE_CONVERSION" do
543
- it "performs a polynomial conversion" do
544
- tf = Tempfile.new('unittest')
545
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
546
- tf.puts ' ITEM item1 0 16 INT "Integer Item"'
547
- tf.puts ' POLY_READ_CONVERSION 5 2'
548
- tf.close
549
- @pc.process_file(tf.path, "TGT1")
550
- @pc.telemetry["TGT1"]["PKT1"].buffer = "\x01"
551
- expect(@pc.telemetry["TGT1"]["PKT1"].read("ITEM1")).to eql 7.0
552
- tf.unlink
553
-
554
- tf = Tempfile.new('unittest')
555
- tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
556
- tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
557
- tf.puts ' POLY_WRITE_CONVERSION 5 2'
558
- tf.close
559
- @pc.process_file(tf.path, "TGT1")
560
- @pc.commands["TGT1"]["PKT1"].write("ITEM1", 3)
561
- expect(@pc.commands["TGT1"]["PKT1"].read("ITEM1")).to eql 11
562
- tf.unlink
563
- end
564
- end
565
-
566
- context "with SEG_POLY_READ_CONVERSION and SEG_POLY_WRITE_CONVERSION" do
567
- it "performs a segmented polynomial conversion" do
568
- tf = Tempfile.new('unittest')
569
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
570
- tf.puts ' ITEM item1 0 16 INT "Integer Item"'
571
- tf.puts ' SEG_POLY_READ_CONVERSION 0 1 2'
572
- tf.puts ' SEG_POLY_READ_CONVERSION 5 2 3'
573
- tf.close
574
- @pc.process_file(tf.path, "TGT1")
575
- @pc.telemetry["TGT1"]["PKT1"].buffer = "\x01"
576
- expect(@pc.telemetry["TGT1"]["PKT1"].read("ITEM1")).to eql 3.0
577
- @pc.telemetry["TGT1"]["PKT1"].buffer = "\x05"
578
- expect(@pc.telemetry["TGT1"]["PKT1"].read("ITEM1")).to eql 17.0
579
- tf.unlink
580
-
581
- tf = Tempfile.new('unittest')
582
- tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
583
- tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
584
- tf.puts ' SEG_POLY_WRITE_CONVERSION 0 1 2'
585
- tf.puts ' SEG_POLY_WRITE_CONVERSION 5 2 3'
586
- tf.close
587
- @pc.process_file(tf.path, "TGT1")
588
- @pc.commands["TGT1"]["PKT1"].write("ITEM1", 1)
589
- expect(@pc.commands["TGT1"]["PKT1"].read("ITEM1")).to eql 3
590
- @pc.commands["TGT1"]["PKT1"].write("ITEM1", 5)
591
- expect(@pc.commands["TGT1"]["PKT1"].read("ITEM1")).to eql 17
592
- tf.unlink
593
- end
594
- end
595
-
596
- context "with GENERIC_READ_CONVERSION and GENERIC_WRITE_CONVERSION" do
597
- it "processes a generic conversion" do
598
- tf = Tempfile.new('unittest')
599
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
600
- tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
601
- tf.puts ' GENERIC_WRITE_CONVERSION_START'
602
- tf.puts ' 2.0 * value'
603
- tf.puts ' GENERIC_WRITE_CONVERSION_END'
604
- tf.puts ' APPEND_ITEM item2 8 UINT "Item"'
605
- tf.puts ' GENERIC_READ_CONVERSION_START'
606
- tf.puts ' "Number #{value}"'
607
- tf.puts ' GENERIC_READ_CONVERSION_END'
608
- tf.close
609
- @pc.process_file(tf.path, "TGT1")
610
- pkt = @pc.telemetry["TGT1"]["PKT1"]
611
- pkt.enable_method_missing
612
- pkt.item1 = 2
613
- expect(pkt.item1).to eql 4
614
- expect(pkt.item2).to eql "Number 0"
615
- tf.unlink
616
- end
617
-
618
- it "processes a generic conversion with a defined type" do
619
- tf = Tempfile.new('unittest')
620
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
621
- tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
622
- tf.puts ' GENERIC_WRITE_CONVERSION_START UINT 8'
623
- tf.puts ' 2.0 * value'
624
- tf.puts ' GENERIC_WRITE_CONVERSION_END'
625
- tf.puts ' APPEND_ITEM item2 64 FLOAT "Item"'
626
- tf.puts ' GENERIC_READ_CONVERSION_START FLOAT 32'
627
- tf.puts ' 2.0 * value'
628
- tf.puts ' GENERIC_READ_CONVERSION_END'
629
- tf.close
630
- @pc.process_file(tf.path, "TGT1")
631
- pkt = @pc.telemetry["TGT1"]["PKT1"]
632
- pkt.enable_method_missing
633
- pkt.item1 = 400
634
- expect(pkt.item1).to eql 800
635
- pkt.item2 = 400
636
- expect(pkt.item2).to eql 800.0
637
- tf.unlink
638
- end
639
- end
640
-
641
- context "with LIMITS" do
642
- it "ensures limits sets have unique names" do
643
- tf = Tempfile.new('unittest')
644
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
645
- tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
646
- tf.puts ' LIMITS DEFAULT 1 ENABLED 1 2 6 7'
647
- tf.puts ' LIMITS TVAC 1 ENABLED 1 2 6 7'
648
- tf.puts ' LIMITS DEFAULT 1 ENABLED 8 9 12 13'
649
- tf.close
650
- @pc.process_file(tf.path, "TGT1")
651
- item = @pc.telemetry["TGT1"]["PKT1"].items["ITEM1"]
652
- expect(item.limits.values.length).to eql 2
653
- # Verify the last defined DEFAULT limits wins
654
- @pc.telemetry["TGT1"]["PKT1"].buffer = "\x04"
655
- @pc.telemetry["TGT1"]["PKT1"].enable_limits("ITEM1")
656
- @pc.telemetry["TGT1"]["PKT1"].check_limits
657
- expect(item.limits.state).to eql :RED_LOW
658
- tf.unlink
659
- end
660
- end
661
-
662
- context "with UNITS" do
663
- it "apply units when read :WITH_UNITS" do
664
- tf = Tempfile.new('unittest')
665
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
666
- tf.puts ' ITEM item1 0 8 UINT'
667
- tf.puts ' UNITS Volts V'
668
- tf.close
669
- @pc.process_file(tf.path, "TGT1")
670
- expect(@pc.telemetry["TGT1"]["PKT1"].read("ITEM1",:WITH_UNITS)).to eql "0 V"
671
- tf.unlink
672
- end
673
- end
674
-
675
- context "with META" do
676
- it "saves metadata for items" do
677
- tf = Tempfile.new('unittest')
678
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
679
- tf.puts ' ITEM item1 0 8 UINT'
680
- tf.puts ' META TYPE "unsigned int"'
681
- tf.puts ' META OTHER'
682
- tf.close
683
- @pc.process_file(tf.path, "TGT1")
684
- expect(@pc.telemetry["TGT1"]["PKT1"].get_item('item1').meta['TYPE']).to eql ['unsigned int']
685
- expect(@pc.telemetry["TGT1"]["PKT1"].get_item('item1').meta['OTHER']).to eql []
686
- tf.unlink
687
- end
688
- end
689
-
690
- context "with OVERFLOW" do
691
- it "sets the overflow type for items" do
692
- tf = Tempfile.new('unittest')
693
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
694
- tf.puts ' ITEM item1 0 8 UINT'
695
- tf.puts ' OVERFLOW TRUNCATE'
696
- tf.puts ' ITEM item2 8 8 UINT'
697
- tf.puts ' OVERFLOW SATURATE'
698
- tf.puts ' ITEM item3 16 8 UINT'
699
- tf.puts ' OVERFLOW ERROR'
700
- tf.puts ' ITEM item4 24 8 INT'
701
- tf.puts ' OVERFLOW ERROR_ALLOW_HEX'
702
- tf.close
703
- @pc.process_file(tf.path, "TGT1")
704
- expect(@pc.telemetry["TGT1"]["PKT1"].get_item('item1').overflow).to eql :TRUNCATE
705
- expect(@pc.telemetry["TGT1"]["PKT1"].get_item('item2').overflow).to eql :SATURATE
706
- expect(@pc.telemetry["TGT1"]["PKT1"].get_item('item3').overflow).to eql :ERROR
707
- expect(@pc.telemetry["TGT1"]["PKT1"].get_item('item4').overflow).to eql :ERROR_ALLOW_HEX
708
- tf.unlink
709
- end
710
- end
711
-
712
- context "with REQUIRED" do
713
- it "only applies to a command parameter" do
714
- tf = Tempfile.new('unittest')
715
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
716
- tf.puts ' ITEM item1 0 8 UINT'
717
- tf.puts ' REQUIRED'
718
- tf.close
719
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "REQUIRED only applies to command parameters")
720
- tf.unlink
721
-
722
- tf = Tempfile.new('unittest')
723
- tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
724
- tf.puts ' REQUIRED'
725
- tf.close
726
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "No current item for REQUIRED")
727
- tf.unlink
728
- end
729
-
730
- it "marks a command parameter as required" do
731
- tf = Tempfile.new('unittest')
732
- tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
733
- tf.puts ' PARAMETER item1 0 8 UINT 0 1 1'
734
- tf.puts ' REQUIRED'
735
- tf.puts ' PARAMETER item2 0 8 UINT 0 1 1'
736
- tf.close
737
- @pc.process_file(tf.path, "TGT1")
738
- expect(@pc.commands["TGT1"]["PKT1"].items["ITEM1"].required).to be true
739
- expect(@pc.commands["TGT1"]["PKT1"].items["ITEM2"].required).to be false
740
- tf.unlink
741
- end
742
- end
743
-
744
- context "with MINIMUM_VALUE, MAXIMUM_VALUE, DEFAULT_VALUE" do
745
- it "complains if used on telemetry items" do
746
- tf = Tempfile.new('unittest')
747
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
748
- tf.puts ' APPEND_ITEM item1 16 UINT'
749
- tf.puts ' MINIMUM_VALUE 1'
750
- tf.close
751
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "MINIMUM_VALUE only applies to command parameters")
752
- tf.unlink
753
-
754
- tf = Tempfile.new('unittest')
755
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
756
- tf.puts ' APPEND_ITEM item1 16 UINT'
757
- tf.puts ' MAXIMUM_VALUE 3'
758
- tf.close
759
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "MAXIMUM_VALUE only applies to command parameters")
760
- tf.unlink
761
-
762
- tf = Tempfile.new('unittest')
763
- tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
764
- tf.puts ' APPEND_ITEM item1 16 UINT'
765
- tf.puts ' DEFAULT_VALUE 2'
766
- tf.close
767
- expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "DEFAULT_VALUE only applies to command parameters")
768
- tf.unlink
769
- end
770
-
771
- it "allows overriding the defined value" do
772
- tf = Tempfile.new('unittest')
773
- tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
774
- tf.puts ' APPEND_PARAMETER item1 16 UINT 0 1 1'
775
- tf.puts ' APPEND_PARAMETER item2 16 STRING "HI"'
776
- tf.close
777
- @pc.process_file(tf.path, "TGT1")
778
- @pc.commands["TGT1"]["PKT1"].restore_defaults
779
- expect(@pc.commands["TGT1"]["PKT1"].read("ITEM1")).to eql 1
780
- expect(@pc.commands["TGT1"]["PKT1"].items["ITEM1"].range).to eql (0..1)
781
- expect(@pc.commands["TGT1"]["PKT1"].read("ITEM2")).to eql "HI"
782
- tf.unlink
783
-
784
- # Now override the values from above
785
- tf = Tempfile.new('unittest')
786
- tf.puts 'SELECT_COMMAND tgt1 pkt1'
787
- tf.puts 'SELECT_PARAMETER item1'
788
- tf.puts ' MINIMUM_VALUE 1'
789
- tf.puts ' MAXIMUM_VALUE 3'
790
- tf.puts ' DEFAULT_VALUE 2'
791
- tf.puts 'SELECT_PARAMETER item2'
792
- tf.puts ' DEFAULT_VALUE "NO"'
793
- tf.close
794
- @pc.process_file(tf.path, "TGT1")
795
- @pc.commands["TGT1"]["PKT1"].restore_defaults
796
- expect(@pc.commands["TGT1"]["PKT1"].read("ITEM1")).to eql 2
797
- expect(@pc.commands["TGT1"]["PKT1"].items["ITEM1"].range).to eql (1..3)
798
- expect(@pc.commands["TGT1"]["PKT1"].read("ITEM2")).to eql "NO"
799
- tf.unlink
800
- end
801
- end
802
-
803
- end # describe "process_file"
804
- end
805
- end
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'spec_helper'
12
+ require 'cosmos'
13
+ require 'cosmos/packets/packet_config'
14
+ require 'tempfile'
15
+
16
+ module Cosmos
17
+
18
+ describe PacketConfig do
19
+
20
+ describe "process_file" do
21
+ before(:each) do
22
+ @pc = PacketConfig.new
23
+ end
24
+
25
+ it "complains about unknown keywords" do
26
+ tf = Tempfile.new('unittest')
27
+ tf.puts("BLAH")
28
+ tf.close
29
+ expect { @pc.process_file(tf.path, 'SYSTEM') }.to raise_error(ConfigParser::Error, "Unknown keyword 'BLAH'")
30
+ tf.unlink
31
+ end
32
+
33
+ context "with all telemetry keywords" do
34
+ before(:all) do
35
+ # top level keywords
36
+ @top_keywords = %w(SELECT_COMMAND SELECT_TELEMETRY LIMITS_GROUP LIMITS_GROUP_ITEM)
37
+ # Keywords that require a current packet from TELEMETRY keyword
38
+ @tlm_keywords = %w(SELECT_ITEM ITEM ID_ITEM ARRAY_ITEM APPEND_ITEM APPEND_ID_ITEM APPEND_ARRAY_ITEM PROCESSOR META)
39
+ # Keywords that require both a current packet and current item
40
+ @item_keywords = %w(STATE READ_CONVERSION WRITE_CONVERSION POLY_READ_CONVERSION POLY_WRITE_CONVERSION SEG_POLY_READ_CONVERSION SEG_POLY_WRITE_CONVERSION GENERIC_READ_CONVERSION_START GENERIC_WRITE_CONVERSION_START LIMITS LIMITS_RESPONSE UNITS FORMAT_STRING DESCRIPTION META)
41
+ end
42
+
43
+ it "complains if a current packet is not defined" do
44
+ # Check for missing TELEMETRY line
45
+ @tlm_keywords.each do |keyword|
46
+ tf = Tempfile.new('unittest')
47
+ tf.puts(keyword)
48
+ tf.close
49
+ expect { @pc.process_file(tf.path, "SYSTEM") }.to raise_error(ConfigParser::Error, "No current packet for #{keyword}")
50
+ tf.unlink
51
+ end # end for each tlm_keywords
52
+ end
53
+
54
+ it "complains if a current item is not defined" do
55
+ # Check for missing ITEM definitions
56
+ @item_keywords.each do |keyword|
57
+ next if %w(META).include? keyword
58
+ tf = Tempfile.new('unittest')
59
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
60
+ tf.puts keyword
61
+ tf.close
62
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "No current item for #{keyword}")
63
+ tf.unlink
64
+ end
65
+ end
66
+
67
+ it "complains if there are not enough parameters" do
68
+ @top_keywords.each do |keyword|
69
+ tf = Tempfile.new('unittest')
70
+ tf.puts(keyword)
71
+ tf.close
72
+ expect { @pc.process_file(tf.path, "SYSTEM") }.to raise_error(ConfigParser::Error, /Not enough parameters for #{keyword}/)
73
+ tf.unlink
74
+ end
75
+
76
+ @tlm_keywords.each do |keyword|
77
+ tf = Tempfile.new('unittest')
78
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
79
+ tf.puts keyword
80
+ tf.close
81
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Not enough parameters for #{keyword}/)
82
+ tf.unlink
83
+ end
84
+
85
+ @item_keywords.each do |keyword|
86
+ next if %w(GENERIC_READ_CONVERSION_START GENERIC_WRITE_CONVERSION_START).include? keyword
87
+ tf = Tempfile.new('unittest')
88
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
89
+ tf.puts 'ITEM myitem 0 8 UINT "Test Item"'
90
+ tf.puts keyword
91
+ tf.close
92
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Not enough parameters for #{keyword}/)
93
+ tf.unlink
94
+ end
95
+ end
96
+
97
+ it "complains if there are too many parameters" do
98
+ @top_keywords.each do |keyword|
99
+ tf = Tempfile.new('unittest')
100
+ case keyword
101
+ when "SELECT_COMMAND"
102
+ tf.puts 'SELECT_COMMAND tgt1 pkt1 extra'
103
+ when "SELECT_TELEMETRY"
104
+ tf.puts 'SELECT_TELEMETRY tgt1 pkt1 extra'
105
+ when 'LIMITS_GROUP'
106
+ tf.puts "LIMITS_GROUP name extra"
107
+ when 'LIMITS_GROUP_ITEM'
108
+ tf.puts "LIMITS_GROUP_ITEM target packet item extra"
109
+ end
110
+ tf.close
111
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Too many parameters for #{keyword}/)
112
+ tf.unlink
113
+ end
114
+
115
+ @tlm_keywords.each do |keyword|
116
+ next if %w(PROCESSOR META).include? keyword
117
+ tf = Tempfile.new('unittest')
118
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
119
+ case keyword
120
+ when "ITEM"
121
+ tf.puts 'ITEM myitem 0 8 UINT "Test Item" BIG_ENDIAN extra'
122
+ when "APPEND_ITEM"
123
+ tf.puts 'APPEND_ITEM myitem 8 UINT "Test Item" BIG_ENDIAN extra'
124
+ when "ID_ITEM"
125
+ tf.puts 'ID_ITEM myitem 0 8 UINT 1 "Test Item id=1" LITTLE_ENDIAN extra'
126
+ when "APPEND_ID_ITEM"
127
+ tf.puts 'APPEND_ID_ITEM myitem 8 UINT 1 "Test Item id=1" BIG_ENDIAN extra'
128
+ when "ARRAY_ITEM"
129
+ tf.puts 'ARRAY_ITEM myitem 0 8 UINT 24 "Test Item array" LITTLE_ENDIAN extra'
130
+ when "APPEND_ARRAY_ITEM"
131
+ tf.puts 'APPEND_ARRAY_ITEM myitem 0 8 UINT 24 "Test Item array" BIG_ENDIAN extra'
132
+ when "SELECT_ITEM"
133
+ tf.puts 'ITEM myitem 0 8 UINT'
134
+ tf.puts 'SELECT_ITEM myitem extra'
135
+ end
136
+ tf.close
137
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Too many parameters for #{keyword}/)
138
+ tf.unlink
139
+ end
140
+
141
+ @item_keywords.each do |keyword|
142
+ # The following can have an "unlimited" number of arguments
143
+ next if %w(POLY_READ_CONVERSION POLY_WRITE_CONVERSION READ_CONVERSION WRITE_CONVERSION SEG_POLY_READ_CONVERSION SEG_POLY_WRITE_CONVERSION LIMITS_RESPONSE META).include? keyword
144
+ tf = Tempfile.new('unittest')
145
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
146
+ tf.puts 'ITEM myitem 0 8 UINT "Test Item"'
147
+ case keyword
148
+ when "STATE"
149
+ tf.puts 'STATE mystate 0 RED extra'
150
+ when "GENERIC_READ_CONVERSION_START", "GENERIC_WRITE_CONVERSION_START"
151
+ tf.puts "#{keyword} FLOAT 64 extra"
152
+ when "LIMITS"
153
+ tf.puts 'LIMITS mylimits 1 ENABLED 0 10 20 30 12 18 20'
154
+ when "UNITS"
155
+ tf.puts 'UNITS degrees deg extra'
156
+ when "FORMAT_STRING", "DESCRIPTION"
157
+ tf.puts "#{keyword} 'string' extra"
158
+ end
159
+ tf.close
160
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Too many parameters for #{keyword}/)
161
+ tf.unlink
162
+ end
163
+ end
164
+ end
165
+
166
+ context "with SELECT_COMMAND or SELECT_TELEMETRY" do
167
+ it "complains if the packet is not found" do
168
+ %w(SELECT_COMMAND SELECT_TELEMETRY).each do |keyword|
169
+ tf = Tempfile.new('unittest')
170
+ tf.puts keyword + ' tgt1 pkt1'
171
+ tf.puts 'SELECT_ITEM ITEM1'
172
+ tf.puts ' DESCRIPTION "New description"'
173
+ tf.close
174
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /Packet not found/)
175
+ tf.unlink
176
+ end
177
+ end
178
+
179
+ it "selects a packet for modification" do
180
+ %w(SELECT_COMMAND SELECT_TELEMETRY).each do |keyword|
181
+ tf = Tempfile.new('unittest')
182
+ tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
183
+ tf.puts ' APPEND_PARAMETER item1 16 UINT 0 0 0 "Item"'
184
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
185
+ tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
186
+ tf.close
187
+ @pc.process_file(tf.path, "TGT1")
188
+ pkt = @pc.commands["TGT1"]["PKT1"] if keyword =~ /COMMAND/
189
+ pkt = @pc.telemetry["TGT1"]["PKT1"] if keyword =~ /TELEMETRY/
190
+ expect(pkt.get_item("ITEM1").description).to eql "Item"
191
+ tf.unlink
192
+
193
+ tf = Tempfile.new('unittest')
194
+ tf.puts keyword + ' tgt1 pkt1'
195
+ tf.puts 'SELECT_PARAMETER ITEM1' if keyword =~ /COMMAND/
196
+ tf.puts 'SELECT_ITEM ITEM1' if keyword =~ /TELEMETRY/
197
+ tf.puts ' DESCRIPTION "New description"'
198
+ tf.close
199
+ @pc.process_file(tf.path, "TGT1")
200
+ pkt = @pc.commands["TGT1"]["PKT1"] if keyword =~ /COMMAND/
201
+ pkt = @pc.telemetry["TGT1"]["PKT1"] if keyword =~ /TELEMETRY/
202
+ expect(pkt.get_item("ITEM1").description).to eql "New description"
203
+ tf.unlink
204
+ end
205
+ end
206
+
207
+ it "substitutes the target name" do
208
+ %w(SELECT_COMMAND SELECT_TELEMETRY).each do |keyword|
209
+ tf = Tempfile.new('unittest')
210
+ tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
211
+ tf.puts ' APPEND_PARAMETER item1 16 UINT 0 0 0 "Item"'
212
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
213
+ tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
214
+ tf.close
215
+ @pc.process_file(tf.path, "NEW")
216
+ pkt = @pc.commands["NEW"]["PKT1"] if keyword =~ /COMMAND/
217
+ pkt = @pc.telemetry["NEW"]["PKT1"] if keyword =~ /TELEMETRY/
218
+ expect(pkt.get_item("ITEM1").description).to eql "Item"
219
+ tf.unlink
220
+
221
+ tf = Tempfile.new('unittest')
222
+ tf.puts keyword + ' tgt1 pkt1'
223
+ tf.puts 'SELECT_PARAMETER ITEM1' if keyword =~ /COMMAND/
224
+ tf.puts 'SELECT_ITEM ITEM1' if keyword =~ /TELEMETRY/
225
+ tf.puts ' DESCRIPTION "New description"'
226
+ tf.close
227
+ @pc.process_file(tf.path, "NEW")
228
+ pkt = @pc.commands["NEW"]["PKT1"] if keyword =~ /COMMAND/
229
+ pkt = @pc.telemetry["NEW"]["PKT1"] if keyword =~ /TELEMETRY/
230
+ expect(pkt.get_item("ITEM1").description).to eql "New description"
231
+ tf.unlink
232
+ end
233
+ end
234
+ end
235
+
236
+ context "with SELECT_PARAMETER" do
237
+ it "complains if used with SELECT_TELEMETRY" do
238
+ tf = Tempfile.new('unittest')
239
+ tf.puts 'TELEMETRY TGT PKT LITTLE_ENDIAN "Packet"'
240
+ tf.puts ' APPEND_ITEM ITEM 16 UINT "Item"'
241
+ tf.puts 'SELECT_TELEMETRY TGT PKT'
242
+ tf.puts ' SELECT_PARAMETER ITEM'
243
+ tf.close
244
+ expect { @pc.process_file(tf.path, "TGT") }.to raise_error(ConfigParser::Error, "SELECT_PARAMETER only applies to command packets")
245
+ end
246
+
247
+ it "complains if the parameter is not found" do
248
+ tf = Tempfile.new('unittest')
249
+ tf.puts 'COMMAND TGT PKT LITTLE_ENDIAN "Packet"'
250
+ tf.puts ' APPEND_PARAMETER PARAM 16 UINT 0 0 0 "Param"'
251
+ tf.close
252
+ @pc.process_file(tf.path, "TGT")
253
+ pkt = @pc.commands["TGT"]["PKT"]
254
+ expect(pkt.get_item("PARAM").description).to eql "Param"
255
+ tf.unlink
256
+
257
+ tf = Tempfile.new('unittest')
258
+ tf.puts 'SELECT_COMMAND TGT PKT'
259
+ tf.puts ' SELECT_PARAMETER PARAMX'
260
+ tf.puts ' DESCRIPTION "New description"'
261
+ tf.close
262
+ expect { @pc.process_file(tf.path, "TGT") }.to raise_error(ConfigParser::Error, "PARAMX not found in command packet TGT PKT")
263
+ end
264
+ end
265
+
266
+ context "with SELECT_ITEM" do
267
+ it "complains if used with SELECT_COMMAND" do
268
+ tf = Tempfile.new('unittest')
269
+ tf.puts 'COMMAND TGT PKT LITTLE_ENDIAN "Packet"'
270
+ tf.puts ' APPEND_PARAMETER PARAM 16 UINT 0 0 0 "Param"'
271
+ tf.puts 'SELECT_COMMAND TGT PKT'
272
+ tf.puts ' SELECT_ITEM PARAM'
273
+ tf.close
274
+ expect { @pc.process_file(tf.path, "TGT") }.to raise_error(ConfigParser::Error, "SELECT_ITEM only applies to telemetry packets")
275
+ end
276
+
277
+ it "complains if the item is not found" do
278
+ tf = Tempfile.new('unittest')
279
+ tf.puts 'TELEMETRY TGT PKT LITTLE_ENDIAN "Packet"'
280
+ tf.puts ' APPEND_ITEM ITEM 16 UINT "Item"'
281
+ tf.close
282
+ @pc.process_file(tf.path, "TGT")
283
+ pkt = @pc.telemetry["TGT"]["PKT"]
284
+ expect(pkt.get_item("ITEM").description).to eql "Item"
285
+ tf.unlink
286
+
287
+ tf = Tempfile.new('unittest')
288
+ tf.puts 'SELECT_TELEMETRY TGT PKT'
289
+ tf.puts ' SELECT_ITEM ITEMX'
290
+ tf.puts ' DESCRIPTION "New description"'
291
+ tf.close
292
+ expect { @pc.process_file(tf.path, "TGT") }.to raise_error(ConfigParser::Error, "ITEMX not found in telemetry packet TGT PKT")
293
+ end
294
+ end
295
+
296
+ context "with MACRO_APPEND" do
297
+ it "creates a range of items" do
298
+ tf = Tempfile.new('unittest')
299
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
300
+ tf.puts 'MACRO_APPEND_START 1 3'
301
+ tf.puts ' APPEND_ITEM BYTE 8 UINT "Setting #x"'
302
+ tf.puts 'MACRO_APPEND_END'
303
+ tf.close
304
+ @pc.process_file(tf.path, "TGT1")
305
+ pkt = @pc.telemetry["TGT1"]["PKT1"]
306
+ expect(pkt.items.length).to eql 6 # 3 plus the RECEIVED_XXX items
307
+ expect(pkt.items.keys).to include('BYTE1','BYTE2','BYTE3')
308
+ expect(pkt.sorted_items[3].name).to eql 'BYTE1'
309
+ expect(pkt.sorted_items[4].name).to eql 'BYTE2'
310
+ expect(pkt.sorted_items[5].name).to eql 'BYTE3'
311
+ tf.unlink
312
+ end
313
+ end
314
+
315
+ context "with LIMITS_GROUP" do
316
+ it "creates a new limits group" do
317
+ tf = Tempfile.new('unittest')
318
+ tf.puts 'LIMITS_GROUP TVAC'
319
+ tf.puts 'LIMITS_GROUP VIBE'
320
+ tf.close
321
+ expect(@pc.limits_groups).to be_empty
322
+ @pc.process_file(tf.path, "TGT1")
323
+ expect(@pc.limits_groups).to include('TVAC','VIBE')
324
+ tf.unlink
325
+ end
326
+ end
327
+
328
+ context "with LIMITS_ITEM" do
329
+ it "adds a new limits item to the group" do
330
+ tf = Tempfile.new('unittest')
331
+ tf.puts 'LIMITS_GROUP TVAC'
332
+ tf.puts 'LIMITS_GROUP_ITEM TGT1 PKT1 ITEM1'
333
+ tf.close
334
+ expect(@pc.limits_groups).to be_empty
335
+ @pc.process_file(tf.path, "TGT1")
336
+ expect(@pc.limits_groups["TVAC"]).to eql [%w(TGT1 PKT1 ITEM1)]
337
+ tf.unlink
338
+
339
+ # Show we can 're-open' the group and add items
340
+ tf = Tempfile.new('unittest')
341
+ tf.puts 'LIMITS_GROUP TVAC'
342
+ tf.puts 'LIMITS_GROUP_ITEM TGT1 PKT1 ITEM2'
343
+ tf.close
344
+ @pc.process_file(tf.path, "TGT1")
345
+ expect(@pc.limits_groups["TVAC"]).to eql [%w(TGT1 PKT1 ITEM1), %w(TGT1 PKT1 ITEM2)]
346
+ tf.unlink
347
+ end
348
+ end
349
+
350
+ context "with ALLOW_SHORT" do
351
+ it "marks the packet as allowing short buffers" do
352
+ tf = Tempfile.new('unittest')
353
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
354
+ tf.puts 'ALLOW_SHORT'
355
+ tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "Description"'
356
+ tf.close
357
+ @pc.process_file(tf.path, "TGT1")
358
+ expect(@pc.telemetry["TGT1"]["PKT1"].short_buffer_allowed).to be true
359
+ expect(@pc.telemetry["TGT1"]["PKT2"].short_buffer_allowed).to be false
360
+ tf.unlink
361
+ end
362
+ end
363
+
364
+ context "with META" do
365
+ it "saves metadata" do
366
+ tf = Tempfile.new('unittest')
367
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
368
+ tf.puts 'META TYPE "struct packet"'
369
+ tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "Description"'
370
+ tf.puts 'META TYPE "struct packet2"'
371
+ tf.close
372
+ @pc.process_file(tf.path, "TGT1")
373
+ expect(@pc.telemetry["TGT1"]["PKT1"].meta['TYPE']).to eql ["struct packet"]
374
+ expect(@pc.telemetry["TGT1"]["PKT2"].meta['TYPE']).to eql ["struct packet2"]
375
+ tf.unlink
376
+ end
377
+ end
378
+
379
+ context "with DISABLE_MESSAGES" do
380
+ it "marks the packet as messages disabled" do
381
+ tf = Tempfile.new('unittest')
382
+ tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
383
+ tf.puts 'DISABLE_MESSAGES'
384
+ tf.puts 'COMMAND tgt1 pkt2 LITTLE_ENDIAN "Description"'
385
+ tf.close
386
+ @pc.process_file(tf.path, "TGT1")
387
+ expect(@pc.commands["TGT1"]["PKT1"].messages_disabled).to be true
388
+ expect(@pc.commands["TGT1"]["PKT2"].messages_disabled).to be false
389
+ tf.unlink
390
+ end
391
+ end
392
+
393
+ context "with HIDDEN" do
394
+ it "marks the packet as hidden" do
395
+ tf = Tempfile.new('unittest')
396
+ tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
397
+ tf.puts 'HIDDEN'
398
+ tf.puts 'COMMAND tgt1 pkt2 LITTLE_ENDIAN "Description"'
399
+ tf.close
400
+ @pc.process_file(tf.path, "TGT1")
401
+ expect(@pc.commands["TGT1"]["PKT1"].hidden).to be true
402
+ expect(@pc.commands["TGT1"]["PKT1"].disabled).to be false
403
+ expect(@pc.commands["TGT1"]["PKT2"].hidden).to be false
404
+ expect(@pc.commands["TGT1"]["PKT2"].disabled).to be false
405
+ tf.unlink
406
+ end
407
+ end
408
+
409
+ context "with DISABLED" do
410
+ it "marks the packet as disabled" do
411
+ tf = Tempfile.new('unittest')
412
+ tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
413
+ tf.puts 'DISABLED'
414
+ tf.puts 'COMMAND tgt1 pkt2 LITTLE_ENDIAN "Description"'
415
+ tf.close
416
+ @pc.process_file(tf.path, "TGT1")
417
+ expect(@pc.commands["TGT1"]["PKT1"].hidden).to be true
418
+ expect(@pc.commands["TGT1"]["PKT1"].disabled).to be true
419
+ expect(@pc.commands["TGT1"]["PKT2"].hidden).to be false
420
+ expect(@pc.commands["TGT1"]["PKT2"].disabled).to be false
421
+ tf.unlink
422
+ end
423
+ end
424
+
425
+ context "with HAZARDOUS" do
426
+ it "marks the packet as hazardous" do
427
+ tf = Tempfile.new('unittest')
428
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Description"'
429
+ tf.puts 'HAZARDOUS'
430
+ tf.puts 'TELEMETRY tgt1 pkt2 LITTLE_ENDIAN "Description"'
431
+ tf.puts 'COMMAND tgt2 pkt1 LITTLE_ENDIAN "Description"'
432
+ tf.puts 'HAZARDOUS'
433
+ tf.puts 'COMMAND tgt2 pkt2 LITTLE_ENDIAN "Description"'
434
+ tf.close
435
+ @pc.process_file(tf.path, "SYSTEM")
436
+ expect(@pc.telemetry["TGT1"]["PKT1"].hazardous).to be true
437
+ expect(@pc.telemetry["TGT1"]["PKT2"].hazardous).to be false
438
+ expect(@pc.commands["TGT2"]["PKT1"].hazardous).to be true
439
+ expect(@pc.commands["TGT2"]["PKT2"].hazardous).to be false
440
+ tf.unlink
441
+ end
442
+
443
+ it "takes a description" do
444
+ tf = Tempfile.new('unittest')
445
+ tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Description"'
446
+ tf.puts 'HAZARDOUS "Hazardous description"'
447
+ tf.close
448
+ @pc.process_file(tf.path, "TGT1")
449
+ expect(@pc.commands["TGT1"]["PKT1"].hazardous).to be true
450
+ expect(@pc.commands["TGT1"]["PKT1"].hazardous_description).to eql "Hazardous description"
451
+ tf.unlink
452
+ end
453
+ end
454
+
455
+ context "with READ_CONVERSION and WRITE_CONVERSION" do
456
+ it "complains about missing conversion file" do
457
+ filename = File.join(File.dirname(__FILE__), "../test_only.rb")
458
+ File.delete(filename) if File.exist?(filename)
459
+ @pc = PacketConfig.new
460
+
461
+ tf = Tempfile.new('unittest')
462
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
463
+ tf.puts ' ITEM item1 0 16 INT "Integer Item"'
464
+ tf.puts ' READ_CONVERSION test_only.rb'
465
+ tf.close
466
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /TestOnly class not found/)
467
+ tf.unlink
468
+
469
+ tf = Tempfile.new('unittest')
470
+ tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
471
+ tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
472
+ tf.puts ' WRITE_CONVERSION test_only.rb'
473
+ tf.close
474
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /TestOnly class not found/)
475
+ tf.unlink
476
+ end
477
+
478
+ it "complains about a non Cosmos::Conversion class" do
479
+ filename = File.join(File.dirname(__FILE__), "../conversion1.rb")
480
+ File.open(filename, 'w') do |file|
481
+ file.puts "class Conversion1"
482
+ file.puts " def call(value,packet,buffer)"
483
+ file.puts " end"
484
+ file.puts "end"
485
+ end
486
+ load 'conversion1.rb'
487
+ File.delete(filename) if File.exist?(filename)
488
+
489
+ tf = Tempfile.new('unittest')
490
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
491
+ tf.puts ' ITEM item1 0 16 INT "Integer Item"'
492
+ tf.puts ' READ_CONVERSION conversion1.rb'
493
+ tf.close
494
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /read_conversion must be a Cosmos::Conversion but is a Conversion1/)
495
+ tf.unlink
496
+
497
+ tf = Tempfile.new('unittest')
498
+ tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
499
+ tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
500
+ tf.puts ' WRITE_CONVERSION conversion1.rb'
501
+ tf.close
502
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, /write_conversion must be a Cosmos::Conversion but is a Conversion1/)
503
+ tf.unlink
504
+ end
505
+
506
+ it "parses the conversion" do
507
+ filename = File.join(File.dirname(__FILE__), "../conversion2.rb")
508
+ File.open(filename, 'w') do |file|
509
+ file.puts "require 'cosmos/conversions/conversion'"
510
+ file.puts "class Conversion2 < Cosmos::Conversion"
511
+ file.puts " def call(value,packet,buffer)"
512
+ file.puts " value * 2"
513
+ file.puts " end"
514
+ file.puts "end"
515
+ end
516
+ load 'conversion2.rb'
517
+
518
+ tf = Tempfile.new('unittest')
519
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
520
+ tf.puts ' ITEM item1 0 16 INT "Integer Item"'
521
+ tf.puts ' READ_CONVERSION conversion2.rb'
522
+ tf.close
523
+ @pc.process_file(tf.path, "TGT1")
524
+ @pc.telemetry["TGT1"]["PKT1"].buffer = "\x01"
525
+ expect(@pc.telemetry["TGT1"]["PKT1"].read("ITEM1")).to eql 2
526
+ tf.unlink
527
+
528
+ tf = Tempfile.new('unittest')
529
+ tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
530
+ tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
531
+ tf.puts ' WRITE_CONVERSION conversion2.rb'
532
+ tf.close
533
+ @pc.process_file(tf.path, "TGT1")
534
+ @pc.commands["TGT1"]["PKT1"].write("ITEM1", 3)
535
+ expect(@pc.commands["TGT1"]["PKT1"].read("ITEM1")).to eql 6
536
+ tf.unlink
537
+
538
+ File.delete(filename) if File.exist?(filename)
539
+ end
540
+ end
541
+
542
+ context "with POLY_READ_CONVERSION and POLY_WRITE_CONVERSION" do
543
+ it "performs a polynomial conversion" do
544
+ tf = Tempfile.new('unittest')
545
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
546
+ tf.puts ' ITEM item1 0 16 INT "Integer Item"'
547
+ tf.puts ' POLY_READ_CONVERSION 5 2'
548
+ tf.close
549
+ @pc.process_file(tf.path, "TGT1")
550
+ @pc.telemetry["TGT1"]["PKT1"].buffer = "\x01"
551
+ expect(@pc.telemetry["TGT1"]["PKT1"].read("ITEM1")).to eql 7.0
552
+ tf.unlink
553
+
554
+ tf = Tempfile.new('unittest')
555
+ tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
556
+ tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
557
+ tf.puts ' POLY_WRITE_CONVERSION 5 2'
558
+ tf.close
559
+ @pc.process_file(tf.path, "TGT1")
560
+ @pc.commands["TGT1"]["PKT1"].write("ITEM1", 3)
561
+ expect(@pc.commands["TGT1"]["PKT1"].read("ITEM1")).to eql 11
562
+ tf.unlink
563
+ end
564
+ end
565
+
566
+ context "with SEG_POLY_READ_CONVERSION and SEG_POLY_WRITE_CONVERSION" do
567
+ it "performs a segmented polynomial conversion" do
568
+ tf = Tempfile.new('unittest')
569
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
570
+ tf.puts ' ITEM item1 0 16 INT "Integer Item"'
571
+ tf.puts ' SEG_POLY_READ_CONVERSION 0 1 2'
572
+ tf.puts ' SEG_POLY_READ_CONVERSION 5 2 3'
573
+ tf.close
574
+ @pc.process_file(tf.path, "TGT1")
575
+ @pc.telemetry["TGT1"]["PKT1"].buffer = "\x01"
576
+ expect(@pc.telemetry["TGT1"]["PKT1"].read("ITEM1")).to eql 3.0
577
+ @pc.telemetry["TGT1"]["PKT1"].buffer = "\x05"
578
+ expect(@pc.telemetry["TGT1"]["PKT1"].read("ITEM1")).to eql 17.0
579
+ tf.unlink
580
+
581
+ tf = Tempfile.new('unittest')
582
+ tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
583
+ tf.puts ' PARAMETER item1 0 16 INT 0 0 0'
584
+ tf.puts ' SEG_POLY_WRITE_CONVERSION 0 1 2'
585
+ tf.puts ' SEG_POLY_WRITE_CONVERSION 5 2 3'
586
+ tf.close
587
+ @pc.process_file(tf.path, "TGT1")
588
+ @pc.commands["TGT1"]["PKT1"].write("ITEM1", 1)
589
+ expect(@pc.commands["TGT1"]["PKT1"].read("ITEM1")).to eql 3
590
+ @pc.commands["TGT1"]["PKT1"].write("ITEM1", 5)
591
+ expect(@pc.commands["TGT1"]["PKT1"].read("ITEM1")).to eql 17
592
+ tf.unlink
593
+ end
594
+ end
595
+
596
+ context "with GENERIC_READ_CONVERSION and GENERIC_WRITE_CONVERSION" do
597
+ it "processes a generic conversion" do
598
+ tf = Tempfile.new('unittest')
599
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
600
+ tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
601
+ tf.puts ' GENERIC_WRITE_CONVERSION_START'
602
+ tf.puts ' 2.0 * value'
603
+ tf.puts ' GENERIC_WRITE_CONVERSION_END'
604
+ tf.puts ' APPEND_ITEM item2 8 UINT "Item"'
605
+ tf.puts ' GENERIC_READ_CONVERSION_START'
606
+ tf.puts ' "Number #{value}"'
607
+ tf.puts ' GENERIC_READ_CONVERSION_END'
608
+ tf.close
609
+ @pc.process_file(tf.path, "TGT1")
610
+ pkt = @pc.telemetry["TGT1"]["PKT1"]
611
+ pkt.enable_method_missing
612
+ pkt.item1 = 2
613
+ expect(pkt.item1).to eql 4
614
+ expect(pkt.item2).to eql "Number 0"
615
+ tf.unlink
616
+ end
617
+
618
+ it "processes a generic conversion with a defined type" do
619
+ tf = Tempfile.new('unittest')
620
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
621
+ tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
622
+ tf.puts ' GENERIC_WRITE_CONVERSION_START UINT 8'
623
+ tf.puts ' 2.0 * value'
624
+ tf.puts ' GENERIC_WRITE_CONVERSION_END'
625
+ tf.puts ' APPEND_ITEM item2 64 FLOAT "Item"'
626
+ tf.puts ' GENERIC_READ_CONVERSION_START FLOAT 32'
627
+ tf.puts ' 2.0 * value'
628
+ tf.puts ' GENERIC_READ_CONVERSION_END'
629
+ tf.close
630
+ @pc.process_file(tf.path, "TGT1")
631
+ pkt = @pc.telemetry["TGT1"]["PKT1"]
632
+ pkt.enable_method_missing
633
+ pkt.item1 = 400
634
+ expect(pkt.item1).to eql 800
635
+ pkt.item2 = 400
636
+ expect(pkt.item2).to eql 800.0
637
+ tf.unlink
638
+ end
639
+ end
640
+
641
+ context "with LIMITS" do
642
+ it "ensures limits sets have unique names" do
643
+ tf = Tempfile.new('unittest')
644
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
645
+ tf.puts ' APPEND_ITEM item1 16 UINT "Item"'
646
+ tf.puts ' LIMITS DEFAULT 1 ENABLED 1 2 6 7'
647
+ tf.puts ' LIMITS TVAC 1 ENABLED 1 2 6 7'
648
+ tf.puts ' LIMITS DEFAULT 1 ENABLED 8 9 12 13'
649
+ tf.close
650
+ @pc.process_file(tf.path, "TGT1")
651
+ item = @pc.telemetry["TGT1"]["PKT1"].items["ITEM1"]
652
+ expect(item.limits.values.length).to eql 2
653
+ # Verify the last defined DEFAULT limits wins
654
+ @pc.telemetry["TGT1"]["PKT1"].buffer = "\x04"
655
+ @pc.telemetry["TGT1"]["PKT1"].enable_limits("ITEM1")
656
+ @pc.telemetry["TGT1"]["PKT1"].check_limits
657
+ expect(item.limits.state).to eql :RED_LOW
658
+ tf.unlink
659
+ end
660
+ end
661
+
662
+ context "with UNITS" do
663
+ it "apply units when read :WITH_UNITS" do
664
+ tf = Tempfile.new('unittest')
665
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
666
+ tf.puts ' ITEM item1 0 8 UINT'
667
+ tf.puts ' UNITS Volts V'
668
+ tf.close
669
+ @pc.process_file(tf.path, "TGT1")
670
+ expect(@pc.telemetry["TGT1"]["PKT1"].read("ITEM1",:WITH_UNITS)).to eql "0 V"
671
+ tf.unlink
672
+ end
673
+ end
674
+
675
+ context "with META" do
676
+ it "saves metadata for items" do
677
+ tf = Tempfile.new('unittest')
678
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
679
+ tf.puts ' ITEM item1 0 8 UINT'
680
+ tf.puts ' META TYPE "unsigned int"'
681
+ tf.puts ' META OTHER'
682
+ tf.close
683
+ @pc.process_file(tf.path, "TGT1")
684
+ expect(@pc.telemetry["TGT1"]["PKT1"].get_item('item1').meta['TYPE']).to eql ['unsigned int']
685
+ expect(@pc.telemetry["TGT1"]["PKT1"].get_item('item1').meta['OTHER']).to eql []
686
+ tf.unlink
687
+ end
688
+ end
689
+
690
+ context "with OVERFLOW" do
691
+ it "sets the overflow type for items" do
692
+ tf = Tempfile.new('unittest')
693
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
694
+ tf.puts ' ITEM item1 0 8 UINT'
695
+ tf.puts ' OVERFLOW TRUNCATE'
696
+ tf.puts ' ITEM item2 8 8 UINT'
697
+ tf.puts ' OVERFLOW SATURATE'
698
+ tf.puts ' ITEM item3 16 8 UINT'
699
+ tf.puts ' OVERFLOW ERROR'
700
+ tf.puts ' ITEM item4 24 8 INT'
701
+ tf.puts ' OVERFLOW ERROR_ALLOW_HEX'
702
+ tf.close
703
+ @pc.process_file(tf.path, "TGT1")
704
+ expect(@pc.telemetry["TGT1"]["PKT1"].get_item('item1').overflow).to eql :TRUNCATE
705
+ expect(@pc.telemetry["TGT1"]["PKT1"].get_item('item2').overflow).to eql :SATURATE
706
+ expect(@pc.telemetry["TGT1"]["PKT1"].get_item('item3').overflow).to eql :ERROR
707
+ expect(@pc.telemetry["TGT1"]["PKT1"].get_item('item4').overflow).to eql :ERROR_ALLOW_HEX
708
+ tf.unlink
709
+ end
710
+ end
711
+
712
+ context "with REQUIRED" do
713
+ it "only applies to a command parameter" do
714
+ tf = Tempfile.new('unittest')
715
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
716
+ tf.puts ' ITEM item1 0 8 UINT'
717
+ tf.puts ' REQUIRED'
718
+ tf.close
719
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "REQUIRED only applies to command parameters")
720
+ tf.unlink
721
+
722
+ tf = Tempfile.new('unittest')
723
+ tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
724
+ tf.puts ' REQUIRED'
725
+ tf.close
726
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "No current item for REQUIRED")
727
+ tf.unlink
728
+ end
729
+
730
+ it "marks a command parameter as required" do
731
+ tf = Tempfile.new('unittest')
732
+ tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
733
+ tf.puts ' PARAMETER item1 0 8 UINT 0 1 1'
734
+ tf.puts ' REQUIRED'
735
+ tf.puts ' PARAMETER item2 0 8 UINT 0 1 1'
736
+ tf.close
737
+ @pc.process_file(tf.path, "TGT1")
738
+ expect(@pc.commands["TGT1"]["PKT1"].items["ITEM1"].required).to be true
739
+ expect(@pc.commands["TGT1"]["PKT1"].items["ITEM2"].required).to be false
740
+ tf.unlink
741
+ end
742
+ end
743
+
744
+ context "with MINIMUM_VALUE, MAXIMUM_VALUE, DEFAULT_VALUE" do
745
+ it "complains if used on telemetry items" do
746
+ tf = Tempfile.new('unittest')
747
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
748
+ tf.puts ' APPEND_ITEM item1 16 UINT'
749
+ tf.puts ' MINIMUM_VALUE 1'
750
+ tf.close
751
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "MINIMUM_VALUE only applies to command parameters")
752
+ tf.unlink
753
+
754
+ tf = Tempfile.new('unittest')
755
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
756
+ tf.puts ' APPEND_ITEM item1 16 UINT'
757
+ tf.puts ' MAXIMUM_VALUE 3'
758
+ tf.close
759
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "MAXIMUM_VALUE only applies to command parameters")
760
+ tf.unlink
761
+
762
+ tf = Tempfile.new('unittest')
763
+ tf.puts 'TELEMETRY tgt1 pkt1 LITTLE_ENDIAN "Packet"'
764
+ tf.puts ' APPEND_ITEM item1 16 UINT'
765
+ tf.puts ' DEFAULT_VALUE 2'
766
+ tf.close
767
+ expect { @pc.process_file(tf.path, "TGT1") }.to raise_error(ConfigParser::Error, "DEFAULT_VALUE only applies to command parameters")
768
+ tf.unlink
769
+ end
770
+
771
+ it "allows overriding the defined value" do
772
+ tf = Tempfile.new('unittest')
773
+ tf.puts 'COMMAND tgt1 pkt1 LITTLE_ENDIAN "Packet"'
774
+ tf.puts ' APPEND_PARAMETER item1 16 UINT 0 1 1'
775
+ tf.puts ' APPEND_PARAMETER item2 16 STRING "HI"'
776
+ tf.close
777
+ @pc.process_file(tf.path, "TGT1")
778
+ @pc.commands["TGT1"]["PKT1"].restore_defaults
779
+ expect(@pc.commands["TGT1"]["PKT1"].read("ITEM1")).to eql 1
780
+ expect(@pc.commands["TGT1"]["PKT1"].items["ITEM1"].range).to eql (0..1)
781
+ expect(@pc.commands["TGT1"]["PKT1"].read("ITEM2")).to eql "HI"
782
+ tf.unlink
783
+
784
+ # Now override the values from above
785
+ tf = Tempfile.new('unittest')
786
+ tf.puts 'SELECT_COMMAND tgt1 pkt1'
787
+ tf.puts 'SELECT_PARAMETER item1'
788
+ tf.puts ' MINIMUM_VALUE 1'
789
+ tf.puts ' MAXIMUM_VALUE 3'
790
+ tf.puts ' DEFAULT_VALUE 2'
791
+ tf.puts 'SELECT_PARAMETER item2'
792
+ tf.puts ' DEFAULT_VALUE "NO"'
793
+ tf.close
794
+ @pc.process_file(tf.path, "TGT1")
795
+ @pc.commands["TGT1"]["PKT1"].restore_defaults
796
+ expect(@pc.commands["TGT1"]["PKT1"].read("ITEM1")).to eql 2
797
+ expect(@pc.commands["TGT1"]["PKT1"].items["ITEM1"].range).to eql (1..3)
798
+ expect(@pc.commands["TGT1"]["PKT1"].read("ITEM2")).to eql "NO"
799
+ tf.unlink
800
+ end
801
+ end
802
+
803
+ end # describe "process_file"
804
+ end
805
+ end