cosmos 4.2.4-java → 4.5.0-java

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 (458) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +2 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +30 -0
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
  5. data/.github/ISSUE_TEMPLATE/help---usage---general-question.md +12 -0
  6. data/.gitignore +2 -0
  7. data/.travis.yml +6 -6
  8. data/Dockerfile +69 -0
  9. data/Gemfile +1 -1
  10. data/Manifest.txt +130 -46
  11. data/README.md +9 -0
  12. data/Rakefile +57 -0
  13. data/appveyor.yml +18 -7
  14. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
  15. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
  16. data/autohotkey/config/targets/INST/lib/sim_inst.rb +3 -1
  17. data/autohotkey/config/tools/cmd_sequence/cmd_sequence.txt +2 -0
  18. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  19. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  20. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  21. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  22. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  23. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  24. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  25. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  26. data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  27. data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  28. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +2 -4
  29. data/autohotkey/config/tools/table_manager/SubTables/OneDimensionalSubTable_def.txt +31 -0
  30. data/autohotkey/config/tools/table_manager/SubTables/TwoDimensionalSubTable_def.txt +28 -0
  31. data/autohotkey/config/tools/test_runner/test_runner.txt +1 -1
  32. data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
  33. data/autohotkey/config/tools/test_runner/test_runner3.txt +1 -1
  34. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  35. data/autohotkey/lib/cmd_sequence_exporter.rb +52 -0
  36. data/autohotkey/procedures/collect.rb +2 -2
  37. data/autohotkey/procedures/collect_util.rb +1 -1
  38. data/autohotkey/procedures/script_test.rb +1 -1
  39. data/autohotkey/tools/CmdSenderAHK2 +18 -0
  40. data/autohotkey/tools/cmd_sender.ahk +34 -6
  41. data/autohotkey/tools/cmd_sender2.ahk +4 -0
  42. data/autohotkey/tools/cmd_sequence.ahk +36 -22
  43. data/autohotkey/tools/cmd_sequence2.ahk +1 -1
  44. data/autohotkey/tools/config_editor.ahk +5 -5
  45. data/autohotkey/tools/launcher.ahk +1 -0
  46. data/autohotkey/tools/limits_monitor.ahk +1 -1
  47. data/autohotkey/tools/packet_viewer.ahk +7 -6
  48. data/autohotkey/tools/script_runner.ahk +16 -4
  49. data/autohotkey/tools/test_runner.ahk +8 -8
  50. data/bin/cosmos +38 -1
  51. data/bin/cstol_converter +1 -1
  52. data/bin/dart_util +0 -0
  53. data/bin/rubysloc +73 -28
  54. data/bin/xtce_converter +1 -1
  55. data/cosmos.gemspec +7 -9
  56. data/data/config/_interfaces.yaml +4 -0
  57. data/data/config/cmd_sequence.yaml +14 -0
  58. data/data/config/command_modifiers.yaml +16 -1
  59. data/data/config/housekeeping_params.yaml +14 -0
  60. data/data/config/interface_modifiers.yaml +14 -2
  61. data/data/config/item_modifiers.yaml +11 -1
  62. data/data/config/launcher.yaml +12 -2
  63. data/data/config/param_item_modifiers.yaml +7 -2
  64. data/data/config/parameter_modifiers.yaml +20 -0
  65. data/data/config/screen.yaml +2 -0
  66. data/data/config/script_runner.yaml +9 -0
  67. data/data/config/system.yaml +152 -28
  68. data/data/config/table_manager.yaml +7 -0
  69. data/data/config/target.yaml +12 -0
  70. data/data/config/telemetry_modifiers.yaml +19 -2
  71. data/data/config/test_runner.yaml +10 -9
  72. data/data/config/widgets.yaml +174 -11
  73. data/data/crc.txt +428 -415
  74. data/demo/Gemfile +1 -1
  75. data/demo/Launcher.bat +1 -9
  76. data/demo/Launcher2.bat +1 -0
  77. data/demo/LauncherMini.bat +1 -0
  78. data/demo/Rakefile +2 -0
  79. data/demo/config/dart/Gemfile +2 -7
  80. data/demo/config/data/crc.txt +243 -219
  81. data/demo/config/system/system.txt +42 -3
  82. data/demo/config/system/system2.txt +34 -5
  83. data/demo/config/system/system_alt_ports.txt +80 -0
  84. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +1 -0
  85. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +5 -4
  86. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +12 -7
  87. data/demo/config/targets/INST/cmd_tlm/inst_tlm_override.txt +12 -0
  88. data/demo/config/targets/INST/cmd_tlm_server.txt +2 -0
  89. data/demo/config/targets/INST/lib/sim_inst.rb +15 -3
  90. data/demo/config/targets/INST/screens/adcs.txt +2 -2
  91. data/demo/config/targets/INST/screens/block.txt +1 -1
  92. data/demo/config/targets/INST/screens/commanding.txt +1 -1
  93. data/demo/config/targets/INST/screens/ground.txt +27 -5
  94. data/demo/config/targets/INST/screens/ground_error.gif +0 -0
  95. data/demo/config/{data/groundoff.gif → targets/INST/screens/ground_off.gif} +0 -0
  96. data/demo/config/{data/groundon.gif → targets/INST/screens/ground_on.gif} +0 -0
  97. data/demo/config/targets/INST/screens/limits.txt +69 -31
  98. data/demo/config/targets/INST/screens/other.txt +13 -3
  99. data/demo/config/targets/INST/screens/params.txt +54 -0
  100. data/demo/config/targets/INST/screens/satellite.gif +0 -0
  101. data/demo/config/targets/INST/target.txt +1 -0
  102. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server_chain.txt +18 -0
  103. data/demo/config/tools/data_viewer/data_viewer.txt +3 -0
  104. data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  105. data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  106. data/demo/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  107. data/demo/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  108. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  109. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  110. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  111. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  112. data/demo/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  113. data/demo/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  114. data/demo/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  115. data/demo/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  116. data/demo/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  117. data/demo/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  118. data/demo/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  119. data/demo/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  120. data/demo/config/tools/handbook_creator/default_toc.xsl +59 -59
  121. data/demo/config/tools/script_runner/script_runner.txt +1 -2
  122. data/demo/config/tools/test_runner/test_runner.txt +3 -1
  123. data/demo/lib/example_background_task.rb +1 -0
  124. data/demo/procedures/cosmos_api_test.rb +26 -22
  125. data/demo/procedures/interactive.rb +22 -0
  126. data/demo/procedures/local_screen_example.rb +51 -0
  127. data/ext/cosmos/ext/cosmos_io/cosmos_io.c +32 -4
  128. data/ext/cosmos/ext/packet/packet.c +6 -77
  129. data/ext/mkrf_conf.rb +2 -2
  130. data/extensions/vscode/.gitignore +4 -0
  131. data/extensions/vscode/.vscode/launch.json +32 -0
  132. data/extensions/vscode/.vscode/settings.json +13 -0
  133. data/extensions/vscode/.vscode/tasks.json +79 -0
  134. data/extensions/vscode/License.txt +879 -0
  135. data/extensions/vscode/README.md +9 -0
  136. data/extensions/vscode/client/License.txt +879 -0
  137. data/extensions/vscode/client/README.md +39 -0
  138. data/extensions/vscode/client/cosmos.configuration.json +23 -0
  139. data/extensions/vscode/client/images/icon.png +0 -0
  140. data/extensions/vscode/client/package-lock.json +414 -0
  141. data/extensions/vscode/client/package.json +105 -0
  142. data/extensions/vscode/client/src/extension.ts +132 -0
  143. data/extensions/vscode/client/src/screen_preview.rb +25 -0
  144. data/extensions/vscode/client/syntaxes/cosmos.tmLanguage.json +219 -0
  145. data/extensions/vscode/client/tsconfig.json +17 -0
  146. data/extensions/vscode/package-lock.json +26 -0
  147. data/extensions/vscode/package.json +35 -0
  148. data/extensions/vscode/server/License.txt +879 -0
  149. data/extensions/vscode/server/package-lock.json +236 -0
  150. data/extensions/vscode/server/package.json +29 -0
  151. data/extensions/vscode/server/src/server.ts +59 -0
  152. data/extensions/vscode/server/tsconfig.json +16 -0
  153. data/install/Gemfile +1 -1
  154. data/install/Launcher.bat +1 -9
  155. data/install/config/dart/Gemfile +3 -8
  156. data/install/config/data/crc.txt +148 -132
  157. data/install/config/system/system.txt +36 -3
  158. data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  159. data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  160. data/install/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  161. data/install/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  162. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  163. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  164. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  165. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  166. data/install/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  167. data/install/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  168. data/install/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  169. data/install/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  170. data/install/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  171. data/install/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  172. data/install/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  173. data/install/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  174. data/install/config/tools/handbook_creator/default_toc.xsl +59 -59
  175. data/lib/cosmos/config/config_parser.rb +4 -5
  176. data/lib/cosmos/conversions.rb +2 -0
  177. data/lib/cosmos/conversions/packet_time_formatted_conversion.rb +38 -0
  178. data/lib/cosmos/conversions/packet_time_seconds_conversion.rb +38 -0
  179. data/lib/cosmos/core_ext/cosmos_io.rb +2 -1
  180. data/lib/cosmos/core_ext/time.rb +3 -1
  181. data/lib/cosmos/dart/config/boot.rb +1 -1
  182. data/lib/cosmos/dart/config/database.yml +2 -0
  183. data/lib/cosmos/dart/examples/dart_decom_client.rb +1 -1
  184. data/lib/cosmos/dart/examples/dart_stream_client.rb +6 -2
  185. data/lib/cosmos/dart/lib/dart_common.rb +13 -6
  186. data/lib/cosmos/dart/lib/dart_constants.rb +15 -0
  187. data/lib/cosmos/dart/lib/dart_database_cleaner.rb +2 -2
  188. data/lib/cosmos/dart/lib/dart_decom_query.rb +5 -6
  189. data/lib/cosmos/dart/lib/dart_decommutator.rb +64 -54
  190. data/lib/cosmos/dart/lib/dart_importer.rb +3 -3
  191. data/lib/cosmos/dart/lib/dart_master_query.rb +71 -0
  192. data/lib/cosmos/dart/lib/dart_packet_log_writer.rb +2 -2
  193. data/lib/cosmos/dart/lib/dart_reducer_worker_thread.rb +165 -134
  194. data/lib/cosmos/dart/processes/dart.rb +4 -2
  195. data/lib/cosmos/dart/processes/dart_decom_server.rb +3 -3
  196. data/lib/cosmos/dart/processes/dart_ingester.rb +40 -1
  197. data/lib/cosmos/dart/processes/dart_master.rb +44 -0
  198. data/lib/cosmos/dart/processes/dart_util.rb +119 -4
  199. data/lib/cosmos/dart/spec/dart/dart_reducer_manager_spec.rb +3 -3
  200. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +9 -5
  201. data/lib/cosmos/gui/dialogs/details_dialog.rb +44 -29
  202. data/lib/cosmos/gui/dialogs/exception_list_dialog.rb +1 -1
  203. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +3 -3
  204. data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +2 -2
  205. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +1 -1
  206. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +11 -10
  207. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +4 -2
  208. data/lib/cosmos/gui/opengl/earth_model.rb +1 -1
  209. data/lib/cosmos/gui/qt.rb +13 -2
  210. data/lib/cosmos/gui/qt_tool.rb +71 -43
  211. data/lib/cosmos/gui/text/ruby_editor.rb +91 -49
  212. data/lib/cosmos/gui/utilities/classification_banner.rb +60 -0
  213. data/lib/cosmos/gui/utilities/screenshot.rb +1 -1
  214. data/lib/cosmos/gui/utilities/script_module_gui.rb +117 -91
  215. data/lib/cosmos/gui/widgets/dart_meta_frame.rb +22 -3
  216. data/lib/cosmos/interfaces.rb +2 -0
  217. data/lib/cosmos/interfaces/dart_status_interface.rb +1 -1
  218. data/lib/cosmos/interfaces/interface.rb +9 -1
  219. data/lib/cosmos/interfaces/linc_interface.rb +3 -3
  220. data/lib/cosmos/interfaces/protocols/burst_protocol.rb +1 -1
  221. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +1 -1
  222. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +40 -18
  223. data/lib/cosmos/interfaces/protocols/ignore_packet_protocol.rb +46 -0
  224. data/lib/cosmos/interfaces/protocols/length_protocol.rb +5 -0
  225. data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +68 -23
  226. data/lib/cosmos/interfaces/protocols/template_protocol.rb +9 -4
  227. data/lib/cosmos/interfaces/serial_interface.rb +7 -1
  228. data/lib/cosmos/interfaces/simulated_target_interface.rb +14 -5
  229. data/lib/cosmos/interfaces/stream_interface.rb +1 -1
  230. data/lib/cosmos/interfaces/tcpip_server_interface.rb +13 -13
  231. data/lib/cosmos/io/json_drb.rb +16 -12
  232. data/lib/cosmos/io/json_drb_object.rb +7 -2
  233. data/lib/cosmos/io/json_drb_rack.rb +25 -5
  234. data/lib/cosmos/io/json_rpc.rb +1 -1
  235. data/lib/cosmos/io/posix_serial_driver.rb +60 -22
  236. data/lib/cosmos/io/serial_driver.rb +11 -8
  237. data/lib/cosmos/io/win32_serial_driver.rb +31 -3
  238. data/lib/cosmos/packet_logs/packet_log_reader.rb +71 -28
  239. data/lib/cosmos/packet_logs/packet_log_writer.rb +13 -1
  240. data/lib/cosmos/packets/commands.rb +30 -9
  241. data/lib/cosmos/packets/packet.rb +105 -34
  242. data/lib/cosmos/packets/packet_config.rb +60 -10
  243. data/lib/cosmos/packets/parsers/format_string_parser.rb +0 -1
  244. data/lib/cosmos/packets/parsers/state_parser.rb +0 -1
  245. data/lib/cosmos/packets/parsers/xtce_converter.rb +2 -0
  246. data/lib/cosmos/packets/parsers/xtce_parser.rb +5 -4
  247. data/lib/cosmos/packets/structure.rb +32 -4
  248. data/lib/cosmos/packets/structure_item.rb +5 -1
  249. data/lib/cosmos/packets/telemetry.rb +30 -4
  250. data/lib/cosmos/script/api_shared.rb +22 -10
  251. data/lib/cosmos/script/extract.rb +1 -1
  252. data/lib/cosmos/script/limits.rb +4 -0
  253. data/lib/cosmos/script/script.rb +29 -20
  254. data/lib/cosmos/script/scripting.rb +16 -14
  255. data/lib/cosmos/script/telemetry.rb +3 -1
  256. data/lib/cosmos/script/tools.rb +18 -8
  257. data/lib/cosmos/streams/serial_stream.rb +11 -6
  258. data/lib/cosmos/system/system.rb +214 -76
  259. data/lib/cosmos/system/target.rb +39 -9
  260. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +116 -55
  261. data/lib/cosmos/tools/cmd_sender/cmd_param_table_item_delegate.rb +15 -0
  262. data/lib/cosmos/tools/cmd_sender/cmd_params.rb +382 -0
  263. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +54 -340
  264. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +74 -52
  265. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +40 -333
  266. data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +16 -11
  267. data/lib/cosmos/tools/cmd_tlm_server/api.rb +13 -0
  268. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +2 -0
  269. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +44 -15
  270. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +8 -1
  271. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +18 -20
  272. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +13 -2
  273. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +2 -2
  274. data/lib/cosmos/tools/cmd_tlm_server/gui/logging_tab.rb +13 -13
  275. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +9 -6
  276. data/lib/cosmos/tools/cmd_tlm_server/gui/status_tab.rb +8 -8
  277. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +5 -5
  278. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +35 -20
  279. data/lib/cosmos/tools/cmd_tlm_server/replay_backend.rb +15 -11
  280. data/lib/cosmos/tools/cmd_tlm_server/router_thread.rb +5 -0
  281. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +2 -0
  282. data/lib/cosmos/tools/config_editor/config_editor.rb +181 -94
  283. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +10 -9
  284. data/lib/cosmos/tools/config_editor/system_config_dialog.rb +158 -0
  285. data/lib/cosmos/tools/data_viewer/data_viewer.rb +57 -47
  286. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +1 -0
  287. data/lib/cosmos/tools/data_viewer/dump_component.rb +3 -9
  288. data/lib/cosmos/tools/data_viewer/text_component.rb +77 -0
  289. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +68 -42
  290. data/lib/cosmos/tools/handbook_creator/handbook_creator_config.rb +1 -1
  291. data/lib/cosmos/tools/launcher/launcher.rb +2 -1
  292. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +59 -41
  293. data/lib/cosmos/tools/opengl_builder/opengl_builder.rb +42 -42
  294. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +64 -59
  295. data/lib/cosmos/tools/script_runner/script_runner.rb +198 -123
  296. data/lib/cosmos/tools/script_runner/script_runner_config.rb +14 -0
  297. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +87 -35
  298. data/lib/cosmos/tools/table_manager/table_config.rb +5 -3
  299. data/lib/cosmos/tools/table_manager/table_manager.rb +48 -45
  300. data/lib/cosmos/tools/test_runner/test.rb +5 -2
  301. data/lib/cosmos/tools/test_runner/test_runner.rb +61 -38
  302. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +24 -12
  303. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +48 -48
  304. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +5 -8
  305. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +20 -16
  306. data/lib/cosmos/tools/tlm_grapher/data_object_adders/xy_data_object_adder.rb +3 -3
  307. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +7 -7
  308. data/lib/cosmos/tools/tlm_grapher/data_object_editors/xy_data_object_editor.rb +10 -10
  309. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +10 -3
  310. data/lib/cosmos/tools/tlm_grapher/data_objects/xy_data_object.rb +6 -6
  311. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +14 -14
  312. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_dart_thread.rb +21 -17
  313. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +5 -8
  314. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +94 -91
  315. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +27 -26
  316. data/lib/cosmos/tools/tlm_viewer/screen.rb +76 -14
  317. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +51 -34
  318. data/lib/cosmos/tools/tlm_viewer/widgets.rb +3 -0
  319. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +4 -5
  320. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +3 -4
  321. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +4 -5
  322. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +16 -2
  323. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +17 -3
  324. data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +1 -2
  325. data/lib/cosmos/tools/tlm_viewer/widgets/canvasellipse_widget.rb +40 -0
  326. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +12 -7
  327. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +79 -29
  328. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +1 -0
  329. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +2 -1
  330. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +2 -0
  331. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +4 -0
  332. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +33 -25
  333. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +5 -3
  334. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +5 -3
  335. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +1 -1
  336. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +4 -7
  337. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +5 -5
  338. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +6 -7
  339. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +2 -4
  340. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +10 -8
  341. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +2 -3
  342. data/lib/cosmos/tools/tlm_viewer/widgets/labelled_widget.rb +58 -0
  343. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +3 -4
  344. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +2 -4
  345. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +2 -1
  346. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +3 -5
  347. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +2 -3
  348. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +2 -3
  349. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +2 -3
  350. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +2 -3
  351. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +3 -5
  352. data/lib/cosmos/tools/tlm_viewer/widgets/led_widget.rb +108 -0
  353. data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +60 -10
  354. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +22 -8
  355. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +19 -13
  356. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +22 -8
  357. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +2 -3
  358. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +4 -3
  359. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +1 -3
  360. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +10 -5
  361. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +7 -4
  362. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +4 -6
  363. data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +3 -5
  364. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +4 -3
  365. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +2 -3
  366. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +2 -3
  367. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +4 -6
  368. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +2 -3
  369. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +2 -3
  370. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +13 -4
  371. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +3 -4
  372. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +3 -8
  373. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +6 -12
  374. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +5 -10
  375. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +5 -3
  376. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +4 -4
  377. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +2 -3
  378. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +2 -3
  379. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +3 -4
  380. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +2 -3
  381. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +8 -7
  382. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +9 -7
  383. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +60 -47
  384. data/lib/cosmos/top_level.rb +37 -13
  385. data/lib/cosmos/utilities/ruby_lex_utils.rb +34 -30
  386. data/lib/cosmos/version.rb +5 -5
  387. data/lib/cosmos/win32/excel.rb +81 -24
  388. data/make_gems.sh +10 -0
  389. data/run_gui_tests.bat +1 -0
  390. data/spec/conversions/packet_time_formatted_conversion_spec.rb +58 -0
  391. data/spec/conversions/packet_time_seconds_conversion_spec.rb +60 -0
  392. data/spec/core_ext/socket_spec.rb +1 -1
  393. data/spec/core_ext/time_spec.rb +4 -0
  394. data/spec/gui/utilities/script_module_gui_spec.rb +44 -63
  395. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
  396. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
  397. data/spec/install/yaml_docs_spec.rb +132 -0
  398. data/spec/interfaces/linc_interface_spec.rb +1 -1
  399. data/spec/interfaces/protocols/fixed_protocol_spec.rb +20 -9
  400. data/spec/interfaces/protocols/ignore_packet_protocol_spec.rb +243 -0
  401. data/spec/interfaces/protocols/length_protocol_spec.rb +39 -0
  402. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +227 -4
  403. data/spec/interfaces/protocols/template_protocol_spec.rb +78 -25
  404. data/spec/io/json_drb_rack_spec.rb +166 -0
  405. data/spec/io/json_drb_spec.rb +14 -0
  406. data/spec/io/json_rpc_spec.rb +4 -5
  407. data/spec/io/posix_serial_driver_spec.rb +81 -0
  408. data/spec/io/serial_driver_spec.rb +15 -13
  409. data/spec/io/win32_serial_driver_spec.rb +33 -3
  410. data/spec/packet_logs/packet_log_reader_spec.rb +106 -52
  411. data/spec/packets/commands_spec.rb +22 -0
  412. data/spec/packets/packet_config_spec.rb +29 -16
  413. data/spec/packets/packet_item_spec.rb +2 -2
  414. data/spec/packets/packet_spec.rb +39 -6
  415. data/spec/packets/parsers/format_string_parser_spec.rb +0 -11
  416. data/spec/packets/parsers/macro_parser_spec.rb +36 -36
  417. data/spec/packets/parsers/state_parser_spec.rb +69 -11
  418. data/spec/packets/structure_spec.rb +93 -2
  419. data/spec/packets/telemetry_spec.rb +63 -10
  420. data/spec/script/extract_spec.rb +4 -1
  421. data/spec/script/script_spec.rb +2 -3
  422. data/spec/script/scripting_spec.rb +2 -1
  423. data/spec/script/tools_spec.rb +0 -1
  424. data/spec/streams/tcpip_socket_stream_spec.rb +32 -27
  425. data/spec/system/system_spec.rb +187 -4
  426. data/spec/system/target_spec.rb +62 -1
  427. data/spec/tools/cmd_tlm_server/api_spec.rb +29 -21
  428. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -7
  429. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +33 -0
  430. data/spec/tools/cmd_tlm_server/commanding_spec.rb +25 -1
  431. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +15 -0
  432. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +2 -3
  433. data/spec/top_level/top_level_spec.rb +29 -5
  434. data/spec/utilities/message_log_spec.rb +6 -3
  435. data/tasks/gemfile_stats.rake +38 -14
  436. data/test/performance/config/system/system.txt +0 -0
  437. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +5 -5
  438. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  439. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  440. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  441. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  442. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  443. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  444. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  445. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  446. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  447. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  448. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  449. data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  450. data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  451. data/test/performance/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  452. data/test/performance/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  453. data/test/performance/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  454. data/test/performance/config/tools/test_runner/test_runner.txt +1 -1
  455. data/test/performance/procedures/cosmos_api_test.rb +1 -1
  456. data/test/performance/tools/identify_performance.rb +82 -0
  457. metadata +146 -62
  458. data/lib/cosmos/dart/Gemfile +0 -69
