cosmos 3.0.1 → 3.1.0

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