cosmos 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (912) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +48 -48
  4. data/.travis.yml +7 -7
  5. data/CONTRIBUTING.txt +50 -50
  6. data/Gemfile +6 -6
  7. data/Guardfile +27 -27
  8. data/LICENSE.txt +879 -879
  9. data/Manifest.txt +1116 -1114
  10. data/README.md +109 -107
  11. data/Rakefile +214 -214
  12. data/autohotkey/config/data/diamond.STL +57 -57
  13. data/autohotkey/config/system/system.txt +34 -34
  14. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  15. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  16. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  17. data/autohotkey/config/targets/COSMOS/target.txt +5 -5
  18. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  19. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  20. data/autohotkey/config/targets/INST/cmd_tlm_server.txt +5 -5
  21. data/autohotkey/config/targets/INST/lib/example_limits_response.rb +30 -30
  22. data/autohotkey/config/targets/INST/lib/sim_inst.rb +305 -294
  23. data/autohotkey/config/targets/INST/screens/adcs.txt +46 -46
  24. data/autohotkey/config/targets/INST/screens/array.txt +7 -7
  25. data/autohotkey/config/targets/INST/screens/block.txt +8 -8
  26. data/autohotkey/config/targets/INST/screens/commanding.txt +30 -30
  27. data/autohotkey/config/targets/INST/screens/graphs.txt +14 -14
  28. data/autohotkey/config/targets/INST/screens/ground.txt +25 -25
  29. data/autohotkey/config/targets/INST/screens/health_status.txt +33 -33
  30. data/autohotkey/config/targets/INST/screens/hs.txt +49 -49
  31. data/autohotkey/config/targets/INST/screens/image.txt +21 -21
  32. data/autohotkey/config/targets/INST/screens/latest.txt +23 -23
  33. data/autohotkey/config/targets/INST/screens/mech.txt +25 -25
  34. data/autohotkey/config/targets/INST/screens/other.txt +25 -25
  35. data/autohotkey/config/targets/INST/screens/params.txt +25 -25
  36. data/autohotkey/config/targets/INST/screens/tabs.txt +68 -68
  37. data/autohotkey/config/targets/INST/target.txt +26 -26
  38. data/autohotkey/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  39. data/autohotkey/config/targets/META/cmd_tlm/meta_tlm.txt +9 -9
  40. data/autohotkey/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  41. data/autohotkey/config/targets/SYSTEM/screens/error.txt +11 -11
  42. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +22 -22
  43. data/autohotkey/config/tools/data_viewer/data_viewer.txt +11 -11
  44. data/autohotkey/config/tools/handbook_creator/handbook_creator.txt +49 -49
  45. data/autohotkey/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  46. data/autohotkey/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  47. data/autohotkey/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  48. data/autohotkey/config/tools/handbook_creator/templates/header.html.erb +25 -25
  49. data/autohotkey/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  50. data/autohotkey/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  51. data/autohotkey/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  52. data/autohotkey/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  53. data/autohotkey/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  54. data/autohotkey/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  55. data/autohotkey/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  56. data/autohotkey/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  57. data/autohotkey/config/tools/handbook_creator/templates/title.html.erb +1 -1
  58. data/autohotkey/config/tools/launcher/launcher.txt +38 -38
  59. data/autohotkey/config/tools/script_runner/script_runner.txt +3 -3
  60. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +8 -8
  61. data/autohotkey/config/tools/table_manager/OneDimensionalTable_def.txt +19 -19
  62. data/autohotkey/config/tools/table_manager/TwoDimensionalTable_def.txt +248 -248
  63. data/autohotkey/config/tools/test_runner/test_runner.txt +8 -8
  64. data/autohotkey/config/tools/test_runner/test_runner2.txt +11 -11
  65. data/autohotkey/config/tools/test_runner/test_runner3.txt +6 -6
  66. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  67. data/autohotkey/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  68. data/autohotkey/config/tools/tlm_extractor/tlm_extractor2.txt +9 -9
  69. data/autohotkey/config/tools/tlm_grapher/bad.txt +50 -50
  70. data/autohotkey/config/tools/tlm_grapher/temp1-4.txt +51 -51
  71. data/autohotkey/config/tools/tlm_grapher/test2.txt +111 -111
  72. data/autohotkey/config/tools/tlm_viewer/tlm_viewer.txt +24 -24
  73. data/autohotkey/config/tools/tlm_viewer/tlm_viewer2.txt +4 -4
  74. data/autohotkey/config/tools/tlm_viewer/tlm_viewer3.txt +3 -3
  75. data/autohotkey/lib/example_background_task.rb +42 -42
  76. data/autohotkey/lib/user_version.rb +3 -3
  77. data/autohotkey/procedures/clear_util.rb +7 -7
  78. data/autohotkey/procedures/collect.rb +18 -18
  79. data/autohotkey/procedures/collect_util.rb +14 -14
  80. data/autohotkey/procedures/example_test.rb +67 -67
  81. data/autohotkey/procedures/example_test2.rb +74 -74
  82. data/autohotkey/procedures/script_test.rb +17 -17
  83. data/autohotkey/procedures/syntax_error.rb +18 -18
  84. data/autohotkey/tools/CmdExtractorAHK +16 -16
  85. data/autohotkey/tools/CmdSender +14 -14
  86. data/autohotkey/tools/CmdSenderAHK +18 -18
  87. data/autohotkey/tools/CmdTlmServer +14 -14
  88. data/autohotkey/tools/CmdTlmServerAHK +28 -28
  89. data/autohotkey/tools/CmdTlmServerAHK2 +17 -17
  90. data/autohotkey/tools/DataViewer +14 -14
  91. data/autohotkey/tools/DataViewerAHK +17 -17
  92. data/autohotkey/tools/HandbookCreatorAHK +20 -20
  93. data/autohotkey/tools/LauncherAHK +17 -17
  94. data/autohotkey/tools/LimitsMonitorAHK +20 -20
  95. data/autohotkey/tools/OpenGLBuilderAHK +20 -20
  96. data/autohotkey/tools/PacketViewer +14 -14
  97. data/autohotkey/tools/PacketViewerAHK +18 -18
  98. data/autohotkey/tools/PacketViewerAHK2 +17 -17
  99. data/autohotkey/tools/Replay +14 -14
  100. data/autohotkey/tools/Replay.bat +59 -59
  101. data/autohotkey/tools/ReplayAHK +17 -17
  102. data/autohotkey/tools/ScriptRunner +14 -14
  103. data/autohotkey/tools/ScriptRunnerAHK +20 -20
  104. data/autohotkey/tools/ScriptRunnerAHK2 +17 -17
  105. data/autohotkey/tools/TableManager +14 -14
  106. data/autohotkey/tools/TableManagerAHK +30 -30
  107. data/autohotkey/tools/TestRunner +15 -15
  108. data/autohotkey/tools/TestRunnerAHK +17 -17
  109. data/autohotkey/tools/TestRunnerAHK2 +17 -17
  110. data/autohotkey/tools/TestRunnerAHK3 +17 -17
  111. data/autohotkey/tools/TestRunnerAHK4 +17 -17
  112. data/autohotkey/tools/TlmExtractor +15 -15
  113. data/autohotkey/tools/TlmExtractorAHK +19 -19
  114. data/autohotkey/tools/TlmExtractorAHK2 +16 -16
  115. data/autohotkey/tools/TlmExtractorAHK3 +16 -16
  116. data/autohotkey/tools/TlmGrapher +14 -14
  117. data/autohotkey/tools/TlmGrapherAHK +19 -19
  118. data/autohotkey/tools/TlmGrapherAHK2 +23 -23
  119. data/autohotkey/tools/TlmGrapherAHK3 +17 -17
  120. data/autohotkey/tools/TlmGrapherAHK4 +17 -17
  121. data/autohotkey/tools/TlmViewer +14 -14
  122. data/autohotkey/tools/TlmViewerAHK +28 -28
  123. data/autohotkey/tools/TlmViewerAHK2 +18 -18
  124. data/autohotkey/tools/TlmViewerAHK3 +18 -18
  125. data/autohotkey/tools/TlmViewerAHK4 +18 -18
  126. data/autohotkey/tools/TlmViewerAHK5 +18 -18
  127. data/autohotkey/tools/autohotkey.rb +37 -37
  128. data/autohotkey/tools/cmd_extractor.ahk +27 -27
  129. data/autohotkey/tools/cmd_sender.ahk +182 -162
  130. data/autohotkey/tools/cmd_tlm_server.ahk +89 -89
  131. data/autohotkey/tools/cmd_tlm_server2.ahk +45 -45
  132. data/autohotkey/tools/data_viewer.ahk +135 -135
  133. data/autohotkey/tools/handbook_creator.ahk +23 -23
  134. data/autohotkey/tools/launcher.ahk +41 -41
  135. data/autohotkey/tools/limits_monitor.ahk +70 -70
  136. data/autohotkey/tools/open_gl_builder.ahk +134 -134
  137. data/autohotkey/tools/packet_viewer.ahk +143 -143
  138. data/autohotkey/tools/packet_viewer2.ahk +9 -9
  139. data/autohotkey/tools/replay.ahk +98 -98
  140. data/autohotkey/tools/script_runner.ahk +589 -589
  141. data/autohotkey/tools/script_runner2.ahk +34 -31
  142. data/autohotkey/tools/table_manager.ahk +220 -220
  143. data/autohotkey/tools/test_runner.ahk +262 -259
  144. data/autohotkey/tools/test_runner2.ahk +52 -52
  145. data/autohotkey/tools/test_runner3.ahk +13 -13
  146. data/autohotkey/tools/tlm_extractor.ahk +272 -272
  147. data/autohotkey/tools/tlm_grapher.ahk +642 -642
  148. data/autohotkey/tools/tlm_grapher2.ahk +115 -115
  149. data/autohotkey/tools/tlm_grapher3.ahk +24 -24
  150. data/autohotkey/tools/tlm_viewer.ahk +133 -133
  151. data/autohotkey/tools/tlm_viewer2.ahk +50 -49
  152. data/autohotkey/tools/tlm_viewer4.ahk +4 -4
  153. data/autohotkey/tools/tlm_viewer5.ahk +20 -20
  154. data/bin/cosmos +96 -96
  155. data/bin/cstol_converter +1166 -1166
  156. data/bin/rubysloc +85 -85
  157. data/cosmos.gemspec +98 -97
  158. data/data/about.txt +4 -4
  159. data/data/crc.txt +306 -305
  160. data/data/diamond.STL +57 -57
  161. data/data/legal.txt +9 -9
  162. data/demo/Gemfile +6 -6
  163. data/demo/Launcher +15 -15
  164. data/demo/Launcher.bat +59 -59
  165. data/demo/Rakefile +61 -61
  166. data/demo/config/data/crc.txt +222 -206
  167. data/demo/config/data/diamond.STL +57 -57
  168. data/demo/config/data/meta_init.txt +4 -4
  169. data/demo/config/system/system.txt +34 -34
  170. data/demo/config/system/system2.txt +33 -33
  171. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  172. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  173. data/demo/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  174. data/demo/config/targets/COSMOS/screens/limits_change.txt +20 -20
  175. data/demo/config/targets/COSMOS/screens/version.txt +19 -19
  176. data/demo/config/targets/COSMOS/target.txt +11 -11
  177. data/demo/config/targets/EXAMPLE/cmd_tlm/example_cmds.txt +2 -2
  178. data/demo/config/targets/EXAMPLE/cmd_tlm/example_tlm.txt +3 -3
  179. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +6 -6
  180. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +22 -22
  181. data/demo/config/targets/EXAMPLE/target.txt +6 -6
  182. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +121 -121
  183. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +247 -247
  184. data/demo/config/targets/INST/cmd_tlm_server.txt +5 -5
  185. data/demo/config/targets/INST/lib/example_limits_response.rb +30 -30
  186. data/demo/config/targets/INST/lib/sim_inst.rb +305 -294
  187. data/demo/config/targets/INST/screens/adcs.txt +46 -46
  188. data/demo/config/targets/INST/screens/array.txt +15 -15
  189. data/demo/config/targets/INST/screens/block.txt +8 -8
  190. data/demo/config/targets/INST/screens/commanding.txt +30 -30
  191. data/demo/config/targets/INST/screens/graphs.txt +14 -14
  192. data/demo/config/targets/INST/screens/ground.txt +25 -25
  193. data/demo/config/targets/INST/screens/hs.txt +44 -44
  194. data/demo/config/targets/INST/screens/latest.txt +23 -23
  195. data/demo/config/targets/INST/screens/other.txt +29 -29
  196. data/demo/config/targets/INST/screens/tabs.txt +70 -70
  197. data/demo/config/targets/INST/target.txt +33 -33
  198. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +10 -10
  199. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +13 -13
  200. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  201. data/demo/config/targets/SYSTEM/cmd_tlm/override.txt +29 -29
  202. data/demo/config/targets/SYSTEM/screens/status.txt +12 -12
  203. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_cmds.txt +13 -12
  204. data/demo/config/targets/TEMPLATED/cmd_tlm/templated_tlm.txt +3 -3
  205. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +6 -6
  206. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +54 -48
  207. data/demo/config/targets/TEMPLATED/target.txt +6 -6
  208. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +33 -33
  209. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +29 -29
  210. data/demo/config/tools/data_viewer/data_viewer.txt +11 -11
  211. data/demo/config/tools/handbook_creator/handbook_creator.txt +66 -66
  212. data/demo/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  213. data/demo/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  214. data/demo/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  215. data/demo/config/tools/handbook_creator/templates/header.html.erb +25 -25
  216. data/demo/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  217. data/demo/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  218. data/demo/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  219. data/demo/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  220. data/demo/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  221. data/demo/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  222. data/demo/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  223. data/demo/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  224. data/demo/config/tools/handbook_creator/templates/title.html.erb +1 -1
  225. data/demo/config/tools/launcher/launcher.txt +45 -45
  226. data/demo/config/tools/launcher/launcher2.txt +45 -45
  227. data/demo/config/tools/script_runner/script_runner.txt +3 -3
  228. data/demo/config/tools/table_manager/ConfigTables_def.txt +8 -8
  229. data/demo/config/tools/table_manager/ExampleTableDefinition.txt +24 -24
  230. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +25 -25
  231. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +25 -25
  232. data/demo/config/tools/table_manager/PPSSelectionTable_def.txt +8 -8
  233. data/demo/config/tools/table_manager/TLMMonitoringTable_def.txt +248 -248
  234. data/demo/config/tools/test_runner/test_runner.txt +17 -17
  235. data/demo/config/tools/tlm_extractor/tlm_extractor.txt +13 -13
  236. data/demo/config/tools/tlm_extractor/tlm_extractor2.txt +2 -2
  237. data/demo/config/tools/tlm_extractor/tlm_extractor3.txt +2 -2
  238. data/demo/config/tools/tlm_extractor/tlm_extractor4.txt +2 -2
  239. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +41 -41
  240. data/demo/lib/example_background_task.rb +57 -52
  241. data/demo/lib/example_target.rb +113 -108
  242. data/demo/lib/scpi_target.rb +74 -74
  243. data/demo/lib/user_version.rb +3 -3
  244. data/demo/procedures/checks.rb +11 -11
  245. data/demo/procedures/clear_util.rb +7 -7
  246. data/demo/procedures/collect.rb +18 -18
  247. data/demo/procedures/collect_util.rb +14 -14
  248. data/demo/procedures/cosmos_api_test.rb +293 -293
  249. data/demo/procedures/disconnect.rb +29 -29
  250. data/demo/procedures/example_test.rb +182 -182
  251. data/demo/procedures/plot_test.rb +8 -8
  252. data/demo/procedures/run_example_test.rb +3 -3
  253. data/demo/procedures/test.rb +51 -51
  254. data/demo/tools/CmdExtractor +15 -15
  255. data/demo/tools/CmdExtractor.bat +59 -59
  256. data/demo/tools/CmdSender +15 -15
  257. data/demo/tools/CmdSender.bat +59 -59
  258. data/demo/tools/CmdTlmServer +15 -15
  259. data/demo/tools/CmdTlmServer.bat +59 -59
  260. data/demo/tools/DataViewer +15 -15
  261. data/demo/tools/DataViewer.bat +59 -59
  262. data/demo/tools/ExampleTarget +15 -15
  263. data/demo/tools/ExampleTarget.bat +59 -59
  264. data/demo/tools/HandbookCreator +15 -15
  265. data/demo/tools/HandbookCreator.bat +61 -61
  266. data/demo/tools/Launcher +15 -15
  267. data/demo/tools/Launcher.bat +59 -59
  268. data/demo/tools/LimitsMonitor +15 -15
  269. data/demo/tools/LimitsMonitor.bat +59 -59
  270. data/demo/tools/OpenGLBuilder +15 -15
  271. data/demo/tools/OpenGLBuilder.bat +59 -59
  272. data/demo/tools/PacketViewer +15 -15
  273. data/demo/tools/PacketViewer.bat +59 -59
  274. data/demo/tools/Replay +15 -15
  275. data/demo/tools/Replay.bat +59 -59
  276. data/demo/tools/ScpiTarget +15 -15
  277. data/demo/tools/ScpiTarget.bat +59 -59
  278. data/demo/tools/ScriptRunner +15 -15
  279. data/demo/tools/ScriptRunner.bat +59 -59
  280. data/demo/tools/TableManager +15 -15
  281. data/demo/tools/TableManager.bat +59 -59
  282. data/demo/tools/TestRunner +15 -15
  283. data/demo/tools/TestRunner.bat +59 -59
  284. data/demo/tools/TlmExtractor +15 -15
  285. data/demo/tools/TlmExtractor.bat +59 -59
  286. data/demo/tools/TlmGrapher +15 -15
  287. data/demo/tools/TlmGrapher.bat +59 -59
  288. data/demo/tools/TlmViewer +15 -15
  289. data/demo/tools/TlmViewer.bat +59 -59
  290. data/demo/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  291. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  292. data/demo/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  293. data/demo/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  294. data/demo/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  295. data/demo/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  296. data/demo/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  297. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  298. data/demo/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  299. data/demo/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  300. data/demo/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  301. data/demo/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  302. data/demo/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  303. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  304. data/demo/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  305. data/demo/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  306. data/demo/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  307. data/demo/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  308. data/demo/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  309. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  310. data/demo/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  311. data/demo/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  312. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  313. data/demo/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  314. data/demo/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  315. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  316. data/demo/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  317. data/demo/tools/mac/Replay.app/Contents/Info.plist +38 -38
  318. data/demo/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  319. data/demo/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  320. data/demo/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  321. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  322. data/demo/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  323. data/demo/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  324. data/demo/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  325. data/demo/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  326. data/demo/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  327. data/demo/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  328. data/demo/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  329. data/demo/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  330. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  331. data/demo/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  332. data/demo/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  333. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  334. data/demo/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  335. data/demo/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  336. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  337. data/demo/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  338. data/ext/cosmos/ext/array/array.c +111 -111
  339. data/ext/cosmos/ext/array/extconf.rb +13 -13
  340. data/ext/cosmos/ext/buffered_file/buffered_file.c +167 -167
  341. data/ext/cosmos/ext/buffered_file/extconf.rb +13 -13
  342. data/ext/cosmos/ext/config_parser/config_parser.c +237 -237
  343. data/ext/cosmos/ext/config_parser/extconf.rb +13 -13
  344. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +117 -117
  345. data/ext/cosmos/ext/cosmos_io/extconf.rb +13 -13
  346. data/ext/cosmos/ext/crc/crc.c +341 -341
  347. data/ext/cosmos/ext/crc/extconf.rb +12 -12
  348. data/ext/cosmos/ext/line_graph/extconf.rb +13 -13
  349. data/ext/cosmos/ext/line_graph/line_graph.c +501 -501
  350. data/ext/cosmos/ext/low_fragmentation_array/extconf.rb +12 -12
  351. data/ext/cosmos/ext/low_fragmentation_array/low_fragmentation_array.c +261 -261
  352. data/ext/cosmos/ext/packet/extconf.rb +13 -13
  353. data/ext/cosmos/ext/packet/packet.c +339 -339
  354. data/ext/cosmos/ext/platform/extconf.rb +13 -13
  355. data/ext/cosmos/ext/platform/platform.c +81 -81
  356. data/ext/cosmos/ext/polynomial_conversion/extconf.rb +13 -13
  357. data/ext/cosmos/ext/polynomial_conversion/polynomial_conversion.c +73 -73
  358. data/ext/cosmos/ext/string/extconf.rb +13 -13
  359. data/ext/cosmos/ext/string/string.c +49 -49
  360. data/ext/cosmos/ext/structure/structure.c +894 -894
  361. data/ext/cosmos/ext/tabbed_plots_config/extconf.rb +13 -13
  362. data/ext/cosmos/ext/tabbed_plots_config/tabbed_plots_config.c +51 -51
  363. data/ext/cosmos/ext/telemetry/extconf.rb +13 -13
  364. data/ext/cosmos/ext/telemetry/telemetry.c +306 -306
  365. data/ext/mkrf_conf.rb +40 -40
  366. data/install/Gemfile +6 -6
  367. data/install/Launcher +14 -14
  368. data/install/Launcher.bat +59 -59
  369. data/install/Rakefile +61 -61
  370. data/install/config/data/crc.txt +134 -133
  371. data/install/config/system/system.txt +29 -29
  372. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  373. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  374. data/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  375. data/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  376. data/install/config/targets/COSMOS/screens/version.txt +19 -19
  377. data/install/config/targets/COSMOS/target.txt +8 -8
  378. data/install/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  379. data/install/config/tools/data_viewer/data_viewer.txt +3 -3
  380. data/install/config/tools/handbook_creator/handbook_creator.txt +49 -49
  381. data/install/config/tools/handbook_creator/templates/command_packets.html.erb +86 -86
  382. data/install/config/tools/handbook_creator/templates/command_toc.html.erb +38 -38
  383. data/install/config/tools/handbook_creator/templates/footer.html.erb +9 -9
  384. data/install/config/tools/handbook_creator/templates/header.html.erb +25 -25
  385. data/install/config/tools/handbook_creator/templates/limits_groups.html.erb +13 -13
  386. data/install/config/tools/handbook_creator/templates/nav.html.erb +27 -27
  387. data/install/config/tools/handbook_creator/templates/overview.html.erb +1 -1
  388. data/install/config/tools/handbook_creator/templates/pdf_cover.html.erb +23 -23
  389. data/install/config/tools/handbook_creator/templates/pdf_footer.html.erb +33 -33
  390. data/install/config/tools/handbook_creator/templates/pdf_header.html.erb +41 -41
  391. data/install/config/tools/handbook_creator/templates/telemetry_packets.html.erb +80 -80
  392. data/install/config/tools/handbook_creator/templates/telemetry_toc.html.erb +38 -38
  393. data/install/config/tools/handbook_creator/templates/title.html.erb +1 -1
  394. data/install/config/tools/launcher/launcher.txt +39 -39
  395. data/install/config/tools/script_runner/script_runner.txt +3 -3
  396. data/install/config/tools/test_runner/test_runner.txt +8 -8
  397. data/install/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  398. data/install/lib/user_version.rb +3 -3
  399. data/install/tools/CmdExtractor +15 -15
  400. data/install/tools/CmdExtractor.bat +59 -59
  401. data/install/tools/CmdSender +15 -15
  402. data/install/tools/CmdSender.bat +59 -59
  403. data/install/tools/CmdTlmServer +15 -15
  404. data/install/tools/CmdTlmServer.bat +59 -59
  405. data/install/tools/DataViewer +15 -15
  406. data/install/tools/DataViewer.bat +59 -59
  407. data/install/tools/HandbookCreator +15 -15
  408. data/install/tools/HandbookCreator.bat +61 -61
  409. data/install/tools/Launcher +15 -15
  410. data/install/tools/Launcher.bat +59 -59
  411. data/install/tools/LimitsMonitor +15 -15
  412. data/install/tools/LimitsMonitor.bat +59 -59
  413. data/install/tools/OpenGLBuilder +15 -15
  414. data/install/tools/OpenGLBuilder.bat +59 -59
  415. data/install/tools/PacketViewer +15 -15
  416. data/install/tools/PacketViewer.bat +59 -59
  417. data/install/tools/Replay +15 -15
  418. data/install/tools/Replay.bat +59 -59
  419. data/install/tools/ScriptRunner +15 -15
  420. data/install/tools/ScriptRunner.bat +59 -59
  421. data/install/tools/TableManager +15 -15
  422. data/install/tools/TableManager.bat +59 -59
  423. data/install/tools/TestRunner +15 -15
  424. data/install/tools/TestRunner.bat +59 -59
  425. data/install/tools/TlmExtractor +15 -15
  426. data/install/tools/TlmExtractor.bat +59 -59
  427. data/install/tools/TlmGrapher +15 -15
  428. data/install/tools/TlmGrapher.bat +59 -59
  429. data/install/tools/TlmViewer +15 -15
  430. data/install/tools/TlmViewer.bat +59 -59
  431. data/install/tools/mac/CmdExtractor.app/Contents/Info.plist +38 -38
  432. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/CmdExtractor.rb +15 -15
  433. data/install/tools/mac/CmdExtractor.app/Contents/MacOS/main.sh +6 -6
  434. data/install/tools/mac/CmdSender.app/Contents/Info.plist +38 -38
  435. data/install/tools/mac/CmdSender.app/Contents/MacOS/CmdSender.rb +15 -15
  436. data/install/tools/mac/CmdSender.app/Contents/MacOS/main.sh +6 -6
  437. data/install/tools/mac/CmdTlmServer.app/Contents/Info.plist +38 -38
  438. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/CmdTlmServer.rb +15 -15
  439. data/install/tools/mac/CmdTlmServer.app/Contents/MacOS/main.sh +6 -6
  440. data/install/tools/mac/DataViewer.app/Contents/Info.plist +38 -38
  441. data/install/tools/mac/DataViewer.app/Contents/MacOS/DataViewer.rb +15 -15
  442. data/install/tools/mac/DataViewer.app/Contents/MacOS/main.sh +6 -6
  443. data/install/tools/mac/HandbookCreator.app/Contents/Info.plist +38 -38
  444. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/HandbookCreator.rb +15 -15
  445. data/install/tools/mac/HandbookCreator.app/Contents/MacOS/main.sh +6 -6
  446. data/install/tools/mac/Launcher.app/Contents/Info.plist +38 -38
  447. data/install/tools/mac/Launcher.app/Contents/MacOS/Launcher.rb +15 -15
  448. data/install/tools/mac/Launcher.app/Contents/MacOS/main.sh +6 -6
  449. data/install/tools/mac/LimitsMonitor.app/Contents/Info.plist +38 -38
  450. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/LimitsMonitor.rb +15 -15
  451. data/install/tools/mac/LimitsMonitor.app/Contents/MacOS/main.sh +6 -6
  452. data/install/tools/mac/OpenGLBuilder.app/Contents/Info.plist +38 -38
  453. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/OpenGLBuilder.rb +15 -15
  454. data/install/tools/mac/OpenGLBuilder.app/Contents/MacOS/main.sh +6 -6
  455. data/install/tools/mac/PacketViewer.app/Contents/Info.plist +38 -38
  456. data/install/tools/mac/PacketViewer.app/Contents/MacOS/PacketViewer.rb +15 -15
  457. data/install/tools/mac/PacketViewer.app/Contents/MacOS/main.sh +6 -6
  458. data/install/tools/mac/Replay.app/Contents/Info.plist +38 -38
  459. data/install/tools/mac/Replay.app/Contents/MacOS/Replay.rb +15 -15
  460. data/install/tools/mac/Replay.app/Contents/MacOS/main.sh +6 -6
  461. data/install/tools/mac/ScriptRunner.app/Contents/Info.plist +38 -38
  462. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/ScriptRunner.rb +15 -15
  463. data/install/tools/mac/ScriptRunner.app/Contents/MacOS/main.sh +6 -6
  464. data/install/tools/mac/TableManager.app/Contents/Info.plist +38 -38
  465. data/install/tools/mac/TableManager.app/Contents/MacOS/TableManager.rb +15 -15
  466. data/install/tools/mac/TableManager.app/Contents/MacOS/main.sh +6 -6
  467. data/install/tools/mac/TestRunner.app/Contents/Info.plist +38 -38
  468. data/install/tools/mac/TestRunner.app/Contents/MacOS/TestRunner.rb +15 -15
  469. data/install/tools/mac/TestRunner.app/Contents/MacOS/main.sh +6 -6
  470. data/install/tools/mac/TlmExtractor.app/Contents/Info.plist +38 -38
  471. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/TlmExtractor.rb +15 -15
  472. data/install/tools/mac/TlmExtractor.app/Contents/MacOS/main.sh +6 -6
  473. data/install/tools/mac/TlmGrapher.app/Contents/Info.plist +38 -38
  474. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/TlmGrapher.rb +15 -15
  475. data/install/tools/mac/TlmGrapher.app/Contents/MacOS/main.sh +6 -6
  476. data/install/tools/mac/TlmViewer.app/Contents/Info.plist +38 -38
  477. data/install/tools/mac/TlmViewer.app/Contents/MacOS/TlmViewer.rb +15 -15
  478. data/install/tools/mac/TlmViewer.app/Contents/MacOS/main.sh +6 -6
  479. data/lib/cosmos.rb +63 -63
  480. data/lib/cosmos/ccsds/ccsds_packet.rb +63 -63
  481. data/lib/cosmos/ccsds/ccsds_parser.rb +143 -143
  482. data/lib/cosmos/config/config_parser.rb +324 -324
  483. data/lib/cosmos/conversions.rb +13 -13
  484. data/lib/cosmos/conversions/conversion.rb +47 -47
  485. data/lib/cosmos/conversions/generic_conversion.rb +55 -55
  486. data/lib/cosmos/conversions/new_packet_log_conversion.rb +45 -45
  487. data/lib/cosmos/conversions/polynomial_conversion.rb +57 -57
  488. data/lib/cosmos/conversions/processor_conversion.rb +46 -46
  489. data/lib/cosmos/conversions/received_count_conversion.rb +33 -33
  490. data/lib/cosmos/conversions/received_time_formatted_conversion.rb +37 -37
  491. data/lib/cosmos/conversions/received_time_seconds_conversion.rb +37 -37
  492. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +128 -128
  493. data/lib/cosmos/conversions/unix_time_conversion.rb +50 -50
  494. data/lib/cosmos/conversions/unix_time_formatted_conversion.rb +44 -44
  495. data/lib/cosmos/conversions/unix_time_seconds_conversion.rb +44 -44
  496. data/lib/cosmos/core_ext.rb +18 -18
  497. data/lib/cosmos/core_ext/array.rb +354 -354
  498. data/lib/cosmos/core_ext/class.rb +51 -51
  499. data/lib/cosmos/core_ext/cosmos_io.rb +29 -29
  500. data/lib/cosmos/core_ext/exception.rb +52 -52
  501. data/lib/cosmos/core_ext/file.rb +75 -75
  502. data/lib/cosmos/core_ext/hash.rb +28 -28
  503. data/lib/cosmos/core_ext/io.rb +75 -75
  504. data/lib/cosmos/core_ext/kernel.rb +38 -38
  505. data/lib/cosmos/core_ext/math.rb +119 -119
  506. data/lib/cosmos/core_ext/matrix.rb +146 -146
  507. data/lib/cosmos/core_ext/objectspace.rb +29 -29
  508. data/lib/cosmos/core_ext/range.rb +22 -22
  509. data/lib/cosmos/core_ext/socket.rb +32 -32
  510. data/lib/cosmos/core_ext/string.rb +310 -310
  511. data/lib/cosmos/core_ext/stringio.rb +24 -24
  512. data/lib/cosmos/core_ext/time.rb +446 -446
  513. data/lib/cosmos/gui/choosers/combobox_chooser.rb +130 -130
  514. data/lib/cosmos/gui/choosers/file_chooser.rb +68 -68
  515. data/lib/cosmos/gui/choosers/float_chooser.rb +82 -82
  516. data/lib/cosmos/gui/choosers/integer_chooser.rb +80 -80
  517. data/lib/cosmos/gui/choosers/string_chooser.rb +53 -53
  518. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +317 -317
  519. data/lib/cosmos/gui/dialogs/about_dialog.rb +128 -128
  520. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +136 -136
  521. data/lib/cosmos/gui/dialogs/cmd_details_dialog.rb +52 -52
  522. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +149 -149
  523. data/lib/cosmos/gui/dialogs/details_dialog.rb +174 -174
  524. data/lib/cosmos/gui/dialogs/exception_dialog.rb +97 -97
  525. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +59 -59
  526. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +196 -196
  527. data/lib/cosmos/gui/dialogs/legal_dialog.rb +169 -168
  528. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +118 -118
  529. data/lib/cosmos/gui/dialogs/progress_dialog.rb +270 -262
  530. data/lib/cosmos/gui/dialogs/pry_dialog.rb +165 -161
  531. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +37 -37
  532. data/lib/cosmos/gui/dialogs/select_dialog.rb +54 -54
  533. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +131 -131
  534. data/lib/cosmos/gui/dialogs/splash.rb +113 -113
  535. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +206 -206
  536. data/lib/cosmos/gui/dialogs/tlm_edit_dialog.rb +81 -81
  537. data/lib/cosmos/gui/line_graph/line_graph.rb +456 -456
  538. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +34 -34
  539. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +494 -494
  540. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +116 -116
  541. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +460 -460
  542. data/lib/cosmos/gui/line_graph/line_graph_script.rb +26 -26
  543. data/lib/cosmos/gui/line_graph/lines.rb +290 -290
  544. data/lib/cosmos/gui/line_graph/overview_graph.rb +459 -459
  545. data/lib/cosmos/gui/opengl/earth_model.rb +22 -22
  546. data/lib/cosmos/gui/opengl/gl_bounds.rb +67 -67
  547. data/lib/cosmos/gui/opengl/gl_light.rb +39 -39
  548. data/lib/cosmos/gui/opengl/gl_material.rb +29 -29
  549. data/lib/cosmos/gui/opengl/gl_scene.rb +72 -72
  550. data/lib/cosmos/gui/opengl/gl_shape.rb +146 -146
  551. data/lib/cosmos/gui/opengl/gl_viewer.rb +724 -712
  552. data/lib/cosmos/gui/opengl/gl_viewport.rb +35 -35
  553. data/lib/cosmos/gui/opengl/moon_model.rb +22 -22
  554. data/lib/cosmos/gui/opengl/opengl.rb +8 -8
  555. data/lib/cosmos/gui/opengl/stl_reader.rb +211 -211
  556. data/lib/cosmos/gui/opengl/stl_shape.rb +124 -124
  557. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +202 -202
  558. data/lib/cosmos/gui/qt.rb +813 -786
  559. data/lib/cosmos/gui/qt_tool.rb +378 -373
  560. data/lib/cosmos/gui/text/completion.rb +381 -381
  561. data/lib/cosmos/gui/text/completion_line_edit.rb +30 -30
  562. data/lib/cosmos/gui/text/completion_text_edit.rb +179 -179
  563. data/lib/cosmos/gui/text/ruby_editor.rb +395 -395
  564. data/lib/cosmos/gui/utilities/screenshot.rb +25 -25
  565. data/lib/cosmos/gui/utilities/script_module_gui.rb +203 -203
  566. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +161 -161
  567. data/lib/cosmos/gui/widgets/packet_log_frame.rb +305 -305
  568. data/lib/cosmos/gui/widgets/realtime_button_bar.rb +98 -98
  569. data/lib/cosmos/interfaces.rb +11 -11
  570. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +153 -149
  571. data/lib/cosmos/interfaces/interface.rb +213 -213
  572. data/lib/cosmos/interfaces/linc_interface.rb +360 -360
  573. data/lib/cosmos/interfaces/serial_interface.rb +76 -76
  574. data/lib/cosmos/interfaces/simulated_target_interface.rb +129 -128
  575. data/lib/cosmos/interfaces/stream_interface.rb +156 -156
  576. data/lib/cosmos/interfaces/tcpip_client_interface.rb +60 -60
  577. data/lib/cosmos/interfaces/tcpip_server_interface.rb +154 -154
  578. data/lib/cosmos/interfaces/udp_interface.rb +173 -173
  579. data/lib/cosmos/io/buffered_file.rb +11 -11
  580. data/lib/cosmos/io/cosmos_snmp.rb +50 -50
  581. data/lib/cosmos/io/io_multiplexer.rb +89 -89
  582. data/lib/cosmos/io/json_drb.rb +344 -320
  583. data/lib/cosmos/io/json_drb_object.rb +137 -137
  584. data/lib/cosmos/io/json_rpc.rb +365 -365
  585. data/lib/cosmos/io/posix_serial_driver.rb +145 -145
  586. data/lib/cosmos/io/raw_logger.rb +174 -174
  587. data/lib/cosmos/io/raw_logger_pair.rb +71 -71
  588. data/lib/cosmos/io/serial_driver.rb +85 -85
  589. data/lib/cosmos/io/stderr.rb +36 -36
  590. data/lib/cosmos/io/stdout.rb +36 -36
  591. data/lib/cosmos/io/tcpip_server.rb +583 -532
  592. data/lib/cosmos/io/udp_sockets.rb +152 -152
  593. data/lib/cosmos/io/win32_serial_driver.rb +147 -147
  594. data/lib/cosmos/packet_logs.rb +6 -6
  595. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +107 -107
  596. data/lib/cosmos/packet_logs/packet_log_reader.rb +441 -439
  597. data/lib/cosmos/packet_logs/packet_log_writer.rb +321 -309
  598. data/lib/cosmos/packet_logs/packet_log_writer_pair.rb +30 -30
  599. data/lib/cosmos/packets/binary_accessor.rb +921 -921
  600. data/lib/cosmos/packets/commands.rb +291 -291
  601. data/lib/cosmos/packets/limits.rb +263 -263
  602. data/lib/cosmos/packets/limits_response.rb +38 -38
  603. data/lib/cosmos/packets/packet.rb +714 -699
  604. data/lib/cosmos/packets/packet_config.rb +1034 -1034
  605. data/lib/cosmos/packets/packet_item.rb +317 -317
  606. data/lib/cosmos/packets/packet_item_limits.rb +128 -128
  607. data/lib/cosmos/packets/structure.rb +421 -386
  608. data/lib/cosmos/packets/structure_item.rb +233 -233
  609. data/lib/cosmos/packets/telemetry.rb +317 -317
  610. data/lib/cosmos/processors.rb +6 -6
  611. data/lib/cosmos/processors/new_packet_log_processor.rb +34 -34
  612. data/lib/cosmos/processors/processor.rb +71 -71
  613. data/lib/cosmos/processors/statistics_processor.rb +65 -65
  614. data/lib/cosmos/processors/watermark_processor.rb +44 -44
  615. data/lib/cosmos/script.rb +9 -9
  616. data/lib/cosmos/script/extract.rb +115 -115
  617. data/lib/cosmos/script/script.rb +1513 -1493
  618. data/lib/cosmos/streams/burst_stream_protocol.rb +25 -25
  619. data/lib/cosmos/streams/fixed_stream_protocol.rb +111 -111
  620. data/lib/cosmos/streams/length_stream_protocol.rb +140 -140
  621. data/lib/cosmos/streams/preidentified_stream_protocol.rb +118 -118
  622. data/lib/cosmos/streams/serial_stream.rb +152 -143
  623. data/lib/cosmos/streams/stream.rb +57 -57
  624. data/lib/cosmos/streams/stream_protocol.rb +369 -369
  625. data/lib/cosmos/streams/tcpip_client_stream.rb +77 -77
  626. data/lib/cosmos/streams/tcpip_socket_stream.rb +139 -139
  627. data/lib/cosmos/streams/template_stream_protocol.rb +140 -140
  628. data/lib/cosmos/streams/terminated_stream_protocol.rb +81 -81
  629. data/lib/cosmos/system.rb +4 -4
  630. data/lib/cosmos/system/system.rb +558 -558
  631. data/lib/cosmos/system/target.rb +178 -178
  632. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +254 -253
  633. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +716 -716
  634. data/lib/cosmos/tools/cmd_sender/cmd_sender_item_delegate.rb +77 -77
  635. data/lib/cosmos/tools/cmd_sender/cmd_sender_text_edit.rb +70 -70
  636. data/lib/cosmos/tools/cmd_tlm_server/api.rb +936 -940
  637. data/lib/cosmos/tools/cmd_tlm_server/background_task.rb +46 -46
  638. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +67 -63
  639. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +511 -497
  640. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +241 -241
  641. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +1033 -1008
  642. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +112 -112
  643. data/lib/cosmos/tools/cmd_tlm_server/connections.rb +176 -176
  644. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +241 -221
  645. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +127 -127
  646. data/lib/cosmos/tools/cmd_tlm_server/packet_logging.rb +132 -132
  647. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +66 -66
  648. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +97 -97
  649. data/lib/cosmos/tools/data_viewer/data_viewer.rb +628 -600
  650. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +167 -167
  651. data/lib/cosmos/tools/data_viewer/dump_component.rb +40 -40
  652. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +149 -149
  653. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +360 -360
  654. data/lib/cosmos/tools/launcher/launcher.rb +184 -184
  655. data/lib/cosmos/tools/launcher/launcher_config.rb +175 -167
  656. data/lib/cosmos/tools/launcher/launcher_multitool.rb +40 -41
  657. data/lib/cosmos/tools/launcher/launcher_tool.rb +104 -104
  658. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +796 -768
  659. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +416 -416
  660. data/lib/cosmos/tools/opengl_builder/scene_config.rb +118 -118
  661. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +525 -525
  662. data/lib/cosmos/tools/replay/replay.rb +495 -488
  663. data/lib/cosmos/tools/replay/replay_server.rb +91 -91
  664. data/lib/cosmos/tools/script_runner/script_audit.rb +147 -139
  665. data/lib/cosmos/tools/script_runner/script_runner.rb +914 -914
  666. data/lib/cosmos/tools/script_runner/script_runner_config.rb +40 -40
  667. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +1892 -1859
  668. data/lib/cosmos/tools/table_manager/table.rb +70 -70
  669. data/lib/cosmos/tools/table_manager/table_config.rb +764 -764
  670. data/lib/cosmos/tools/table_manager/table_item.rb +74 -74
  671. data/lib/cosmos/tools/table_manager/table_manager.rb +1065 -1065
  672. data/lib/cosmos/tools/table_manager/table_manager_core.rb +539 -539
  673. data/lib/cosmos/tools/test_runner/results_writer.rb +283 -283
  674. data/lib/cosmos/tools/test_runner/test.rb +480 -480
  675. data/lib/cosmos/tools/test_runner/test_runner.rb +1157 -1157
  676. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +338 -338
  677. data/lib/cosmos/tools/tlm_extractor/text_item_chooser.rb +60 -60
  678. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +1008 -1008
  679. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +371 -371
  680. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +60 -60
  681. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +75 -75
  682. data/lib/cosmos/tools/tlm_grapher/data_object_adders/singlexy_data_object_adder.rb +44 -44
  683. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +94 -94
  684. data/lib/cosmos/tools/tlm_grapher/data_object_editors/data_object_editor.rb +61 -61
  685. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +180 -180
  686. data/lib/cosmos/tools/tlm_grapher/data_object_editors/linegraph_data_object_editor.rb +141 -141
  687. data/lib/cosmos/tools/tlm_grapher/data_object_editors/singlexy_data_object_editor.rb +30 -30
  688. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +173 -173
  689. data/lib/cosmos/tools/tlm_grapher/data_objects/data_object.rb +177 -177
  690. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +412 -409
  691. data/lib/cosmos/tools/tlm_grapher/data_objects/linegraph_data_object.rb +176 -176
  692. data/lib/cosmos/tools/tlm_grapher/data_objects/singlexy_data_object.rb +25 -25
  693. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +323 -320
  694. data/lib/cosmos/tools/tlm_grapher/plot_editors/linegraph_plot_editor.rb +181 -181
  695. data/lib/cosmos/tools/tlm_grapher/plot_editors/plot_editor.rb +28 -28
  696. data/lib/cosmos/tools/tlm_grapher/plot_editors/singlexy_plot_editor.rb +30 -30
  697. data/lib/cosmos/tools/tlm_grapher/plot_editors/xy_plot_editor.rb +59 -59
  698. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/linegraph_plot_gui_object.rb +172 -172
  699. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/singlexy_plot_gui_object.rb +27 -27
  700. data/lib/cosmos/tools/tlm_grapher/plot_gui_objects/xy_plot_gui_object.rb +74 -74
  701. data/lib/cosmos/tools/tlm_grapher/plots/linegraph_plot.rb +201 -201
  702. data/lib/cosmos/tools/tlm_grapher/plots/plot.rb +69 -69
  703. data/lib/cosmos/tools/tlm_grapher/plots/singlexy_plot.rb +20 -20
  704. data/lib/cosmos/tools/tlm_grapher/plots/xy_plot.rb +61 -61
  705. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1278 -1278
  706. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +430 -430
  707. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_data_object_editor.rb +107 -107
  708. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_logfile_thread.rb +111 -95
  709. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +101 -101
  710. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +72 -66
  711. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tab.rb +57 -57
  712. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +1004 -1004
  713. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +87 -87
  714. data/lib/cosmos/tools/tlm_viewer/screen.rb +486 -458
  715. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +563 -544
  716. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +287 -287
  717. data/lib/cosmos/tools/tlm_viewer/widgets.rb +53 -53
  718. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +110 -110
  719. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +70 -70
  720. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +61 -61
  721. data/lib/cosmos/tools/tlm_viewer/widgets/button_widget.rb +39 -39
  722. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +62 -62
  723. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +41 -41
  724. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +57 -57
  725. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +37 -37
  726. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +56 -56
  727. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +55 -55
  728. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +66 -66
  729. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +124 -124
  730. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +31 -31
  731. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +30 -30
  732. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +36 -36
  733. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +35 -35
  734. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +27 -27
  735. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +31 -31
  736. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +26 -26
  737. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +29 -29
  738. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +39 -39
  739. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +38 -38
  740. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +38 -38
  741. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +39 -39
  742. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +42 -42
  743. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +37 -37
  744. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +37 -37
  745. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +34 -34
  746. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +178 -178
  747. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +54 -54
  748. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +47 -47
  749. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +116 -116
  750. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +34 -34
  751. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +30 -30
  752. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +57 -57
  753. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +34 -34
  754. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +35 -35
  755. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +33 -33
  756. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +26 -26
  757. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +28 -28
  758. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +47 -47
  759. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +26 -26
  760. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +88 -88
  761. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +27 -27
  762. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +130 -130
  763. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +46 -46
  764. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +43 -43
  765. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +37 -37
  766. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +37 -37
  767. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +35 -35
  768. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +37 -37
  769. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +257 -257
  770. data/lib/cosmos/top_level.rb +647 -596
  771. data/lib/cosmos/utilities.rb +11 -10
  772. data/lib/cosmos/utilities/crc.rb +166 -166
  773. data/lib/cosmos/utilities/csv.rb +83 -83
  774. data/lib/cosmos/utilities/logger.rb +137 -137
  775. data/lib/cosmos/utilities/low_fragmentation_array.rb +11 -11
  776. data/lib/cosmos/utilities/message_log.rb +74 -74
  777. data/lib/cosmos/utilities/quaternion.rb +258 -258
  778. data/lib/cosmos/utilities/ruby_lex_utils.rb +313 -313
  779. data/lib/cosmos/utilities/simulated_target.rb +99 -99
  780. data/lib/cosmos/utilities/sleeper.rb +44 -0
  781. data/lib/cosmos/version.rb +12 -12
  782. data/lib/cosmos/win32/excel.rb +66 -66
  783. data/lib/cosmos/win32/win32.rb +387 -387
  784. data/lib/cosmos/win32/win32_main.rb +311 -311
  785. data/roodi.yml +24 -24
  786. data/run_gui_tests.bat +32 -32
  787. data/spec/ccsds/ccsds_packet_spec.rb +67 -67
  788. data/spec/ccsds/ccsds_parser_spec.rb +148 -148
  789. data/spec/config/config_parser_spec.rb +322 -322
  790. data/spec/conversions/conversion_spec.rb +31 -31
  791. data/spec/conversions/generic_conversion_spec.rb +45 -45
  792. data/spec/conversions/new_packet_log_conversion_spec.rb +39 -39
  793. data/spec/conversions/polynomial_conversion_spec.rb +40 -40
  794. data/spec/conversions/processor_conversion_spec.rb +45 -45
  795. data/spec/conversions/received_count_conversion_spec.rb +43 -43
  796. data/spec/conversions/received_time_formatted_conversion_spec.rb +49 -49
  797. data/spec/conversions/received_time_seconds_conversion_spec.rb +50 -50
  798. data/spec/conversions/segmented_polynomial_conversion_spec.rb +51 -51
  799. data/spec/conversions/unix_time_formatted_conversion_spec.rb +74 -74
  800. data/spec/conversions/unix_time_seconds_conversion_spec.rb +76 -76
  801. data/spec/core_ext/array_spec.rb +186 -186
  802. data/spec/core_ext/class_spec.rb +36 -36
  803. data/spec/core_ext/cosmos_io_spec.rb +77 -77
  804. data/spec/core_ext/exception_spec.rb +91 -91
  805. data/spec/core_ext/file_spec.rb +72 -72
  806. data/spec/core_ext/hash_spec.rb +24 -24
  807. data/spec/core_ext/io_spec.rb +46 -46
  808. data/spec/core_ext/kernel_spec.rb +54 -54
  809. data/spec/core_ext/math_spec.rb +116 -116
  810. data/spec/core_ext/matrix_spec.rb +66 -66
  811. data/spec/core_ext/objectspace_spec.rb +29 -29
  812. data/spec/core_ext/range_spec.rb +21 -21
  813. data/spec/core_ext/socket_spec.rb +32 -32
  814. data/spec/core_ext/string_spec.rb +223 -223
  815. data/spec/core_ext/stringio_spec.rb +21 -21
  816. data/spec/core_ext/time_spec.rb +151 -151
  817. data/spec/gui/line_graph/line_clip_spec.rb +322 -322
  818. data/spec/install/config/system/system.txt +33 -33
  819. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +41 -41
  820. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +15 -15
  821. data/spec/install/config/targets/COSMOS/cmd_tlm_server.txt +6 -6
  822. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +20 -20
  823. data/spec/install/config/targets/COSMOS/screens/version.txt +19 -19
  824. data/spec/install/config/targets/COSMOS/target.txt +5 -5
  825. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +30 -30
  826. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +111 -111
  827. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +236 -236
  828. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +25 -25
  829. data/spec/install/config/targets/INST/cmd_tlm_server.txt +5 -5
  830. data/spec/install/config/targets/INST/lib/sim_inst.rb +305 -294
  831. data/spec/install/config/targets/INST/target.txt +10 -10
  832. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +4 -4
  833. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +4 -4
  834. data/spec/install/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -7
  835. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +150 -150
  836. data/spec/interfaces/interface_spec.rb +130 -131
  837. data/spec/interfaces/linc_interface_spec.rb +199 -199
  838. data/spec/interfaces/serial_interface_spec.rb +56 -56
  839. data/spec/interfaces/simulated_target_interface_spec.rb +128 -128
  840. data/spec/interfaces/stream_interface_spec.rb +157 -157
  841. data/spec/interfaces/tcpip_client_interface_spec.rb +54 -54
  842. data/spec/interfaces/tcpip_server_interface_spec.rb +151 -151
  843. data/spec/interfaces/udp_interface_spec.rb +175 -177
  844. data/spec/io/buffered_file_spec.rb +113 -113
  845. data/spec/io/io_multiplexer_spec.rb +94 -94
  846. data/spec/io/json_drb_object_spec.rb +99 -99
  847. data/spec/io/json_drb_spec.rb +311 -311
  848. data/spec/io/json_rpc_spec.rb +264 -264
  849. data/spec/io/raw_logger_pair_spec.rb +76 -76
  850. data/spec/io/raw_logger_spec.rb +133 -133
  851. data/spec/io/serial_driver_spec.rb +61 -61
  852. data/spec/io/stderr_spec.rb +32 -32
  853. data/spec/io/stdout_spec.rb +32 -32
  854. data/spec/io/tcpip_server_spec.rb +338 -338
  855. data/spec/io/udp_sockets_spec.rb +94 -94
  856. data/spec/io/win32_serial_driver_spec.rb +88 -88
  857. data/spec/packet_logs/meta_packet_log_writer_spec.rb +170 -170
  858. data/spec/packet_logs/packet_log_reader_spec.rb +408 -408
  859. data/spec/packet_logs/packet_log_writer_pair_spec.rb +30 -30
  860. data/spec/packet_logs/packet_log_writer_spec.rb +223 -223
  861. data/spec/packets/binary_accessor_spec.rb +2073 -2073
  862. data/spec/packets/commands_spec.rb +369 -369
  863. data/spec/packets/limits_response_spec.rb +25 -25
  864. data/spec/packets/limits_spec.rb +326 -326
  865. data/spec/packets/packet_config_spec.rb +1620 -1620
  866. data/spec/packets/packet_item_limits_spec.rb +161 -161
  867. data/spec/packets/packet_item_spec.rb +386 -386
  868. data/spec/packets/packet_spec.rb +1057 -949
  869. data/spec/packets/structure_item_spec.rb +195 -195
  870. data/spec/packets/structure_spec.rb +419 -419
  871. data/spec/packets/telemetry_spec.rb +535 -535
  872. data/spec/processors/new_packet_log_processor_spec.rb +39 -39
  873. data/spec/processors/processor_spec.rb +55 -55
  874. data/spec/processors/statistics_processor_spec.rb +60 -60
  875. data/spec/processors/watermark_processor_spec.rb +51 -51
  876. data/spec/script/script_spec.rb +654 -654
  877. data/spec/spec_helper.rb +154 -148
  878. data/spec/streams/burst_stream_protocol_spec.rb +32 -32
  879. data/spec/streams/fixed_stream_protocol_spec.rb +110 -110
  880. data/spec/streams/length_stream_protocol_spec.rb +297 -297
  881. data/spec/streams/preidentified_stream_protocol_spec.rb +118 -118
  882. data/spec/streams/serial_stream_spec.rb +105 -105
  883. data/spec/streams/stream_protocol_spec.rb +332 -332
  884. data/spec/streams/stream_spec.rb +29 -29
  885. data/spec/streams/tcpip_client_stream_spec.rb +54 -54
  886. data/spec/streams/tcpip_socket_stream_spec.rb +146 -146
  887. data/spec/streams/template_stream_protocol_spec.rb +151 -151
  888. data/spec/streams/terminated_stream_protocol_spec.rb +123 -123
  889. data/spec/system/system_spec.rb +645 -645
  890. data/spec/system/target_spec.rb +248 -248
  891. data/spec/tools/cmd_tlm_server/api_spec.rb +1087 -1113
  892. data/spec/tools/cmd_tlm_server/background_task_spec.rb +32 -32
  893. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +81 -81
  894. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +411 -411
  895. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +415 -415
  896. data/spec/tools/cmd_tlm_server/commanding_spec.rb +123 -123
  897. data/spec/tools/cmd_tlm_server/connections_spec.rb +147 -147
  898. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +306 -306
  899. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +252 -238
  900. data/spec/tools/cmd_tlm_server/packet_logging_spec.rb +143 -143
  901. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +98 -101
  902. data/spec/tools/cmd_tlm_server/routers_spec.rb +223 -208
  903. data/spec/top_level/top_level_spec.rb +334 -321
  904. data/spec/utilities/crc_spec.rb +45 -45
  905. data/spec/utilities/csv_spec.rb +97 -97
  906. data/spec/utilities/logger_spec.rb +102 -102
  907. data/spec/utilities/message_log_spec.rb +89 -89
  908. data/spec/utilities/quaternion_spec.rb +107 -107
  909. data/spec/utilities/ruby_lex_utils_spec.rb +86 -86
  910. data/tasks/manifest.rake +22 -22
  911. data/tasks/spec.rake +23 -23
  912. metadata +18 -2