@@ -28,6 +28,10 @@ module Cosmos
28
28
  def focusInEvent(event)
29
29
  emit focus_in
30
30
  end
31
+
32
+ def wheelEvent(event)
33
+ event.ignore()
34
+ end
31
35
  end
32
36
 
33
37
  class ConfigEditorFrame < Qt::Widget
@@ -249,6 +253,8 @@ module Cosmos
249
253
  elsif @filename.include?('/config/tools/')
250
254
  if @filename.include?('cmd_tlm_server')
251
255
  @file_type = "Server Configuration"
256
+ elsif @filename.include?('cmd_sequence')
257
+ @file_type = "Command Sequence Configuration"
252
258
  elsif @filename.include?('data_viewer')
253
259
  @file_type = "Data Viewer Configuration"
254
260
  elsif @filename.include?('handbook_creator')
@@ -288,17 +294,10 @@ module Cosmos
288
294
  end
289
295
  emit file_type_changed # Tell ConfigEditor about the file type
290
296
  load_meta_data()
291
- display_keyword_help()
292
297
  end
293
298
 
294
299
  def load_meta_data
295
- begin
296
- type = ConfigEditor::CONFIGURATION_FILES[@file_type][0]
297
- @file_meta = MetaConfigParser.load("#{type}.yaml")
298
- rescue => error
299
- Kernel.raise $! if error.is_a? Psych::SyntaxError
300
- @file_meta = nil
301
- end
300
+ @file_meta = ConfigEditor.meta[@file_type]
302
301
  display_keyword_help()
