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
@@ -9,9 +9,9 @@
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
11
  require 'cosmos/config/config_parser'
12
+ require 'pathname'
12
13
 
13
14
  module Cosmos
14
-
15
15
  # Target encapsulates the information about a COSMOS target. Targets are
16
16
  # accessed through interfaces and have command and telemetry definition files
17
17
  # which define their access.
@@ -66,6 +66,12 @@ module Cosmos
66
66
  # @return [Integer] The number of telemetry packets received from this target
67
67
  attr_accessor :tlm_cnt
68
68
 
69
+ # @return [Boolean] Indicates if all command packets identify using different fields
70
+ attr_accessor :cmd_unique_id_mode
71
+
72
+ # @return [Boolean] Indicates if telemetry packets identify using different fields
73
+ attr_accessor :tlm_unique_id_mode
74
+
69
75
  # Creates a new target by processing the target.txt file in the directory
70
76
  # given by the path joined with the target_name. Records all the command
71
77
  # and telemetry definition files found in the targets cmd_tlm directory.
@@ -90,6 +96,8 @@ module Cosmos
90
96
  @routers = []
91
97
  @cmd_cnt = 0
92
98
  @tlm_cnt = 0
99
+ @cmd_unique_id_mode = false
100
+ @tlm_unique_id_mode = false
93
101
 
94
102
  # Determine the target name using substitution if given
95
103
  @original_name = target_name.clone.upcase.freeze
@@ -123,16 +131,18 @@ module Cosmos
123
131
  when 'REQUIRE'
124
132
  usage = "#{keyword} <FILENAME>"
125
133
  parser.verify_num_parameters(1, 1, usage)
134
+ filename = File.join(@dir, 'lib', parameters[0])
126
135
  begin
127
- # Require absolute path to file in target lib folder. Prevents name
136
+ # Require absolute path to file in target lib folder. Prevents name
128
137
  # conflicts at the require step
129
138
  Cosmos.disable_warnings do
130
- Cosmos.require_file(File.join(@dir, 'lib', parameters[0]), false)
139
+ Cosmos.require_file(filename, false)
131
140
  end
132
141
  rescue LoadError
133
142
  begin
134
143
  # If we couldn't load at the target/lib level check everywhere
135
144
  Cosmos.disable_warnings do
145
+ filename = parameters[0]
136
146
  Cosmos.require_file(parameters[0])
137
147
  end
138
148
  rescue Exception => err
@@ -141,7 +151,19 @@ module Cosmos
141
151
  rescue Exception => err
142
152
  raise parser.error(err.message)
143
153
  end
144
- @requires << parameters[0]
154
+
155
+ # This code resolves any relative paths to absolute before putting into the @requires array
156
+ unless Pathname.new(filename).absolute?
157
+ $:.each do |search_path|
158
+ test_filename = File.join(search_path, filename).gsub("\\", "/")
159
+ if File.exist?(test_filename)
160
+ filename = test_filename
161
+ break
162
+ end
163
+ end
164
+ end
165
+
166
+ @requires << filename
145
167
 
146
168
  when 'IGNORE_PARAMETER', 'IGNORE_ITEM'
147
169
  usage = "#{keyword} <#{keyword.split('_')[1]} NAME>"
@@ -161,6 +183,16 @@ module Cosmos
161
183
  parser.verify_num_parameters(0, 0, usage)
162
184
  @auto_screen_substitute = true
163
185
 
186
+ when 'CMD_UNIQUE_ID_MODE'
187
+ usage = "#{keyword}"
188
+ parser.verify_num_parameters(0, 0, usage)
189
+ @cmd_unique_id_mode = true
190
+
191
+ when 'TLM_UNIQUE_ID_MODE'
192
+ usage = "#{keyword}"
193
+ parser.verify_num_parameters(0, 0, usage)
194
+ @tlm_unique_id_mode = true
195
+
164
196
  else
165
197
  # blank lines will have a nil keyword and should not raise an exception
166
198
  raise parser.error("Unknown keyword '#{keyword}'") if keyword
@@ -213,7 +245,7 @@ module Cosmos
213
245
  cmd_tlm_files.sort!
214
246
  end
215
247
 
216
- # Make sure all partials are included in the cmd_tlm list for the MD5 calculation
248
+ # Make sure all partials are included in the cmd_tlm list for the hashing sum calculation
217
249
  def add_cmd_tlm_partials(dir)
218
250
  partial_files = []
219
251
  if Dir.exist?(File.join(dir, 'cmd_tlm'))
