cosmos 3.5.1 → 3.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1158) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -1
  3. data/.gitattributes +3 -3
  4. data/.gitignore +48 -48
  5. data/.travis.yml +8 -8
  6. data/CONTRIBUTING.txt +50 -50
  7. data/Gemfile +10 -10
  8. data/Guardfile +27 -27
  9. data/LICENSE.txt +879 -879
  10. data/Manifest.txt +1414 -1414
  11. data/README.md +111 -111
  12. data/Rakefile +218 -214
  13. data/autohotkey/config/data/diamond.STL +57 -57
  14. data/autohotkey/config/system/system.txt +34 -34
  15. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  16. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  17. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  18. data/autohotkey/config/targets/COSMOS/target.txt +5 -5
  19. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  20. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +270 -270
  21. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
  22. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
  23. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -305
  24. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
  25. data/autohotkey/config/targets/INST/screens/array.txt +7 -7
  26. data/autohotkey/config/targets/INST/screens/block.txt +8 -8
  27. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
  28. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
  29. data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
  30. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
  31. data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
  32. data/autohotkey/config/targets/INST/screens/image.txt +21 -21
  33. data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
  34. data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
  35. data/autohotkey/config/targets/INST/screens/other.txt +25 -25
  36. data/autohotkey/config/targets/INST/screens/params.txt +25 -25
  37. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
  38. data/autohotkey/config/targets/INST/target.txt +26 -26
  39. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  40. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
  41. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  42. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
  43. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
  44. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
  45. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
  46. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  47. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  48. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  49. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
  50. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  51. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  52. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  53. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  54. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  55. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  56. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  57. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  58. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
  59. data/autohotkey/config/tools/launcher/launcher.txt +38 -38
  60. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
  61. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
  62. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
  63. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
  64. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
  65. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
  66. data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
  67. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  68. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  69. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
  70. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
  71. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
  72. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
  73. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
  74. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
  75. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
  76. data/autohotkey/lib/example_background_task.rb +42 -42
  77. data/autohotkey/lib/user_version.rb +3 -3
  78. data/autohotkey/procedures/clear_util.rb +7 -7
  79. data/autohotkey/procedures/collect_util.rb +14 -14
  80. data/autohotkey/procedures/example_test.rb +67 -67
  81. data/autohotkey/procedures/example_test2.rb +74 -74
  82. data/autohotkey/procedures/script_test.rb +17 -17
  83. data/autohotkey/procedures/syntax_error.rb +18 -18
  84. data/autohotkey/tools/CmdExtractorAHK +16 -16
  85. data/autohotkey/tools/CmdSender +14 -14
  86. data/autohotkey/tools/CmdSenderAHK +18 -18
  87. data/autohotkey/tools/CmdTlmServer +14 -14
  88. data/autohotkey/tools/CmdTlmServerAHK +28 -28
  89. data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
  90. data/autohotkey/tools/DataViewer +14 -14
  91. data/autohotkey/tools/DataViewerAHK +17 -17
  92. data/autohotkey/tools/HandbookCreatorAHK +20 -20
  93. data/autohotkey/tools/LauncherAHK +17 -17
  94. data/autohotkey/tools/LimitsMonitorAHK +20 -20
  95. data/autohotkey/tools/OpenGLBuilderAHK +24 -24
  96. data/autohotkey/tools/PacketViewer +14 -14
  97. data/autohotkey/tools/PacketViewerAHK +18 -18
  98. data/autohotkey/tools/PacketViewerAHK2 +17 -17
  99. data/autohotkey/tools/Replay +14 -14
  100. data/autohotkey/tools/ReplayAHK +17 -17
  101. data/autohotkey/tools/ScriptRunner +14 -14
  102. data/autohotkey/tools/ScriptRunnerAHK +20 -20
  103. data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
  104. data/autohotkey/tools/TableManager +14 -14
  105. data/autohotkey/tools/TableManagerAHK +30 -30
  106. data/autohotkey/tools/TestRunner +15 -15
  107. data/autohotkey/tools/TestRunnerAHK +17 -17
  108. data/autohotkey/tools/TestRunnerAHK2 +17 -17
  109. data/autohotkey/tools/TestRunnerAHK3 +17 -17
  110. data/autohotkey/tools/TestRunnerAHK4 +17 -17
  111. data/autohotkey/tools/TestRunnerAHK5 +17 -17
  112. data/autohotkey/tools/TestRunnerAHK6 +17 -17
  113. data/autohotkey/tools/TlmExtractor +15 -15
  114. data/autohotkey/tools/TlmExtractorAHK +19 -19
  115. data/autohotkey/tools/TlmExtractorAHK2 +16 -16
  116. data/autohotkey/tools/TlmExtractorAHK3 +16 -16
  117. data/autohotkey/tools/TlmGrapher +14 -14
  118. data/autohotkey/tools/TlmGrapherAHK +19 -19
  119. data/autohotkey/tools/TlmGrapherAHK2 +23 -23
  120. data/autohotkey/tools/TlmGrapherAHK3 +17 -17
  121. data/autohotkey/tools/TlmGrapherAHK4 +17 -17
  122. data/autohotkey/tools/TlmViewer +14 -14
  123. data/autohotkey/tools/TlmViewerAHK +28 -28
  124. data/autohotkey/tools/TlmViewerAHK2 +22 -22
  125. data/autohotkey/tools/TlmViewerAHK3 +23 -23
  126. data/autohotkey/tools/TlmViewerAHK4 +22 -22
  127. data/autohotkey/tools/TlmViewerAHK5 +18 -18
  128. data/autohotkey/tools/autohotkey.rb +37 -37
  129. data/autohotkey/tools/cmd_extractor.ahk +33 -33
  130. data/autohotkey/tools/cmd_sender.ahk +182 -182
  131. data/autohotkey/tools/cmd_tlm_server.ahk +90 -90
  132. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
  133. data/autohotkey/tools/data_viewer.ahk +141 -141
  134. data/autohotkey/tools/handbook_creator.ahk +32 -32
  135. data/autohotkey/tools/launcher.ahk +41 -41
  136. data/autohotkey/tools/limits_monitor.ahk +123 -123
  137. data/autohotkey/tools/open_gl_builder.ahk +134 -134
  138. data/autohotkey/tools/packet_viewer.ahk +196 -196
  139. data/autohotkey/tools/packet_viewer2.ahk +9 -9
  140. data/autohotkey/tools/replay.ahk +104 -104
  141. data/autohotkey/tools/script_runner.ahk +589 -589
  142. data/autohotkey/tools/script_runner2.ahk +38 -38
  143. data/autohotkey/tools/table_manager.ahk +220 -220
  144. data/autohotkey/tools/test_runner.ahk +262 -262
  145. data/autohotkey/tools/test_runner2.ahk +53 -53
  146. data/autohotkey/tools/test_runner3.ahk +13 -13
  147. data/autohotkey/tools/test_runner5.ahk +8 -8
  148. data/autohotkey/tools/test_runner6.ahk +5 -5
  149. data/autohotkey/tools/tlm_extractor.ahk +296 -296
  150. data/autohotkey/tools/tlm_grapher.ahk +660 -660
  151. data/autohotkey/tools/tlm_grapher2.ahk +115 -115
  152. data/autohotkey/tools/tlm_grapher3.ahk +24 -24
  153. data/autohotkey/tools/tlm_viewer.ahk +133 -133
  154. data/autohotkey/tools/tlm_viewer2.ahk +50 -50
  155. data/autohotkey/tools/tlm_viewer4.ahk +4 -4
  156. data/autohotkey/tools/tlm_viewer5.ahk +20 -20
  157. data/bin/cosmos +96 -96
  158. data/bin/cstol_converter +1166 -1166
  159. data/bin/rubysloc +85 -85
  160. data/cosmos.gemspec +99 -99
  161. data/data/about.txt +4 -4
  162. data/data/crc.txt +326 -326
  163. data/data/diamond.STL +57 -57
  164. data/data/legal.txt +9 -9
  165. data/demo/Gemfile +10 -10
  166. data/demo/Launcher +16 -16
  167. data/demo/Launcher.bat +0 -0
  168. data/demo/Rakefile +77 -77
  169. data/demo/config/data/crc.txt +224 -226
  170. data/demo/config/data/diamond.STL +57 -57
  171. data/demo/config/data/meta_init.txt +4 -4
  172. data/demo/config/system/system.txt +35 -35
  173. data/demo/config/system/system2.txt +33 -33
  174. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  175. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  176. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  177. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
  178. data/demo/config/targets/COSMOS/screens/version.txt +19 -19
  179. data/demo/config/targets/COSMOS/target.txt +11 -11
  180. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
  181. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +5 -5
  182. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
  183. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
  184. data/demo/config/targets/EXAMPLE/target.txt +6 -6
  185. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  186. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  187. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
  188. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
  189. data/demo/config/targets/INST/lib/sim_inst.rb +305 -305
  190. data/demo/config/targets/INST/screens/adcs.txt +46 -46
  191. data/demo/config/targets/INST/screens/array.txt +15 -15
  192. data/demo/config/targets/INST/screens/block.txt +8 -8
  193. data/demo/config/targets/INST/screens/commanding.txt +30 -30
  194. data/demo/config/targets/INST/screens/graphs.txt +14 -14
  195. data/demo/config/targets/INST/screens/ground.txt +25 -25
  196. data/demo/config/targets/INST/screens/hs.txt +44 -44
  197. data/demo/config/targets/INST/screens/latest.txt +23 -23
  198. data/demo/config/targets/INST/screens/other.txt +29 -29
  199. data/demo/config/targets/INST/screens/tabs.txt +70 -70
  200. data/demo/config/targets/INST/target.txt +33 -33
  201. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  202. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
  203. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  204. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
  205. data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
  206. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -13
  207. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
  208. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
  209. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +56 -56
  210. data/demo/config/targets/TEMPLATED/target.txt +6 -6
  211. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +39 -39
  212. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +34 -34
  213. data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
  214. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
  215. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +88 -88
  216. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  217. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  218. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
  219. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  220. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  221. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  222. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  223. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  224. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  225. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +82 -82
  226. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  227. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
  228. data/demo/config/tools/launcher/launcher.txt +45 -45
  229. data/demo/config/tools/launcher/launcher2.txt +45 -45
  230. data/demo/config/tools/script_runner/script_runner.txt +3 -3
  231. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
  232. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  233. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  234. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  235. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  236. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  237. data/demo/config/tools/test_runner/test_runner.txt +17 -17
  238. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  239. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  240. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  241. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  242. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
  243. data/demo/lib/example_background_task.rb +57 -57
  244. data/demo/lib/example_target.rb +113 -113
  245. data/demo/lib/scpi_target.rb +74 -74
  246. data/demo/lib/user_version.rb +3 -3
  247. data/demo/procedures/checks.rb +11 -11
  248. data/demo/procedures/clear_util.rb +7 -7
  249. data/demo/procedures/collect.rb +18 -18
  250. data/demo/procedures/collect_util.rb +14 -14
  251. data/demo/procedures/cosmos_api_test.rb +293 -293
  252. data/demo/procedures/disconnect.rb +29 -29
  253. data/demo/procedures/example_test.rb +183 -183
  254. data/demo/procedures/plot_test.rb +8 -8
  255. data/demo/procedures/run_example_test.rb +3 -3
  256. data/demo/procedures/test.rb +51 -51
  257. data/demo/tools/CmdExtractor +16 -16
  258. data/demo/tools/CmdExtractor.bat +0 -0
  259. data/demo/tools/CmdSender +16 -16
  260. data/demo/tools/CmdSender.bat +0 -0
  261. data/demo/tools/CmdTlmServer +16 -16
  262. data/demo/tools/CmdTlmServer.bat +0 -0
  263. data/demo/tools/DataViewer +16 -16
  264. data/demo/tools/DataViewer.bat +0 -0
  265. data/demo/tools/ExampleTarget +16 -16
  266. data/demo/tools/ExampleTarget.bat +0 -0
  267. data/demo/tools/HandbookCreator +16 -16
  268. data/demo/tools/HandbookCreator.bat +0 -0
  269. data/demo/tools/Launcher +16 -16
  270. data/demo/tools/Launcher.bat +0 -0
  271. data/demo/tools/LimitsMonitor +16 -16
  272. data/demo/tools/LimitsMonitor.bat +0 -0
  273. data/demo/tools/OpenGLBuilder +16 -16
  274. data/demo/tools/OpenGLBuilder.bat +0 -0
  275. data/demo/tools/PacketViewer +16 -16
  276. data/demo/tools/PacketViewer.bat +0 -0
  277. data/demo/tools/Replay +16 -16
  278. data/demo/tools/Replay.bat +0 -0
  279. data/demo/tools/ScpiTarget +16 -16
  280. data/demo/tools/ScpiTarget.bat +0 -0
  281. data/demo/tools/ScriptRunner +16 -16
  282. data/demo/tools/ScriptRunner.bat +0 -0
  283. data/demo/tools/TableManager +16 -16
  284. data/demo/tools/TableManager.bat +0 -0
  285. data/demo/tools/TestRunner +16 -16
  286. data/demo/tools/TestRunner.bat +0 -0
  287. data/demo/tools/TlmExtractor +16 -16
  288. data/demo/tools/TlmExtractor.bat +0 -0
  289. data/demo/tools/TlmGrapher +16 -16
  290. data/demo/tools/TlmGrapher.bat +0 -0
  291. data/demo/tools/TlmViewer +16 -16
  292. data/demo/tools/TlmViewer.bat +0 -0
  293. data/demo/tools/ToolLaunch.bat +14 -5
  294. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  295. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  296. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  297. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  298. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  299. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  300. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  301. data/demo/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  302. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  303. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  304. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  305. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  306. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  307. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  308. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  309. data/demo/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  310. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  311. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  312. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  313. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  314. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  315. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  316. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  317. data/demo/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  318. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  319. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  320. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  321. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  322. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  323. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  324. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  325. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  326. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  327. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  328. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  329. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  330. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
  331. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  332. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  333. data/demo/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  334. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  335. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  336. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  337. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  338. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  339. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  340. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  341. data/demo/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  342. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  343. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  344. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  345. data/demo/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  346. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  347. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  348. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  349. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  350. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  351. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  352. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  353. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  354. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  355. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  356. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  357. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  358. data/demo/tools/tool_launch.rb +38 -38
  359. data/ext/cosmos/ext/array/array.c +111 -111
  360. data/ext/cosmos/ext/array/extconf.rb +13 -13
  361. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
  362. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
  363. data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
  364. data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
  365. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
  366. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
  367. data/ext/cosmos/ext/crc/crc.c +341 -341
  368. data/ext/cosmos/ext/crc/extconf.rb +12 -12
  369. data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
  370. data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
  371. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
  372. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +265 -265
  373. data/ext/cosmos/ext/packet/extconf.rb +13 -13
  374. data/ext/cosmos/ext/packet/packet.c +339 -339
  375. data/ext/cosmos/ext/platform/extconf.rb +13 -13
  376. data/ext/cosmos/ext/platform/platform.c +101 -101
  377. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
  378. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
  379. data/ext/cosmos/ext/string/extconf.rb +13 -13
  380. data/ext/cosmos/ext/string/string.c +49 -49
  381. data/ext/cosmos/ext/structure/structure.c +1428 -1428
  382. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
  383. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
  384. data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
  385. data/ext/cosmos/ext/telemetry/telemetry.c +307 -307
  386. data/ext/mkrf_conf.rb +40 -40
  387. data/install/Gemfile +10 -10
  388. data/install/Launcher +16 -16
  389. data/install/Launcher.bat +0 -0
  390. data/install/Rakefile +77 -77
  391. data/install/config/data/crc.txt +151 -151
  392. data/install/config/system/system.txt +29 -29
  393. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  394. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  395. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  396. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  397. data/install/config/targets/COSMOS/screens/version.txt +19 -19
  398. data/install/config/targets/COSMOS/target.txt +8 -8
  399. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  400. data/install/config/tools/data_viewer/data_viewer.txt +3 -3
  401. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
  402. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  403. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  404. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  405. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
  406. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  407. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  408. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  409. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  410. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  411. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  412. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  413. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  414. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
  415. data/install/config/tools/launcher/launcher.txt +40 -40
  416. data/install/config/tools/script_runner/script_runner.txt +3 -3
  417. data/install/config/tools/test_runner/test_runner.txt +8 -8
  418. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  419. data/install/lib/user_version.rb +3 -3
  420. data/install/tools/CmdExtractor +16 -16
  421. data/install/tools/CmdExtractor.bat +0 -0
  422. data/install/tools/CmdSender +16 -16
  423. data/install/tools/CmdSender.bat +0 -0
  424. data/install/tools/CmdTlmServer +16 -16
  425. data/install/tools/CmdTlmServer.bat +0 -0
  426. data/install/tools/DataViewer +16 -16
  427. data/install/tools/DataViewer.bat +0 -0
  428. data/install/tools/HandbookCreator +16 -16
  429. data/install/tools/HandbookCreator.bat +0 -0
  430. data/install/tools/Launcher +16 -16
  431. data/install/tools/Launcher.bat +0 -0
  432. data/install/tools/LimitsMonitor +16 -16
  433. data/install/tools/LimitsMonitor.bat +0 -0
  434. data/install/tools/OpenGLBuilder +16 -16
  435. data/install/tools/OpenGLBuilder.bat +0 -0
  436. data/install/tools/PacketViewer +16 -16
  437. data/install/tools/PacketViewer.bat +0 -0
  438. data/install/tools/Replay +16 -16
  439. data/install/tools/Replay.bat +0 -0
  440. data/install/tools/ScriptRunner +16 -16
  441. data/install/tools/ScriptRunner.bat +0 -0
  442. data/install/tools/TableManager +16 -16
  443. data/install/tools/TableManager.bat +0 -0
  444. data/install/tools/TestRunner +16 -16
  445. data/install/tools/TestRunner.bat +0 -0
  446. data/install/tools/TlmExtractor +16 -16
  447. data/install/tools/TlmExtractor.bat +0 -0
  448. data/install/tools/TlmGrapher +16 -16
  449. data/install/tools/TlmGrapher.bat +0 -0
  450. data/install/tools/TlmViewer +16 -16
  451. data/install/tools/TlmViewer.bat +0 -0
  452. data/install/tools/ToolLaunch.bat +14 -5
  453. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  454. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +16 -16
  455. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +10 -10
  456. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  457. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  458. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +16 -16
  459. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +10 -10
  460. data/install/tools/mac/CmdSender.app/Contents/MacOS/tool_launch.rb +38 -38
  461. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  462. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +16 -16
  463. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +10 -10
  464. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/tool_launch.rb +38 -38
  465. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  466. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +16 -16
  467. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +10 -10
  468. data/install/tools/mac/DataViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  469. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  470. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +16 -16
  471. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +10 -10
  472. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/tool_launch.rb +38 -38
  473. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  474. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +16 -16
  475. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +10 -10
  476. data/install/tools/mac/Launcher.app/Contents/MacOS/tool_launch.rb +38 -38
  477. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  478. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +16 -16
  479. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +10 -10
  480. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/tool_launch.rb +38 -38
  481. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  482. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +16 -16
  483. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +10 -10
  484. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/tool_launch.rb +38 -38
  485. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  486. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +16 -16
  487. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +10 -10
  488. data/install/tools/mac/PacketViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  489. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
  490. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +16 -16
  491. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +10 -10
  492. data/install/tools/mac/Replay.app/Contents/MacOS/tool_launch.rb +38 -38
  493. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  494. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +16 -16
  495. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +10 -10
  496. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  497. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  498. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +16 -16
  499. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +10 -10
  500. data/install/tools/mac/TableManager.app/Contents/MacOS/tool_launch.rb +38 -38
  501. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  502. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +16 -16
  503. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +10 -10
  504. data/install/tools/mac/TestRunner.app/Contents/MacOS/tool_launch.rb +38 -38
  505. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  506. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +16 -16
  507. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +10 -10
  508. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/tool_launch.rb +38 -38
  509. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  510. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +16 -16
  511. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +10 -10
  512. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/tool_launch.rb +38 -38
  513. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  514. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +16 -16
  515. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +10 -10
  516. data/install/tools/mac/TlmViewer.app/Contents/MacOS/tool_launch.rb +38 -38
  517. data/install/tools/tool_launch.rb +38 -38
  518. data/lib/cosmos.rb +63 -63
  519. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
  520. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
  521. data/lib/cosmos/config/config_parser.rb +324 -324
  522. data/lib/cosmos/conversions.rb +13 -13
  523. data/lib/cosmos/conversions/conversion.rb +47 -47
  524. data/lib/cosmos/conversions/generic_conversion.rb +55 -55
  525. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
  526. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
  527. data/lib/cosmos/conversions/processor_conversion.rb +46 -46
  528. data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
  529. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
  530. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
  531. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
  532. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
  533. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
  534. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
  535. data/lib/cosmos/core_ext.rb +18 -18
  536. data/lib/cosmos/core_ext/array.rb +354 -354
  537. data/lib/cosmos/core_ext/class.rb +51 -51
  538. data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
  539. data/lib/cosmos/core_ext/exception.rb +52 -52
  540. data/lib/cosmos/core_ext/file.rb +75 -75
  541. data/lib/cosmos/core_ext/hash.rb +28 -28
  542. data/lib/cosmos/core_ext/io.rb +75 -75
  543. data/lib/cosmos/core_ext/kernel.rb +38 -38
  544. data/lib/cosmos/core_ext/math.rb +119 -119
  545. data/lib/cosmos/core_ext/matrix.rb +146 -146
  546. data/lib/cosmos/core_ext/objectspace.rb +29 -29
  547. data/lib/cosmos/core_ext/range.rb +22 -22
  548. data/lib/cosmos/core_ext/socket.rb +32 -32
  549. data/lib/cosmos/core_ext/string.rb +311 -311
  550. data/lib/cosmos/core_ext/stringio.rb +24 -24
  551. data/lib/cosmos/core_ext/time.rb +448 -448
  552. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
  553. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
  554. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
  555. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
  556. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
  557. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +326 -326
  558. data/lib/cosmos/gui/dialogs/about_dialog.rb +137 -137
  559. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
  560. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
  561. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
  562. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
  563. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
  564. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
  565. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +260 -260
  566. data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -169
  567. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
  568. data/lib/cosmos/gui/dialogs/progress_dialog.rb +276 -276
  569. data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -165
  570. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
  571. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
  572. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
  573. data/lib/cosmos/gui/dialogs/splash.rb +135 -135
  574. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
  575. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
  576. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
  577. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
  578. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +473 -473
  579. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
  580. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +451 -451
  581. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
  582. data/lib/cosmos/gui/line_graph/lines.rb +290 -290
  583. data/lib/cosmos/gui/line_graph/overview_graph.rb +469 -469
  584. data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
  585. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
  586. data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
  587. data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
  588. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
  589. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
  590. data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -724
  591. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
  592. data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
  593. data/lib/cosmos/gui/opengl/opengl.rb +8 -8
  594. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
  595. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
  596. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
  597. data/lib/cosmos/gui/qt.rb +860 -860
  598. data/lib/cosmos/gui/qt_tool.rb +380 -380
  599. data/lib/cosmos/gui/text/completion.rb +381 -381
  600. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
  601. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
  602. data/lib/cosmos/gui/text/ruby_editor.rb +415 -415
  603. data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
  604. data/lib/cosmos/gui/utilities/script_module_gui.rb +330 -330
  605. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
  606. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
  607. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
  608. data/lib/cosmos/interfaces.rb +11 -11
  609. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -153
  610. data/lib/cosmos/interfaces/interface.rb +225 -225
  611. data/lib/cosmos/interfaces/linc_interface.rb +360 -360
  612. data/lib/cosmos/interfaces/serial_interface.rb +76 -76
  613. data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -129
  614. data/lib/cosmos/interfaces/stream_interface.rb +136 -136
  615. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
  616. data/lib/cosmos/interfaces/tcpip_server_interface.rb +164 -164
  617. data/lib/cosmos/interfaces/udp_interface.rb +161 -161
  618. data/lib/cosmos/io/buffered_file.rb +11 -11
  619. data/lib/cosmos/io/cosmos_snmp.rb +50 -50
  620. data/lib/cosmos/io/io_multiplexer.rb +89 -89
  621. data/lib/cosmos/io/json_drb.rb +376 -376
  622. data/lib/cosmos/io/json_drb_object.rb +198 -198
  623. data/lib/cosmos/io/json_rpc.rb +365 -365
  624. data/lib/cosmos/io/posix_serial_driver.rb +145 -145
  625. data/lib/cosmos/io/raw_logger.rb +174 -174
  626. data/lib/cosmos/io/raw_logger_pair.rb +71 -71
  627. data/lib/cosmos/io/serial_driver.rb +85 -85
  628. data/lib/cosmos/io/stderr.rb +36 -36
  629. data/lib/cosmos/io/stdout.rb +36 -36
  630. data/lib/cosmos/io/tcpip_server.rb +571 -571
  631. data/lib/cosmos/io/udp_sockets.rb +152 -152
  632. data/lib/cosmos/io/win32_serial_driver.rb +145 -145
  633. data/lib/cosmos/packet_logs.rb +7 -7
  634. data/lib/cosmos/packet_logs/ccsds_log_reader.rb +104 -104
  635. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
  636. data/lib/cosmos/packet_logs/packet_log_reader.rb +450 -450
  637. data/lib/cosmos/packet_logs/packet_log_writer.rb +323 -323
  638. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
  639. data/lib/cosmos/packets/binary_accessor.rb +634 -634
  640. data/lib/cosmos/packets/commands.rb +293 -293
  641. data/lib/cosmos/packets/limits.rb +267 -267
  642. data/lib/cosmos/packets/limits_response.rb +38 -38
  643. data/lib/cosmos/packets/packet.rb +786 -786
  644. data/lib/cosmos/packets/packet_config.rb +482 -482
  645. data/lib/cosmos/packets/packet_item.rb +317 -317
  646. data/lib/cosmos/packets/packet_item_limits.rb +128 -128
  647. data/lib/cosmos/packets/parsers/format_string_parser.rb +58 -58
  648. data/lib/cosmos/packets/parsers/limits_parser.rb +146 -146
  649. data/lib/cosmos/packets/parsers/limits_response_parser.rb +52 -52
  650. data/lib/cosmos/packets/parsers/macro_parser.rb +116 -116
  651. data/lib/cosmos/packets/parsers/packet_item_parser.rb +215 -215
  652. data/lib/cosmos/packets/parsers/packet_parser.rb +123 -123
  653. data/lib/cosmos/packets/parsers/processor_parser.rb +63 -63
  654. data/lib/cosmos/packets/parsers/state_parser.rb +116 -116
  655. data/lib/cosmos/packets/structure.rb +458 -458
  656. data/lib/cosmos/packets/structure_item.rb +233 -233
  657. data/lib/cosmos/packets/telemetry.rb +350 -350
  658. data/lib/cosmos/processors.rb +6 -6
  659. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
  660. data/lib/cosmos/processors/processor.rb +71 -71
  661. data/lib/cosmos/processors/statistics_processor.rb +65 -65
  662. data/lib/cosmos/processors/watermark_processor.rb +44 -44
  663. data/lib/cosmos/script.rb +9 -9
  664. data/lib/cosmos/script/cmd_tlm_server.rb +110 -110
  665. data/lib/cosmos/script/commands.rb +184 -184
  666. data/lib/cosmos/script/extract.rb +123 -123
  667. data/lib/cosmos/script/limits.rb +114 -114
  668. data/lib/cosmos/script/script.rb +76 -76
  669. data/lib/cosmos/script/scripting.rb +897 -897
  670. data/lib/cosmos/script/telemetry.rb +174 -174
  671. data/lib/cosmos/script/tools.rb +138 -138
  672. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
  673. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
  674. data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
  675. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
  676. data/lib/cosmos/streams/serial_stream.rb +157 -157
  677. data/lib/cosmos/streams/stream.rb +63 -63
  678. data/lib/cosmos/streams/stream_protocol.rb +373 -373
  679. data/lib/cosmos/streams/tcpip_client_stream.rb +113 -113
  680. data/lib/cosmos/streams/tcpip_socket_stream.rb +143 -143
  681. data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
  682. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
  683. data/lib/cosmos/system.rb +4 -4
  684. data/lib/cosmos/system/system.rb +618 -618
  685. data/lib/cosmos/system/target.rb +197 -197
  686. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +255 -255
  687. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +717 -717
  688. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
  689. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
  690. data/lib/cosmos/tools/cmd_tlm_server/api.rb +1034 -1034
  691. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
  692. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -67
  693. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +515 -515
  694. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +253 -253
  695. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +408 -408
  696. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
  697. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +175 -175
  698. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +200 -200
  699. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +176 -176
  700. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +150 -150
  701. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +244 -244
  702. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +90 -90
  703. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +266 -266
  704. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
  705. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
  706. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
  707. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
  708. data/lib/cosmos/tools/data_viewer/data_viewer.rb +621 -621
  709. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +134 -134
  710. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
  711. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +156 -156
  712. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +382 -382
  713. data/lib/cosmos/tools/launcher/launcher.rb +188 -188
  714. data/lib/cosmos/tools/launcher/launcher_config.rb +256 -256
  715. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -40
  716. data/lib/cosmos/tools/launcher/launcher_tool.rb +116 -116
  717. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +837 -837
  718. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
  719. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
  720. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +542 -542
  721. data/lib/cosmos/tools/replay/replay.rb +501 -501
  722. data/lib/cosmos/tools/replay/replay_server.rb +91 -91
  723. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -147
  724. data/lib/cosmos/tools/script_runner/script_runner.rb +922 -922
  725. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
  726. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1798 -1798
  727. data/lib/cosmos/tools/table_manager/table.rb +70 -70
  728. data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
  729. data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
  730. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
  731. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
  732. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
  733. data/lib/cosmos/tools/test_runner/test.rb +539 -539
  734. data/lib/cosmos/tools/test_runner/test_runner.rb +1189 -1189
  735. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +341 -341
  736. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
  737. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1016 -1016
  738. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
  739. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
  740. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
  741. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
  742. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +95 -95
  743. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
  744. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +181 -181
  745. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
  746. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
  747. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +174 -174
  748. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +193 -193
  749. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +407 -407
  750. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
  751. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
  752. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -323
  753. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
  754. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
  755. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
  756. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
  757. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
  758. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
  759. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
  760. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
  761. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
  762. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
  763. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
  764. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1291 -1291
  765. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
  766. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
  767. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +114 -114
  768. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
  769. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +78 -78
  770. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
  771. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
  772. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
  773. data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -486
  774. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +561 -561
  775. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +290 -290
  776. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
  777. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
  778. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +66 -66
  779. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +57 -57
  780. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
  781. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
  782. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
  783. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
  784. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
  785. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
  786. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
  787. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
  788. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
  789. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
  790. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
  791. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
  792. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
  793. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
  794. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
  795. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
  796. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
  797. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
  798. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
  799. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
  800. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
  801. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
  802. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
  803. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
  804. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
  805. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
  806. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
  807. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
  808. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
  809. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
  810. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
  811. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
  812. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
  813. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
  814. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
  815. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
  816. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
  817. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
  818. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
  819. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
  820. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
  821. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
  822. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
  823. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
  824. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
  825. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
  826. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
  827. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
  828. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
  829. data/lib/cosmos/top_level.rb +759 -759
  830. data/lib/cosmos/utilities.rb +11 -11
  831. data/lib/cosmos/utilities/crc.rb +166 -166
  832. data/lib/cosmos/utilities/csv.rb +83 -83
  833. data/lib/cosmos/utilities/logger.rb +137 -137
  834. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
  835. data/lib/cosmos/utilities/message_log.rb +79 -79
  836. data/lib/cosmos/utilities/quaternion.rb +258 -258
  837. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
  838. data/lib/cosmos/utilities/simulated_target.rb +99 -99
  839. data/lib/cosmos/utilities/sleeper.rb +44 -44
  840. data/lib/cosmos/version.rb +12 -12
  841. data/lib/cosmos/win32/excel.rb +66 -66
  842. data/lib/cosmos/win32/win32.rb +387 -387
  843. data/lib/cosmos/win32/win32_main.rb +321 -321
  844. data/roodi.yml +24 -24
  845. data/run_gui_tests.bat +0 -0
  846. data/spec/ccsds/ccsds_packet_spec.rb +67 -67
  847. data/spec/ccsds/ccsds_parser_spec.rb +148 -148
  848. data/spec/config/config_parser_spec.rb +322 -322
  849. data/spec/conversions/conversion_spec.rb +31 -31
  850. data/spec/conversions/generic_conversion_spec.rb +45 -45
  851. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
  852. data/spec/conversions/polynomial_conversion_spec.rb +40 -40
  853. data/spec/conversions/processor_conversion_spec.rb +45 -45
  854. data/spec/conversions/received_count_conversion_spec.rb +43 -43
  855. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
  856. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
  857. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
  858. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
  859. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
  860. data/spec/core_ext/array_spec.rb +186 -186
  861. data/spec/core_ext/class_spec.rb +36 -36
  862. data/spec/core_ext/cosmos_io_spec.rb +77 -77
  863. data/spec/core_ext/exception_spec.rb +91 -91
  864. data/spec/core_ext/file_spec.rb +72 -72
  865. data/spec/core_ext/hash_spec.rb +24 -24
  866. data/spec/core_ext/io_spec.rb +46 -46
  867. data/spec/core_ext/kernel_spec.rb +54 -54
  868. data/spec/core_ext/math_spec.rb +116 -116
  869. data/spec/core_ext/matrix_spec.rb +66 -66
  870. data/spec/core_ext/objectspace_spec.rb +29 -29
  871. data/spec/core_ext/range_spec.rb +21 -21
  872. data/spec/core_ext/socket_spec.rb +32 -32
  873. data/spec/core_ext/string_spec.rb +223 -223
  874. data/spec/core_ext/stringio_spec.rb +21 -21
  875. data/spec/core_ext/time_spec.rb +202 -202
  876. data/spec/gui/line_graph/line_clip_spec.rb +322 -322
  877. data/spec/gui/qt_spec.rb +102 -102
  878. data/spec/install/config/system/system.txt +33 -33
  879. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  880. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  881. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  882. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  883. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
  884. data/spec/install/config/targets/COSMOS/target.txt +5 -5
  885. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
  886. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
  887. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
  888. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
  889. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
  890. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -305
  891. data/spec/install/config/targets/INST/target.txt +10 -10
  892. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
  893. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
  894. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  895. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
  896. data/spec/interfaces/interface_spec.rb +130 -130
  897. data/spec/interfaces/linc_interface_spec.rb +259 -259
  898. data/spec/interfaces/serial_interface_spec.rb +56 -56
  899. data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
  900. data/spec/interfaces/stream_interface_spec.rb +157 -157
  901. data/spec/interfaces/tcpip_client_interface_spec.rb +55 -55
  902. data/spec/interfaces/tcpip_server_interface_spec.rb +160 -160
  903. data/spec/interfaces/udp_interface_spec.rb +175 -175
  904. data/spec/io/buffered_file_spec.rb +113 -113
  905. data/spec/io/io_multiplexer_spec.rb +94 -94
  906. data/spec/io/json_drb_object_spec.rb +119 -119
  907. data/spec/io/json_drb_spec.rb +311 -311
  908. data/spec/io/json_rpc_spec.rb +264 -264
  909. data/spec/io/raw_logger_pair_spec.rb +76 -76
  910. data/spec/io/raw_logger_spec.rb +133 -133
  911. data/spec/io/serial_driver_spec.rb +60 -60
  912. data/spec/io/stderr_spec.rb +32 -32
  913. data/spec/io/stdout_spec.rb +32 -32
  914. data/spec/io/tcpip_server_spec.rb +338 -338
  915. data/spec/io/udp_sockets_spec.rb +94 -94
  916. data/spec/io/win32_serial_driver_spec.rb +88 -88
  917. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
  918. data/spec/packet_logs/packet_log_reader_spec.rb +468 -468
  919. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
  920. data/spec/packet_logs/packet_log_writer_spec.rb +225 -225
  921. data/spec/packets/binary_accessor_spec.rb +2326 -2326
  922. data/spec/packets/commands_spec.rb +369 -369
  923. data/spec/packets/limits_response_spec.rb +25 -25
  924. data/spec/packets/limits_spec.rb +344 -344
  925. data/spec/packets/packet_config_spec.rb +805 -805
  926. data/spec/packets/packet_item_limits_spec.rb +161 -161
  927. data/spec/packets/packet_item_spec.rb +386 -386
  928. data/spec/packets/packet_spec.rb +1317 -1317
  929. data/spec/packets/parsers/format_string_parser_spec.rb +122 -122
  930. data/spec/packets/parsers/limits_parser_spec.rb +282 -282
  931. data/spec/packets/parsers/limits_response_parser_spec.rb +149 -149
  932. data/spec/packets/parsers/macro_parser_spec.rb +212 -212
  933. data/spec/packets/parsers/packet_item_parser_spec.rb +306 -306
  934. data/spec/packets/parsers/packet_parser_spec.rb +99 -99
  935. data/spec/packets/parsers/processor_parser_spec.rb +114 -114
  936. data/spec/packets/parsers/state_parser_spec.rb +156 -156
  937. data/spec/packets/structure_item_spec.rb +195 -195
  938. data/spec/packets/structure_spec.rb +565 -565
  939. data/spec/packets/telemetry_spec.rb +578 -578
  940. data/spec/processors/new_packet_log_processor_spec.rb +39 -39
  941. data/spec/processors/processor_spec.rb +55 -55
  942. data/spec/processors/statistics_processor_spec.rb +60 -60
  943. data/spec/processors/watermark_processor_spec.rb +51 -51
  944. data/spec/script/cmd_tlm_server_spec.rb +110 -110
  945. data/spec/script/commands_disconnect_spec.rb +270 -270
  946. data/spec/script/commands_spec.rb +302 -302
  947. data/spec/script/limits_spec.rb +153 -153
  948. data/spec/script/script_spec.rb +86 -86
  949. data/spec/script/scripting_spec.rb +440 -440
  950. data/spec/script/telemetry_spec.rb +165 -165
  951. data/spec/script/tools_spec.rb +117 -117
  952. data/spec/spec_helper.rb +190 -190
  953. data/spec/streams/burst_stream_protocol_spec.rb +32 -32
  954. data/spec/streams/fixed_stream_protocol_spec.rb +113 -113
  955. data/spec/streams/length_stream_protocol_spec.rb +300 -300
  956. data/spec/streams/preidentified_stream_protocol_spec.rb +121 -121
  957. data/spec/streams/serial_stream_spec.rb +117 -117
  958. data/spec/streams/stream_protocol_spec.rb +346 -346
  959. data/spec/streams/stream_spec.rb +30 -30
  960. data/spec/streams/tcpip_client_stream_spec.rb +57 -57
  961. data/spec/streams/tcpip_socket_stream_spec.rb +193 -193
  962. data/spec/streams/template_stream_protocol_spec.rb +156 -156
  963. data/spec/streams/terminated_stream_protocol_spec.rb +127 -127
  964. data/spec/system/system_spec.rb +665 -665
  965. data/spec/system/target_spec.rb +250 -250
  966. data/spec/tools/cmd_tlm_server/api_spec.rb +1117 -1117
  967. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
  968. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
  969. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +453 -453
  970. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
  971. data/spec/tools/cmd_tlm_server/commanding_spec.rb +151 -151
  972. data/spec/tools/cmd_tlm_server/connections_spec.rb +235 -235
  973. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
  974. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -252
  975. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
  976. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +151 -151
  977. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -223
  978. data/spec/tools/launcher/launcher_config_spec.rb +464 -464
  979. data/spec/top_level/top_level_spec.rb +334 -334
  980. data/spec/utilities/crc_spec.rb +45 -45
  981. data/spec/utilities/csv_spec.rb +97 -97
  982. data/spec/utilities/logger_spec.rb +102 -102
  983. data/spec/utilities/message_log_spec.rb +89 -89
  984. data/spec/utilities/quaternion_spec.rb +107 -107
  985. data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
  986. data/tasks/manifest.rake +22 -22
  987. data/tasks/spec.rake +23 -23
  988. data/test/benchmarks/binary_accessor_benchmark.rb +14 -14
  989. data/test/benchmarks/gsub_benchmark.rb +152 -152
  990. data/test/benchmarks/is_a_benchmark.rb +34 -34
  991. data/test/performance/PACKETS.bat +0 -0
  992. data/test/performance/Rakefile +77 -77
  993. data/test/performance/THREADS.bat +0 -0
  994. data/test/performance/config/data/crc.txt +196 -196
  995. data/test/performance/config/data/diamond.STL +57 -57
  996. data/test/performance/config/data/meta_init.txt +4 -4
  997. data/test/performance/config/system/system_packets.txt +39 -39
  998. data/test/performance/config/system/system_threads.txt +59 -59
  999. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +46 -46
  1000. data/test/performance/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  1001. data/test/performance/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  1002. data/test/performance/config/targets/COSMOS/screens/limits_change.txt +20 -20
  1003. data/test/performance/config/targets/COSMOS/screens/version.txt +19 -19
  1004. data/test/performance/config/targets/COSMOS/target.txt +11 -11
  1005. data/test/performance/config/targets/PACKET/cmd_tlm/packet_cmds.txt +20 -20
  1006. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +98 -98
  1007. data/test/performance/config/targets/PACKET/cmd_tlm_server.txt +6 -6
  1008. data/test/performance/config/targets/PACKET/lib/packet_interface.rb +22 -22
  1009. data/test/performance/config/targets/PACKET/lib/packet_limits_response.rb +24 -24
  1010. data/test/performance/config/targets/PACKET/screens/status.txt +25 -25
  1011. data/test/performance/config/targets/PACKET/target.txt +28 -28
  1012. data/test/performance/config/targets/SYSTEM/screens/status.txt +12 -12
  1013. data/test/performance/config/targets/THREAD/cmd_tlm/thread_cmds.txt +17 -17
  1014. data/test/performance/config/targets/THREAD/cmd_tlm/thread_tlm.txt +18 -18
  1015. data/test/performance/config/targets/THREAD/cmd_tlm_server.txt +6 -6
  1016. data/test/performance/config/targets/THREAD/lib/thread_interface.rb +22 -22
  1017. data/test/performance/config/targets/THREAD/screens/status.txt +25 -25
  1018. data/test/performance/config/targets/THREAD/target.txt +6 -6
  1019. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_packets.txt +28 -28
  1020. data/test/performance/config/tools/cmd_tlm_server/cmd_tlm_server_threads.txt +68 -68
  1021. data/test/performance/config/tools/data_viewer/data_viewer.txt +11 -11
  1022. data/test/performance/config/tools/handbook_creator/handbook_creator.txt +66 -66
  1023. data/test/performance/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  1024. data/test/performance/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  1025. data/test/performance/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  1026. data/test/performance/config/tools/handbook_creator/templates/header.html.erb +25 -25
  1027. data/test/performance/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  1028. data/test/performance/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  1029. data/test/performance/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  1030. data/test/performance/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  1031. data/test/performance/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  1032. data/test/performance/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  1033. data/test/performance/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  1034. data/test/performance/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  1035. data/test/performance/config/tools/handbook_creator/templates/title.html.erb +1 -1
  1036. data/test/performance/config/tools/launcher/launcher_packets.txt +34 -34
  1037. data/test/performance/config/tools/launcher/launcher_threads.txt +83 -83
  1038. data/test/performance/config/tools/script_runner/script_runner.txt +3 -3
  1039. data/test/performance/config/tools/table_manager/ConfigTables_def.txt +8 -8
  1040. data/test/performance/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  1041. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  1042. data/test/performance/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  1043. data/test/performance/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  1044. data/test/performance/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  1045. data/test/performance/config/tools/test_runner/test_runner.txt +17 -17
  1046. data/test/performance/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  1047. data/test/performance/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  1048. data/test/performance/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  1049. data/test/performance/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  1050. data/test/performance/config/tools/tlm_grapher/tlm_grapher.txt +204 -204
  1051. data/test/performance/config/tools/tlm_viewer/tlm_viewer.txt +13 -13
  1052. data/test/performance/lib/packet_target.rb +126 -126
  1053. data/test/performance/lib/thread_target.rb +120 -120
  1054. data/test/performance/lib/user_version.rb +3 -3
  1055. data/test/performance/procedures/checks.rb +11 -11
  1056. data/test/performance/procedures/clear_util.rb +7 -7
  1057. data/test/performance/procedures/collect.rb +18 -18
  1058. data/test/performance/procedures/collect_util.rb +14 -14
  1059. data/test/performance/procedures/cosmos_api_test.rb +293 -293
  1060. data/test/performance/procedures/disconnect.rb +29 -29
  1061. data/test/performance/procedures/example_test.rb +182 -182
  1062. data/test/performance/procedures/plot_test.rb +8 -8
  1063. data/test/performance/procedures/procedure.rb +2 -2
  1064. data/test/performance/procedures/run_example_test.rb +3 -3
  1065. data/test/performance/procedures/test.rb +51 -51
  1066. data/test/performance/tools/CmdExtractor +14 -14
  1067. data/test/performance/tools/CmdExtractor.bat +0 -0
  1068. data/test/performance/tools/CmdSender +14 -14
  1069. data/test/performance/tools/CmdSender.bat +0 -0
  1070. data/test/performance/tools/CmdTlmServer +16 -16
  1071. data/test/performance/tools/CmdTlmServer.bat +0 -0
  1072. data/test/performance/tools/CmdTlmServerMemProf +20 -20
  1073. data/test/performance/tools/CmdTlmServerMemProf.bat +0 -0
  1074. data/test/performance/tools/DataViewer +14 -14
  1075. data/test/performance/tools/DataViewer.bat +0 -0
  1076. data/test/performance/tools/HandbookCreator +14 -14
  1077. data/test/performance/tools/HandbookCreator.bat +0 -0
  1078. data/test/performance/tools/Launcher +14 -14
  1079. data/test/performance/tools/Launcher.bat +0 -0
  1080. data/test/performance/tools/LimitsMonitor +14 -14
  1081. data/test/performance/tools/LimitsMonitor.bat +0 -0
  1082. data/test/performance/tools/OpenGLBuilder +14 -14
  1083. data/test/performance/tools/OpenGLBuilder.bat +0 -0
  1084. data/test/performance/tools/PacketTarget +14 -14
  1085. data/test/performance/tools/PacketTarget.bat +0 -0
  1086. data/test/performance/tools/PacketViewer +14 -14
  1087. data/test/performance/tools/PacketViewer.bat +0 -0
  1088. data/test/performance/tools/Replay +14 -14
  1089. data/test/performance/tools/Replay.bat +0 -0
  1090. data/test/performance/tools/ScpiTarget +14 -14
  1091. data/test/performance/tools/ScpiTarget.bat +0 -0
  1092. data/test/performance/tools/ScriptRunner +14 -14
  1093. data/test/performance/tools/ScriptRunner.bat +0 -0
  1094. data/test/performance/tools/TableManager +14 -14
  1095. data/test/performance/tools/TableManager.bat +0 -0
  1096. data/test/performance/tools/TestRunner +14 -14
  1097. data/test/performance/tools/TestRunner.bat +0 -0
  1098. data/test/performance/tools/ThreadTarget +14 -14
  1099. data/test/performance/tools/ThreadTarget.bat +0 -0
  1100. data/test/performance/tools/TlmExtractor +14 -14
  1101. data/test/performance/tools/TlmExtractor.bat +0 -0
  1102. data/test/performance/tools/TlmGrapher +14 -14
  1103. data/test/performance/tools/TlmGrapher.bat +0 -0
  1104. data/test/performance/tools/TlmGrapherMemProf +19 -19
  1105. data/test/performance/tools/TlmGrapherMemProf.bat +0 -0
  1106. data/test/performance/tools/TlmViewer +14 -14
  1107. data/test/performance/tools/TlmViewer.bat +0 -0
  1108. data/test/performance/tools/TlmViewerMemProf +19 -19
  1109. data/test/performance/tools/TlmViewerMemProf.bat +0 -0
  1110. data/test/performance/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  1111. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  1112. data/test/performance/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  1113. data/test/performance/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  1114. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  1115. data/test/performance/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  1116. data/test/performance/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  1117. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  1118. data/test/performance/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  1119. data/test/performance/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  1120. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  1121. data/test/performance/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  1122. data/test/performance/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  1123. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  1124. data/test/performance/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  1125. data/test/performance/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  1126. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  1127. data/test/performance/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  1128. data/test/performance/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  1129. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  1130. data/test/performance/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  1131. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  1132. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  1133. data/test/performance/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  1134. data/test/performance/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  1135. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  1136. data/test/performance/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  1137. data/test/performance/tools/mac/Replay.app/Contents/Info.plist +38 -38
  1138. data/test/performance/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  1139. data/test/performance/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  1140. data/test/performance/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  1141. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  1142. data/test/performance/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  1143. data/test/performance/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  1144. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  1145. data/test/performance/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  1146. data/test/performance/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  1147. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  1148. data/test/performance/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  1149. data/test/performance/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  1150. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  1151. data/test/performance/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  1152. data/test/performance/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  1153. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  1154. data/test/performance/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  1155. data/test/performance/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  1156. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  1157. data/test/performance/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  1158. metadata +3 -3