303
302
  end
304
303
 
@@ -563,7 +562,8 @@ module Cosmos
563
562
  if attribute_value.is_a? Hash
564
563
  # If the value is a Hash then we have parameter specific
565
564
  # parameters embedded in this parameter we have to parse
566
- value_widget = Qt::ComboBox.new()
565
+ value_widget = FocusComboBox.new()
566
+ value_widget.setFocusPolicy(Qt::StrongFocus)
567
567
  value_widget.addItem(current_value) unless attribute_value.keys.include?(current_value)
568
568
  value_widget.addItems(attribute_value.keys)
569
569
  value_widget.setCurrentText(current_value)
@@ -579,6 +579,7 @@ module Cosmos
579
579
  end
580
580
  elsif attribute_value.is_a? Array # Just a bunch of strings
581
581
  value_widget = FocusComboBox.new()
582
+ value_widget.setFocusPolicy(Qt::StrongFocus)
582
583
  value_widget.addItems(attribute_value)
583
584
  if required && current_value.nil?
584
585
  value_widget.setStyleSheet("border: 1px solid red")
@@ -0,0 +1,158 @@
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/gui/qt'
13
+
14
+ module Cosmos
15
+ # Creates a dialog asking to create a new system configuration.
16
+ class SystemConfigDialog < Qt::Dialog
17
+ def initialize(parent)
18
+ super(parent) # MUST BE FIRST
19
+ @parent = parent
20
+ Cosmos.load_cosmos_icon
21
+
22
+ self.window_title = 'Create System Configuration'
23
+ layout = Qt::VBoxLayout.new
24
+ self.layout = layout
25
+
26
+ description = Qt::Label.new("Creating a new COSMOS system configuration allows you to reuse "\
27
+ "an existing COSMOS configuration but include different targets and/or change configuration details.")
28
+ description.setWordWrap(true)
29
+ layout.addWidget(description)
30
+
31
+ select = Qt::Label.new("Select an existing system.txt file to base the new configuration on:")
32
+ select.setWordWrap(true)
33
+ layout.addWidget(select)
34
+ @system_combo = Qt::ComboBox.new
35
+ Dir[File.join(::Cosmos::USERPATH, 'config', 'system', '*.txt')].each do |system|
36
+ @system_combo.addItem(File.basename(system))
37
+ end
38
+ layout.addWidget(@system_combo)
39
+ layout.addSpacing(10)
40
+
41
+ name_label = Qt::Label.new("Enter a name for the new system configuration that is descriptive "\
42
+ " but relatively short. For example, 'EMI', 'SW Test', etc:")
43
+ name_label.setWordWrap(true)
44
+ layout.addWidget(name_label)
45
+ @system_name = Qt::LineEdit.new
46
+ layout.addWidget(@system_name)
47
+ layout.addSpacing(10)
48
+
49
+ info = Qt::Label.new("This action will create a new COSMOS system.txt, "\
50
+ "cmd_tlm_server.txt, launcher.txt, and Windows Batch file appended with the specified name. "\
51
+ "For example, system_emi.txt, system_sw_test.txt, launcher_emi.txt, launcher_sw_test.txt, etc.")
52
+ info.setWordWrap(true)
53
+ layout.addWidget(info)
54
+
55
+ ok_button = Qt::PushButton.new('Ok')
56
+ connect(ok_button, SIGNAL('clicked()'), self, SLOT('accept()'))
57
+ cancel_button = Qt::PushButton.new('Cancel')
58
+ connect(cancel_button, SIGNAL('clicked()'), self, SLOT('reject()'))
59
+
60
+ hlayout = Qt::HBoxLayout.new
61
+ hlayout.addWidget(ok_button, 0, Qt::AlignLeft)
62
+ hlayout.addWidget(cancel_button, 0, Qt::AlignRight)
63
+ layout.addLayout(hlayout)
64
+
65
+ resize(500, 300)
66
+
67
+ self.show()
68
+ self.raise()
69
+ if self.exec() == Qt::Dialog::Accepted
70
+ build_system_config()
71
+ end
72
+ self.dispose()
73
+ end
74
+
75
+ def build_system_config
76
+ new_suffix = @system_name.text.downcase.gsub(' ','_')
77
+ existing_system = @system_combo.text
78
+ # Look for system_xxx.txt where we find the 'xxx' as the existing suffix
79
+ if existing = existing_system.scan(/.*?_(.*)\.txt/)[0]
80
+ existing_suffix = existing[0]
81
+ else
82
+ existing_suffix = nil
83
+ end
84
+
85
+ # First determine all the new files and make sure they don't already exist
86
+ new_system = File.join(Cosmos::USERPATH, 'config', 'system', "system_#{new_suffix}.txt")
87
+ return if file_exist?(new_system)
88
+ cmd_tlm_server_path = File.join('config', 'tools', 'cmd_tlm_server')
89
+ new_cmd_tlm_server = File.join(Cosmos::USERPATH, cmd_tlm_server_path, "cmd_tlm_server_#{new_suffix}.txt")
90
+ return if file_exist?(new_cmd_tlm_server)
91
+ launcher_path = File.join('config', 'tools', 'launcher')
92
+ new_launcher = File.join(Cosmos::USERPATH, launcher_path, "launcher_#{new_suffix}.txt")
93
+ return if file_exist?(new_launcher)
94
+ new_batch = File.join(Cosmos::USERPATH, "Launcher#{@system_name.text.gsub(' ','')}.bat")
95
+ return if file_exist?(new_batch)
96
+
97
+ # Create the new system.txt. We know the existing exists so simply copy it.
98
+ File.open(new_system, 'w') do |file|
99
+ file.puts File.read(File.join(::Cosmos::USERPATH, 'config', 'system', existing_system))
100
+ end
101
+
102
+ # Create the new cmd_tlm_server config and update the TITLE
103
+ data = get_config_contents(existing_suffix, cmd_tlm_server_path, 'cmd_tlm_server')
104
+ data.sub!(/\s*TITLE.*/, "TITLE 'COSMOS Command and Telemetry Server - #{@system_name.text} Configuration'")
105
+ File.open(new_cmd_tlm_server, 'w') {|file| file.puts data }
106
+
107
+ # Create the new launcher config and update the TITLE and Server LAUNCH commands
108
+ data = get_config_contents(existing_suffix, launcher_path, 'launcher')
109
+ data.sub!(/\s*TITLE.*/, "TITLE 'Launcher - #{@system_name.text} Configuration'")
110
+ data.gsub!(/LAUNCH\s+(\w+)/, "LAUNCH \\1 --system system_#{new_suffix}.txt")
111
+ # Convert all --config to -c to make it easier to replace in the next step
112
+ data.gsub!(/(.*LAUNCH\s+CmdTlmServer.*)(--config)(.*)/, "\\1-c\\3")
113
+ data.gsub!(/(.*LAUNCH\s+CmdTlmServer.*)-c\s+(\w+)(.*)/, "\\1-c cmd_tlm_server_#{new_suffix}\\3")
114
+ File.open(new_launcher, 'w') {|file| file.puts data }
115
+
116
+ File.open(new_batch, 'w') do |file|
117
+ file.puts "call tools\\Launcher.bat --config launcher_#{new_suffix}.txt --system system_#{new_suffix}.txt"
118
+ end
119
+
120
+ @parent.file_open(new_batch)
121
+ @parent.file_open(new_launcher)
122
+ @parent.file_open(new_cmd_tlm_server)
123
+ @parent.file_open(new_system)
124
+ Qt::MessageBox.information(self, "System Config Creation Success",
125
+ "The new system configuration was successfully created.\n\n"\
126
+ "The newly created files have been opened for further customization.")
127
+ end
128
+
129
+ def file_exist?(path)
130
+ if File.exist?(path)
131
+ Qt::MessageBox.warning(self, "Config file exists!", "#{path} already exists!")
132
+ return true
133
+ else
134
+ return false
135
+ end
136
+ end
137
+
138
+ def get_config_contents(existing_suffix, base_path, file_name)
139
+ contents = ''
140
+ if existing_suffix
141
+ existing_file = File.join(Cosmos::USERPATH, base_path, "#{file_name}_#{existing_suffix}.txt")
142
+ if File.exist?(existing_file)
143
+ contents = File.read(existing_file)
144
+ end
145
+ else
146
+ # Otherwise see if there is a basic one we can copy
147
+ basic_config = File.join(Cosmos::USERPATH, base_path, "#{file_name}.txt")
148
+ if File.exist?(basic_config)
149
+ contents = File.read(basic_config)
150
+ else
151
+ # Otherwise use the install config
152
+ contents = File.read(File.join(Cosmos::PATH, 'install', base_path, "#{file_name}.txt"))
153
+ end
154
+ end
155
+ return contents
156
+ end
157
+ end
158
+ end
@@ -10,8 +10,6 @@
10
10
 