@@ -226,7 +258,5 @@ module Cosmos
226
258
  @cmd_tlm_files.concat(partial_files)
227
259
  @cmd_tlm_files.uniq!
228
260
  end
229
-
230
- end # class Target
231
-
232
- end # module Cosmos
261
+ end
262
+ end
@@ -62,25 +62,36 @@ module Cosmos
62
62
  super()
63
63
 
64
64
  # File Menu Actions
65
- @analyze_log = Qt::Action.new(tr('&Analyze Logs'), self)
66
- @analyze_log.statusTip = tr('Analyze log file packet counts')
65
+ @analyze_log = Qt::Action.new('&Analyze Logs', self)
66
+ @analyze_log.statusTip = 'Analyze log file packet counts'
67
67
  @analyze_log.connect(SIGNAL('triggered()')) { analyze_log_files() }
68
68
 
69
69
  # Mode Menu Actions
70
- @include_raw = Qt::Action.new(tr('Include &Raw Data'), self)
71
- @include_raw_keyseq = Qt::KeySequence.new(tr('Ctrl+R'))
70
+ @csv_output = Qt::Action.new('&CSV Output', self)
71
+ @csv_output.statusTip = 'Output as CSV based on Packet Time'
72
+ @csv_output.setCheckable(true)
73
+ @csv_output.connect(SIGNAL('triggered()')) { change_callback(:INPUT_FILES) }
74
+
75
+ @skip_ignored = Qt::Action.new('&Skip Ignored Items', self)
76
+ @skip_ignored.statusTip = "Skip ignored items in the command when building output"
77
+ @skip_ignored.setCheckable(true)
78
+
79
+ @include_raw = Qt::Action.new('Include &Raw Data', self)
80
+ @include_raw_keyseq = Qt::KeySequence.new('Ctrl+R')
72
81
  @include_raw.shortcut = @include_raw_keyseq
73
- @include_raw.statusTip = tr('Include raw packet data in the text output')
82
+ @include_raw.statusTip = 'Include raw packet data in the text output'
74
83
  @include_raw.setCheckable(true)
75
84
  end
76
85
 
77
86
  # Create the File and Mode menus and initialize the Help menu
78
87
  def initialize_menus
79
- @file_menu = menuBar.addMenu(tr('&File'))
88
+ @file_menu = menuBar.addMenu('&File')
80
89
  @file_menu.addAction(@analyze_log)
81
90
  @file_menu.addSeparator()
82
91
  @file_menu.addAction(@exit_action)
83
- @mode_menu = menuBar.addMenu(tr('&Mode'))
92
+ @mode_menu = menuBar.addMenu('&Mode')
93
+ @mode_menu.addAction(@csv_output)
94
+ @mode_menu.addAction(@skip_ignored)
84
95
  @mode_menu.addAction(@include_raw)
85
96
  @about_string = "Command Extractor extracts commands from a binary command log file into a human readable text file."
86
97
  initialize_help_menu()
@@ -102,20 +113,20 @@ module Cosmos
102
113
  @data_source_layout.addWidget(label)
103
114
  @log_file_radio = Qt::RadioButton.new("Log File", self)
104
115
  @log_file_radio.setChecked(true)
105
- @log_file_radio.connect(SIGNAL('clicked()')) do
116
+ @log_file_radio.connect(SIGNAL('clicked()')) do
106
117
  @packet_log_frame.show_log_fields(true)
107
118
  @packet_log_frame.output_filename = ""
108
- @dart_meta_frame.hide
119
+ @dart_meta_frame.hide
109
120
  @resize_timer.start(100)
110
121
  end
111
122
  @data_source_layout.addWidget(@log_file_radio)
112
123
  @dart_radio = Qt::RadioButton.new("DART Database", self)
113
- @dart_radio.connect(SIGNAL('clicked()')) do
124
+ @dart_radio.connect(SIGNAL('clicked()')) do
114
125
  @packet_log_frame.show_log_fields(false)
115
126
  @packet_log_frame.output_filename = ""
116
127
  @dart_meta_frame.show
117
128
  @resize_timer.start(100)
118
- end
129
+ end
119
130
  @data_source_layout.addWidget(@dart_radio)
120
131
  @data_source_layout.addStretch()
121
132
  @top_layout.addLayout(@data_source_layout)
@@ -144,6 +155,14 @@ module Cosmos
144
155
  @open_button.connect(SIGNAL('clicked()')) { open_button() }
145
156
  @open_button.setEnabled(false)
146
157
  @button_layout.addWidget(@open_button)