@@ -1,539 +1,539 @@
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_config'
13
-
14
- module Cosmos
15
-
16
- class TableManagerCore
17
- # the currently opened definition file
18
- attr_reader :current_def
19
-
20
- # the currently opened binary file
21
- attr_reader :current_bin
22
-
23
- # an instance of TableDefinition
24
- attr_reader :table_def
25
-
26
- def initialize
27
- reset()
28
- end
29
-
30
- def reset
31
- @current_bin = nil
32
- @current_def = nil
33
- @table_def = nil
34
- end
35
-
36
- def process_definition(filename)
37
- @table_def = TableConfig.new()
38
- @table_def.process(filename)
39
- end
40
-
41
- # INTERFACE METHODS
42
-
43
- # Creates new binary files based on a list of definition files and an destination directory
44
- def file_new(def_files, output_dir, bar = nil)
45
- bin_files = []
46
- begin
47
- progress = 0.0
48
- progress_increment = 100.0 / def_files.length.to_f / 4.0
49
-
50
- def_files.each do |def_file|
51
- @current_def = def_file
52
-
53
- process_definition(def_file)
54
- if bar
55
- progress += progress_increment
56
- bar.progress = progress.to_i
57
- end
58
-
59
- # Initialize all values to defaults
60
- @table_def.get_all_tables.each do |table|
61
- set_binary_data_to_default(table.name)
62
- end
63
-
64
- if bar
65
- progress += progress_increment
66
- bar.progress = progress.to_i
67
- end
68
-
69
- # Now verify the tables makes sense as defined by the table definition.
70
- # It's possible to have a definition file with default values outside
71
- # the allowable range so we check for that here.
72
- result = file_check()
73
- unless result.empty?
74
- reset()
75
- raise "The table definition file has incompatibilities. Please fix the following errors:\n\n" << result
76
- end
77
-
78
- if bar
79
- progress += progress_increment
80
- bar.progress = progress.to_i
81
- end
82
-
83
- if File.basename(def_file) =~ /_def\.txt/
84
- basename = File.basename(def_file)[0...-8] # Get the basename without the _def.txt
85
- else
86
- basename = File.basename(def_file).split('.')[0...-1].join('.') # Get the basename without the extension
87
- end
88
-
89
- # Set the current_bin so the file_report function works correctly
90
- @current_bin = File.join(output_dir, "#{basename}.dat")
91
- file_save(@current_bin)
92
- bin_files << @current_bin
93
- if bar
94
- progress += progress_increment
95
- bar.progress = progress.to_i
96
- end
97
- file_report()
98
- end
99
-
100
- bar.progress = 100 if bar
101
- sleep(0.5)
102
- ensure
103
- reset()
104
- end
105
- return bin_files
106
- end
107
-
108
- # Opens a specified binary file using a specified definition file as the interpreter
109
- def file_open(def_file, bin_file)
110
- @current_bin = bin_file
111
- @current_def = def_file
112
- process_definition(def_file)
113
- open_and_load_binary_file(bin_file)
114
- end
115
-
116
- def file_save(filename = nil)
117
- raise "Please open a table first." unless @table_def
118
- @current_bin = filename if filename
119
-
120
- result = file_check()
121
- unless result.empty?
122
- raise "Please fix the following errors before saving:\n\n" << result
123
- end
124
-
125
- # Call the user defined function on_save to allow additional processing
126
- # before the file is written out
127
- on_save()
128
-
129
- File.open(@current_bin, "wb") do |file|
130
- @table_def.get_all_tables.each do |table|
131
- file.write(table.buffer)
132
- end
133
- end
134
- end
135
-
136
- def file_check
137
- raise "Please open a table first." unless @table_def
138
-
139
- result = ""
140
- @table_def.get_all_tables.each do |table|
141
- table_result = table_check(table.name)
142
- unless table_result.empty?
143
- result << "Error(s) in #{table.name}:\n" + table_result
144
- end
145
- end
146
-
147
- return result
148
- end
149
-
150
- def file_hex
151
- raise "Please open a table first." unless @table_def
152
-
153
- data = ""
154
- # collect the data from each table
155
- @table_def.get_all_tables.each do |table|
156
- data << table.buffer
157
- end
158
-
159
- str, size = create_hex_string(data)
160
- str << "\n\nTotal Bytes Read: %d" % size
161
-
162
- return str
163
- end
164
-
165
- # Generate the RPT file for the currently opened file
166
- def file_report
167
- raise "Please open a table first." unless @table_def
168
-
169
- result = file_check()
170
- unless result.empty?
171
- raise "Please fix the following errors before generating the report:\n\n" << result
172
- end
173
-
174
- filename = File.basename(@current_bin, ".dat")
175
- File.open(File.join(File.dirname(@current_bin), "#{filename}.rpt"), 'w+') do |file|
176
- file.write("File Definition: #{@current_def}\n")
177
- file.write("File Binary: #{@current_bin}\n\n")
178
- @table_def.get_all_tables.each do |table|
179
- items = table.sorted_items
180
- file.puts(table.name)
181
-
182
- column_lengths = []
183
-
184
- if table.type == :TWO_DIMENSIONAL
185
- column_lengths[0] = "Item".length
186
- else
187
- column_lengths[0] = "Label".length
188
- end
189
-
190
- # Determine the maximum length of all the row header text in the table
191
- # Basically we're treating the row headers as column 0 when we output
192
- # the data which is why we set column_lengths[0] with the row text length
193
- (0...table.num_rows).each do |r|
194
- if table.type == :TWO_DIMENSIONAL
195
- rowtext = "#{r+1}"
196
- else
197
- rowtext = items[r].name
198
- end
199
-
200
- if rowtext.length > column_lengths[0]
201
- column_lengths[0] = rowtext.length
202
- end
203
- end
204
-
205
- # Collect the column header text length in the table
206
- # Since the row headers were column 0 that is why we increment the column
207
- # header by 1 (column_lengths[c+1]) before setting the column text length
208
- (0...table.num_columns).each do |c|
209
- if table.type == :TWO_DIMENSIONAL
210
- columntext = items[c].name[0...-1]
211
- else
212
- columntext = "Value"
213
- end
214
- column_lengths[c+1] = columntext.length
215
- end
216
-
217
- # Determine the maximum length item in each column of the table
218
- # We can simply go throught the gui table by row and column looking for
219
- # the widest value
220
- (0...table.num_rows).each do |r|
221
- (0...table.num_columns).each do |c|
222
- if table.type == :TWO_DIMENSIONAL
223
- item_def = items[c + r * table.num_columns]
224
- else
225
- item_def = items[r]
226
- end
227
- value = item_to_report_string(table, item_def)
228
-
229
- if value.length > column_lengths[c+1]
230
- column_lengths[c+1] = value.length
231
- end
232
-
233
- end
234
- end
235
-
236
- # Write out the first column header depending on the table type
237
- if table.type == :TWO_DIMENSIONAL
238
- file.printf("%-#{column_lengths[0]}s ", "Item")
239
- else
240
- file.printf("%-#{column_lengths[0]}s ", "Label")
241
- end
242
-
243
- # Write out all the column header text
244
- (0...table.num_columns).each do |c|
245
- if table.type == :TWO_DIMENSIONAL
246
- columntext = items[c].name[0...-1]
247
- else
248
- columntext = "Value"
249
- end
250
-
251
- file.printf("%-#{column_lengths[c+1]}s ", columntext)
252
- end
253
- file.write("\n")
254
-
255
- # Write out the table items
256
- (0...table.num_rows).each do |r|
257
- if table.type == :TWO_DIMENSIONAL
258
- rowtext = "#{r+1}"
259
- else
260
- rowtext = items[r].name
261
- end
262
-
263
- file.printf("%-#{column_lengths[0]}s ", rowtext)
264
- (0...table.num_columns).each do |c|
265
- if table.type == :TWO_DIMENSIONAL
266
- item_def = items[c + r * table.num_columns]
267
- else
268
- item_def = items[r]
269
- end
270
-
271
- value = item_to_report_string(table, item_def)
272
-
273
- file.printf("%-#{column_lengths[c+1]}s ", value)
274
-
275
- end
276
- file.write("\n") # newline after each row
277
- end
278
- file.write("\n") # newline after each table
279
- end # end @table_def.get_all_tables.each do |table|
280
- end
281
- end
282
-
283
- def table_check(table_name)
284
- raise "Please open a table first." unless @table_def
285
-
286
- table = @table_def.get_table(table_name)
287
- raise "Please open a table first." unless table
288
-
289
- result = ""
290
- item_defs = table.sorted_items
291
-
292
- # Check the ranges and constraints for each item in the table
293
- # We go through it this way (by row and columns) so we can grab the actual
294
- # user input when we display any errors found
295
- (0...table.num_rows).each do |r|
296
- (0...table.num_columns).each do |c|
297
- # get the table item definition so we know how to save it
298
- item_def = item_defs[r * table.num_columns + c]
299
-
300
- # if a constraint was defined call it here
301
- # this should set the underlying constraints
302
- if (item_def.constraint != nil)
303
- item_def.constraint.call(item_def, table, table.buffer)
304
- end
305
-
306
- x = table.read(item_def.name, :RAW)
307
- unless item_def.range.nil?
308
- if item_def.display_type == :STRING
309
- if x.length > item_def.range.last || x.length < item_def.range.first
310
- result << " #{item_def.name}: #{x} must be between #{item_def.range.first} and #{item_def.range.last} characters\n"
311
- end
312
- else
313
- # check to see if the value lies within its valid range
314
- if not item_def.range.include?(x)
315
- # if the value is displayed as hex, display the range as hex
316
- if item_def.display_type == :HEX
317
- range_first = "0x%X" % item_def.range.first
318
- range_last = "0x%X" % item_def.range.last
319
- x = "0x%X" % x
320
- else
321
- range_first = item_def.range.first
322
- range_last = item_def.range.last
323
- x = table.read(item_def.name)
324
- end
325
- result << " #{item_def.name}: #{x} outside valid range of #{range_first}..#{range_last}\n"
326
- end
327
- end
328
- end
329
- end # end each column
330
- end # end each row
331
- return result
332
- end
333
-
334
- def table_default(table_name)
335
- raise "Please open a table first." unless @table_def
336
- set_binary_data_to_default(table_name)
337
- end
338
-
339
- # option to display a dialog containing a hex dump of the current table values
340
- def table_hex(table_name)
341
- raise "Please open a table first." unless @table_def
342
- table = @table_def.get_table(table_name)
343
- raise "Please open a table first." unless table
344
-
345
- data = table.buffer
346
- str, size = create_hex_string(data)
347
- str << "\n\nTotal Bytes Read: %d" % size
348
-
349
- return str
350
- end
351
-
352
- # option to save the currently displayed table as a stand alone binary file
353
- def table_save(table_name, filename)
354
- raise "Please open a table first." unless @table_def
355
-
356
- result = table_check(table_name)
357
- unless result.empty?
358
- raise "Please fix the following errors before saving:\n\n" << result
359
- end
360
-
361
- File.open(filename, 'wb') do |datafile|
362
- table = @table_def.get_table(table_name)
363
- datafile.write(table.buffer)
364
- end
365
- end
366
-
367
- # option to save the currently displayed table to an existing table binary file
368
- # containing that table.
369
- def table_commit(table_name, bin_file, def_file)
370
- raise "Please open a table first." unless @table_def
371
- save_table = @table_def.get_table(table_name)
372
- raise "Please open a table first." unless save_table
373
-
374
- result = file_check()
375
- unless result.empty?
376
- raise "Please fix the following errors before saving:\n\n" << result
377
- end
378
-
379
- @current_bin = bin_file
380
- @current_def = def_file
381
-
382
- parser = TableConfig.new
383
- begin
384
- parser.process(def_file)
385
- rescue => err
386
- raise "The table definition file:#{def_file} has the following errors:\n#{err}"
387
- end
388
-
389
- if !parser.get_table_names.include?(table_name)
390
- raise "#{table_name} not found in #{def_file} table definition file."
391
- end
392
-
393
- @table_def = parser
394
- open_and_load_binary_file(bin_file)
395
-
396
- # Store the saved table data in the new table definition
397
- table = @table_def.get_table(save_table.name)
398
- table.buffer = save_table.buffer[0...table.length]
399
- file_save(bin_file)
400
- end
401
-
402
- # Updates the definition file for a table.
403
- def table_update_def(table_name)
404
- raise "Please open a table first." unless @table_def
405
-
406
- # Check to see that the table definition file is writeable
407
- table = @table_def.get_table(table_name)
408
- raise "Please open a table first." unless table
409
-
410
- if !File.writable?(table.filename)
411
- raise "#{table.filename} is not writeable."
412
- end
413
-
414
- # Check for errors in the table before updating the defaults
415
- result = table_check(table_name)
416
- unless result.empty?
417
- raise "Please fix the following errors before updating the definition file:\n\n" << result
418
- end
419
-
420
- begin
421
- @table_def.commit_default_values(table)
422
- rescue => err
423
- raise "The table definition file could not be written due to the following error(s):\n#{err}"
424
- end
425
- end
426
-
427
- # Return a GenericTable given a String table name
428
- def get_table(table_name)
429
- @table_def.get_table(table_name)
430
- end
431
-
432
- # Retrieves a value from a table
433
- def get_table_item(table_name, item_name)
434
- @table_def.get_table(table_name).read(item_name)
435
- end
436
-
437
- # Updates a value in a table
438
- def set_table_item(table_name, item_name, value)
439
- @table_def.get_table(table_name).write(item_name, value)
440
- end
441
-
442
- # Override on_save to perform additional actions before the file is
443
- # saved to disk.
444
- def on_save
445
- return
446
- end
447
-
448
- # Determines the string representation of an item as it should be printed in a RPT file
449
- def item_to_report_string(table, item_def)
450
- result = ""
451
- case item_def.display_type
452
- when :NONE
453
- result = "\n#{table.read(item_def.name).formatted}"
454
- when :STATE, :DEC, :STRING
455
- result = table.read(item_def.name).to_s
456
- when :CHECK
457
- value = table.read(item_def.name)
458
- if value == item_def.range.end
459
- result = "X (#{item_def.range.end.to_s})"
460
- else
461
- result = "- (#{item_def.range.begin.to_s})"
462
- end
463
- when :HEX
464
- result = @table_def.format_hex(table, item_def)
465
- end
466
-
467
- return result
468
- end
469
-
470
- # Create a hex string representation of the given binary data string
471
- def create_hex_string(data)
472
- index = 0
473
- str = ""
474
- while index < data.length
475
- # after 16 bytes insert a newline in the display
476
- if index % 16 == 0
477
- # don't insert a newline the first time
478
- if index != 0
479
- str << "\n"
480
- end
481
- str << "0x%08X: " % index
482
- # every 4 bytes insert a space for readability
483
- elsif index % 4 == 0
484
- str << " "
485
- end
486
- str << "%02X" % data.getbyte(index)
487
- index += 1
488
- end
489
- return str, index
490
- end
491
-
492
- # Set all the binary data in the table definition to the default values
493
- def set_binary_data_to_default(table_name)
494
- table = @table_def.get_table(table_name)
495
-
496
- # if we can't find the table do nothing
497
- return unless table
498
-
499
- table.sorted_items.each do |item_def|
500
- if item_def.data_type == :BLOCK
501
- table.write(item_def.name, item_def.default.hex_to_byte_string)
502
- else
503
- table.write(item_def.name, item_def.default)
504
- end
505
- end
506
- end
507
-
508
- # Opens the given binary file and populates the table definition.
509
- # The filename parameter should be a properly formatted file path.
510
- def open_and_load_binary_file(filename)
511
- begin
512
- data = nil
513
- # read the binary file and store it into an array
514
- File.open(filename, 'rb') do |file|
515
- data = file.read
516
- end
517
- rescue => err
518
- raise "Unable to open and load #{filename} due to #{err}."
519
- end
520
-
521
- binary_data_index = 0
522
- total_table_length = 0
523
- @table_def.get_all_tables.each {|table| total_table_length += table.length }
524
- @table_def.get_all_tables.each do |table|
525
- if binary_data_index + table.length > data.length
526
- table.buffer = data[binary_data_index..-1]
527
- raise "Binary size of #{data.length} not large enough to fully represent table definition of length #{total_table_length}. The remaining table definition (starting with byte #{data.length - binary_data_index} in #{table.name}) will be filled with 0."
528
- end
529
- table.buffer = data[binary_data_index...binary_data_index+table.length]
530
- binary_data_index += table.length
531
- end
532
- if binary_data_index < data.length
533
- raise "Binary size of #{data.length} larger than table definition of length #{total_table_length}. Discarding the remaing #{data.length - binary_data_index} bytes."
534
- end
535
- end
536
-
537
- end
538
-
539
- 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_config'
13
+
14
+ module Cosmos
15
+
16
+ class TableManagerCore
17
+ # the currently opened definition file
18
+ attr_reader :current_def
19
+
20
+ # the currently opened binary file
21
+ attr_reader :current_bin
22
+
23
+ # an instance of TableDefinition
24
+ attr_reader :table_def
25
+
26
+ def initialize
27
+ reset()
28
+ end
29
+
30
+ def reset
31
+ @current_bin = nil
32
+ @current_def = nil
33
+ @table_def = nil
34
+ end
35
+
36
+ def process_definition(filename)
37
+ @table_def = TableConfig.new()
38
+ @table_def.process(filename)
39
+ end
40
+
41
+ # INTERFACE METHODS
42
+
43
+ # Creates new binary files based on a list of definition files and an destination directory
44
+ def file_new(def_files, output_dir, bar = nil)
45
+ bin_files = []
46
+ begin
47
+ progress = 0.0
48
+ progress_increment = 100.0 / def_files.length.to_f / 4.0
49
+
50
+ def_files.each do |def_file|
51
+ @current_def = def_file
52
+
53
+ process_definition(def_file)
54
+ if bar
55
+ progress += progress_increment
56
+ bar.progress = progress.to_i
57
+ end
58
+
59
+ # Initialize all values to defaults
60
+ @table_def.get_all_tables.each do |table|
61
+ set_binary_data_to_default(table.name)
62
+ end
63
+
64
+ if bar
65
+ progress += progress_increment
66
+ bar.progress = progress.to_i
67
+ end
68
+
69
+ # Now verify the tables makes sense as defined by the table definition.
70
+ # It's possible to have a definition file with default values outside
71
+ # the allowable range so we check for that here.
72
+ result = file_check()
73
+ unless result.empty?
74
+ reset()
75
+ raise "The table definition file has incompatibilities. Please fix the following errors:\n\n" << result
76
+ end
77
+
78
+ if bar
79
+ progress += progress_increment
80
+ bar.progress = progress.to_i
81
+ end
82
+
83
+ if File.basename(def_file) =~ /_def\.txt/
84
+ basename = File.basename(def_file)[0...-8] # Get the basename without the _def.txt
85
+ else
86
+ basename = File.basename(def_file).split('.')[0...-1].join('.') # Get the basename without the extension
87
+ end
88
+
89
+ # Set the current_bin so the file_report function works correctly
90
+ @current_bin = File.join(output_dir, "#{basename}.dat")
91
+ file_save(@current_bin)
92
+ bin_files << @current_bin
93
+ if bar
94
+ progress += progress_increment
95
+ bar.progress = progress.to_i
96
+ end
97
+ file_report()
98
+ end
99
+
100
+ bar.progress = 100 if bar
101
+ sleep(0.5)
102
+ ensure
103
+ reset()
104
+ end
105
+ return bin_files
106
+ end
107
+
108
+ # Opens a specified binary file using a specified definition file as the interpreter
109
+ def file_open(def_file, bin_file)
110
+ @current_bin = bin_file
111
+ @current_def = def_file
112
+ process_definition(def_file)
113
+ open_and_load_binary_file(bin_file)
114
+ end
115
+
116
+ def file_save(filename = nil)
117
+ raise "Please open a table first." unless @table_def
118
+ @current_bin = filename if filename
119
+
120
+ result = file_check()
121
+ unless result.empty?
122
+ raise "Please fix the following errors before saving:\n\n" << result
123
+ end
124
+
125
+ # Call the user defined function on_save to allow additional processing
126
+ # before the file is written out
127
+ on_save()
128
+
129
+ File.open(@current_bin, "wb") do |file|
130
+ @table_def.get_all_tables.each do |table|
131
+ file.write(table.buffer)
132
+ end
133
+ end
134
+ end
135
+
136
+ def file_check
137
+ raise "Please open a table first." unless @table_def
138
+
139
+ result = ""
140
+ @table_def.get_all_tables.each do |table|
141
+ table_result = table_check(table.name)
142
+ unless table_result.empty?
143
+ result << "Error(s) in #{table.name}:\n" + table_result
144
+ end
145
+ end
146
+
147
+ return result
148
+ end
149
+
150
+ def file_hex
151
+ raise "Please open a table first." unless @table_def
152
+
153
+ data = ""
154
+ # collect the data from each table
155
+ @table_def.get_all_tables.each do |table|
156
+ data << table.buffer
157
+ end
158
+
159
+ str, size = create_hex_string(data)
160
+ str << "\n\nTotal Bytes Read: %d" % size
161
+
162
+ return str
163
+ end
164
+
165
+ # Generate the RPT file for the currently opened file
166
+ def file_report
167
+ raise "Please open a table first." unless @table_def
168
+
169
+ result = file_check()
170
+ unless result.empty?
171
+ raise "Please fix the following errors before generating the report:\n\n" << result
172
+ end
173
+
174
+ filename = File.basename(@current_bin, ".dat")
175
+ File.open(File.join(File.dirname(@current_bin), "#{filename}.rpt"), 'w+') do |file|
176
+ file.write("File Definition: #{@current_def}\n")
177
+ file.write("File Binary: #{@current_bin}\n\n")
178
+ @table_def.get_all_tables.each do |table|
179
+ items = table.sorted_items
180
+ file.puts(table.name)
181
+
182
+ column_lengths = []
183
+
184
+ if table.type == :TWO_DIMENSIONAL
185
+ column_lengths[0] = "Item".length
186
+ else
187
+ column_lengths[0] = "Label".length
188
+ end
189
+
190
+ # Determine the maximum length of all the row header text in the table
191
+ # Basically we're treating the row headers as column 0 when we output
192
+ # the data which is why we set column_lengths[0] with the row text length
193
+ (0...table.num_rows).each do |r|
194
+ if table.type == :TWO_DIMENSIONAL
195
+ rowtext = "#{r+1}"
196
+ else
197
+ rowtext = items[r].name
198
+ end
199
+
200
+ if rowtext.length > column_lengths[0]
201
+ column_lengths[0] = rowtext.length
202
+ end
203
+ end
204
+
205
+ # Collect the column header text length in the table
206
+ # Since the row headers were column 0 that is why we increment the column
207
+ # header by 1 (column_lengths[c+1]) before setting the column text length
208
+ (0...table.num_columns).each do |c|
209
+ if table.type == :TWO_DIMENSIONAL
210
+ columntext = items[c].name[0...-1]
211
+ else
212
+ columntext = "Value"
213
+ end
214
+ column_lengths[c+1] = columntext.length
215
+ end
216
+
217
+ # Determine the maximum length item in each column of the table
218
+ # We can simply go throught the gui table by row and column looking for
219
+ # the widest value
220
+ (0...table.num_rows).each do |r|
221
+ (0...table.num_columns).each do |c|
222
+ if table.type == :TWO_DIMENSIONAL
223
+ item_def = items[c + r * table.num_columns]
224
+ else
225
+ item_def = items[r]
226
+ end
227
+ value = item_to_report_string(table, item_def)
228
+
229
+ if value.length > column_lengths[c+1]
230
+ column_lengths[c+1] = value.length
231
+ end
232
+
233
+ end
234
+ end
235
+
236
+ # Write out the first column header depending on the table type
237
+ if table.type == :TWO_DIMENSIONAL
238
+ file.printf("%-#{column_lengths[0]}s ", "Item")
239
+ else
240
+ file.printf("%-#{column_lengths[0]}s ", "Label")
241
+ end
242
+
243
+ # Write out all the column header text
244
+ (0...table.num_columns).each do |c|
245
+ if table.type == :TWO_DIMENSIONAL
246
+ columntext = items[c].name[0...-1]
247
+ else
248
+ columntext = "Value"
249
+ end
250
+
251
+ file.printf("%-#{column_lengths[c+1]}s ", columntext)
252
+ end
253
+ file.write("\n")
254
+
255
+ # Write out the table items
256
+ (0...table.num_rows).each do |r|
257
+ if table.type == :TWO_DIMENSIONAL
258
+ rowtext = "#{r+1}"
259
+ else
260
+ rowtext = items[r].name
261
+ end
262
+
263
+ file.printf("%-#{column_lengths[0]}s ", rowtext)
264
+ (0...table.num_columns).each do |c|
265
+ if table.type == :TWO_DIMENSIONAL
266
+ item_def = items[c + r * table.num_columns]
267
+ else
268
+ item_def = items[r]
269
+ end
270
+
271
+ value = item_to_report_string(table, item_def)
272
+
273
+ file.printf("%-#{column_lengths[c+1]}s ", value)
274
+
275
+ end
276
+ file.write("\n") # newline after each row
277
+ end
278
+ file.write("\n") # newline after each table
279
+ end # end @table_def.get_all_tables.each do |table|
280
+ end
281
+ end
282
+
283
+ def table_check(table_name)
284
+ raise "Please open a table first." unless @table_def
285
+
286
+ table = @table_def.get_table(table_name)
287
+ raise "Please open a table first." unless table
288
+
289
+ result = ""
290
+ item_defs = table.sorted_items
291
+
292
+ # Check the ranges and constraints for each item in the table
293
+ # We go through it this way (by row and columns) so we can grab the actual
294
+ # user input when we display any errors found
295
+ (0...table.num_rows).each do |r|
296
+ (0...table.num_columns).each do |c|
297
+ # get the table item definition so we know how to save it
298
+ item_def = item_defs[r * table.num_columns + c]
299
+
300
+ # if a constraint was defined call it here
301
+ # this should set the underlying constraints
302
+ if (item_def.constraint != nil)
303
+ item_def.constraint.call(item_def, table, table.buffer)
304
+ end
305
+
306
+ x = table.read(item_def.name, :RAW)
307
+ unless item_def.range.nil?
308
+ if item_def.display_type == :STRING
309
+ if x.length > item_def.range.last || x.length < item_def.range.first
310
+ result << " #{item_def.name}: #{x} must be between #{item_def.range.first} and #{item_def.range.last} characters\n"
311
+ end
312
+ else
313
+ # check to see if the value lies within its valid range
314
+ if not item_def.range.include?(x)
315
+ # if the value is displayed as hex, display the range as hex
316
+ if item_def.display_type == :HEX
317
+ range_first = "0x%X" % item_def.range.first
318
+ range_last = "0x%X" % item_def.range.last
319
+ x = "0x%X" % x
320
+ else
321
+ range_first = item_def.range.first
322
+ range_last = item_def.range.last
323
+ x = table.read(item_def.name)
324
+ end
325
+ result << " #{item_def.name}: #{x} outside valid range of #{range_first}..#{range_last}\n"
326
+ end
327
+ end
328
+ end
329
+ end # end each column
330
+ end # end each row
331
+ return result
332
+ end
333
+
334
+ def table_default(table_name)
335
+ raise "Please open a table first." unless @table_def
336
+ set_binary_data_to_default(table_name)
337
+ end
338
+
339
+ # option to display a dialog containing a hex dump of the current table values
340
+ def table_hex(table_name)
341
+ raise "Please open a table first." unless @table_def
342
+ table = @table_def.get_table(table_name)
343
+ raise "Please open a table first." unless table
344
+
345
+ data = table.buffer
346
+ str, size = create_hex_string(data)
347
+ str << "\n\nTotal Bytes Read: %d" % size
348
+
349
+ return str
350
+ end
351
+
352
+ # option to save the currently displayed table as a stand alone binary file
353
+ def table_save(table_name, filename)
354
+ raise "Please open a table first." unless @table_def
355
+
356
+ result = table_check(table_name)
357
+ unless result.empty?
358
+ raise "Please fix the following errors before saving:\n\n" << result
359
+ end
360
+
361
+ File.open(filename, 'wb') do |datafile|
362
+ table = @table_def.get_table(table_name)
363
+ datafile.write(table.buffer)
364
+ end
365
+ end
366
+
367
+ # option to save the currently displayed table to an existing table binary file
368
+ # containing that table.
369
+ def table_commit(table_name, bin_file, def_file)
370
+ raise "Please open a table first." unless @table_def
371
+ save_table = @table_def.get_table(table_name)
372
+ raise "Please open a table first." unless save_table
373
+
374
+ result = file_check()
375
+ unless result.empty?
376
+ raise "Please fix the following errors before saving:\n\n" << result
377
+ end
378
+
379
+ @current_bin = bin_file
380
+ @current_def = def_file
381
+
382
+ parser = TableConfig.new
383
+ begin
384
+ parser.process(def_file)
385
+ rescue => err
386
+ raise "The table definition file:#{def_file} has the following errors:\n#{err}"
387
+ end
388
+
389
+ if !parser.get_table_names.include?(table_name)
390
+ raise "#{table_name} not found in #{def_file} table definition file."
391
+ end
392
+
393
+ @table_def = parser
394
+ open_and_load_binary_file(bin_file)
395
+
396
+ # Store the saved table data in the new table definition
397
+ table = @table_def.get_table(save_table.name)
398
+ table.buffer = save_table.buffer[0...table.length]
399
+ file_save(bin_file)
400
+ end
401
+
402
+ # Updates the definition file for a table.
403
+ def table_update_def(table_name)
404
+ raise "Please open a table first." unless @table_def
405
+
406
+ # Check to see that the table definition file is writeable
407
+ table = @table_def.get_table(table_name)
408
+ raise "Please open a table first." unless table
409
+
410
+ if !File.writable?(table.filename)
411
+ raise "#{table.filename} is not writeable."
412
+ end
413
+
414
+ # Check for errors in the table before updating the defaults
415
+ result = table_check(table_name)
416
+ unless result.empty?
417
+ raise "Please fix the following errors before updating the definition file:\n\n" << result
418
+ end
419
+
420
+ begin
421
+ @table_def.commit_default_values(table)
422
+ rescue => err
423
+ raise "The table definition file could not be written due to the following error(s):\n#{err}"
424
+ end
425
+ end
426
+
427
+ # Return a GenericTable given a String table name
428
+ def get_table(table_name)
429
+ @table_def.get_table(table_name)
430
+ end
431
+
432
+ # Retrieves a value from a table
433
+ def get_table_item(table_name, item_name)
434
+ @table_def.get_table(table_name).read(item_name)
435
+ end
436
+
437
+ # Updates a value in a table
438
+ def set_table_item(table_name, item_name, value)
439
+ @table_def.get_table(table_name).write(item_name, value)
440
+ end
441
+
442
+ # Override on_save to perform additional actions before the file is
443
+ # saved to disk.
444
+ def on_save
445
+ return
446
+ end
447
+
448
+ # Determines the string representation of an item as it should be printed in a RPT file
449
+ def item_to_report_string(table, item_def)
450
+ result = ""
451
+ case item_def.display_type
452
+ when :NONE
453
+ result = "\n#{table.read(item_def.name).formatted}"
454
+ when :STATE, :DEC, :STRING
455
+ result = table.read(item_def.name).to_s
456
+ when :CHECK
457
+ value = table.read(item_def.name)
458
+ if value == item_def.range.end
459
+ result = "X (#{item_def.range.end.to_s})"
460
+ else
461
+ result = "- (#{item_def.range.begin.to_s})"
462
+ end
463
+ when :HEX
464
+ result = @table_def.format_hex(table, item_def)
465
+ end
466
+
467
+ return result
468
+ end
469
+
470
+ # Create a hex string representation of the given binary data string
471
+ def create_hex_string(data)
472
+ index = 0
473
+ str = ""
474
+ while index < data.length
475
+ # after 16 bytes insert a newline in the display
476
+ if index % 16 == 0
477
+ # don't insert a newline the first time
478
+ if index != 0
479
+ str << "\n"
480
+ end
481
+ str << "0x%08X: " % index
482
+ # every 4 bytes insert a space for readability
483
+ elsif index % 4 == 0
484
+ str << " "
485
+ end
486
+ str << "%02X" % data.getbyte(index)
487
+ index += 1
488
+ end
489
+ return str, index
490
+ end
491
+
492
+ # Set all the binary data in the table definition to the default values
493
+ def set_binary_data_to_default(table_name)
494
+ table = @table_def.get_table(table_name)
495
+
496
+ # if we can't find the table do nothing
497
+ return unless table
498
+
499
+ table.sorted_items.each do |item_def|
500
+ if item_def.data_type == :BLOCK
501
+ table.write(item_def.name, item_def.default.hex_to_byte_string)
502
+ else
503
+ table.write(item_def.name, item_def.default)
504
+ end
505
+ end
506
+ end
507
+
508
+ # Opens the given binary file and populates the table definition.
509
+ # The filename parameter should be a properly formatted file path.
510
+ def open_and_load_binary_file(filename)
511
+ begin
512
+ data = nil
513
+ # read the binary file and store it into an array
514
+ File.open(filename, 'rb') do |file|
515
+ data = file.read
516
+ end
517
+ rescue => err
518
+ raise "Unable to open and load #{filename} due to #{err}."
519
+ end
520
+
521
+ binary_data_index = 0
522
+ total_table_length = 0
523
+ @table_def.get_all_tables.each {|table| total_table_length += table.length }
524
+ @table_def.get_all_tables.each do |table|
525
+ if binary_data_index + table.length > data.length
526
+ table.buffer = data[binary_data_index..-1]
527
+ raise "Binary size of #{data.length} not large enough to fully represent table definition of length #{total_table_length}. The remaining table definition (starting with byte #{data.length - binary_data_index} in #{table.name}) will be filled with 0."
528
+ end
529
+ table.buffer = data[binary_data_index...binary_data_index+table.length]
530
+ binary_data_index += table.length
531
+ end
532
+ if binary_data_index < data.length
533
+ raise "Binary size of #{data.length} larger than table definition of length #{total_table_length}. Discarding the remaing #{data.length - binary_data_index} bytes."
534
+ end
535
+ end
536
+
537
+ end
538
+
539
+ end # module Cosmos