11
11
  require 'cosmos'
12
12
  Cosmos.catch_fatal_exception do
13
- require 'cosmos/script'
14
- require 'cosmos/config/config_parser'
15
13
  require 'cosmos/gui/qt_tool'
16
14
  require 'cosmos/gui/dialogs/splash'
17
15
  require 'cosmos/gui/dialogs/progress_dialog'
@@ -22,10 +20,14 @@ Cosmos.catch_fatal_exception do
22
20
  require 'cosmos/gui/widgets/realtime_button_bar'
23
21
  require 'cosmos/tools/data_viewer/data_viewer_component'
24
22
  require 'cosmos/tools/data_viewer/dump_component'
23
+ require 'cosmos/tools/data_viewer/text_component'
24
+ require 'cosmos/config/config_parser'
25
+ require 'cosmos/script'
25
26
  end
26
27
 
27
28
  module Cosmos
28
-
29
+ # Displays data in text format. Useful for telemetry that doesn't work well with
30
+ # telemetry screens such as memory dumps or large amounts of text.
29
31
  class DataViewer < QtTool
30
32
  slots 'context_menu(const QPoint&)'
31
33
  slots 'handle_tab_change(int)'
@@ -80,7 +82,8 @@ module Cosmos
80
82
  component.initialize_gui