@@ -1,70 +1,70 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'cosmos'
12
- require 'cosmos/tools/table_manager/table_item'
13
-
14
- module Cosmos
15
-
16
- # Table extends Packet by adding more attributes relative to
17
- # displaying binary data in a gui.
18
- class Table < Packet
19
- attr_accessor :num_rows
20
- attr_accessor :num_columns
21
- attr_reader :name
22
- attr_reader :type
23
- attr_reader :table_id
24
- attr_reader :filename
25
-
26
- # Constructor for a TableDefinition
27
- def initialize(name, description, type, endianness, table_id, filename)
28
- super('TABLE', name, endianness, description, '', TableItem)
29
- @name = name
30
- @type = type
31
- @table_id = table_id
32
- @filename = filename
33
- @num_columns = 0
34
- @num_rows = 0
35
- @num_columns = 1 if @type == :ONE_DIMENSIONAL
36
- end
37
-
38
- # Calls define_item in Packet but also incrememts @num_columns
39
- # if this table is a REPEATING table.
40
- def create_param(name, bit_offset, bit_size, type, description, range, default, display_type, editable)
41
- @num_columns += 1 if @type == :TWO_DIMENSIONAL
42
- item = define_item(name, bit_offset, bit_size, type)
43
- item.description = description
44
- item.range = range
45
- item.default = default
46
- item.display_type = display_type
47
- item.editable = editable
48
- item
49
- end
50
-
51
- # Calls define_packet_item in GenericPacket to duplicate the passed in packet
52
- # item. name_extension is concatenated with the orignal item name to make it
53
- # unique.
54
- def duplicate_item(item, name_extension, bit_offset)
55
- new_item = define_item("#{item.name[0...-1]}#{name_extension}",
56
- bit_offset, item.bit_size, item.data_type, item.array_size,
57
- item.endianness, item.overflow,
58
- item.format_string, item.read_conversion,
59
- item.write_conversion, item.id_value)
60
- new_item.description = item.description
61
- new_item.range = item.range
62
- new_item.display_type = item.display_type
63
- new_item.editable = item.editable
64
- new_item.states = item.states
65
- new_item.constraint = item.constraint
66
- new_item
67
- end
68
- end # class Table
69
-
70
- end # module Cosmos
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos'
12
+ require 'cosmos/tools/table_manager/table_item'
13
+
14
+ module Cosmos
15
+
16
+ # Table extends Packet by adding more attributes relative to
17
+ # displaying binary data in a gui.
18
+ class Table < Packet
19
+ attr_accessor :num_rows
20
+ attr_accessor :num_columns
21
+ attr_reader :name
22
+ attr_reader :type
23
+ attr_reader :table_id
24
+ attr_reader :filename
25
+
26
+ # Constructor for a TableDefinition
27
+ def initialize(name, description, type, endianness, table_id, filename)
28
+ super('TABLE', name, endianness, description, '', TableItem)
29
+ @name = name
30
+ @type = type
31
+ @table_id = table_id
32
+ @filename = filename
33
+ @num_columns = 0
34
+ @num_rows = 0
35
+ @num_columns = 1 if @type == :ONE_DIMENSIONAL
36
+ end
37
+
38
+ # Calls define_item in Packet but also incrememts @num_columns
39
+ # if this table is a REPEATING table.
40
+ def create_param(name, bit_offset, bit_size, type, description, range, default, display_type, editable)
41
+ @num_columns += 1 if @type == :TWO_DIMENSIONAL
42
+ item = define_item(name, bit_offset, bit_size, type)
43
+ item.description = description
44
+ item.range = range
45
+ item.default = default
46
+ item.display_type = display_type
47
+ item.editable = editable
48
+ item
49
+ end
50
+
51
+ # Calls define_packet_item in GenericPacket to duplicate the passed in packet
52
+ # item. name_extension is concatenated with the orignal item name to make it
53
+ # unique.
54
+ def duplicate_item(item, name_extension, bit_offset)
55
+ new_item = define_item("#{item.name[0...-1]}#{name_extension}",
56
+ bit_offset, item.bit_size, item.data_type, item.array_size,
57
+ item.endianness, item.overflow,
58
+ item.format_string, item.read_conversion,
59
+ item.write_conversion, item.id_value)
60
+ new_item.description = item.description
61
+ new_item.range = item.range
62
+ new_item.display_type = item.display_type
63
+ new_item.editable = item.editable
64
+ new_item.states = item.states
65
+ new_item.constraint = item.constraint
66
+ new_item
67
+ end
68
+ end # class Table
69
+
70
+ end # module Cosmos
@@ -1,764 +1,764 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2014 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
-
11
- require 'cosmos'
12
- require 'cosmos/tools/table_manager/table'
13
-
14
- module Cosmos
15
-
16
- # TableConfig provides capabilities to read an ascii file that defines the
17
- # table parameters in a system and create a set of Tables for each.
18
- class TableConfig
19
-
20
- # Constructor for a TableConfig
21
- def initialize
22
- @ordered_tables = nil
23
- @tables = nil
24
- @current_name = nil
25
- @current_table = nil
26
- @current_parameter = nil
27
- @cur_bit_offset = 0
28
- @default_count = 0
29
- @item_definitions = nil
30
- @table_names = nil
31
- end
32
-
33
- # Processes a file and adds in the tables defined in the file
34
- def process(filename)
35
- building_generic_conversion = false
36
- converted_type = nil
37
- converted_bit_size = nil
38
- proc_text = ''
39
-
40
- Logger.info "Processing table config in file '#{filename}'"
41
-
42
- unless test ?f, filename
43
- Logger.error "File does not exist"
44
- raise "ERROR! Table config file #{filename} does not exist!"
45
- end
46
-
47
- parser = ConfigParser.new
48
- parser.parse_file(filename) do |keyword, parameters|
49
- next unless keyword
50
- if building_generic_conversion
51
- case keyword
52
- # Complete a generic conversion
53
- when 'GENERIC_READ_CONVERSION_END', 'GENERIC_WRITE_CONVERSION_END', 'CONSTRAINT_END'
54
- parser.verify_num_parameters(0, 0, keyword)
55
- @current_parameter.read_conversion =
56
- GenericConversion.new(proc_text,
57
- converted_type,
58
- converted_bit_size) if keyword.include? "READ"
59
- @current_parameter.write_conversion =
60
- GenericConversion.new(proc_text,
61
- converted_type,
62
- converted_bit_size) if keyword.include? "WRITE"
63
- @current_parameter.constraint =
64
- GenericConversion.new(proc_text,
65
- converted_type,
66
- converted_bit_size) if keyword.include? "CONSTRAINT"
67
- building_generic_conversion = false
68
- # Add the current config.line to the conversion being built
69
- else
70
- proc_text << parser.line << "\n"
71
- end # case keyword
72
-
73
- else # not building generic conversion
74
-
75
- case keyword
76
- # Start the definition of a generic conversion.
77
- # All config.lines following this config.line are considered part
78
- # of the conversion until an end of conversion marker is found
79
- when 'GENERIC_READ_CONVERSION_START', 'GENERIC_WRITE_CONVERSION_START', 'CONSTRAINT_START'
80
- usage = "#{keyword} <Converted Type (optional)> <Converted Bit Size (optional)>"
81
- parser.verify_num_parameters(0, 2, usage)
82
- proc_text = ''
83
- building_generic_conversion = true
84
- converted_type = nil
85
- converted_bit_size = nil
86
- if parameters[0]
87
- converted_type = parameters[0].upcase.intern
88
- raise parser.error("Invalid converted_type: #{converted_type}.") unless [:INT, :UINT, :FLOAT, :STRING, :BLOCK].include? converted_type
89
- end
90
- converted_bit_size = Integer(parameters[1]) if parameters[1]
91
-
92
- when 'TABLEFILE'
93
- parser.verify_num_parameters(1, 1, "#{keyword} <File name>")
94
- process(File.join(File.dirname(filename), parameters[0]))
95
-
96
- when 'TABLE'
97
- usage = "TABLE <Table Name> <Table Description> <ONE_DIMENSIONAL or TWO_DIMENSIONAL> <BIG_ENDIAN or LITTLE_ENDIAN> <Identifier>"
98
- parser.verify_num_parameters(5, nil, usage)
99
- begin
100
- # locals declared for readability
101
- name = parameters[0]
102
- description = parameters[1]
103
- type = read_table_type(parameters[2])
104
- endianness = read_endianness(parameters[3])
105
- if parameters[5].nil?
106
- table_id = Integer(parameters[4])
107
- else
108
- table_id = []
109
- parameters[4..-1].each {|parameter| table_id << Integer(parameter)}
110
- end
111
-
112
- start_new_table(name, description, type, endianness, table_id, filename)
113
- rescue ArgumentError => err
114
- raise parser.error("#{err.message} with #{keyword}.\nUSAGE: #{usage}")
115
- end
116
-
117
- when 'PARAMETER'
118
- usage = "PARAMETER <Parameter Name> <Parameter Description> <Data Type> <Bit Size> <Display Type> <Minimum Value> <Maximum Value> <Default Value - Only in ONE_DIMENTIONAL>"
119
- parser.verify_num_parameters(7, 8, usage)
120
- finish_parameter()
121
- if @current_table
122
- @current_table.num_rows += 1
123
-
124
- begin
125
- if @current_table.type == :TWO_DIMENSIONAL
126
- parameters[0] = "#{parameters[0]}0"
127
- end
128
- # locals declared for readability
129
- name = parameters[0]
130
- if @current_table.items[name.upcase]
131
- raise ArgumentError, "The name \"#{name}\" was already defined"
132
- end
133
- description = parameters[1]
134
- type = read_item_type(parameters[2])
135
- bit_size = parameters[3].to_i
136
- display_type, editable = read_display_type(parameters[4], type)
137
- if type == :BLOCK
138
- range = nil
139
- elsif type == :STRING
140
- range = convert_to_range(parameters[5], parameters[6], :UINT, 0)
141
- else
142
- range = convert_to_range(parameters[5], parameters[6], type, bit_size)
143
- end
144
- if @current_table.type == :ONE_DIMENSIONAL
145
- default = convert_to_type(parameters[7], type)
146
- else # TWO_DIMENSIONAL defaults are set by the DEFAULT keyword
147
- default = 0
148
- end
149
-
150
- @current_parameter = @current_table.create_param(name, @cur_bit_offset,
151
- bit_size, type, description, range, default, display_type, editable)
152
- @cur_bit_offset += parameters[3].to_i
153
- rescue ArgumentError => err
154
- raise parser.error("#{err.message} with #{keyword}.\nUSAGE: #{usage}")
155
- end
156
- end
157
-
158
- when 'STATE'
159
- usage = "STATE <Key> <Value>"
160
- parser.verify_num_parameters(2, 2, usage)
161
- begin
162
- # locals declared for readability
163
- state_name = parameters[0]
164
- state_value = convert_to_type(parameters[1], @current_parameter.data_type)
165
-
166
- @current_parameter.states ||= {}
167
- @current_parameter.states[state_name.upcase] = state_value
168
- rescue ArgumentError => err
169
- raise parser.error("#{err.message} with #{keyword}.\nUSAGE: #{usage}")
170
- end
171
-
172
- when 'DEFAULT'
173
- usage = "DEFAULT <Value1> <Value2> ... <ValueN>"
174
- # if this is our first default value for a TWO_DIMENSIONAL table
175
- # then we redefine the default values
176
- if @default_count == 0
177
- @item_definitions = Array.new(@current_table.sorted_items)
178
- index = 0
179
- @item_definitions.each do |item_def|
180
- set_item_default_value(item_def, parameters[index])
181
- index += 1
182
- end
183
-
184
- @current_table.num_rows = 1
185
-
186
- # more default values have been given so copy all the parameters from
187
- # the first row and reset the defaults
188
- else
189
- index = 0
190
-
191
- @item_definitions.each do |item_def|
192
- new_item = @current_table.duplicate_item(item_def,
193
- @default_count,
194
- @cur_bit_offset)
195
- @cur_bit_offset += item_def.bit_size
196
- set_item_default_value(new_item, parameters[index])
197
- index += 1
198
- end
199
- @current_table.num_rows += 1
200
- end # end else for if @default_count == 1
201
-
202
- @default_count += 1
203
-
204
- when 'POLY_READ_CONVERSION'
205
- parser.verify_num_parameters(2, nil, "#{keyword} <C0> ... <CX>")
206
- @current_parameter.read_conversion = PolynomialConversion.new(parameters[0..-1])
207
-
208
- when 'POLY_WRITE_CONVERSION'
209
- parser.verify_num_parameters(2, nil, "#{keyword} <C0> ... <CX>")
210
- @current_parameter.write_conversion = PolynomialConversion.new(parameters[0..-1])
211
-
212
- else
213
- unknown_keyword(parser, keyword, parameters)
214
- end # end case parameters[0]
215
- end # end else for generic conversion
216
- end # end loop
217
-
218
- # Handle last packet
219
- finish_table()
220
-
221
- ensure
222
- file.close if defined? file and file
223
- end
224
-
225
- # Sets the given item definition's default parameter to the default value
226
- # given. This function does conversions based on the display_type of the item.
227
- def set_item_default_value(item_def, default = nil)
228
- begin
229
- # If no default was passed use the definition default
230
- if default == nil
231
- default = item_def.default
232
- end
233
- if item_def.display_type == :STATE
234
- begin
235
- val = item_def.states.key(Integer(default))
236
- rescue
237
- val = default
238
- end
239
- @current_table.write(item_def.name, val)
240
- item_def.default = @current_table.read(item_def.name, :RAW)
241
- else
242
- item_def.default = convert_to_type(default, item_def.data_type)
243
- end
244
- rescue
245
- Logger.error "Setting #{item_def.name} to #{default} failed! Using #{item_def.range.first} for the default value."
246
- item_def.default = item_def.range.first
247
- end
248
- end
249
-
250
- # Classes extending table_definition should override this function to add
251
- # new keyword processing. Ensure super() is called after processing new
252
- # keywords so the default behavior of raising an ArgumentError is maintained.
253
- def unknown_keyword(parser, keyword, parameters)
254
- raise parser.error("Unknown keyword '#{keyword}'.", nil) if keyword
255
- end
256
-
257
- # Returns a specific Table
258
- def get_table(name)
259
- @tables[name]
260
- end
261
-
262
- # Returns an array of all the Tables in the definition file
263
- def get_all_tables
264
- @ordered_tables
265
- end
266
-
267
- # Returns an array of all the table names in the definition file
268
- def get_table_names
269
- @table_names
270
- end
271
-
272
- # Returns a default-value representation of an item to be printed in a DEF file
273
- def item_to_def_string(table, item_def)
274
- result = ""
275
- case item_def.display_type
276
- when :STATE
277
- if table.type == :ONE_DIMENSIONAL
278
- result = table.read(item_def.name, :RAW).to_s
279
- else
280
- result = table.read(item_def.name).to_s
281
- end
282
- when :DEC, :STRING, :NONE
283
- result = table.read(item_def.name).to_s
284
- when :CHECK
285
- result = table.read(item_def.name, :RAW).to_s
286
- when :HEX
287
- result = format_hex(table, item_def)
288
- end
289
-
290
- return result
291
- end
292
-
293
- # Update all default values in the definition file on disk with current values
294
- def commit_default_values(table)
295
- new_file_data = ""
296
- table_found = false
297
- default_count = 0
298
- table_parameters = []
299
- parser = ConfigParser.new
300
- parser.parse_file(table.filename) do |keyword, parameters|
301
- line = parser.line
302
-
303
- case keyword
304
- when 'TABLE'
305
- name = parameters[0].remove_quotes
306
- if name == table.name
307
- table_found = true
308
- else
309
- table_found = false
310
- end
311
-
312
- when 'PARAMETER'
313
- if table_found
314
- name = parameters[0].remove_quotes
315
- if table.type == :ONE_DIMENSIONAL
316
- item = table.get_item(name)
317
-
318
- # update the default value (in case the user tries to reset default values)
319
- item.default = table.read(name, :RAW)
320
-
321
- # determine what the new default value will look like as printed in the DEF file
322
- new_default = item_to_def_string(table, item)
323
-
324
- # scan to the beginning of the default value
325
- line_index = line.index(keyword) # skip to start of keyword
326
- line_index = line.index(parameters[0], line_index+keyword.length) # skip to start of first param
327
- (1..7).each do |index|
328
- line_index = line.index(parameters[index], line_index+parameters[index-1].length) # skip to start of next param
329
- end
330
-
331
- # rebuild the line in 3 parts:
332
- # everything up to the old default value
333
- # the new default value
334
- # everything after the old default value
335
- line = line[0...line_index] + new_default + line[(line_index+parameters[7].length)..-1]
336
- else
337
- table_parameters << name
338
- end
339
- end
340
-
341
- when 'DEFAULT'
342
- if table_found
343
- line_index = line.index(keyword)
344
- previous_word = keyword
345
- table_parameters.each_with_index do |param_name, index|
346
- item_name = "#{param_name}#{default_count}"
347
- item = table.get_item(item_name)
348
-
349
- # update the default value (in case the user tries to reset default values)
350
- item.default = table.read(item_name, :RAW)
351
-
352
- # determine what the new default value will look like as printed in the DEF file
353
- new_default = item_to_def_string(table, item)
354
- if new_default.index(" ")
355
- new_default = '"' + new_default + '"'
356
- end
357
-
358
- # scan to the beginning of the default value
359
- line_index = line.index(parameters[index], line_index+previous_word.length)
360
-
361
- # rebuild the line in 3 parts:
362
- # everything up to the old default value
363
- # the new default value
364
- # everything after the old default value
365
- line = line[0...line_index] + new_default + line[(line_index+parameters[index].length)..-1]
366
-
367
- # update previous_word so that we can find the next value
368
- previous_word = new_default
369
- end
370
-
371
- # count the row so that we know what the item_name is next time we see DEFAULT
372
- default_count += 1
373
- end
374
- end
375
-
376
- new_file_data << (line + "\n")
377
-
378
- end # end loop
379
-
380
- # ok, now replace the old def file with the new one
381
- File.open(table.filename, "w") do |file|
382
- file.puts new_file_data
383
- end
384
- end
385
-
386
- # # Return the entire table_definition file for the given table name as a string
387
- # def print_table(name)
388
- # tdef = @tables[name]
389
- # tstr = ""
390
- # if tdef.table_id.class != Array
391
- # tstr << "TABLE \"#{tdef.name}\" \"#{tdef.description}\" #{convert_table_type(tdef.type)} #{convert_endianness(tdef.get_endianness)} #{tdef.table_id}\n"
392
- # else
393
- # tstr << "TABLE \"#{tdef.name}\" \"#{tdef.description}\" #{convert_table_type(tdef.type)} #{convert_endianness(tdef.get_endianness)} #{tdef.table_id.join(' ')}\n"
394
- # end
395
- # if tdef.type == :ONE_DIMENSIONAL
396
- # tdef.sorted_items.each do |item|
397
- # tstr << create_item_string(item, tdef.type)
398
- # end
399
- # else # TWO_DIMENSIONAL
400
- # tdef.num_columns.times do |column|
401
- # item_def = tdef.sorted_items[column]
402
- # tstr << create_item_string(item_def, tdef.type)
403
- # end
404
- #
405
- # index = 0
406
- # tdef.sorted_items.each do |item|
407
- # if index % tdef.num_columns == 0
408
- # tstr << "\n DEFAULT "
409
- # end
410
- # case item.display_type
411
- # when :DEC
412
- # default = item.default
413
- # when :STATE
414
- # default = "\"#{item.default}\""
415
- # when :HEX
416
- # default = "0x#{item.default.to_s(16)}"
417
- # end
418
- # tstr << "#{default} "
419
- # index += 1
420
- # end
421
- # end # end else # TWO_DIMENSIONAL
422
- # tstr
423
- # end # end print_table(name)
424
-
425
- def format_hex(table, item_def)
426
- case item_def.bit_size
427
- when 8
428
- x = sprintf("%02X", table.read(item_def.name).to_s)
429
- # if the number was negative x will have .. and possibly another
430
- # F in the string which we remove by taking the last 4 digits
431
- x = /\w{2}$/.match(x)[0]
432
- when 16
433
- x = sprintf("%04X", table.read(item_def.name).to_s)
434
- # if the number was negative x will have .. and possibly another
435
- # F in the string which we remove by taking the last 4 digits
436
- x = /\w{4}$/.match(x)[0]
437
- else
438
- x = sprintf("%08X", table.read(item_def.name).to_s)
439
- # if the number was negative x will have .. and possibly another
440
- # F in the string which we remove by taking the last 8 digits
441
- x = /\w{8}$/.match(x)[0]
442
- end
443
- return "0x%X" % Integer("0x#{x}") # convert to Integer
444
- end
445
-
446
- #############################################################################
447
- protected
448
- #############################################################################
449
-
450
- # # helper function to print_table to get states, constraint, read_conversion,
451
- # # and write_conversion that may be associated with an item in the table
452
- # def create_item_string(item, type)
453
- # tstr = ""
454
- # case item.display_type
455
- # when :DEC
456
- # min = item.range.first
457
- # max = item.range.last
458
- # default = item.default
459
- # when :STATE
460
- # min = item.range.first
461
- # max = item.range.last
462
- # default = item.states[item.default]
463
- # when :HEX
464
- # min = "0x#{item.range.first.to_s(16)}"
465
- # max = "0x#{item.range.last.to_s(16)}"
466
- # default = "0x#{item.default.to_s(16)}"
467
- # end
468
- #
469
- # name = item.name
470
- # display = convert_display_type(item.display_type, item.editable)
471
- # tstr << " PARAMETER \"#{name}\" \"#{item.description}\" #{convert_item_type(item.data_type)} #{item.bit_size} #{display} #{min} #{max}"
472
- # if type == :ONE_DIMENSIONAL
473
- # tstr << " #{default}\n"
474
- # else # TWO_DIMENSIONAL
475
- # tstr << "\n"
476
- # end
477
- #
478
- # if item.states
479
- # item.states.each do |key, value|
480
- # tstr << " STATE \"#{key}\" #{value}\n"
481
- # end
482
- # end
483
- # if item.constraint
484
- # tstr << " CONSTRAINT_START\n"
485
- # tstr << item.constraint.code
486
- # tstr << " CONSTRAINT_END\n"
487
- # end
488
- # if item.read_conversion
489
- # if item.read_conversion.class == PolynomialConversion
490
- # tstr << " POLY_READ_CONVERSION #{item.read_conversion.code}\n"
491
- # else
492
- # tstr << " GENERIC_READ_CONVERSION_START\n"
493
- # tstr << item.read_conversion.code
494
- # tstr << " GENERIC_READ_CONVERSION_END\n"
495
- # end
496
- # end
497
- # if not item.write_conversion.nil?
498
- # if item.write_conversion.class == PolynomialConversion
499
- # tstr << " POLY_WRITE_CONVERSION #{item.write_conversion.code}\n"
500
- # else
501
- # tstr << " GENERIC_WRITE_CONVERSION_START\n"
502
- # tstr << item.write_conversion.code
503
- # tstr << " GENERIC_WRITE_CONVERSION_END\n"
504
- # end
505
- # end
506
- # tstr
507
- # end
508
-
509
- # Finish Updating parameter in packet
510
- def finish_parameter
511
- unless @current_parameter.nil?
512
- @current_table.set_item(@current_parameter)
513
- end
514
- end
515
-
516
- # Start processing a new packet
517
- def start_new_table(name, description, type, endianness, table_id, filename)
518
- finish_table
519
- @current_table = Table.new(name, description, type, endianness, table_id, filename)
520
- @current_name = name
521
- @default_count = 0
522
- end
523
-
524
- # Add current packet into hash if it exists
525
- def finish_table
526
- finish_parameter
527
- if @current_table
528
- Logger.info "finish_table #{@current_name}"
529
- if @current_table.num_rows
530
- if @tables.nil? or @table_names.nil? or @ordered_tables.nil?
531
- @tables = {}
532
- @table_names = []
533
- @ordered_tables = []
534
- end
535
- @tables[@current_name] = @current_table
536
- @table_names << @current_name
537
- @ordered_tables << @current_table
538
- end
539
- @current_table = nil
540
- @current_parameter = nil
541
- @cur_bit_offset = 0
542
- end
543
- end
544
-
545
- # Convert the table type string to a value
546
- def read_table_type(str)
547
- str.upcase!
548
- case str
549
- when 'ONE_DIMENSIONAL'
550
- :ONE_DIMENSIONAL
551
- when 'TWO_DIMENSIONAL'
552
- :TWO_DIMENSIONAL
553
- else
554
- raise ArgumentError, "Unknown table type:#{str}! Must be ONE_DIMENSIONAL or TWO_DIMENSIONAL"
555
- end
556
- end
557
-
558
- # Convert the table type value to a string
559
- def convert_table_type(type)
560
- case type
561
- when :ONE_DIMENSIONAL
562
- 'ONE_DIMENSIONAL'
563
- when :TWO_DIMENSIONAL
564
- 'TWO_DIMENSIONAL'
565
- else
566
- raise ArgumentError, "Unknown table type:#{type}!"
567
- end
568
- end
569
-
570
- # Convert the endianness string to a value
571
- def read_endianness(str)
572
- str.upcase!
573
- case str
574
- when 'BIG_ENDIAN'
575
- :BIG_ENDIAN
576
- when 'LITTLE_ENDIAN'
577
- :LITTLE_ENDIAN
578
- else
579
- raise ArgumentError, "Unknown endianness:#{str}! Must be BIG_ENDIAN or LITTLE_ENDIAN"
580
- end
581
- end
582
-
583
- # Convert the endianness value to a string
584
- def convert_endianness(endianness)
585
- case endianness
586
- when :BIG_ENDIAN
587
- 'BIG_ENDIAN'
588
- when :LITTLE_ENDIAN
589
- 'LITTLE_ENDIAN'
590
- else
591
- raise ArgumentError, "Unknown endianness:#{endianness}!"
592
- end
593
- end
594
-
595
- # Process a item type string into a value
596
- def read_item_type(str)
597
- str.upcase!
598
- case str
599
- when 'INT'
600
- :INT
601
- when 'UINT'
602
- :UINT
603
- when 'FLOAT'
604
- :FLOAT
605
- when 'STRING'
606
- :STRING
607
- when 'BLOCK'
608
- :BLOCK
609
- else
610
- raise ArgumentError, "Unknown type:#{str}! Must be INT, UINT, FLOAT, STRING, or BLOCK"
611
- end
612
- end
613
-
614
- # Process a item type value into a string
615
- def convert_item_type(type)
616
- case type
617
- when :INT
618
- 'INT'
619
- when :UINT
620
- 'UINT'
621
- when :FLOAT
622
- 'FLOAT'
623
- when :STRING
624
- 'STRING'
625
- when :BLOCK
626
- 'BLOCK'
627
- else
628
- raise ArgumentError, "Unknown type:#{type}!"
629
- end
630
- end
631
-
632
- # Convert a string to the correct item type
633
- def convert_to_type(val, type)
634
- raise ArgumentError, "Value is not defined" if val.nil?
635
- begin
636
- case type
637
- when :INT, :UINT
638
- val = Integer(val)
639
- when :FLOAT
640
- val = Float(val)
641
- when :STRING, :BLOCK
642
- val = val.to_s
643
- end
644
- rescue
645
- begin
646
- val = eval(val)
647
- rescue
648
- case type
649
- when :INT
650
- type_name = 'INT'
651
- when :UINT
652
- type_name = 'UINT'
653
- when :FLOAT
654
- type_name = 'FLOAT'
655
- end
656
- raise ArgumentError, "Error evaluating value:#{val} of type:#{type_name}"
657
- end
658
- end
659
- val
660
- end
661
-
662
- # Convert the given minimum and maximum values of the given type and bit_size
663
- # into a valid Ruby range: min..max. The function verifies the range is not
664
- # backwards and that the minimum and maximum values make sense for the given
665
- # type and bit_size. For example, a maximum of 256 doesn't make sense for a UINT8.
666
- def convert_to_range(min, max, type, bit_size)
667
- min = convert_to_type(min, type)
668
- max = convert_to_type(max, type)
669
- range = min..max
670
-
671
- # First check for backwards ranges
672
- if min > max
673
- raise ArgumentError, "Min:#{min} can't be larger than max:#{max} in range"
674
- end
675
-
676
- case type
677
- # No case for FLOAT because if the type is a float the range
678
- # can be anything since you can't set a range wider than that allowed by a float
679
- when :UINT
680
- # First check for a negative range which doesn't make sense for UINT
681
- if min < 0 or max < 0
682
- raise ArgumentError, "Negative value in UINT range doesn't make sense"
683
- end
684
- if (bit_size == 8 and max > 255) or
685
- (bit_size == 16 and max > 65535) or
686
- (bit_size == 32 and max > 4294967295)
687
- raise ArgumentError, "Max value of #{max} in UINT range doesn't make sense"
688
- end
689
- when :INT
690
- if (bit_size == 8 and (min < -128 or max > 127)) or
691
- (bit_size == 16 and (min < -32768 or max > 32767)) or
692
- (bit_size == 32 and (min < -2147483648 or max > 2147483647))
693
- raise ArgumentError, "Max value of #{max} in INT range doesn't make sense"
694
- end
695
- end
696
- range
697
- end
698
-
699
- # Convert a display type string to the type value
700
- def read_display_type(display_type, value_type)
701
- editable = true
702
- display_type.upcase!
703
-
704
- if /-U/ =~ display_type
705
- editable = false
706
- display_type.sub!(/-U/,"")
707
- end
708
-
709
- case display_type
710
- when 'DEC'
711
- display_type = :DEC
712
- when 'HEX'
713
- display_type = :HEX
714
- when 'STATE'
715
- display_type = :STATE
716
- when 'CHECK'
717
- display_type = :CHECK
718
- when 'STRING'
719
- display_type = :STRING
720
- when 'NONE'
721
- display_type = :NONE
722
- editable = false
723
- else
724
- raise ArgumentError, "Unknown display type:#{display_type}! Must be DEC, DEC-U, HEX, HEX-U, STATE, STATE-U, CHECK, CHECK-U, STRING or NONE"
725
- end
726
-
727
- if value_type ==:STRING && display_type != :STRING
728
- raise ArgumentError, "STRING items must have a display type of STRING"
729
- end
730
- if value_type == :BLOCK && display_type != :NONE
731
- raise ArgumentError, "BLOCK items must have a display type of NONE"
732
- end
733
-
734
- return display_type, editable
735
- end
736
-
737
- # Convert display type value to a display type string
738
- def convert_display_type(type, editable)
739
- display =
740
- case type
741
- when :DEC
742
- 'DEC'
743
- when :HEX
744
- 'HEX'
745
- when :STATE
746
- 'STATE'
747
- when :CHECK
748
- 'CHECK'
749
- when :STRING
750
- 'STRING'
751
- when :NONE
752
- 'NONE'
753
- else
754
- raise ArgumentError, "Unkown display type:#{type}!"
755
- end
756
- if not editable
757
- display << "-U"
758
- end
759
- display
760
- end
761
-
762
- end # class TableConfig
763
-
764
- end # module Cosmos
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2014 Ball Aerospace & Technologies Corp.
4
+ # All Rights Reserved.
5
+ #
6
+ # This program is free software; you can modify and/or redistribute it
7
+ # under the terms of the GNU General Public License
8
+ # as published by the Free Software Foundation; version 3 with
9
+ # attribution addendums as found in the LICENSE.txt
10
+
11
+ require 'cosmos'
12
+ require 'cosmos/tools/table_manager/table'
13
+
14
+ module Cosmos
15
+
16
+ # TableConfig provides capabilities to read an ascii file that defines the
17
+ # table parameters in a system and create a set of Tables for each.
18
+ class TableConfig
19
+
20
+ # Constructor for a TableConfig
21
+ def initialize
22
+ @ordered_tables = nil
23
+ @tables = nil
24
+ @current_name = nil
25
+ @current_table = nil
26
+ @current_parameter = nil
27
+ @cur_bit_offset = 0
28
+ @default_count = 0
29
+ @item_definitions = nil
30
+ @table_names = nil
31
+ end
32
+
33
+ # Processes a file and adds in the tables defined in the file
34
+ def process(filename)
35
+ building_generic_conversion = false
36
+ converted_type = nil
37
+ converted_bit_size = nil
38
+ proc_text = ''
39
+
40
+ Logger.info "Processing table config in file '#{filename}'"
41
+
42
+ unless test ?f, filename
43
+ Logger.error "File does not exist"
44
+ raise "ERROR! Table config file #{filename} does not exist!"
45
+ end
46
+
47
+ parser = ConfigParser.new
48
+ parser.parse_file(filename) do |keyword, parameters|
49
+ next unless keyword
50
+ if building_generic_conversion
51
+ case keyword
52
+ # Complete a generic conversion
53
+ when 'GENERIC_READ_CONVERSION_END', 'GENERIC_WRITE_CONVERSION_END', 'CONSTRAINT_END'
54
+ parser.verify_num_parameters(0, 0, keyword)
55
+ @current_parameter.read_conversion =
56
+ GenericConversion.new(proc_text,
57
+ converted_type,
58
+ converted_bit_size) if keyword.include? "READ"
59
+ @current_parameter.write_conversion =
60
+ GenericConversion.new(proc_text,
61
+ converted_type,
62
+ converted_bit_size) if keyword.include? "WRITE"
63
+ @current_parameter.constraint =
64
+ GenericConversion.new(proc_text,
65
+ converted_type,
66
+ converted_bit_size) if keyword.include? "CONSTRAINT"
67
+ building_generic_conversion = false
68
+ # Add the current config.line to the conversion being built
69
+ else
70
+ proc_text << parser.line << "\n"
71
+ end # case keyword
72
+
73
+ else # not building generic conversion
74
+
75
+ case keyword
76
+ # Start the definition of a generic conversion.
77
+ # All config.lines following this config.line are considered part
78
+ # of the conversion until an end of conversion marker is found
79
+ when 'GENERIC_READ_CONVERSION_START', 'GENERIC_WRITE_CONVERSION_START', 'CONSTRAINT_START'
80
+ usage = "#{keyword} <Converted Type (optional)> <Converted Bit Size (optional)>"
81
+ parser.verify_num_parameters(0, 2, usage)
82
+ proc_text = ''
83
+ building_generic_conversion = true
84
+ converted_type = nil
85
+ converted_bit_size = nil
86
+ if parameters[0]
87
+ converted_type = parameters[0].upcase.intern
88
+ raise parser.error("Invalid converted_type: #{converted_type}.") unless [:INT, :UINT, :FLOAT, :STRING, :BLOCK].include? converted_type
89
+ end
90
+ converted_bit_size = Integer(parameters[1]) if parameters[1]
91
+
92
+ when 'TABLEFILE'
93
+ parser.verify_num_parameters(1, 1, "#{keyword} <File name>")
94
+ process(File.join(File.dirname(filename), parameters[0]))
95
+
96
+ when 'TABLE'
97
+ usage = "TABLE <Table Name> <Table Description> <ONE_DIMENSIONAL or TWO_DIMENSIONAL> <BIG_ENDIAN or LITTLE_ENDIAN> <Identifier>"
98
+ parser.verify_num_parameters(5, nil, usage)
99
+ begin
100
+ # locals declared for readability
101
+ name = parameters[0]
102
+ description = parameters[1]
103
+ type = read_table_type(parameters[2])
104
+ endianness = read_endianness(parameters[3])
105
+ if parameters[5].nil?
106
+ table_id = Integer(parameters[4])
107
+ else
108
+ table_id = []
109
+ parameters[4..-1].each {|parameter| table_id << Integer(parameter)}
110
+ end
111
+
112
+ start_new_table(name, description, type, endianness, table_id, filename)
113
+ rescue ArgumentError => err
114
+ raise parser.error("#{err.message} with #{keyword}.\nUSAGE: #{usage}")
115
+ end
116
+
117
+ when 'PARAMETER'
118
+ usage = "PARAMETER <Parameter Name> <Parameter Description> <Data Type> <Bit Size> <Display Type> <Minimum Value> <Maximum Value> <Default Value - Only in ONE_DIMENTIONAL>"
119
+ parser.verify_num_parameters(7, 8, usage)
120
+ finish_parameter()
121
+ if @current_table
122
+ @current_table.num_rows += 1
123
+
124
+ begin
125
+ if @current_table.type == :TWO_DIMENSIONAL
126
+ parameters[0] = "#{parameters[0]}0"
127
+ end
128
+ # locals declared for readability
129
+ name = parameters[0]
130
+ if @current_table.items[name.upcase]
131
+ raise ArgumentError, "The name \"#{name}\" was already defined"
132
+ end
133
+ description = parameters[1]
134
+ type = read_item_type(parameters[2])
135
+ bit_size = parameters[3].to_i
136
+ display_type, editable = read_display_type(parameters[4], type)
137
+ if type == :BLOCK
138
+ range = nil
139
+ elsif type == :STRING
140
+ range = convert_to_range(parameters[5], parameters[6], :UINT, 0)
141
+ else
142
+ range = convert_to_range(parameters[5], parameters[6], type, bit_size)
143
+ end
144
+ if @current_table.type == :ONE_DIMENSIONAL
145
+ default = convert_to_type(parameters[7], type)
146
+ else # TWO_DIMENSIONAL defaults are set by the DEFAULT keyword
147
+ default = 0
148
+ end
149
+
150
+ @current_parameter = @current_table.create_param(name, @cur_bit_offset,
151
+ bit_size, type, description, range, default, display_type, editable)
152
+ @cur_bit_offset += parameters[3].to_i
153
+ rescue ArgumentError => err
154
+ raise parser.error("#{err.message} with #{keyword}.\nUSAGE: #{usage}")
155
+ end
156
+ end
157
+
158
+ when 'STATE'
159
+ usage = "STATE <Key> <Value>"
160
+ parser.verify_num_parameters(2, 2, usage)
161
+ begin
162
+ # locals declared for readability
163
+ state_name = parameters[0]
164
+ state_value = convert_to_type(parameters[1], @current_parameter.data_type)
165
+
166
+ @current_parameter.states ||= {}
167
+ @current_parameter.states[state_name.upcase] = state_value
168
+ rescue ArgumentError => err
169
+ raise parser.error("#{err.message} with #{keyword}.\nUSAGE: #{usage}")
170
+ end
171
+
172
+ when 'DEFAULT'
173
+ usage = "DEFAULT <Value1> <Value2> ... <ValueN>"
174
+ # if this is our first default value for a TWO_DIMENSIONAL table
175
+ # then we redefine the default values
176
+ if @default_count == 0
177
+ @item_definitions = Array.new(@current_table.sorted_items)
178
+ index = 0
179
+ @item_definitions.each do |item_def|
180
+ set_item_default_value(item_def, parameters[index])
181
+ index += 1
182
+ end
183
+
184
+ @current_table.num_rows = 1
185
+
186
+ # more default values have been given so copy all the parameters from
187
+ # the first row and reset the defaults
188
+ else
189
+ index = 0
190
+
191
+ @item_definitions.each do |item_def|
192
+ new_item = @current_table.duplicate_item(item_def,
193
+ @default_count,
194
+ @cur_bit_offset)
195
+ @cur_bit_offset += item_def.bit_size
196
+ set_item_default_value(new_item, parameters[index])
197
+ index += 1
198
+ end
199
+ @current_table.num_rows += 1
200
+ end # end else for if @default_count == 1
201
+
202
+ @default_count += 1
203
+
204
+ when 'POLY_READ_CONVERSION'
205
+ parser.verify_num_parameters(2, nil, "#{keyword} <C0> ... <CX>")
206
+ @current_parameter.read_conversion = PolynomialConversion.new(parameters[0..-1])
207
+
208
+ when 'POLY_WRITE_CONVERSION'
209
+ parser.verify_num_parameters(2, nil, "#{keyword} <C0> ... <CX>")
210
+ @current_parameter.write_conversion = PolynomialConversion.new(parameters[0..-1])
211
+
212
+ else
213
+ unknown_keyword(parser, keyword, parameters)
214
+ end # end case parameters[0]
215
+ end # end else for generic conversion
216
+ end # end loop
217
+
218
+ # Handle last packet
219
+ finish_table()
220
+
221
+ ensure
222
+ file.close if defined? file and file
223
+ end
224
+
225
+ # Sets the given item definition's default parameter to the default value
226
+ # given. This function does conversions based on the display_type of the item.
227
+ def set_item_default_value(item_def, default = nil)
228
+ begin
229
+ # If no default was passed use the definition default
230
+ if default == nil
231
+ default = item_def.default
232
+ end
233
+ if item_def.display_type == :STATE
234
+ begin
235
+ val = item_def.states.key(Integer(default))
236
+ rescue
237
+ val = default
238
+ end
239
+ @current_table.write(item_def.name, val)
240
+ item_def.default = @current_table.read(item_def.name, :RAW)
241
+ else
242
+ item_def.default = convert_to_type(default, item_def.data_type)
243
+ end
244
+ rescue
245
+ Logger.error "Setting #{item_def.name} to #{default} failed! Using #{item_def.range.first} for the default value."
246
+ item_def.default = item_def.range.first
247
+ end
248
+ end
249
+
250
+ # Classes extending table_definition should override this function to add
251
+ # new keyword processing. Ensure super() is called after processing new
252
+ # keywords so the default behavior of raising an ArgumentError is maintained.
253
+ def unknown_keyword(parser, keyword, parameters)
254
+ raise parser.error("Unknown keyword '#{keyword}'.", nil) if keyword
255
+ end
256
+
257
+ # Returns a specific Table
258
+ def get_table(name)
259
+ @tables[name]
260
+ end
261
+
262
+ # Returns an array of all the Tables in the definition file
263
+ def get_all_tables
264
+ @ordered_tables
265
+ end
266
+
267
+ # Returns an array of all the table names in the definition file
268
+ def get_table_names
269
+ @table_names
270
+ end
271
+
272
+ # Returns a default-value representation of an item to be printed in a DEF file
273
+ def item_to_def_string(table, item_def)
274
+ result = ""
275
+ case item_def.display_type
276
+ when :STATE
277
+ if table.type == :ONE_DIMENSIONAL
278
+ result = table.read(item_def.name, :RAW).to_s
279
+ else
280
+ result = table.read(item_def.name).to_s
281
+ end
282
+ when :DEC, :STRING, :NONE
283
+ result = table.read(item_def.name).to_s
284
+ when :CHECK
285
+ result = table.read(item_def.name, :RAW).to_s
286
+ when :HEX
287
+ result = format_hex(table, item_def)
288
+ end
289
+
290
+ return result
291
+ end
292
+
293
+ # Update all default values in the definition file on disk with current values
294
+ def commit_default_values(table)
295
+ new_file_data = ""
296
+ table_found = false
297
+ default_count = 0
298
+ table_parameters = []
299
+ parser = ConfigParser.new
300
+ parser.parse_file(table.filename) do |keyword, parameters|
301
+ line = parser.line
302
+
303
+ case keyword
304
+ when 'TABLE'
305
+ name = parameters[0].remove_quotes
306
+ if name == table.name
307
+ table_found = true
308
+ else
309
+ table_found = false
310
+ end
311
+
312
+ when 'PARAMETER'
313
+ if table_found
314
+ name = parameters[0].remove_quotes
315
+ if table.type == :ONE_DIMENSIONAL
316
+ item = table.get_item(name)
317
+
318
+ # update the default value (in case the user tries to reset default values)
319
+ item.default = table.read(name, :RAW)
320
+
321
+ # determine what the new default value will look like as printed in the DEF file
322
+ new_default = item_to_def_string(table, item)
323
+
324
+ # scan to the beginning of the default value
325
+ line_index = line.index(keyword) # skip to start of keyword
326
+ line_index = line.index(parameters[0], line_index+keyword.length) # skip to start of first param
327
+ (1..7).each do |index|
328
+ line_index = line.index(parameters[index], line_index+parameters[index-1].length) # skip to start of next param
329
+ end
330
+
331
+ # rebuild the line in 3 parts:
332
+ # everything up to the old default value
333
+ # the new default value
334
+ # everything after the old default value
335
+ line = line[0...line_index] + new_default + line[(line_index+parameters[7].length)..-1]
336
+ else
337
+ table_parameters << name
338
+ end
339
+ end
340
+
341
+ when 'DEFAULT'
342
+ if table_found
343
+ line_index = line.index(keyword)
344
+ previous_word = keyword
345
+ table_parameters.each_with_index do |param_name, index|
346
+ item_name = "#{param_name}#{default_count}"
347
+ item = table.get_item(item_name)
348
+
349
+ # update the default value (in case the user tries to reset default values)
350
+ item.default = table.read(item_name, :RAW)
351
+
352
+ # determine what the new default value will look like as printed in the DEF file
353
+ new_default = item_to_def_string(table, item)
354
+ if new_default.index(" ")
355
+ new_default = '"' + new_default + '"'
356
+ end
357
+
358
+ # scan to the beginning of the default value
359
+ line_index = line.index(parameters[index], line_index+previous_word.length)
360
+
361
+ # rebuild the line in 3 parts:
362
+ # everything up to the old default value
363
+ # the new default value
364
+ # everything after the old default value
365
+ line = line[0...line_index] + new_default + line[(line_index+parameters[index].length)..-1]
366
+
367
+ # update previous_word so that we can find the next value
368
+ previous_word = new_default
369
+ end
370
+
371
+ # count the row so that we know what the item_name is next time we see DEFAULT
372
+ default_count += 1
373
+ end
374
+ end
375
+
376
+ new_file_data << (line + "\n")
377
+
378
+ end # end loop
379
+
380
+ # ok, now replace the old def file with the new one
381
+ File.open(table.filename, "w") do |file|
382
+ file.puts new_file_data
383
+ end
384
+ end
385
+
386
+ # # Return the entire table_definition file for the given table name as a string
387
+ # def print_table(name)
388
+ # tdef = @tables[name]
389
+ # tstr = ""
390
+ # if tdef.table_id.class != Array
391
+ # tstr << "TABLE \"#{tdef.name}\" \"#{tdef.description}\" #{convert_table_type(tdef.type)} #{convert_endianness(tdef.get_endianness)} #{tdef.table_id}\n"
392
+ # else
393
+ # tstr << "TABLE \"#{tdef.name}\" \"#{tdef.description}\" #{convert_table_type(tdef.type)} #{convert_endianness(tdef.get_endianness)} #{tdef.table_id.join(' ')}\n"
394
+ # end
395
+ # if tdef.type == :ONE_DIMENSIONAL
396
+ # tdef.sorted_items.each do |item|
397
+ # tstr << create_item_string(item, tdef.type)
398
+ # end
399
+ # else # TWO_DIMENSIONAL
400
+ # tdef.num_columns.times do |column|
401
+ # item_def = tdef.sorted_items[column]
402
+ # tstr << create_item_string(item_def, tdef.type)
403
+ # end
404
+ #
405
+ # index = 0
406
+ # tdef.sorted_items.each do |item|
407
+ # if index % tdef.num_columns == 0
408
+ # tstr << "\n DEFAULT "
409
+ # end
410
+ # case item.display_type
411
+ # when :DEC
412
+ # default = item.default
413
+ # when :STATE
414
+ # default = "\"#{item.default}\""
415
+ # when :HEX
416
+ # default = "0x#{item.default.to_s(16)}"
417
+ # end
418
+ # tstr << "#{default} "
419
+ # index += 1
420
+ # end
421
+ # end # end else # TWO_DIMENSIONAL
422
+ # tstr
423
+ # end # end print_table(name)
424
+
425
+ def format_hex(table, item_def)
426
+ case item_def.bit_size
427
+ when 8
428
+ x = sprintf("%02X", table.read(item_def.name).to_s)
429
+ # if the number was negative x will have .. and possibly another
430
+ # F in the string which we remove by taking the last 4 digits
431
+ x = /\w{2}$/.match(x)[0]
432
+ when 16
433
+ x = sprintf("%04X", table.read(item_def.name).to_s)
434
+ # if the number was negative x will have .. and possibly another
435
+ # F in the string which we remove by taking the last 4 digits
436
+ x = /\w{4}$/.match(x)[0]
437
+ else
438
+ x = sprintf("%08X", table.read(item_def.name).to_s)
439
+ # if the number was negative x will have .. and possibly another
440
+ # F in the string which we remove by taking the last 8 digits
441
+ x = /\w{8}$/.match(x)[0]
442
+ end
443
+ return "0x%X" % Integer("0x#{x}") # convert to Integer
444
+ end
445
+
446
+ #############################################################################
447
+ protected
448
+ #############################################################################
449
+
450
+ # # helper function to print_table to get states, constraint, read_conversion,
451
+ # # and write_conversion that may be associated with an item in the table
452
+ # def create_item_string(item, type)
453
+ # tstr = ""
454
+ # case item.display_type
455
+ # when :DEC
456
+ # min = item.range.first
457
+ # max = item.range.last
458
+ # default = item.default
459
+ # when :STATE
460
+ # min = item.range.first
461
+ # max = item.range.last
462
+ # default = item.states[item.default]
463
+ # when :HEX
464
+ # min = "0x#{item.range.first.to_s(16)}"
465
+ # max = "0x#{item.range.last.to_s(16)}"
466
+ # default = "0x#{item.default.to_s(16)}"
467
+ # end
468
+ #
469
+ # name = item.name
470
+ # display = convert_display_type(item.display_type, item.editable)
471
+ # tstr << " PARAMETER \"#{name}\" \"#{item.description}\" #{convert_item_type(item.data_type)} #{item.bit_size} #{display} #{min} #{max}"
472
+ # if type == :ONE_DIMENSIONAL
473
+ # tstr << " #{default}\n"
474
+ # else # TWO_DIMENSIONAL
475
+ # tstr << "\n"
476
+ # end
477
+ #
478
+ # if item.states
479
+ # item.states.each do |key, value|
480
+ # tstr << " STATE \"#{key}\" #{value}\n"
481
+ # end
482
+ # end
483
+ # if item.constraint
484
+ # tstr << " CONSTRAINT_START\n"
485
+ # tstr << item.constraint.code
486
+ # tstr << " CONSTRAINT_END\n"
487
+ # end
488
+ # if item.read_conversion
489
+ # if item.read_conversion.class == PolynomialConversion
490
+ # tstr << " POLY_READ_CONVERSION #{item.read_conversion.code}\n"
491
+ # else
492
+ # tstr << " GENERIC_READ_CONVERSION_START\n"
493
+ # tstr << item.read_conversion.code
494
+ # tstr << " GENERIC_READ_CONVERSION_END\n"
495
+ # end
496
+ # end
497
+ # if not item.write_conversion.nil?
498
+ # if item.write_conversion.class == PolynomialConversion
499
+ # tstr << " POLY_WRITE_CONVERSION #{item.write_conversion.code}\n"
500
+ # else
501
+ # tstr << " GENERIC_WRITE_CONVERSION_START\n"
502
+ # tstr << item.write_conversion.code
503
+ # tstr << " GENERIC_WRITE_CONVERSION_END\n"
504
+ # end
505
+ # end
506
+ # tstr
507
+ # end
508
+
509
+ # Finish Updating parameter in packet
510
+ def finish_parameter
511
+ unless @current_parameter.nil?
512
+ @current_table.set_item(@current_parameter)
513
+ end
514
+ end
515
+
516
+ # Start processing a new packet
517
+ def start_new_table(name, description, type, endianness, table_id, filename)
518
+ finish_table
519
+ @current_table = Table.new(name, description, type, endianness, table_id, filename)
520
+ @current_name = name
521
+ @default_count = 0
522
+ end
523
+
524
+ # Add current packet into hash if it exists
525
+ def finish_table
526
+ finish_parameter
527
+ if @current_table
528
+ Logger.info "finish_table #{@current_name}"
529
+ if @current_table.num_rows
530
+ if @tables.nil? or @table_names.nil? or @ordered_tables.nil?
531
+ @tables = {}
532
+ @table_names = []
533
+ @ordered_tables = []
534
+ end
535
+ @tables[@current_name] = @current_table
536
+ @table_names << @current_name
537
+ @ordered_tables << @current_table
538
+ end
539
+ @current_table = nil
540
+ @current_parameter = nil
541
+ @cur_bit_offset = 0
542
+ end
543
+ end
544
+
545
+ # Convert the table type string to a value
546
+ def read_table_type(str)
547
+ str.upcase!
548
+ case str
549
+ when 'ONE_DIMENSIONAL'
550
+ :ONE_DIMENSIONAL
551
+ when 'TWO_DIMENSIONAL'
552
+ :TWO_DIMENSIONAL
553
+ else
554
+ raise ArgumentError, "Unknown table type:#{str}! Must be ONE_DIMENSIONAL or TWO_DIMENSIONAL"
555
+ end
556
+ end
557
+
558
+ # Convert the table type value to a string
559
+ def convert_table_type(type)
560
+ case type
561
+ when :ONE_DIMENSIONAL
562
+ 'ONE_DIMENSIONAL'
563
+ when :TWO_DIMENSIONAL
564
+ 'TWO_DIMENSIONAL'
565
+ else
566
+ raise ArgumentError, "Unknown table type:#{type}!"
567
+ end
568
+ end
569
+
570
+ # Convert the endianness string to a value
571
+ def read_endianness(str)
572
+ str.upcase!
573
+ case str
574
+ when 'BIG_ENDIAN'
575
+ :BIG_ENDIAN
576
+ when 'LITTLE_ENDIAN'
577
+ :LITTLE_ENDIAN
578
+ else
579
+ raise ArgumentError, "Unknown endianness:#{str}! Must be BIG_ENDIAN or LITTLE_ENDIAN"
580
+ end
581
+ end
582
+
583
+ # Convert the endianness value to a string
584
+ def convert_endianness(endianness)
585
+ case endianness
586
+ when :BIG_ENDIAN
587
+ 'BIG_ENDIAN'
588
+ when :LITTLE_ENDIAN
589
+ 'LITTLE_ENDIAN'
590
+ else
591
+ raise ArgumentError, "Unknown endianness:#{endianness}!"
592
+ end
593
+ end
594
+
595
+ # Process a item type string into a value
596
+ def read_item_type(str)
597
+ str.upcase!
598
+ case str
599
+ when 'INT'
600
+ :INT
601
+ when 'UINT'
602
+ :UINT
603
+ when 'FLOAT'
604
+ :FLOAT
605
+ when 'STRING'
606
+ :STRING
607
+ when 'BLOCK'
608
+ :BLOCK
609
+ else
610
+ raise ArgumentError, "Unknown type:#{str}! Must be INT, UINT, FLOAT, STRING, or BLOCK"
611
+ end
612
+ end
613
+
614
+ # Process a item type value into a string
615
+ def convert_item_type(type)
616
+ case type
617
+ when :INT
618
+ 'INT'
619
+ when :UINT
620
+ 'UINT'
621
+ when :FLOAT
622
+ 'FLOAT'
623
+ when :STRING
624
+ 'STRING'
625
+ when :BLOCK
626
+ 'BLOCK'
627
+ else
628
+ raise ArgumentError, "Unknown type:#{type}!"
629
+ end
630
+ end
631
+
632
+ # Convert a string to the correct item type
633
+ def convert_to_type(val, type)
634
+ raise ArgumentError, "Value is not defined" if val.nil?
635
+ begin
636
+ case type
637
+ when :INT, :UINT
638
+ val = Integer(val)
639
+ when :FLOAT
640
+ val = Float(val)
641
+ when :STRING, :BLOCK
642
+ val = val.to_s
643
+ end
644
+ rescue
645
+ begin
646
+ val = eval(val)
647
+ rescue
648
+ case type
649
+ when :INT
650
+ type_name = 'INT'
651
+ when :UINT
652
+ type_name = 'UINT'
653
+ when :FLOAT
654
+ type_name = 'FLOAT'
655
+ end
656
+ raise ArgumentError, "Error evaluating value:#{val} of type:#{type_name}"
657
+ end
658
+ end
659
+ val
660
+ end
661
+
662
+ # Convert the given minimum and maximum values of the given type and bit_size
663
+ # into a valid Ruby range: min..max. The function verifies the range is not
664
+ # backwards and that the minimum and maximum values make sense for the given
665
+ # type and bit_size. For example, a maximum of 256 doesn't make sense for a UINT8.
666
+ def convert_to_range(min, max, type, bit_size)
667
+ min = convert_to_type(min, type)
668
+ max = convert_to_type(max, type)
669
+ range = min..max
670
+
671
+ # First check for backwards ranges
672
+ if min > max
673
+ raise ArgumentError, "Min:#{min} can't be larger than max:#{max} in range"
674
+ end
675
+
676
+ case type
677
+ # No case for FLOAT because if the type is a float the range
678
+ # can be anything since you can't set a range wider than that allowed by a float
679
+ when :UINT
680
+ # First check for a negative range which doesn't make sense for UINT
681
+ if min < 0 or max < 0
682
+ raise ArgumentError, "Negative value in UINT range doesn't make sense"
683
+ end
684
+ if (bit_size == 8 and max > 255) or
685
+ (bit_size == 16 and max > 65535) or
686
+ (bit_size == 32 and max > 4294967295)
687
+ raise ArgumentError, "Max value of #{max} in UINT range doesn't make sense"
688
+ end
689
+ when :INT
690
+ if (bit_size == 8 and (min < -128 or max > 127)) or
691
+ (bit_size == 16 and (min < -32768 or max > 32767)) or
692
+ (bit_size == 32 and (min < -2147483648 or max > 2147483647))
693
+ raise ArgumentError, "Max value of #{max} in INT range doesn't make sense"
694
+ end
695
+ end
696
+ range
697
+ end
698
+
699
+ # Convert a display type string to the type value
700
+ def read_display_type(display_type, value_type)
701
+ editable = true
702
+ display_type.upcase!
703
+
704
+ if /-U/ =~ display_type
705
+ editable = false
706
+ display_type.sub!(/-U/,"")
707
+ end
708
+
709
+ case display_type
710
+ when 'DEC'
711
+ display_type = :DEC
712
+ when 'HEX'
713
+ display_type = :HEX
714
+ when 'STATE'
715
+ display_type = :STATE
716
+ when 'CHECK'
717
+ display_type = :CHECK
718
+ when 'STRING'
719
+ display_type = :STRING
720
+ when 'NONE'
721
+ display_type = :NONE
722
+ editable = false
723
+ else
724
+ raise ArgumentError, "Unknown display type:#{display_type}! Must be DEC, DEC-U, HEX, HEX-U, STATE, STATE-U, CHECK, CHECK-U, STRING or NONE"
725
+ end
726
+
727
+ if value_type ==:STRING && display_type != :STRING
728
+ raise ArgumentError, "STRING items must have a display type of STRING"
729
+ end
730
+ if value_type == :BLOCK && display_type != :NONE
731
+ raise ArgumentError, "BLOCK items must have a display type of NONE"
732
+ end
733
+
734
+ return display_type, editable
735
+ end
736
+
737
+ # Convert display type value to a display type string
738
+ def convert_display_type(type, editable)
739
+ display =
740
+ case type
741
+ when :DEC
742
+ 'DEC'
743
+ when :HEX
744
+ 'HEX'
745
+ when :STATE
746
+ 'STATE'
747
+ when :CHECK
748
+ 'CHECK'
749
+ when :STRING
750
+ 'STRING'
751
+ when :NONE
752
+ 'NONE'
753
+ else
754
+ raise ArgumentError, "Unkown display type:#{type}!"
755
+ end
756
+ if not editable
757
+ display << "-U"
758
+ end
759
+ display
760
+ end
761
+
762
+ end # class TableConfig
763
+
764
+ end # module Cosmos