158
+
159
+ if Kernel.is_windows?
160
+ @open_excel_button = Qt::PushButton.new('&Open in Excel')
161
+ @open_excel_button.connect(SIGNAL('clicked()')) { open_excel_button() }
162
+ @open_excel_button.setEnabled(false)
163
+ @button_layout.addWidget(@open_excel_button)
164
+ end
165
+
147
166
  @top_layout.addLayout(@button_layout)
148
167
  end
149
168
 
@@ -176,14 +195,16 @@ module Cosmos
176
195
  @time_start = @packet_log_frame.time_start
177
196
  @time_end = @packet_log_frame.time_end
178
197
  @packet_log_reader = @packet_log_frame.packet_log_reader
179
- @input_filenames = @packet_log_frame.filenames.sort
198
+ @input_filenames = @packet_log_frame.filenames.sort
180
199
  @output_filename = @packet_log_frame.output_filename
181
200
  @output_filename = nil if @output_filename.strip.empty?
182
201
  @meta_filters = @dart_meta_frame.meta_filters
183
202
 
184
203
  return unless pre_process_tests()
204
+ csv_output = @csv_output.isChecked
205
+ skip_ignored = @skip_ignored.isChecked
206
+ include_raw = @include_raw.isChecked
185
207
 
186
- include_raw = @include_raw.isChecked
187
208
  if @log_file_radio.isChecked
188
209
  begin