81
83
  @tab_book.addTab(component, component.tab_name)
82
84
  end
83
- if @auto_start
85
+ toggle_replay_mode() if options.replay
86
+ if @auto_start || options.start
84
87
  handle_start()
85
88
  end
86
89
  ConfigParser.splash = nil
@@ -97,62 +100,62 @@ module Cosmos
97
100
  super()
98
101
 
99
102
  # File Menu Actions
100
- @open_log = Qt::Action.new(tr('&Open Log File'), self)
101
- @open_log_keyseq = Qt::KeySequence.new(tr('Ctrl+O'))
103
+ @open_log = Qt::Action.new('&Open Log File', self)
104
+ @open_log_keyseq = Qt::KeySequence.new('Ctrl+O')
102
105
  @open_log.shortcut = @open_log_keyseq
103
- @open_log.statusTip = tr('Open telemetry log file for processing')
106
+ @open_log.statusTip = 'Open telemetry log file for processing'
104
107
  @open_log.connect(SIGNAL('triggered()')) { handle_open_log_file() }
105
108
 
106
- @query_dart = Qt::Action.new(tr('&Query DART Database'), self)
107
- @query_dart_keyseq = Qt::KeySequence.new(tr('Ctrl+D'))
109
+ @query_dart = Qt::Action.new('&Query DART Database', self)
110
+ @query_dart_keyseq = Qt::KeySequence.new('Ctrl+D')
108
111
  @query_dart.shortcut = @query_dart_keyseq
