cosmos 3.9.2 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +23 -0
  3. data/.travis.yml +1 -0
  4. data/.yardopts +3 -0
  5. data/Gemfile +1 -1
  6. data/Manifest.txt +137 -52
  7. data/Rakefile +50 -44
  8. data/autohotkey/config/system/system.txt +0 -5
  9. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +6 -1
  10. data/autohotkey/config/targets/INST/screens/extra.txt +19 -0
  11. data/autohotkey/config/targets/INST/sequences/run_sequence.txt +1 -0
  12. data/autohotkey/config/targets/META/screens/data.txt +12 -0
  13. data/autohotkey/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  14. data/autohotkey/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  15. data/autohotkey/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  16. data/autohotkey/config/targets/SYSTEM/screens/limits_change.txt +14 -0
  17. data/autohotkey/config/targets/SYSTEM/screens/meta.txt +14 -0
  18. data/autohotkey/config/targets/SYSTEM/target.txt +12 -0
  19. data/autohotkey/config/tools/cmd_tlm_server/cmd_tlm_server.txt +2 -2
  20. data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
  21. data/autohotkey/tools/CmdSequence +14 -0
  22. data/autohotkey/tools/CmdSequenceAHK +23 -0
  23. data/autohotkey/tools/CmdSequenceAHK2 +16 -0
  24. data/autohotkey/tools/cmd_extractor.ahk +2 -2
  25. data/autohotkey/tools/cmd_sender.ahk +4 -6
  26. data/autohotkey/tools/cmd_sequence.ahk +215 -0
  27. data/autohotkey/tools/cmd_sequence2.ahk +23 -0
  28. data/autohotkey/tools/data_viewer.ahk +2 -3
  29. data/autohotkey/tools/limits_monitor.ahk +9 -11
  30. data/autohotkey/tools/open_gl_builder.ahk +1 -2
  31. data/autohotkey/tools/packet_viewer.ahk +51 -35
  32. data/autohotkey/tools/replay.ahk +1 -2
  33. data/autohotkey/tools/script_runner.ahk +1 -2
  34. data/autohotkey/tools/script_runner2.ahk +1 -2
  35. data/autohotkey/tools/test_runner2.ahk +1 -5
  36. data/autohotkey/tools/test_runner3.ahk +1 -3
  37. data/autohotkey/tools/tlm_grapher.ahk +1 -3
  38. data/autohotkey/tools/tlm_grapher3.ahk +1 -2
  39. data/autohotkey/tools/tlm_viewer.ahk +8 -3
  40. data/autohotkey/tools/tlm_viewer2.ahk +2 -3
  41. data/autohotkey/tools/tlm_viewer5.ahk +1 -2
  42. data/cosmos.gemspec +26 -20
  43. data/data/cmd_sequence.png +0 -0
  44. data/data/config/_array_params.yaml +23 -0
  45. data/data/config/_id_items.yaml +24 -0
  46. data/data/config/_id_params.yaml +58 -0
  47. data/data/config/_interfaces.yaml +206 -0
  48. data/data/config/_items.yaml +20 -0
  49. data/data/config/_params.yaml +58 -0
  50. data/data/config/cmd_tlm_server.yaml +110 -0
  51. data/data/config/command.yaml +38 -0
  52. data/data/config/command_modifiers.yaml +127 -0
  53. data/data/config/command_telemetry.yaml +3 -0
  54. data/data/config/data_viewer.yaml +43 -0
  55. data/data/config/handbook_creator.yaml +23 -0
  56. data/data/config/housekeeping_params.yaml +71 -0
  57. data/data/config/interface_modifiers.yaml +44 -0
  58. data/data/config/item_modifiers.yaml +172 -0
  59. data/data/config/launcher.yaml +117 -0
  60. data/data/config/limits_monitor.yaml +53 -0
  61. data/data/config/linegraph_params.yaml +30 -0
  62. data/data/config/linegraph_plot.yaml +106 -0
  63. data/data/config/page_modifiers.yaml +128 -0
  64. data/data/config/param_item_modifiers.yaml +41 -0
  65. data/data/config/parameter_modifiers.yaml +144 -0
  66. data/data/config/protocols.yaml +257 -0
  67. data/data/config/screen.yaml +151 -0
  68. data/data/config/script_runner.yaml +15 -0
  69. data/data/config/system.yaml +153 -0
  70. data/data/config/table_manager.yaml +76 -0
  71. data/data/config/table_parameter_modifiers.yaml +9 -0
  72. data/data/config/target.yaml +71 -0
  73. data/data/config/telemetry.yaml +73 -0
  74. data/data/config/telemetry_modifiers.yaml +129 -0
  75. data/data/config/test_runner.yaml +118 -0
  76. data/data/config/tlm_extractor.yaml +109 -0
  77. data/data/config/tlm_grapher.yaml +78 -0
  78. data/data/config/tlm_viewer.yaml +107 -0
  79. data/data/config/unknown.yaml +3 -0
  80. data/data/config/widgets.yaml +1339 -0
  81. data/data/config/xy_params.yaml +50 -0
  82. data/data/config/xy_plot.yaml +12 -0
  83. data/data/config_editor.png +0 -0
  84. data/data/crc.txt +172 -161
  85. data/data/delete.png +0 -0
  86. data/demo/config/data/crc.txt +56 -36
  87. data/demo/config/data/meta_init.txt +1 -4
  88. data/demo/config/system/system.txt +15 -3
  89. data/demo/config/system/system2.txt +13 -3
  90. data/demo/config/targets/EXAMPLE/lib/example_interface.rb +2 -6
  91. data/demo/config/targets/EXAMPLE/target.txt +3 -1
  92. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -0
  93. data/demo/config/targets/INST/lib/inst_dump_component.rb +34 -0
  94. data/demo/config/targets/INST/screens/adcs.txt +39 -15
  95. data/demo/config/targets/INST/screens/commanding.txt +26 -19
  96. data/demo/config/targets/INST/screens/spacing_box.txt +44 -0
  97. data/demo/config/targets/INST/screens/spacing_grid.txt +78 -0
  98. data/demo/config/targets/INST/screens/tabs.txt +0 -2
  99. data/demo/config/targets/INST/sequences/sequence.tsv +3 -0
  100. data/demo/config/targets/INST/tables/EventAction.csv +9 -0
  101. data/demo/config/targets/INST/tables/EventAction.dat +0 -0
  102. data/demo/config/targets/INST/tables/McConfigTable.csv +20 -0
  103. data/demo/config/targets/INST/tables/McConfigTable.dat +0 -0
  104. data/demo/config/targets/INST/target.txt +4 -0
  105. data/demo/config/targets/INST/tools/data_viewer/data_viewer.txt +2 -0
  106. data/demo/config/targets/INST/tools/data_viewer/data_viewer2.txt +2 -0
  107. data/demo/config/targets/INST/tools/table_manager/EventAction_def.txt +6 -0
  108. data/demo/config/targets/INST/tools/table_manager/McConfigTable_def.txt +38 -0
  109. data/demo/config/targets/SYSTEM/cmd_tlm/limits_groups.txt +7 -3
  110. data/demo/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  111. data/demo/config/targets/{COSMOS/cmd_tlm/cosmos_server_cmds.txt → SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  112. data/demo/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  113. data/demo/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
  114. data/demo/config/targets/SYSTEM/lib/limits_groups.rb +39 -0
  115. data/demo/config/targets/SYSTEM/screens/status.txt +1 -1
  116. data/demo/config/targets/SYSTEM/target.txt +12 -0
  117. data/demo/config/targets/TEMPLATED/cmd_tlm_server.txt +1 -1
  118. data/demo/config/targets/TEMPLATED/lib/templated_interface.rb +8 -5
  119. data/demo/config/targets/TEMPLATED/target.txt +2 -0
  120. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server.txt +15 -6
  121. data/demo/config/tools/cmd_tlm_server/cmd_tlm_server2.txt +13 -5
  122. data/demo/config/tools/data_viewer/data_viewer.txt +9 -0
  123. data/demo/config/tools/launcher/launcher.txt +9 -6
  124. data/demo/config/tools/launcher/launcher2.txt +16 -13
  125. data/demo/config/tools/launcher/launcher_mini.txt +45 -0
  126. data/demo/config/tools/table_manager/MCConfigurationTable_fsw1_def.txt +12 -11
  127. data/demo/config/tools/table_manager/MCConfigurationTable_fsw2_def.txt +12 -11
  128. data/demo/config/tools/test_runner/test_runner.txt +1 -1
  129. data/demo/config/tools/tlm_viewer/tlm_viewer.txt +5 -5
  130. data/demo/lib/example_background_task.rb +9 -5
  131. data/demo/lib/example_target.rb +5 -15
  132. data/demo/lib/scpi_target.rb +4 -10
  133. data/demo/procedures/cosmos_api_test.rb +17 -0
  134. data/demo/tools/CmdSequence +16 -0
  135. data/demo/tools/CmdSequence.bat +9 -0
  136. data/demo/tools/ConfigEditor +16 -0
  137. data/demo/tools/ConfigEditor.bat +9 -0
  138. data/demo/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  139. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  140. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  141. data/demo/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  142. data/demo/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  143. data/ext/cosmos/ext/packet/packet.c +5 -5
  144. data/install/config/data/crc.txt +12 -8
  145. data/install/config/system/system.txt +13 -3
  146. data/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +14 -0
  147. data/install/config/targets/SYSTEM/target.txt +12 -0
  148. data/install/tools/CmdSequence +16 -0
  149. data/install/tools/CmdSequence.bat +9 -0
  150. data/install/tools/ConfigEditor +16 -0
  151. data/install/tools/ConfigEditor.bat +9 -0
  152. data/install/tools/mac/CmdSequence.app/Contents/Info.plist +38 -0
  153. data/install/tools/mac/CmdSequence.app/Contents/MacOS/CmdSequence.rb +16 -0
  154. data/install/tools/mac/CmdSequence.app/Contents/MacOS/main.sh +10 -0
  155. data/install/tools/mac/CmdSequence.app/Contents/MacOS/tool_launch.rb +38 -0
  156. data/install/tools/mac/CmdSequence.app/Contents/Resources/appIcon.icns +0 -0
  157. data/lib/cosmos.rb +1 -1
  158. data/lib/cosmos/config/config_parser.rb +147 -59
  159. data/lib/cosmos/config/meta_config_parser.rb +57 -0
  160. data/lib/cosmos/conversions/polynomial_conversion.rb +20 -4
  161. data/lib/cosmos/conversions/unix_time_conversion.rb +4 -4
  162. data/lib/cosmos/core_ext/array.rb +45 -5
  163. data/lib/cosmos/core_ext/cosmos_io.rb +31 -15
  164. data/lib/cosmos/core_ext/file.rb +2 -2
  165. data/lib/cosmos/core_ext/kernel.rb +1 -6
  166. data/lib/cosmos/core_ext/objectspace.rb +0 -2
  167. data/lib/cosmos/core_ext/string.rb +27 -4
  168. data/lib/cosmos/core_ext/time.rb +39 -10
  169. data/lib/cosmos/gui/choosers/combobox_chooser.rb +37 -26
  170. data/lib/cosmos/gui/choosers/file_chooser.rb +23 -6
  171. data/lib/cosmos/gui/choosers/float_chooser.rb +13 -11
  172. data/lib/cosmos/gui/choosers/integer_chooser.rb +13 -11
  173. data/lib/cosmos/gui/choosers/string_chooser.rb +18 -36
  174. data/lib/cosmos/gui/choosers/telemetry_chooser.rb +64 -64
  175. data/lib/cosmos/gui/choosers/value_chooser.rb +15 -15
  176. data/lib/cosmos/gui/dialogs/about_dialog.rb +18 -13
  177. data/lib/cosmos/gui/dialogs/calendar_dialog.rb +11 -3
  178. data/lib/cosmos/gui/dialogs/cmd_tlm_raw_dialog.rb +1 -1
  179. data/lib/cosmos/gui/dialogs/details_dialog.rb +1 -1
  180. data/lib/cosmos/gui/dialogs/exception_dialog.rb +7 -7
  181. data/lib/cosmos/gui/dialogs/find_replace_dialog.rb +20 -15
  182. data/lib/cosmos/gui/dialogs/interface_raw_dialog.rb +143 -0
  183. data/lib/cosmos/gui/dialogs/legal_dialog.rb +6 -5
  184. data/lib/cosmos/gui/dialogs/packet_log_dialog.rb +5 -2
  185. data/lib/cosmos/gui/dialogs/progress_dialog.rb +1 -1
  186. data/lib/cosmos/gui/dialogs/pry_dialog.rb +4 -4
  187. data/lib/cosmos/gui/dialogs/scroll_text_dialog.rb +3 -0
  188. data/lib/cosmos/gui/dialogs/set_tlm_dialog.rb +7 -6
  189. data/lib/cosmos/gui/dialogs/splash.rb +1 -1
  190. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +1 -1
  191. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +114 -0
  192. data/lib/cosmos/gui/line_graph/line_graph.rb +9 -10
  193. data/lib/cosmos/gui/line_graph/line_graph_dialog.rb +7 -5
  194. data/lib/cosmos/gui/line_graph/line_graph_drawing.rb +3 -7
  195. data/lib/cosmos/gui/line_graph/line_graph_popups.rb +3 -8
  196. data/lib/cosmos/gui/line_graph/line_graph_scaling.rb +2 -7
  197. data/lib/cosmos/gui/line_graph/overview_graph.rb +6 -1
  198. data/lib/cosmos/gui/opengl/earth_model.rb +6 -3
  199. data/lib/cosmos/gui/opengl/gl_bounds.rb +11 -23
  200. data/lib/cosmos/gui/opengl/gl_light.rb +3 -4
  201. data/lib/cosmos/gui/opengl/gl_material.rb +3 -4
  202. data/lib/cosmos/gui/opengl/gl_scene.rb +10 -4
  203. data/lib/cosmos/gui/opengl/gl_shape.rb +6 -2
  204. data/lib/cosmos/gui/opengl/gl_viewer.rb +5 -5
  205. data/lib/cosmos/gui/opengl/gl_viewport.rb +11 -12
  206. data/lib/cosmos/gui/opengl/moon_model.rb +6 -3
  207. data/lib/cosmos/gui/opengl/stl_reader.rb +8 -9
  208. data/lib/cosmos/gui/opengl/stl_shape.rb +4 -5
  209. data/lib/cosmos/gui/opengl/texture_mapped_sphere.rb +7 -7
  210. data/lib/cosmos/gui/qt.rb +1 -1
  211. data/lib/cosmos/gui/qt_tool.rb +21 -10
  212. data/lib/cosmos/gui/text/completion.rb +23 -2
  213. data/lib/cosmos/gui/text/completion_text_edit.rb +38 -23
  214. data/lib/cosmos/gui/utilities/analyze_log.rb +1 -1
  215. data/lib/cosmos/gui/utilities/screenshot.rb +2 -2
  216. data/lib/cosmos/gui/widgets/full_text_search_line_edit.rb +11 -1
  217. data/lib/cosmos/gui/widgets/packet_log_frame.rb +19 -6
  218. data/lib/cosmos/interfaces.rb +10 -0
  219. data/lib/cosmos/interfaces/cmd_tlm_server_interface.rb +28 -47
  220. data/lib/cosmos/interfaces/interface.rb +240 -22
  221. data/lib/cosmos/interfaces/linc_interface.rb +3 -5
  222. data/lib/cosmos/interfaces/protocols/burst_protocol.rb +173 -0
  223. data/lib/cosmos/interfaces/protocols/crc_protocol.rb +141 -0
  224. data/lib/cosmos/{streams/fixed_stream_protocol.rb → interfaces/protocols/fixed_protocol.rb} +40 -37
  225. data/lib/cosmos/{streams/length_stream_protocol.rb → interfaces/protocols/length_protocol.rb} +55 -48
  226. data/lib/cosmos/interfaces/protocols/override_protocol.rb +52 -0
  227. data/lib/cosmos/interfaces/protocols/preidentified_protocol.rb +141 -0
  228. data/lib/cosmos/interfaces/protocols/protocol.rb +60 -0
  229. data/lib/cosmos/interfaces/protocols/template_protocol.rb +209 -0
  230. data/lib/cosmos/interfaces/protocols/terminated_protocol.rb +81 -0
  231. data/lib/cosmos/interfaces/serial_interface.rb +28 -23
  232. data/lib/cosmos/interfaces/simulated_target_interface.rb +27 -16
  233. data/lib/cosmos/interfaces/stream_interface.rb +36 -108
  234. data/lib/cosmos/interfaces/tcpip_client_interface.rb +21 -21
  235. data/lib/cosmos/interfaces/tcpip_server_interface.rb +555 -94
  236. data/lib/cosmos/interfaces/udp_interface.rb +51 -83
  237. data/lib/cosmos/io/buffered_file.rb +92 -2
  238. data/lib/cosmos/io/json_drb.rb +2 -2
  239. data/lib/cosmos/io/posix_serial_driver.rb +3 -1
  240. data/lib/cosmos/io/raw_logger.rb +3 -3
  241. data/lib/cosmos/io/serial_driver.rb +14 -5
  242. data/lib/cosmos/io/win32_serial_driver.rb +16 -4
  243. data/lib/cosmos/packet_logs.rb +0 -1
  244. data/lib/cosmos/packet_logs/packet_log_reader.rb +11 -1
  245. data/lib/cosmos/packet_logs/packet_log_writer.rb +31 -13
  246. data/lib/cosmos/packets/binary_accessor.rb +599 -32
  247. data/lib/cosmos/packets/commands.rb +48 -24
  248. data/lib/cosmos/packets/packet.rb +140 -54
  249. data/lib/cosmos/packets/packet_config.rb +0 -2
  250. data/lib/cosmos/packets/parsers/packet_item_parser.rb +10 -2
  251. data/lib/cosmos/packets/structure.rb +81 -33
  252. data/lib/cosmos/packets/structure_item.rb +45 -5
  253. data/lib/cosmos/packets/telemetry.rb +149 -55
  254. data/lib/cosmos/script/api_shared.rb +1000 -0
  255. data/lib/cosmos/script/commands.rb +2 -2
  256. data/lib/cosmos/script/extract.rb +19 -4
  257. data/lib/cosmos/script/limits.rb +2 -0
  258. data/lib/cosmos/script/script.rb +1 -1
  259. data/lib/cosmos/script/scripting.rb +4 -784
  260. data/lib/cosmos/script/telemetry.rb +44 -23
  261. data/lib/cosmos/script/tools.rb +15 -69
  262. data/lib/cosmos/streams/serial_stream.rb +12 -19
  263. data/lib/cosmos/streams/stream.rb +2 -11
  264. data/lib/cosmos/streams/tcpip_socket_stream.rb +3 -13
  265. data/lib/cosmos/system/system.rb +187 -31
  266. data/lib/cosmos/system/target.rb +11 -2
  267. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +12 -11
  268. data/lib/cosmos/tools/cmd_sender/{cmd_sender_item_delegate.rb → cmd_param_table_item_delegate.rb} +11 -10
  269. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +209 -164
  270. data/lib/cosmos/tools/cmd_sequence/cmd_sequence.rb +652 -0
  271. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +510 -0
  272. data/lib/cosmos/tools/cmd_sequence/sequence_list.rb +194 -0
  273. data/lib/cosmos/tools/cmd_tlm_server/api.rb +179 -5
  274. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +31 -14
  275. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +23 -16
  276. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +92 -20
  277. data/lib/cosmos/tools/cmd_tlm_server/commanding.rb +1 -1
  278. data/lib/cosmos/tools/cmd_tlm_server/gui/interfaces_tab.rb +17 -4
  279. data/lib/cosmos/tools/cmd_tlm_server/gui/targets_tab.rb +0 -5
  280. data/lib/cosmos/tools/cmd_tlm_server/interface_thread.rb +1 -2
  281. data/lib/cosmos/tools/cmd_tlm_server/interfaces.rb +4 -4
  282. data/lib/cosmos/tools/cmd_tlm_server/limits_groups_background_task.rb +121 -0
  283. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +8 -4
  284. data/lib/cosmos/tools/config_editor/config_editor.rb +720 -0
  285. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +675 -0
  286. data/lib/cosmos/tools/data_viewer/data_viewer.rb +44 -27
  287. data/lib/cosmos/tools/data_viewer/data_viewer_component.rb +8 -22
  288. data/lib/cosmos/tools/launcher/launcher.rb +29 -12
  289. data/lib/cosmos/tools/launcher/launcher_config.rb +1 -1
  290. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +153 -42
  291. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +44 -6
  292. data/lib/cosmos/tools/replay/replay.rb +36 -20
  293. data/lib/cosmos/tools/replay/replay_server.rb +1 -1
  294. data/lib/cosmos/tools/script_runner/script_runner_config.rb +1 -1
  295. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +31 -21
  296. data/lib/cosmos/tools/table_manager/table_config.rb +9 -3
  297. data/lib/cosmos/tools/table_manager/table_manager.rb +27 -7
  298. data/lib/cosmos/tools/test_runner/results_writer.rb +6 -6
  299. data/lib/cosmos/tools/test_runner/test_runner.rb +4 -6
  300. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +4 -5
  301. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_config.rb +1 -1
  302. data/lib/cosmos/tools/tlm_extractor/tlm_extractor_processor.rb +1 -1
  303. data/lib/cosmos/tools/tlm_grapher/data_object_adders/housekeeping_data_object_adder.rb +23 -6
  304. data/lib/cosmos/tools/tlm_grapher/data_object_editors/housekeeping_data_object_editor.rb +44 -3
  305. data/lib/cosmos/tools/tlm_grapher/data_objects/housekeeping_data_object.rb +20 -7
  306. data/lib/cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots.rb +1 -1
  307. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_config.rb +11 -4
  308. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_plot_editor.rb +2 -2
  309. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +1 -1
  310. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +16 -0
  311. data/lib/cosmos/tools/tlm_viewer/screen.rb +36 -32
  312. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +59 -50
  313. data/lib/cosmos/tools/tlm_viewer/tlm_viewer_config.rb +2 -2
  314. data/lib/cosmos/tools/tlm_viewer/widgets.rb +1 -0
  315. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +1 -0
  316. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +22 -4
  317. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +9 -0
  318. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +55 -0
  319. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +3 -2
  320. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +3 -2
  321. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +12 -12
  322. data/lib/cosmos/top_level.rb +34 -24
  323. data/lib/cosmos/utilities/crc.rb +108 -6
  324. data/lib/cosmos/utilities/csv.rb +68 -14
  325. data/lib/cosmos/utilities/logger.rb +2 -2
  326. data/lib/cosmos/utilities/low_fragmentation_array.rb +9 -1
  327. data/lib/cosmos/version.rb +6 -6
  328. data/lib/cosmos/win32/win32_main.rb +50 -46
  329. data/run_gui_tests.bat +3 -1
  330. data/spec/conversions/unix_time_formatted_conversion_spec.rb +2 -2
  331. data/spec/conversions/unix_time_seconds_conversion_spec.rb +2 -2
  332. data/spec/core_ext/file_spec.rb +1 -1
  333. data/spec/core_ext/objectspace_spec.rb +12 -9
  334. data/spec/core_ext/string_spec.rb +6 -0
  335. data/spec/core_ext/time_spec.rb +10 -0
  336. data/spec/gui/line_graph/line_clip_spec.rb +226 -224
  337. data/spec/gui/qt_spec.rb +81 -79
  338. data/spec/install/config/system/system.txt +0 -6
  339. data/spec/install/config/targets/INST/cmd_tlm/inst_cmd_linc.txt +5 -5
  340. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm_linc.txt +8 -8
  341. data/spec/install/config/targets/SYSTEM/cmd_tlm/meta_cmd_tlm.txt +16 -0
  342. data/{install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt → spec/install/config/targets/SYSTEM/cmd_tlm/system_cmds.txt} +8 -8
  343. data/spec/install/config/targets/SYSTEM/cmd_tlm/system_tlm.txt +7 -0
  344. data/spec/install/config/targets/{COSMOS → SYSTEM}/cmd_tlm_server.txt +2 -2
  345. data/spec/install/config/targets/SYSTEM/screens/status.txt +12 -0
  346. data/spec/install/config/targets/SYSTEM/target.txt +12 -0
  347. data/spec/interfaces/cmd_tlm_server_interface_spec.rb +9 -13
  348. data/spec/interfaces/interface_spec.rb +402 -18
  349. data/spec/interfaces/linc_interface_spec.rb +37 -39
  350. data/spec/interfaces/protocols/burst_protocol_spec.rb +300 -0
  351. data/spec/interfaces/protocols/crc_protocol_spec.rb +709 -0
  352. data/spec/interfaces/protocols/fixed_protocol_spec.rb +119 -0
  353. data/spec/interfaces/protocols/length_protocol_spec.rb +499 -0
  354. data/spec/interfaces/protocols/override_protocol_spec.rb +158 -0
  355. data/spec/interfaces/protocols/preidentified_protocol_spec.rb +149 -0
  356. data/spec/interfaces/protocols/template_protocol_spec.rb +218 -0
  357. data/spec/interfaces/protocols/terminated_protocol_spec.rb +174 -0
  358. data/spec/interfaces/serial_interface_spec.rb +35 -34
  359. data/spec/interfaces/simulated_target_interface_spec.rb +13 -13
  360. data/spec/interfaces/tcpip_client_interface_spec.rb +21 -16
  361. data/spec/interfaces/tcpip_server_interface_spec.rb +66 -69
  362. data/spec/interfaces/udp_interface_spec.rb +120 -55
  363. data/spec/io/serial_driver_spec.rb +41 -39
  364. data/spec/io/udp_sockets_spec.rb +13 -8
  365. data/spec/io/win32_serial_driver_spec.rb +62 -59
  366. data/spec/packet_logs/packet_log_reader_spec.rb +68 -47
  367. data/spec/packet_logs/packet_log_writer_spec.rb +7 -5
  368. data/spec/packets/commands_spec.rb +5 -5
  369. data/spec/packets/packet_spec.rb +2 -14
  370. data/spec/script/extract_spec.rb +21 -7
  371. data/spec/script/scripting_spec.rb +261 -6
  372. data/spec/script/telemetry_spec.rb +17 -9
  373. data/spec/spec_helper.rb +26 -10
  374. data/spec/streams/serial_stream_spec.rb +87 -82
  375. data/spec/streams/tcpip_client_stream_spec.rb +12 -4
  376. data/spec/streams/tcpip_socket_stream_spec.rb +5 -0
  377. data/spec/system/system_spec.rb +66 -50
  378. data/spec/system/target_spec.rb +33 -11
  379. data/spec/tools/cmd_tlm_server/api_spec.rb +5 -5
  380. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +75 -15
  381. data/spec/tools/cmd_tlm_server/cmd_tlm_server_config_spec.rb +125 -5
  382. data/spec/tools/cmd_tlm_server/cmd_tlm_server_spec.rb +244 -232
  383. data/spec/tools/cmd_tlm_server/commanding_spec.rb +18 -18
  384. data/spec/tools/cmd_tlm_server/interface_thread_spec.rb +124 -29
  385. data/spec/tools/cmd_tlm_server/interfaces_spec.rb +2 -2
  386. data/spec/tools/cmd_tlm_server/limits_groups_background_task_spec.rb +145 -0
  387. data/spec/tools/cmd_tlm_server/router_thread_spec.rb +50 -10
  388. data/spec/tools/table_manager/tablemanager_core_spec.rb +0 -1
  389. data/spec/top_level/top_level_spec.rb +39 -11
  390. data/spec/utilities/csv_spec.rb +62 -20
  391. data/tasks/gemfile_stats.rake +6 -3
  392. data/test/performance/config/system/system_packets.txt +0 -1
  393. data/test/performance/config/system/system_threads.txt +0 -1
  394. metadata +177 -92
  395. data/autohotkey/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  396. data/autohotkey/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
  397. data/autohotkey/config/targets/COSMOS/target.txt +0 -5
  398. data/autohotkey/userpath.txt +0 -1
  399. data/demo/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  400. data/demo/config/targets/COSMOS/screens/limits_change.txt +0 -20
  401. data/demo/config/targets/COSMOS/screens/version.txt +0 -19
  402. data/demo/config/targets/COSMOS/target.txt +0 -11
  403. data/demo/config/targets/META/cmd_tlm/meta_cmd.txt +0 -10
  404. data/demo/config/targets/META/cmd_tlm/meta_tlm.txt +0 -13
  405. data/demo/userpath.txt +0 -1
  406. data/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  407. data/install/config/targets/COSMOS/cmd_tlm_server.txt +0 -6
  408. data/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
  409. data/install/config/targets/COSMOS/screens/version.txt +0 -19
  410. data/install/config/targets/COSMOS/target.txt +0 -9
  411. data/install/config/targets/SYSTEM/README.txt +0 -1
  412. data/install/userpath.txt +0 -1
  413. data/lib/cosmos/io/tcpip_server.rb +0 -571
  414. data/lib/cosmos/packet_logs/meta_packet_log_writer.rb +0 -107
  415. data/lib/cosmos/streams/burst_stream_protocol.rb +0 -25
  416. data/lib/cosmos/streams/preidentified_stream_protocol.rb +0 -118
  417. data/lib/cosmos/streams/stream_protocol.rb +0 -373
  418. data/lib/cosmos/streams/template_stream_protocol.rb +0 -140
  419. data/lib/cosmos/streams/terminated_stream_protocol.rb +0 -85
  420. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_cmds.txt +0 -41
  421. data/spec/install/config/targets/COSMOS/cmd_tlm/cosmos_server_tlm.txt +0 -15
  422. data/spec/install/config/targets/COSMOS/screens/limits_change.txt +0 -20
  423. data/spec/install/config/targets/COSMOS/screens/version.txt +0 -19
  424. data/spec/install/config/targets/COSMOS/target.txt +0 -5
  425. data/spec/install/config/targets/META/cmd_tlm/meta_cmd.txt +0 -4
  426. data/spec/install/config/targets/META/cmd_tlm/meta_tlm.txt +0 -4
  427. data/spec/install/userpath.txt +0 -1
  428. data/spec/interfaces/stream_interface_spec.rb +0 -157
  429. data/spec/io/tcpip_server_spec.rb +0 -338
  430. data/spec/packet_logs/meta_packet_log_writer_spec.rb +0 -170
  431. data/spec/streams/burst_stream_protocol_spec.rb +0 -32
  432. data/spec/streams/fixed_stream_protocol_spec.rb +0 -113
  433. data/spec/streams/length_stream_protocol_spec.rb +0 -300
  434. data/spec/streams/preidentified_stream_protocol_spec.rb +0 -121
  435. data/spec/streams/stream_protocol_spec.rb +0 -346
  436. data/spec/streams/template_stream_protocol_spec.rb +0 -156
  437. data/spec/streams/terminated_stream_protocol_spec.rb +0 -127
  438. data/test/performance/userpath.txt +0 -1
@@ -9,9 +9,9 @@
9
9
  # attribution addendums as found in the LICENSE.txt
10
10
 
11
11
  module Cosmos
12
- # Help->About dialog which is part of all COSMOS tools. Displays the license,
13
- # software versions, environment variables, and general COSMOS information.
14
- # Also provides a backdoor to a PRY dialog to aid in debugging. See
12
+ # Help->About dialog which is part of all COSMOS tools. Displays information
13
+ # about licenses, software versions, and environment variables. This dialog
14
+ # also creates a {PryDialog} when the letters 'p', 'r', 'y' are typed. See
15
15
  # {PryDialog} for more details.
16
16
  class AboutDialog < Qt::Dialog
17
17
  # About text to display in the dialog
@@ -19,24 +19,26 @@ module Cosmos
19
19
  "COSMOS application sounds are courtesy of http://www.freesfx.co.uk.\n"\
20
20
  "\n"\
21
21
  "COSMOS utilizes the QtRuby (http://rubyforge.org/projects/korundum) "\
22
- "library under the GNU Lesser General Public License. "\
23
- "QtRuby is a Ruby extension module that provides an "\
24
- "interface to the Qt Gui Toolkit (http://qt-project.org) by Digia "\
25
- "under the GNU Lesser General Public License.\n\n"\
22
+ "library under the GNU Lesser General Public License. "\
23
+ "QtRuby is a Ruby extension module that provides an "\
24
+ "interface to the Qt Gui Toolkit (http://qt-project.org) by Digia "\
25
+ "under the GNU Lesser General Public License.\n"\
26
+ "\n"\
26
27
  "Ruby Version: ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} "\
27
- "patchlevel #{RUBY_PATCHLEVEL}) [#{RUBY_PLATFORM}]\n"\
28
+ "patchlevel #{RUBY_PATCHLEVEL}) [#{RUBY_PLATFORM}]\n"\
28
29
  "Rubygems Version: #{Gem::VERSION}\n"\
29
30
  "Qt Version: #{Qt::qVersion}\n"\
30
31
  "Cosmos::PATH: #{Cosmos::PATH}\n"\
31
- "Cosmos::USERPATH: #{Cosmos::USERPATH}\n\n"\
32
+ "Cosmos::USERPATH: #{Cosmos::USERPATH}\n"\
33
+ "\n"\
32
34
  "Environment Variables:\n"\
33
35
  "RUBYLIB: #{ENV['RUBYLIB']}\n"\
34
36
  "RUBYOPT: #{ENV['RUBYOPT']}\n"\
35
37
  "GEM_PATH: #{ENV['GEM_PATH']}\n"\
36
- "GEM_HOME: #{ENV['GEM_HOME']}\n\n"\
38
+ "GEM_HOME: #{ENV['GEM_HOME']}\n"\
39
+ "\n"\
37
40
  "Loaded Gems:\n"
38
41
  Gem.loaded_specs.values.map {|x| ABOUT_COSMOS << "#{x.name} #{x.version} #{x.platform}\n"}
39
-
40
42
  @@pry_dialogs = []
41
43
 
42
44
  # @param parent [Qt::Widget] Part of the dialog (the application)
@@ -91,9 +93,12 @@ module Cosmos
91
93
  if Kernel.is_windows?
92
94
  configurable_about_text << "\n" \
93
95
  "Main Application x:#{parent.x} y:#{parent.y} width:#{parent.frameGeometry.width + 16} " \
94
- "height:#{parent.frameGeometry.height + 38}\n\n" + ABOUT_COSMOS
96
+ "height:#{parent.frameGeometry.height + 38}\n\n" + ABOUT_COSMOS
95
97
  else
96
- configurable_about_text << "\n" + "Main Application x:#{parent.x} y:#{parent.y} width:#{parent.frameGeometry.width} height:#{parent.frameGeometry.height}\n\n" + ABOUT_COSMOS end
98
+ configurable_about_text << "\n" \
99
+ "Main Application x:#{parent.x} y:#{parent.y} width:#{parent.frameGeometry.width} " \
100
+ "height:#{parent.frameGeometry.height}\n\n" + ABOUT_COSMOS
101
+ end
97
102
 
98
103
  # Set the application about text
99
104
  about = Qt::Label.new(about_string + "\n\n" + configurable_about_text)
@@ -32,8 +32,12 @@ module Cosmos
32
32
  if initial_time
33
33
  @time = initial_time
34
34
  else
35
- time_now = Time.now
36
- @time = Time.local(time_now.year, time_now.mon, time_now.day)
35
+ time_now = Time.now.sys
36
+ if time_now.utc?
37
+ @time = Time.utc(time_now.year, time_now.mon, time_now.day)
38
+ else
39
+ @time = Time.local(time_now.year, time_now.mon, time_now.day)
40
+ end
37
41
  end
38
42
  @show_time = show_time
39
43
 
@@ -54,7 +58,11 @@ module Cosmos
54
58
 
55
59
  if @show_time
56
60
  @time_layout = Qt::HBoxLayout.new
57
- @time_label = Qt::Label.new('Time:')
61
+ if @time.utc?
62
+ @time_label = Qt::Label.new("Time (UTC):")
63
+ else
64
+ @time_label = Qt::Label.new("Time (UTC #{@time.strftime('%z')}):")
65
+ end
58
66
  @time_layout.addWidget(@time_label)
59
67
  @time_layout.addStretch
60
68
  @hour = Qt::LineEdit.new(sprintf("%02u", @time.hour))
@@ -38,7 +38,7 @@ module Cosmos
38
38
  # @param packet_name [String] Name of the packet
39
39
  def initialize(parent, type, target_name, packet_name)
40
40
  super(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
41
- raise "RawDialog: Undefined type:#{type}" if type != CMD_TYPE and type != TLM_TYPE
41
+ raise "RawDialog: Undefined type:#{type}" if (type != CMD_TYPE) && (type != TLM_TYPE)
42
42
 
43
43
  @type = type
44
44
  @done = false
@@ -127,7 +127,7 @@ module Cosmos
127
127
  limits_details = Qt::GroupBox.new(tr("Limits"))
128
128
  @limits_layout = Qt::FormLayout.new
129
129
  limits.each do |limits_set_name, limits_settings|
130
- if limits_settings[4] and limits_settings[5]
130
+ if limits_settings[4] && limits_settings[5]
131
131
  label = Qt::Label.new("RL/#{limits_settings[0]} YL/#{limits_settings[1]} YH/#{limits_settings[2]} RH/#{limits_settings[3]} GL/#{limits_settings[4]} GH/#{limits_settings[5]}")
132
132
  else
133
133
  label = Qt::Label.new("RL/#{limits_settings[0]} YL/#{limits_settings[1]} YH/#{limits_settings[2]} RH/#{limits_settings[3]}")
@@ -50,10 +50,10 @@ module Cosmos
50
50
  # by the ConfigParser
51
51
  when ConfigParser::Error
52
52
  # Substitute the html tags '<' and '>' and then replace newlines with html breaks
53
- usage = exception.usage.gsub("<","&#060;").gsub(">","&#062;").gsub("\n","<br/>")
54
- message = exception.message.gsub("<","&#060;").gsub(">","&#062;").gsub("\n","<br/>")
55
- line = exception.keyword + ' ' + exception.parameters.join(' ').gsub("<","&#060;").gsub(">","&#062;").gsub("\n","<br/>")
56
- text = "Error in #{exception.filename}<br/><br/>Line #{exception.line_number}: #{line}<br/><br/>#{message}<br/><br/>#{usage}"
53
+ usage = exception.usage.gsub("<", "&#060;").gsub(">", "&#062;").gsub("\n", "<br/>")
54
+ message = exception.message.gsub("<", "&#060;").gsub(">", "&#062;").gsub("\n", "<br/>")
55
+ line = exception.keyword + ' ' + exception.parameters.join(' ').gsub("<", "&#060;").gsub(">", "&#062;").gsub("\n", "<br/>")
56
+ text = "Error at #{exception.filename}:#{exception.line_number}<br/><br/>#{line}<br/><br/>Usage: #{usage}<br/><br/>#{message}"
57
57
  unless exception.url.nil?
58
58
  text << "<br/><br/>For more information see <a href='#{exception.url}'>#{exception.url}</a>."
59
59
  end
@@ -61,14 +61,14 @@ module Cosmos
61
61
  # occurs. Since it is a known issue we don't put up the full error
62
62
  # dialog.
63
63
  when FatalError
64
- text = "Error: #{exception.message.gsub("\n","<br/>")}"
64
+ text = "Error: #{exception.message.gsub("\n", "<br/>")}"
65
65
  else
66
66
  file_contents = ""
67
67
  # First read the log_file we wrote out to the logs directory
68
68
  # Change newlines to %0A for Outlook and remove all quotes to avoid breaking the link
69
69
  begin
70
- message = exception.message.gsub("\n","<br/>")
71
- file_contents = File.read(log_file).gsub("\n","%0A").gsub("'","").gsub("\"","") if log_file
70
+ message = exception.message.gsub("\n", "<br/>")
71
+ file_contents = File.read(log_file).gsub("\n", "%0A").gsub("'", "").gsub("\"", "") if log_file
72
72
  rescue
73
73
  end
74
74
  text = "The following error occurred:<br/>#{message}"
@@ -18,40 +18,44 @@ module Cosmos
18
18
  class FindReplaceDialog < Qt::Dialog
19
19
  include Singleton
20
20
 
21
- # Displays a Find dialog
22
- # @param parent [Qt::Widget] Dialog parent which must implement a
23
- # search_text method which returns a String to search on
21
+ # (see #show_find)
24
22
  def self.show_find(parent)
25
23
  self.instance.show_find(parent)
26
24
  end
25
+ # Displays a Find dialog
26
+ # @param parent [Qt::Widget] Dialog parent which must implement a
27
+ # search_text method which returns a String to search on
27
28
  def show_find(parent)
28
29
  @parent = parent
29
30
  disable_replace
30
31
  show_dialog
31
32
  end
32
33
 
33
- # Displays a Find/Replace dialog
34
- # @param parent [Qt::Widget] Dialog parent which must implement a
35
- # search_text method which returns a String to search on
34
+ # (see #show_replace)
36
35
  def self.show_replace(parent)
37
36
  self.instance.show_replace(parent)
38
37
  end
38
+ # Displays a Find/Replace dialog
39
+ # @param parent [Qt::Widget] Dialog parent which must implement a
40
+ # search_text method which returns a String to search on
39
41
  def show_replace(parent)
40
42
  @parent = parent
41
43
  enable_replace
42
44
  show_dialog
43
45
  end
44
46
 
45
- # @param parent [#search_text] Object which must implement a
46
- # search_text method which returns a String to search on
47
+ # (see #find_next)
47
48
  def self.find_next(parent)
48
49
  self.instance.find_next(parent)
49
50
  end
51
+ # Finds the next instance of the search term
52
+ # @param parent [#search_text] Object which must implement a
53
+ # search_text method which returns a String to search on
50
54
  def find_next(parent)
51
55
  flags = find_flags()
52
56
  flags &= ~Qt::TextDocument::FindBackward.to_i
53
57
  found = parent.search_text.find(find_text(), flags)
54
- if not found and wrap_around?
58
+ if !found && wrap_around?
55
59
  cursor = parent.search_text.textCursor
56
60
  cursor.movePosition(Qt::TextCursor::Start)
57
61
  parent.search_text.setTextCursor(cursor)
@@ -59,16 +63,18 @@ module Cosmos
59
63
  end
60
64
  end
61
65
 
62
- # @param parent [#search_text] Object which must implement a
63
- # search_text method which returns a String to search on
66
+ # (see #find_previous)
64
67
  def self.find_previous(parent)
65
68
  self.instance.find_previous(parent)
66
69
  end
70
+ # Finds the previous instance of the search term
71
+ # @param parent [#search_text] Object which must implement a
72
+ # search_text method which returns a String to search on
67
73
  def find_previous(parent)
68
74
  flags = find_flags()
69
75
  flags |= Qt::TextDocument::FindBackward.to_i
70
76
  found = parent.search_text.find(find_text(), flags)
71
- if not found and wrap_around?
77
+ if !found && wrap_around?
72
78
  cursor = parent.search_text.textCursor
73
79
  cursor.movePosition(Qt::TextCursor::End)
74
80
  parent.search_text.setTextCursor(cursor)
@@ -206,7 +212,7 @@ module Cosmos
206
212
  def handle_find_next
207
213
  text = @parent.search_text
208
214
  found = text.find(find_text, find_flags)
209
- if not found and wrap_around?
215
+ if !found && wrap_around?
210
216
  cursor = text.textCursor
211
217
  if find_up?
212
218
  cursor.movePosition(Qt::TextCursor::End)
@@ -225,7 +231,7 @@ module Cosmos
225
231
  found = true
226
232
  else
227
233
  found = text.find(find_text, find_flags)
228
- if not found and wrap_around?
234
+ if !found && wrap_around?
229
235
  cursor = text.textCursor
230
236
  if find_up?
231
237
  cursor.movePosition(Qt::TextCursor::End)
@@ -262,6 +268,5 @@ module Cosmos
262
268
  end
263
269
  cursor.endEditBlock
264
270
  end
265
-
266
271
  end # class FindReplaceDialog
267
272
  end # module Cosmos
@@ -0,0 +1,143 @@
1
+ # encoding: ascii-8bit
2
+
3
+ # Copyright 2017 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 showing the most recent raw data read and written by an interface
16
+ class InterfaceRawDialog < Qt::Dialog
17
+ slots 'data_update_timeout()'
18
+
19
+ # Dialog update period
20
+ DATA_UPDATE_PERIOD_MS = 1000
21
+ # Header string to display over the dump
22
+ HEADER = "Address Data Ascii\n"\
23
+ "---------------------------------------------------------------------------\n"
24
+
25
+ # @return [Qt::Font] Font to display the dialog dump (should be monospaced)
26
+ @@font = nil
27
+
28
+ # @param parent [Qt::Dialog] Parent for the dialog
29
+ # @param interface [Interface] Interface to get data from
30
+ def initialize(parent, interface)
31
+ super(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
32
+
33
+ @interface = interface
34
+ @done = false
35
+
36
+ begin
37
+ title = "Interface #{@interface.name} Raw Data"
38
+ setWindowTitle(title)
39
+
40
+ @timer = Qt::Timer.new
41
+
42
+ overall_layout = Qt::VBoxLayout.new
43
+ top_layout = Qt::HBoxLayout.new
44
+ text_layout = Qt::VBoxLayout.new
45
+
46
+ title_label = Qt::Label.new(tr(title))
47
+ text_layout.addWidget(title_label)
48
+ @read_raw_data_time = Qt::Label.new("Read Raw Data Time: ")
49
+ text_layout.addWidget(@read_raw_data_time)
50
+ top_layout.addLayout(text_layout)
51
+ top_layout.addStretch(1)
52
+
53
+ button = Qt::PushButton.new(tr("Pause"))
54
+ top_layout.addWidget(button)
55
+ button.connect(SIGNAL('clicked()')) do
56
+ if button.text == "Pause"
57
+ button.setText("Resume")
58
+ @timer.method_missing(:stop)
59
+ else
60
+ button.setText("Pause")
61
+ @timer.method_missing(:start, DATA_UPDATE_PERIOD_MS)
62
+ end
63
+ end
64
+ overall_layout.addLayout(top_layout)
65
+
66
+ @read_raw_data = Qt::PlainTextEdit.new
67
+ @read_raw_data.setReadOnly(true)
68
+ @read_raw_data.setWordWrapMode(Qt::TextOption::NoWrap)
69
+ overall_layout.addWidget(@read_raw_data)
70
+ if Kernel.is_windows?
71
+ @@font = Cosmos.getFont('Courier', 10) unless @@font
72
+ else
73
+ @@font = Cosmos.getFont('Courier', 14) unless @@font
74
+ end
75
+ @read_format = @read_raw_data.currentCharFormat()
76
+ @read_format.setFont(@@font)
77
+ @read_raw_data.setCurrentCharFormat(@read_format)
78
+
79
+ @written_raw_data_time = Qt::Label.new("Written Raw Data Time: ")
80
+ overall_layout.addWidget(@written_raw_data_time)
81
+
82
+ @written_raw_data = Qt::PlainTextEdit.new
83
+ @written_raw_data.setReadOnly(true)
84
+ @written_raw_data.setWordWrapMode(Qt::TextOption::NoWrap)
85
+ overall_layout.addWidget(@written_raw_data)
86
+ if Kernel.is_windows?
87
+ @@font = Cosmos.getFont('Courier', 10) unless @@font
88
+ else
89
+ @@font = Cosmos.getFont('Courier', 14) unless @@font
90
+ end
91
+ @written_format = @written_raw_data.currentCharFormat()
92
+ @written_format.setFont(@@font)
93
+ @written_raw_data.setCurrentCharFormat(@written_format)
94
+
95
+ connect(@timer, SIGNAL('timeout()'), self, SLOT('data_update_timeout()'))
96
+ @timer.method_missing(:start, DATA_UPDATE_PERIOD_MS)
97
+ data_update_timeout()
98
+
99
+ self.setLayout(overall_layout)
100
+ self.resize(700, 280)
101
+ self.show
102
+ self.raise
103
+ rescue DRb::DRbConnError
104
+ # Just do nothing
105
+ end
106
+ end
107
+
108
+ # Callback to get the latest data and update the dialog
109
+ def data_update_timeout
110
+ @read_raw_data_time.setText("Read Raw Data Time: #{@interface.read_raw_data_time.formatted}") if @interface.read_raw_data_time
111
+ position_x = @read_raw_data.horizontalScrollBar.value
112
+ position_y = @read_raw_data.verticalScrollBar.value
113
+ @read_raw_data.setPlainText(HEADER + @interface.read_raw_data.formatted)
114
+ @read_raw_data.horizontalScrollBar.setValue(position_x)
115
+ @read_raw_data.verticalScrollBar.setValue(position_y)
116
+
117
+ @written_raw_data_time.setText("Written Raw Data Time: #{@interface.written_raw_data_time.formatted}") if @interface.written_raw_data_time
118
+ position_x = @written_raw_data.horizontalScrollBar.value
119
+ position_y = @written_raw_data.verticalScrollBar.value
120
+ @written_raw_data.setPlainText(HEADER + @interface.written_raw_data.formatted)
121
+ @written_raw_data.horizontalScrollBar.setValue(position_x)
122
+ @written_raw_data.verticalScrollBar.setValue(position_y)
123
+ end
124
+
125
+ def reject
126
+ super()
127
+ stop_timer if @timer
128
+ self.dispose
129
+ end
130
+
131
+ def closeEvent(event)
132
+ super(event)
133
+ stop_timer if @timer
134
+ self.dispose
135
+ end
136
+
137
+ def stop_timer
138
+ @timer.stop
139
+ @timer.dispose
140
+ @timer = nil
141
+ end
142
+ end
143
+ end
@@ -97,22 +97,23 @@ module Cosmos
97
97
  # against what is listed in the file to detect any modifications. Also
98
98
  # opens all files listed in <Cosmos::USERPATH/config/data/crc.txt to verify
99
99
  # the user defined COSMOS configuration files.
100
+ #
100
101
  # @return [String] Either a success message or warning about all files
101
102
  # which did not match their expected CRCs.
102
103
  def check_all_crcs
103
104
  result_text = ''
104
105
  missing_text = ''
105
- core_file_count, core_error_count, _, _ = check_crcs(::Cosmos::PATH, File.join(::Cosmos::PATH,'data','crc.txt'), result_text, missing_text, 'CORE')
106
+ core_file_count, core_error_count, _, _ = check_crcs(::Cosmos::PATH, File.join(::Cosmos::PATH, 'data', 'crc.txt'), result_text, missing_text, 'CORE')
106
107
  project_file_count = 0
107
108
  project_error_count = 0
108
109
  official = true
109
- if File.exist?(File.join(::Cosmos::USERPATH,'config','data','crc.txt'))
110
- project_file_count, project_error_count, _, official = check_crcs(::Cosmos::USERPATH, File.join(::Cosmos::USERPATH,'config','data','crc.txt'), result_text, missing_text, 'PROJECT')
110
+ if File.exist?(File.join(::Cosmos::USERPATH, 'config', 'data', 'crc.txt'))
111
+ project_file_count, project_error_count, _, official = check_crcs(::Cosmos::USERPATH, File.join(::Cosmos::USERPATH, 'config', 'data', 'crc.txt'), result_text, missing_text, 'PROJECT')
111
112
  end
112
113
 
113
114
  final_text = ''
114
- if core_error_count == 0 and project_error_count == 0
115
- if missing_text.empty? and official
115
+ if (core_error_count == 0) && (project_error_count == 0)
116
+ if missing_text.empty? && official
116
117
  @text_crc.setTextColor(Cosmos::GREEN)
117
118
  else
118
119
  @text_crc.setTextColor(Cosmos::YELLOW)
@@ -34,6 +34,7 @@ module Cosmos
34
34
  # @param show_log_reader (see PacketLogFrame#initialize)
35
35
  # @param input_filename_filter (see PacketLogFrame#initialize)
36
36
  # @param output_filename_filter (see PacketLogFrame#initialize)
37
+ # @param multiple_file_select (see PacketLogFrame#initialize)
37
38
  def initialize(parent,
38
39
  title,
39
40
  log_directory,
@@ -44,7 +45,8 @@ module Cosmos
44
45
  show_time = true,
45
46
  show_log_reader = true,
46
47
  input_filename_filter = Cosmos::BIN_FILE_PATTERN,
47
- output_filename_filter = Cosmos::BIN_FILE_PATTERN)
48
+ output_filename_filter = Cosmos::BIN_FILE_PATTERN,
49
+ multiple_file_select = true)
48
50
  super(parent)
49
51
  setWindowTitle(title)
50
52
 
@@ -58,7 +60,8 @@ module Cosmos
58
60
  show_time,
59
61
  show_log_reader,
60
62
  input_filename_filter,
61
- output_filename_filter)
63
+ output_filename_filter,
64
+ multiple_file_select)
62
65
  @packet_log_frame.change_callback = method(:change_callback)
63
66
  @layout.addWidget(@packet_log_frame)
64
67
 
@@ -123,7 +123,7 @@ module Cosmos
123
123
  @top_layout.addLayout(@overall) if show_overall
124
124
  @top_layout.addLayout(@step) if show_step
125
125
  @top_layout.addWidget(@progress_text) if show_text
126
- @top_layout.addLayout(@button_layout) if show_done or show_cancel
126
+ @top_layout.addLayout(@button_layout) if show_done || show_cancel
127
127
 
128
128
  setLayout(@top_layout)
129
129