189
210
  ProgressDialog.execute(self, # parent
@@ -196,13 +217,14 @@ module Cosmos
196
217
  begin
197
218
  Cosmos.set_working_dir do
198
219
  File.open(@output_filename, 'w') do |output_file|
199
- process_files(output_file, include_raw, progress_dialog)
220
+ process_files(output_file, progress_dialog, csv_output, skip_ignored, include_raw)
200
221
  end
201
222
  end
202
223
  ensure
203
224
  progress_dialog.complete
204
225
  Qt.execute_in_main_thread(true) do
205
226
  @open_button.setEnabled(true)
227
+ @open_excel_button.setEnabled(true) if Kernel.is_windows?
206
228
  end
207
229
  end
208
230
  end
@@ -214,8 +236,8 @@ module Cosmos
214
236
  ProgressDialog.execute(self, # parent
215
237
  'Log File Progress', # title
216
238
  600, # width, height
217
- 300,
218
- true, # Overall progress, no step progress
239
+ 300,
240
+ true, # Overall progress, no step progress
219
241
  false) do |progress_dialog|
220
242
  progress_dialog.cancel_callback = method(:cancel_callback)
221
243
  progress_dialog.enable_cancel_button
@@ -227,7 +249,7 @@ module Cosmos
227
249
  @interface.disconnect
228
250
  request_packet = Cosmos::Packet.new('DART', 'DART')
229
251
  request_packet.define_item('REQUEST', 0, 0, :BLOCK)
230
-
252
+
231
253
  @time_start ||= Time.utc(1970, 1, 1)
232
254
  @time_end ||= Time.now
233
255
  @time_delta = @time_end - @time_start
@@ -239,13 +261,15 @@ module Cosmos
239
261
  request['cmd_tlm'] = 'CMD'
240
262
  request['meta_filters'] = @meta_filters unless @meta_filters.empty?
241
263
  request_packet.write('REQUEST', JSON.dump(request))
242
-
264
+
243
265
  progress_dialog.append_text("Connecting to DART Database...")
244
266
  @interface.connect
245
267
  progress_dialog.append_text("Sending DART Database Query...")
246
268
  @interface.write(request_packet)
247
269
  progress_dialog.append_text("Receiving Packets...")
248
270
 
271
+ write_output_file_DART_header(output_file, request, csv_output)
272
+
249
273
  first = true
250
274
  while true
251
275
  break if @cancel
@@ -260,31 +284,22 @@ module Cosmos
260
284
  # Switch to correct configuration from SYSTEM META when needed
261
285
  if packet.target_name == 'SYSTEM'.freeze and packet.packet_name == 'META'.freeze
262
286
  meta_packet = System.commands.packet('SYSTEM', 'META')
263
- meta_packet.buffer = packet.buffer
287
+ meta_packet.buffer = packet.buffer
264
288
  Cosmos::System.load_configuration(meta_packet.read('CONFIG'))
265
289
  elsif first
266
290
  first = false
267
- @time_start = packet.received_time
291
+ @time_start = packet.packet_time
268
292
  @time_delta = @time_end - @time_start
269
293
  end
270
294
 
271
295
  defined_packet = System.commands.packet(packet.target_name, packet.packet_name)
272
296
  defined_packet.buffer = packet.buffer
273
297
  defined_packet.received_time = packet.received_time
274
-
275
- output_file.puts "#{defined_packet.target_name} #{defined_packet.packet_name}"
276
- output_file.puts " RECEIVED_TIMEFORMATTED: #{defined_packet.received_time.formatted}"
277
- output_file.puts defined_packet.formatted(:WITH_UNITS, 2)
278
- if include_raw or !defined_packet.identified? or !defined_packet.defined?
279
- output_file.puts " RAW PACKET DATA (#{defined_packet.length} bytes):"
280
- output_file.puts defined_packet.buffer.formatted(1, 16, ' ', 4)
281
- end
282
- output_file.puts
283
-
284
- progress = ((@time_delta - (@time_end - defined_packet.received_time)).to_f / @time_delta.to_f)
298
+ write_output_file_packet(output_file, defined_packet, csv_output, skip_ignored, include_raw)
299
+ progress = ((@time_delta - (@time_end - defined_packet.packet_time)).to_f / @time_delta.to_f)
285
300
  progress_dialog.set_overall_progress(progress) if !@cancel
286
301
  end
287
-
302
+
288
303
  end
289
304
  end
290
305
 
@@ -293,14 +308,15 @@ module Cosmos
293
308
  progress_dialog.complete
294
309
  Qt.execute_in_main_thread(true) do
295
310
  @open_button.setEnabled(true)
311
+ @open_excel_button.setEnabled(true) if Kernel.is_windows?
296
312
  end
297
313
  end
298
- end
314
+ end
299
315
  rescue => error
300
316
  Qt::MessageBox.critical(self, 'Error!', "Error Querying DART Database\n#{error.formatted}")
301
317
  ensure
302
318
  @interface.disconnect
303
- end
319
+ end
304
320
  end
305
321
  end # def process_data
306
322
 
@@ -308,11 +324,15 @@ module Cosmos
308
324
  Cosmos.open_in_text_editor(@output_filename)
309
325
  end
310
326
 
327
+ def open_excel_button
328
+ system("start Excel.exe \"#{@output_filename}\"")
329
+ end
330
+
311
331
  ###############################################################################
312
332
  # Helper Methods
313
333
  ###############################################################################
314
334
 
315
- def process_files(output_file, include_raw, progress_dialog)
335
+ def process_files(output_file, progress_dialog, csv_output, skip_ignored, include_raw)
316
336
  log_file_count = 1
317
337
  @input_filenames.each do |log_file|
318
338
  break if @cancel
@@ -321,10 +341,7 @@ module Cosmos
321
341
  file_size = File.size(log_file).to_f
322
342
  progress_dialog.append_text("Processing File #{log_file_count}/#{@input_filenames.length}: #{log_file}")
323
343
  progress_dialog.set_step_progress(0.0)
324
- output_file.puts '-' * (log_file.length * 1.4).to_i
325
- output_file.puts log_file
326
- output_file.puts '-' * (log_file.length * 1.4).to_i
327
- output_file.puts
344
+ write_output_file_header(output_file, log_file, csv_output)
328
345
  @packet_log_reader.each(
329
346
  log_file, # log filename
330
347
  true, # identify and define packet
@@ -333,16 +350,7 @@ module Cosmos
333
350
 
334
351
  break if @cancel
335
352
  progress_dialog.set_step_progress(@packet_log_reader.bytes_read / file_size)
336
- if packet.received_time
337
- output_file.puts "#{packet.target_name} #{packet.packet_name}"
338
- output_file.puts " RECEIVED_TIMEFORMATTED: #{packet.received_time.formatted}"
339
- end
340
- output_file.puts packet.formatted(:WITH_UNITS, 2)
341
- if include_raw or !packet.identified? or !packet.defined?
342
- output_file.puts " RAW PACKET DATA (#{packet.length} bytes):"
343
- output_file.puts packet.buffer.formatted(1, 16, ' ', 4)
344
- end
345
- output_file.puts
353
+ write_output_file_packet(output_file, packet, csv_output, skip_ignored, include_raw)
346
354
  end
347
355
  progress_dialog.set_step_progress(1.0) if !@cancel
348
356
  progress_dialog.set_overall_progress(log_file_count.to_f / @input_filenames.length.to_f) if !@cancel
@@ -357,6 +365,57 @@ module Cosmos
357
365
  # Helper Methods
358
366
  ###############################################################################
359
367
 
368
+ def write_output_file_header(output_file, log_file, csv_output)
369
+ if csv_output
370
+ output_file.puts "Filename,#{log_file}"
371
+ output_file.puts "PACKET_TIMEFORMATTED,Target,Packet,Parameters"
372
+ else
373
+ output_file.puts '-' * (log_file.length * 1.4).to_i
374
+ output_file.puts log_file
375
+ output_file.puts '-' * (log_file.length * 1.4).to_i
376
+ output_file.puts
377
+ end
378
+ end
379
+
380
+ def write_output_file_DART_header(output_file, request, csv_output)
381
+ if csv_output
382
+ output_file.puts "DART Request"
383
+ output_file.puts "start secs,#{request['start_time_sec']},start usec,#{request['start_time_usec']}"
384
+ output_file.puts "end secs,#{request['end_time_sec']},end usec,#{request['end_time_usec']}"
385
+ output_file.puts "meta_filter,#{request['meta_filters']}" unless @meta_filters.empty?
386
+ else
387
+ output_file.puts "DART Request"
388
+ output_file.puts "start secs:#{request['start_time_sec']} start usec:#{request['start_time_usec']}"
389
+ output_file.puts "end secs:#{request['end_time_sec']} end usec:#{request['end_time_usec']}"
390
+ output_file.puts "meta_filter:#{request['meta_filters']}" unless @meta_filters.empty?
391
+ end
392
+ end
393
+
394
+ def write_output_file_packet(output_file, packet, csv_output, skip_ignored, include_raw)
395
+ if csv_output
396
+ items_string = ""
397
+ packet.read_all.each do |name, value|
398
+ next if skip_ignored && System.targets[packet.target_name].ignored_items.include?(name)
399
+ items_string << "#{name},#{value},"
400
+ end
401
+ output_file.puts "#{packet.packet_time.formatted},#{packet.target_name},#{packet.packet_name},#{items_string}"
402
+ output_file.puts "#{packet.buffer.formatted}" if include_raw
403
+ else
404
+ output_file.puts "#{packet.target_name} #{packet.packet_name}"
405
+ if packet.received_time
406
+ output_file.puts " PACKET_TIMEFORMATTED: #{packet.packet_time.formatted}"
407
+ output_file.puts " RECEIVED_TIMEFORMATTED: #{packet.received_time.formatted}"
408
+ end
409
+ ignored = skip_ignored ? System.targets[packet.target_name].ignored_items : nil
410
+ output_file.puts packet.formatted(:WITH_UNITS, 2, packet.buffer, ignored)
411
+ if include_raw or !packet.identified? or !packet.defined?
412
+ output_file.puts " RAW PACKET DATA (#{packet.length} bytes):"
413
+ output_file.puts packet.buffer.formatted(1, 16, ' ', 4)
414
+ end
415
+ output_file.puts
416
+ end
417
+ end
418
+
360
419
  def pre_process_tests
361
420
  if @log_file_radio.isChecked
362
421
  unless @input_filenames and @input_filenames[0]
@@ -370,7 +429,7 @@ module Cosmos
370
429
  Qt::MessageBox.critical(self, 'Error', 'No Output File Selected')
371
430
  return false
372
431
  else
373
- @packet_log_frame.output_filename = File.join(System.paths['LOGS'], File.build_timestamped_filename(['cmd_extractor', 'dart']))
432
+ @packet_log_frame.output_filename = File.join(System.paths['LOGS'], File.build_timestamped_filename(['cmd_extractor', 'dart'], get_output_file_extension()))
374
433
  @output_filename = @packet_log_frame.output_filename
375
434
  end
376
435
  end
@@ -383,6 +442,10 @@ module Cosmos
383
442
  true
384
443
  end
385
444
 
445
+ def get_output_file_extension
446
+ @csv_output.isChecked ? '.csv' : '.txt'
447
+ end
448
+
386
449
  ###############################################################################
387
450
  # Additional Callbacks
388
451
  ###############################################################################
@@ -398,12 +461,10 @@ module Cosmos
398
461
  if filename
399
462
  extension = File.extname(filename)
400
463
  filename_no_extension = filename[0..-(extension.length + 1)]
401
- filename = filename_no_extension << '.txt'
402
- @packet_log_frame.output_filename = filename
464
+ @packet_log_frame.output_filename = "#{filename_no_extension}#{get_output_file_extension}"
403
465
  end
404
466
  end
405
467
  end
406
468
 
407
- end # class CmdExtractor
408
-
409
- end # module Cosmos
469
+ end
470
+ end