109
- @query_dart.statusTip = tr('Query DART Database')
112
+ @query_dart.statusTip = 'Query DART Database'
110
113
  @query_dart.connect(SIGNAL('triggered()')) { handle_query_dart() }
111
114
 
112
- @handle_reset = Qt::Action.new(tr('&Reset'), self)
113
- @handle_reset_keyseq = Qt::KeySequence.new(tr('Ctrl+R'))
115
+ @handle_reset = Qt::Action.new('&Reset', self)
116
+ @handle_reset_keyseq = Qt::KeySequence.new('Ctrl+R')
114
117
  @handle_reset.shortcut = @handle_reset_keyseq
115
- @handle_reset.statusTip = tr('Reset Components')
118
+ @handle_reset.statusTip = 'Reset Components'
116
119
  @handle_reset.connect(SIGNAL('triggered()')) { handle_reset() }
117
120
 
118
- @replay_action = Qt::Action.new(tr('Toggle Replay Mode'), self)
119
- @replay_action.statusTip = tr('Toggle Replay Mode')
121
+ @replay_action = Qt::Action.new('Toggle Replay Mode', self)
122
+ @replay_action.statusTip = 'Toggle Replay Mode'
120
123
  @replay_action.connect(SIGNAL('triggered()')) { toggle_replay_mode() }
121
124
 
122
125
  # Search Actions
123
- @search_find = Qt::Action.new(Cosmos.get_icon('search.png'), tr('&Find'), self)
124
- @search_find_keyseq = Qt::KeySequence.new(tr('Ctrl+F'))
126
+ @search_find = Qt::Action.new(Cosmos.get_icon('search.png'), '&Find', self)
127
+ @search_find_keyseq = Qt::KeySequence.new('Ctrl+F')
125
128
  @search_find.shortcut = @search_find_keyseq
126
- @search_find.statusTip = tr('Find text')
129
+ @search_find.statusTip = 'Find text'
127
130
  @search_find.connect(SIGNAL('triggered()')) do
128
131
  FindReplaceDialog.show_find(self)
129
132
  end
130
133
 
131
- @search_find_next = Qt::Action.new(tr('Find &Next'), self)
132
- @search_find_next_keyseq = Qt::KeySequence.new(tr('F3'))
134
+ @search_find_next = Qt::Action.new('Find &Next', self)
135
+ @search_find_next_keyseq = Qt::KeySequence.new('F3')
133
136
  @search_find_next.shortcut = @search_find_next_keyseq
134
- @search_find_next.statusTip = tr('Find next instance')
137
+ @search_find_next.statusTip = 'Find next instance'
135
138
  @search_find_next.connect(SIGNAL('triggered()')) do
136
139
  FindReplaceDialog.find_next(self)
137
140
  end
138
141
 
139
- @search_find_previous = Qt::Action.new(tr('Find &Previous'), self)
140
- @search_find_previous_keyseq = Qt::KeySequence.new(tr('Shift+F3'))
142
+ @search_find_previous = Qt::Action.new('Find &Previous', self)
143
+ @search_find_previous_keyseq = Qt::KeySequence.new('Shift+F3')
141
144
  @search_find_previous.shortcut = @search_find_previous_keyseq
142
- @search_find_previous.statusTip = tr('Find previous instance')
145
+ @search_find_previous.statusTip = 'Find previous instance'
143
146
  @search_find_previous.connect(SIGNAL('triggered()')) do
144
147
  FindReplaceDialog.find_previous(self)
145
148
  end
146
149
 
147
150
  # Tab Menu Actions
148
- @delete_tab = Qt::Action.new(Cosmos.get_icon('delete_tab.png'), tr('&Delete Tab'), self)
149
- @delete_tab.statusTip = tr('Delete active tab')
151
+ @delete_tab = Qt::Action.new(Cosmos.get_icon('delete_tab.png'), '&Delete Tab', self)
152
+ @delete_tab.statusTip = 'Delete active tab'
150
153
  @delete_tab.connect(SIGNAL('triggered()')) { on_tab_delete() }
151
154
  end
152
155
 
153
156
  def initialize_menus
154
157
  # File Menu
155
- file_menu = menuBar.addMenu(tr('&File'))
158
+ file_menu = menuBar.addMenu('&File')
156
159
  file_menu.addAction(@open_log)
157
160
  file_menu.addAction(@query_dart)
158
161
  file_menu.addAction(@handle_reset)
@@ -161,13 +164,13 @@ module Cosmos
161
164
  file_menu.addAction(@exit_action)
162
165
 
163
166
  # Tab Menu
164
- @tab_menu = menuBar.addMenu(tr('&Tab'))
167
+ @tab_menu = menuBar.addMenu('&Tab')
165
168
  @tab_menu.addAction(@delete_tab)
166
169
  @tab_menu.addSeparator()
167
170
  @tab_menu_actions = []
168
171
 
169
172
  # Search Menu
170
- view_menu = menuBar.addMenu(tr('&Search'))
173
+ view_menu = menuBar.addMenu('&Search')
171
174
  view_menu.addAction(@search_find)
172
175
  view_menu.addAction(@search_find_next)
173
176
  view_menu.addAction(@search_find_previous)
@@ -307,7 +310,7 @@ module Cosmos
307
310
  break if @cancel_thread
308
311
  Qt.execute_in_main_thread(true) do
309
312
  @realtime_button_bar.state = 'Connecting'
310
- statusBar.showMessage(tr("Error Connecting to Command and Telemetry Server"))
313
+ statusBar.showMessage("Error Connecting to Command and Telemetry Server")
311
314
  end
312
315
  break if @sleeper.sleep(1)
313
316
  break if @cancel_thread
@@ -318,7 +321,7 @@ module Cosmos
318
321
  break if @cancel_thread
319
322
  begin
320
323
  # Get a subscribed to packet
321
- packet_data, target_name, packet_name, received_time, received_count = get_packet_data(@subscription_id)
324
+ packet_data, target_name, packet_name, received_time, received_count, stored, extra = get_packet_data(@subscription_id)
322
325
  break unless packet_data
323
326
 
324
327
  # Put packet data into its packet
@@ -326,6 +329,8 @@ module Cosmos
326
329
  packet.buffer = packet_data
327
330
  packet.received_time = received_time
328
331
  packet.received_count = received_count
332
+ packet.stored = stored
333
+ packet.extra = extra
329
334
 
330
335
  # Make sure we are on the right configuration
331
336
  if target_name == 'SYSTEM' and packet_name == 'META'
@@ -344,12 +349,12 @@ module Cosmos
344
349
  end
345
350
  rescue DRb::DRbConnError
346
351
  break if @cancel_thread
347
- Qt.execute_in_main_thread(true) { statusBar.showMessage(tr("Error Connecting to Command and Telemetry Server")) }
352
+ Qt.execute_in_main_thread(true) { statusBar.showMessage("Error Connecting to Command and Telemetry Server") }
348
353
  break # Let outer loop resubscribe
349
354
  rescue RuntimeError => error
350
355
  raise error unless error.message =~ /queue/
351
356
  break if @cancel_thread
352
- Qt.execute_in_main_thread(true) { statusBar.showMessage(tr("Connection Dropped by Command and Telemetry Server: #{Time.now.sys.formatted}")) }
357
+ Qt.execute_in_main_thread(true) { statusBar.showMessage("Connection Dropped by Command and Telemetry Server: #{Time.now.sys.formatted}") }
353
358
  break # Let outer loop resubscribe
354
359
  end
355
360
  end
@@ -537,7 +542,7 @@ module Cosmos
537
542
  @interface.disconnect
538
543
  request_packet = Cosmos::Packet.new('DART', 'DART')
539
544
  request_packet.define_item('REQUEST', 0, 0, :BLOCK)
540
-
545
+
541
546
  @time_start ||= Time.utc(1970, 1, 1)
542
547
  @time_end ||= Time.now
543
548
  @time_delta = @time_end - @time_start
@@ -550,7 +555,7 @@ module Cosmos
550
555
  request['packets'] = @packets
551
556
  request['meta_filters'] = @meta_filters unless @meta_filters.empty?
552
557
  request_packet.write('REQUEST', JSON.dump(request))
553
-
558
+
554
559
  progress_dialog.append_text("Connecting to DART Database...")
555
560
  @interface.connect
556
561
  progress_dialog.append_text("Sending DART Database Query...")
@@ -570,16 +575,18 @@ module Cosmos
570
575
 
571
576
  # Switch to correct configuration from SYSTEM META when needed
572
577
  if packet.target_name == 'SYSTEM'.freeze and packet.packet_name == 'META'.freeze
573
- meta_packet = System.telemetry.update!('SYSTEM', 'META', packet.buffer)
578
+ meta_packet = System.telemetry.update!('SYSTEM', 'META', packet.buffer)
574
579
  Cosmos::System.load_configuration(meta_packet.read('CONFIG'))
575
580
  elsif first
576
581
  first = false
577
- @time_start = packet.received_time
582
+ @time_start = packet.packet_time
578
583
  @time_delta = @time_end - @time_start
579
584
  end
580
585
 
581
586
  defined_packet = System.telemetry.update!(packet.target_name, packet.packet_name, packet.buffer)
582
587
  defined_packet.received_time = packet.received_time
588
+ defined_packet.stored = packet.stored
589
+ defined_packet.extra = packet.extra
583
590
 
584
591
  break if @cancel_progress
585
592
  # Route packet to its component(s)
@@ -593,14 +600,14 @@ module Cosmos
593
600
  end
594
601
  end
595
602
 
596
- progress = ((@time_delta - (@time_end - defined_packet.received_time)).to_f / @time_delta.to_f)
603
+ progress = ((@time_delta - (@time_end - defined_packet.packet_time)).to_f / @time_delta.to_f)
597
604
  progress_dialog.set_overall_progress(progress) if !@cancel_progress
598
605
  end
599
606
  ensure
600
607
  progress_dialog.append_text("Canceled!") if @cancel_progress
601
608
  progress_dialog.complete
602
609
  end
603
- end
610
+ end
604
611
  rescue => error
605
612
  Qt::MessageBox.critical(self, 'Error!', "Error Querying DART Database\n#{error.formatted}")
606
613
  ensure
@@ -745,7 +752,7 @@ module Cosmos
745
752
  delete_component(tab_index)
746
753
  @tab_book.removeTab(tab_index)
747
754
 
748
- statusBar.showMessage(tr("Tab Deleted"))
755
+ statusBar.showMessage("Tab Deleted")
749
756
  end
750
757
  else
751
758
  Qt::MessageBox.information(self, 'Info', "No tabs exist")
@@ -763,17 +770,20 @@ module Cosmos
763
770
  options.width = 550
764
771
  options.height = 500
765
772
  options.title = "Data Viewer"
766
- options.config_file = 'data_viewer.txt'
773
+ options.start = false
774
+ options.replay = false
775
+ options.config_file = true # config_file is required
767
776
  option_parser.separator "Data Viewer Specific Options:"
768
- option_parser.on("-c", "--config FILE", "Use the specified configuration file") do |arg|
769
- options.config_file = arg
777
+ option_parser.on("-s", "--start", "Start processing immediately") do |arg|
778
+ options.start = true
779
+ end
780
+ option_parser.on("--replay", "Start Data Viewer in Replay mode") do
781
+ options.replay = true
770
782
  end
771
783
  end
772
784
 
773
785
  super(option_parser, options)
774
786
  end
775
787
  end
776
-
777
- end # class DataViewer
778
-
779
- end # module Cosmos
788
+ end
789
+ end