cosmos 4.3.0 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (288) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +30 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
  4. data/.github/ISSUE_TEMPLATE/help---usage---general-question.md +12 -0
  5. data/.gitignore +1 -0
  6. data/.travis.yml +5 -5
  7. data/Manifest.txt +81 -44
  8. data/Rakefile +9 -0
  9. data/appveyor.yml +2 -1
  10. data/autohotkey/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
  11. data/autohotkey/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
  12. data/autohotkey/config/targets/INST/lib/sim_inst.rb +3 -1
  13. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  14. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  15. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  16. data/autohotkey/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  17. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  18. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  19. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  20. data/autohotkey/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  21. data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  22. data/autohotkey/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  23. data/autohotkey/config/tools/table_manager/ConfigTables_def.txt +2 -4
  24. data/autohotkey/config/tools/table_manager/SubTables/OneDimensionalSubTable_def.txt +31 -0
  25. data/autohotkey/config/tools/table_manager/SubTables/TwoDimensionalSubTable_def.txt +28 -0
  26. data/autohotkey/config/tools/test_runner/test_runner.txt +1 -1
  27. data/autohotkey/config/tools/test_runner/test_runner2.txt +1 -1
  28. data/autohotkey/config/tools/test_runner/test_runner3.txt +1 -1
  29. data/autohotkey/config/tools/test_runner/test_runner4.txt +1 -1
  30. data/autohotkey/tools/limits_monitor.ahk +1 -1
  31. data/autohotkey/tools/packet_viewer.ahk +1 -1
  32. data/autohotkey/tools/script_runner.ahk +16 -4
  33. data/bin/cosmos +1 -1
  34. data/bin/xtce_converter +1 -1
  35. data/cosmos.gemspec +5 -7
  36. data/data/config/_interfaces.yaml +4 -0
  37. data/data/config/cmd_sequence.yaml +14 -0
  38. data/data/config/housekeeping_params.yaml +14 -0
  39. data/data/config/interface_modifiers.yaml +11 -0
  40. data/data/config/item_modifiers.yaml +2 -1
  41. data/data/config/launcher.yaml +12 -2
  42. data/data/config/param_item_modifiers.yaml +2 -2
  43. data/data/config/parameter_modifiers.yaml +20 -0
  44. data/data/config/screen.yaml +2 -0
  45. data/data/config/script_runner.yaml +9 -0
  46. data/data/config/system.yaml +47 -10
  47. data/data/config/table_manager.yaml +7 -0
  48. data/data/config/target.yaml +12 -0
  49. data/data/config/telemetry_modifiers.yaml +3 -1
  50. data/data/config/test_runner.yaml +10 -9
  51. data/data/config/widgets.yaml +174 -11
  52. data/data/crc.txt +128 -125
  53. data/demo/Gemfile +1 -1
  54. data/demo/Launcher.bat +1 -9
  55. data/demo/Launcher2.bat +1 -0
  56. data/demo/LauncherMini.bat +1 -0
  57. data/demo/config/data/crc.txt +40 -20
  58. data/demo/config/system/system.txt +1 -1
  59. data/demo/config/system/system_alt_ports.txt +1 -1
  60. data/demo/config/targets/EXAMPLE/cmd_tlm_server.txt +1 -0
  61. data/demo/config/targets/INST/cmd_tlm/inst_cmds.txt +2 -1
  62. data/demo/config/targets/INST/cmd_tlm/inst_tlm.txt +7 -7
  63. data/demo/config/targets/INST/cmd_tlm_server.txt +2 -0
  64. data/demo/config/targets/INST/lib/sim_inst.rb +15 -3
  65. data/demo/config/targets/INST/screens/adcs.txt +2 -2
  66. data/demo/config/targets/INST/screens/block.txt +1 -1
  67. data/demo/config/targets/INST/screens/commanding.txt +1 -1
  68. data/demo/config/targets/INST/screens/ground.txt +27 -5
  69. data/demo/config/targets/INST/screens/ground_error.gif +0 -0
  70. data/demo/config/{data/groundoff.gif → targets/INST/screens/ground_off.gif} +0 -0
  71. data/demo/config/{data/groundon.gif → targets/INST/screens/ground_on.gif} +0 -0
  72. data/demo/config/targets/INST/screens/limits.txt +69 -31
  73. data/demo/config/targets/INST/screens/other.txt +13 -3
  74. data/demo/config/targets/INST/screens/params.txt +54 -0
  75. data/demo/config/targets/INST/screens/satellite.gif +0 -0
  76. data/demo/config/tools/data_viewer/data_viewer.txt +3 -0
  77. data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  78. data/demo/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  79. data/demo/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  80. data/demo/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  81. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  82. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  83. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  84. data/demo/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  85. data/demo/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  86. data/demo/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  87. data/demo/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  88. data/demo/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  89. data/demo/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  90. data/demo/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  91. data/demo/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  92. data/demo/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  93. data/demo/config/tools/script_runner/script_runner.txt +1 -2
  94. data/demo/config/tools/test_runner/test_runner.txt +3 -1
  95. data/demo/lib/example_background_task.rb +1 -0
  96. data/demo/procedures/cosmos_api_test.rb +1 -1
  97. data/demo/procedures/interactive.rb +22 -0
  98. data/ext/cosmos/ext/packet/packet.c +0 -77
  99. data/install/Gemfile +1 -1
  100. data/install/Launcher.bat +1 -9
  101. data/install/config/data/crc.txt +17 -1
  102. data/install/config/system/system.txt +1 -1
  103. data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  104. data/install/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  105. data/install/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  106. data/install/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  107. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  108. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  109. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  110. data/install/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  111. data/install/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  112. data/install/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  113. data/install/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  114. data/install/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  115. data/install/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  116. data/install/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  117. data/install/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  118. data/install/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  119. data/lib/cosmos/config/config_parser.rb +4 -5
  120. data/lib/cosmos/dart/lib/dart_common.rb +1 -1
  121. data/lib/cosmos/gui/dialogs/details_dialog.rb +16 -1
  122. data/lib/cosmos/gui/dialogs/tlm_details_dialog.rb +1 -0
  123. data/lib/cosmos/gui/dialogs/tlm_graph_dialog.rb +4 -2
  124. data/lib/cosmos/gui/opengl/earth_model.rb +1 -1
  125. data/lib/cosmos/gui/qt.rb +3 -1
  126. data/lib/cosmos/gui/qt_tool.rb +46 -23
  127. data/lib/cosmos/gui/text/ruby_editor.rb +44 -41
  128. data/lib/cosmos/gui/utilities/screenshot.rb +1 -1
  129. data/lib/cosmos/gui/utilities/script_module_gui.rb +92 -92
  130. data/lib/cosmos/interfaces.rb +1 -0
  131. data/lib/cosmos/interfaces/interface.rb +5 -1
  132. data/lib/cosmos/interfaces/protocols/fixed_protocol.rb +40 -18
  133. data/lib/cosmos/interfaces/protocols/template_protocol.rb +6 -1
  134. data/lib/cosmos/interfaces/simulated_target_interface.rb +14 -5
  135. data/lib/cosmos/io/json_drb.rb +11 -7
  136. data/lib/cosmos/packets/commands.rb +28 -11
  137. data/lib/cosmos/packets/packet.rb +69 -32
  138. data/lib/cosmos/packets/packet_config.rb +34 -1
  139. data/lib/cosmos/packets/parsers/state_parser.rb +0 -1
  140. data/lib/cosmos/packets/parsers/xtce_converter.rb +2 -0
  141. data/lib/cosmos/packets/parsers/xtce_parser.rb +4 -3
  142. data/lib/cosmos/packets/structure.rb +4 -2
  143. data/lib/cosmos/packets/telemetry.rb +19 -3
  144. data/lib/cosmos/script/api_shared.rb +12 -9
  145. data/lib/cosmos/script/scripting.rb +16 -14
  146. data/lib/cosmos/system/system.rb +39 -20
  147. data/lib/cosmos/system/target.rb +39 -9
  148. data/lib/cosmos/tools/cmd_extractor/cmd_extractor.rb +94 -35
  149. data/lib/cosmos/tools/cmd_sender/cmd_sender.rb +3 -0
  150. data/lib/cosmos/tools/cmd_sequence/sequence_item.rb +1 -1
  151. data/lib/cosmos/tools/cmd_tlm_server/background_tasks.rb +2 -0
  152. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server.rb +30 -4
  153. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_config.rb +1 -0
  154. data/lib/cosmos/tools/cmd_tlm_server/cmd_tlm_server_gui.rb +9 -12
  155. data/lib/cosmos/tools/cmd_tlm_server/gui/packets_tab.rb +5 -2
  156. data/lib/cosmos/tools/cmd_tlm_server/routers.rb +2 -0
  157. data/lib/cosmos/tools/config_editor/config_editor.rb +80 -24
  158. data/lib/cosmos/tools/config_editor/config_editor_frame.rb +2 -0
  159. data/lib/cosmos/tools/data_viewer/data_viewer.rb +15 -9
  160. data/lib/cosmos/tools/data_viewer/dump_component.rb +2 -9
  161. data/lib/cosmos/tools/data_viewer/text_component.rb +77 -0
  162. data/lib/cosmos/tools/handbook_creator/handbook_creator.rb +64 -38
  163. data/lib/cosmos/tools/launcher/launcher.rb +1 -0
  164. data/lib/cosmos/tools/limits_monitor/limits_monitor.rb +31 -17
  165. data/lib/cosmos/tools/packet_viewer/packet_viewer.rb +8 -6
  166. data/lib/cosmos/tools/script_runner/script_runner.rb +87 -29
  167. data/lib/cosmos/tools/script_runner/script_runner_config.rb +14 -0
  168. data/lib/cosmos/tools/script_runner/script_runner_frame.rb +41 -7
  169. data/lib/cosmos/tools/table_manager/table_config.rb +5 -3
  170. data/lib/cosmos/tools/table_manager/table_manager.rb +6 -3
  171. data/lib/cosmos/tools/test_runner/test_runner.rb +14 -9
  172. data/lib/cosmos/tools/test_runner/test_runner_chooser.rb +21 -9
  173. data/lib/cosmos/tools/tlm_extractor/tlm_extractor.rb +3 -3
  174. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_realtime_thread.rb +5 -8
  175. data/lib/cosmos/tools/tlm_grapher/tabbed_plots_tool/tabbed_plots_tool.rb +11 -8
  176. data/lib/cosmos/tools/tlm_grapher/tlm_grapher.rb +9 -15
  177. data/lib/cosmos/tools/tlm_viewer/screen.rb +3 -1
  178. data/lib/cosmos/tools/tlm_viewer/tlm_viewer.rb +19 -13
  179. data/lib/cosmos/tools/tlm_viewer/widgets.rb +2 -0
  180. data/lib/cosmos/tools/tlm_viewer/widgets/aging_widget.rb +4 -5
  181. data/lib/cosmos/tools/tlm_viewer/widgets/array_widget.rb +3 -4
  182. data/lib/cosmos/tools/tlm_viewer/widgets/block_widget.rb +4 -5
  183. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_clickable.rb +16 -2
  184. data/lib/cosmos/tools/tlm_viewer/widgets/canvas_widget.rb +17 -3
  185. data/lib/cosmos/tools/tlm_viewer/widgets/canvasdot_widget.rb +1 -2
  186. data/lib/cosmos/tools/tlm_viewer/widgets/canvasellipse_widget.rb +1 -1
  187. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimage_widget.rb +12 -7
  188. data/lib/cosmos/tools/tlm_viewer/widgets/canvasimagevalue_widget.rb +79 -29
  189. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabel_widget.rb +1 -0
  190. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslabelvalue_widget.rb +2 -1
  191. data/lib/cosmos/tools/tlm_viewer/widgets/canvasline_widget.rb +2 -0
  192. data/lib/cosmos/tools/tlm_viewer/widgets/canvaslinevalue_widget.rb +4 -0
  193. data/lib/cosmos/tools/tlm_viewer/widgets/canvasvalue_widget.rb +33 -25
  194. data/lib/cosmos/tools/tlm_viewer/widgets/checkbutton_widget.rb +5 -3
  195. data/lib/cosmos/tools/tlm_viewer/widgets/combobox_widget.rb +5 -3
  196. data/lib/cosmos/tools/tlm_viewer/widgets/formatfontvalue_widget.rb +1 -1
  197. data/lib/cosmos/tools/tlm_viewer/widgets/formatvalue_widget.rb +4 -7
  198. data/lib/cosmos/tools/tlm_viewer/widgets/horizontal_widget.rb +5 -5
  199. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalbox_widget.rb +6 -7
  200. data/lib/cosmos/tools/tlm_viewer/widgets/horizontalline_widget.rb +2 -4
  201. data/lib/cosmos/tools/tlm_viewer/widgets/label_widget.rb +10 -8
  202. data/lib/cosmos/tools/tlm_viewer/widgets/labelformatvalue_widget.rb +2 -3
  203. data/lib/cosmos/tools/tlm_viewer/widgets/labelled_widget.rb +58 -0
  204. data/lib/cosmos/tools/tlm_viewer/widgets/labelprogressbar_widget.rb +3 -4
  205. data/lib/cosmos/tools/tlm_viewer/widgets/labeltrendlimitsbar_widget.rb +2 -4
  206. data/lib/cosmos/tools/tlm_viewer/widgets/labelvalue_widget.rb +2 -1
  207. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluedesc_widget.rb +3 -5
  208. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitsbar_widget.rb +2 -3
  209. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluelimitscolumn_widget.rb +2 -3
  210. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangebar_widget.rb +2 -3
  211. data/lib/cosmos/tools/tlm_viewer/widgets/labelvaluerangecolumn_widget.rb +2 -3
  212. data/lib/cosmos/tools/tlm_viewer/widgets/layout_widget.rb +3 -5
  213. data/lib/cosmos/tools/tlm_viewer/widgets/led_widget.rb +108 -0
  214. data/lib/cosmos/tools/tlm_viewer/widgets/limits_widget.rb +60 -10
  215. data/lib/cosmos/tools/tlm_viewer/widgets/limitsbar_widget.rb +22 -8
  216. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolor_widget.rb +19 -13
  217. data/lib/cosmos/tools/tlm_viewer/widgets/limitscolumn_widget.rb +22 -8
  218. data/lib/cosmos/tools/tlm_viewer/widgets/linegraph_widget.rb +2 -3
  219. data/lib/cosmos/tools/tlm_viewer/widgets/matrixbycolumns_widget.rb +4 -3
  220. data/lib/cosmos/tools/tlm_viewer/widgets/multi_widget.rb +1 -3
  221. data/lib/cosmos/tools/tlm_viewer/widgets/progressbar_widget.rb +10 -5
  222. data/lib/cosmos/tools/tlm_viewer/widgets/radiobutton_widget.rb +7 -4
  223. data/lib/cosmos/tools/tlm_viewer/widgets/rangebar_widget.rb +4 -6
  224. data/lib/cosmos/tools/tlm_viewer/widgets/rangecolumn_widget.rb +3 -5
  225. data/lib/cosmos/tools/tlm_viewer/widgets/screenshotbutton_widget.rb +4 -3
  226. data/lib/cosmos/tools/tlm_viewer/widgets/scrollwindow_widget.rb +2 -3
  227. data/lib/cosmos/tools/tlm_viewer/widgets/sectionheader_widget.rb +2 -3
  228. data/lib/cosmos/tools/tlm_viewer/widgets/spacer_widget.rb +4 -6
  229. data/lib/cosmos/tools/tlm_viewer/widgets/tabbook_widget.rb +2 -3
  230. data/lib/cosmos/tools/tlm_viewer/widgets/tabitem_widget.rb +2 -3
  231. data/lib/cosmos/tools/tlm_viewer/widgets/textbox_widget.rb +13 -4
  232. data/lib/cosmos/tools/tlm_viewer/widgets/textfield_widget.rb +3 -4
  233. data/lib/cosmos/tools/tlm_viewer/widgets/timegraph_widget.rb +2 -7
  234. data/lib/cosmos/tools/tlm_viewer/widgets/title_widget.rb +6 -12
  235. data/lib/cosmos/tools/tlm_viewer/widgets/trendbar_widget.rb +5 -10
  236. data/lib/cosmos/tools/tlm_viewer/widgets/trendlimitsbar_widget.rb +5 -3
  237. data/lib/cosmos/tools/tlm_viewer/widgets/value_widget.rb +4 -4
  238. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitsbar_widget.rb +2 -3
  239. data/lib/cosmos/tools/tlm_viewer/widgets/valuelimitscolumn_widget.rb +2 -3
  240. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangebar_widget.rb +3 -4
  241. data/lib/cosmos/tools/tlm_viewer/widgets/valuerangecolumn_widget.rb +2 -3
  242. data/lib/cosmos/tools/tlm_viewer/widgets/vertical_widget.rb +8 -7
  243. data/lib/cosmos/tools/tlm_viewer/widgets/verticalbox_widget.rb +9 -7
  244. data/lib/cosmos/tools/tlm_viewer/widgets/widget.rb +54 -46
  245. data/lib/cosmos/top_level.rb +23 -12
  246. data/lib/cosmos/version.rb +4 -4
  247. data/spec/gui/utilities/script_module_gui_spec.rb +44 -63
  248. data/spec/install/config/targets/INST/cmd_tlm/inst_cmds.txt +1 -1
  249. data/spec/install/config/targets/INST/cmd_tlm/inst_tlm.txt +5 -5
  250. data/spec/install/yaml_docs_spec.rb +112 -0
  251. data/spec/interfaces/protocols/fixed_protocol_spec.rb +20 -9
  252. data/spec/interfaces/protocols/template_protocol_spec.rb +78 -25
  253. data/spec/packets/commands_spec.rb +22 -0
  254. data/spec/packets/packet_config_spec.rb +24 -0
  255. data/spec/packets/packet_item_spec.rb +2 -2
  256. data/spec/packets/packet_spec.rb +39 -6
  257. data/spec/packets/parsers/state_parser_spec.rb +33 -11
  258. data/spec/packets/structure_spec.rb +41 -0
  259. data/spec/packets/telemetry_spec.rb +23 -0
  260. data/spec/streams/tcpip_socket_stream_spec.rb +32 -27
  261. data/spec/system/system_spec.rb +77 -2
  262. data/spec/system/target_spec.rb +62 -1
  263. data/spec/tools/cmd_tlm_server/api_spec.rb +1 -1
  264. data/spec/tools/cmd_tlm_server/background_tasks_spec.rb +15 -7
  265. data/spec/top_level/top_level_spec.rb +29 -5
  266. data/tasks/gemfile_stats.rake +28 -14
  267. data/test/performance/config/system/system.txt +0 -0
  268. data/test/performance/config/targets/PACKET/cmd_tlm/packet_tlm.txt +5 -5
  269. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.css +397 -0
  270. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap-theme.min.css +7 -0
  271. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.css +7118 -0
  272. data/test/performance/config/tools/handbook_creator/assets/css/bootstrap.min.css +7 -0
  273. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  274. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.svg +229 -0
  275. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  276. data/test/performance/config/tools/handbook_creator/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  277. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.bmp +0 -0
  278. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.gif +0 -0
  279. data/test/performance/config/tools/handbook_creator/assets/img/ball_logo.jpg +0 -0
  280. data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.js +2006 -0
  281. data/test/performance/config/tools/handbook_creator/assets/js/bootstrap.min.js +7 -0
  282. data/test/performance/config/tools/handbook_creator/assets/js/html5shiv.js +8 -0
  283. data/test/performance/config/tools/handbook_creator/assets/js/jquery-1.10.2.min.js +6 -0
  284. data/test/performance/config/tools/handbook_creator/assets/js/respond.min.js +6 -0
  285. data/test/performance/config/tools/test_runner/test_runner.txt +1 -1
  286. data/test/performance/procedures/cosmos_api_test.rb +1 -1
  287. data/test/performance/tools/identify_performance.rb +82 -0
  288. metadata +92 -55
@@ -85,9 +85,9 @@ module Cosmos
85
85
  when 'TABLEFILE'
86
86
  usage = "#{keyword} <File name>"
87
87
  parser.verify_num_parameters(1, 1, usage)
88
- filename = File.join(File.dirname(filename), params[0])
89
- raise parser.error("Table file #{filename} not found", usage) unless File.exist?(filename)
90
- process_file(filename)
88
+ table_filename = File.join(File.dirname(filename), params[0])
89
+ raise parser.error("Table file #{table_filename} not found", usage) unless File.exist?(table_filename)
90
+ process_file(table_filename)
91
91
 
92
92
  when 'TABLE'
93
93
  finish_packet()
@@ -172,6 +172,8 @@ module Cosmos
172
172
  # duplicated until the specified number of rows are created.
173
173
  def finish_packet
174
174
  if @current_packet
175
+ warnings = @current_packet.check_bit_offsets
176
+ raise "Overlapping items not allowed in tables.\n#{warnings}" if warnings.length > 0
175
177
  if @current_packet.type == :TWO_DIMENSIONAL
176
178
  items = @current_packet.sorted_items.clone
177
179
  (@current_packet.num_rows - 1).times do |row|
@@ -192,7 +192,7 @@ module Cosmos
192
192
  option_parser.on("-c", "--create FILE", "Use the specified definition file to create the table") do |arg|
193
193
  options.create = arg
194
194
  end
195
- option_parser.on("-o", "--output DIRECTORY", "Create files in the specified directory") do |arg|
195
+ option_parser.on("-o", "--output DIRECTORY", "Create files in the specified directory (required with --create)") do |arg|
196
196
  options.output_dir = File.expand_path(arg)
197
197
  end
198
198
  option_parser.on("--convert FILE", "Convert the specified configuration file to the new format") do |arg|
@@ -211,12 +211,15 @@ module Cosmos
211
211
  # command line
212
212
  # @return [Boolean] Whether to contine running the application
213
213
  def self.post_options_parsed_hook(options)
214
- if options.create
214
+ if options.create and options.output_dir
215
+ normalize_config_options(options)
215
216
  core = TableManagerCore.new
216
- core.file_new(options.create, options.output_dir)
217
+ create_path = self.config_path(options, options.create, ".txt", "table_manager")
218
+ core.file_new(create_path, options.output_dir)
217
219
  return false
218
220
  end
219
221
  if options.convert
222
+ normalize_config_options(options)
220
223
  if options.convert.include?("/")
221
224
  parts = options.convert.split("/")
222
225
  else
@@ -995,8 +995,9 @@ module Cosmos
995
995
  parser = ConfigParser.new("http://cosmosrb.com/docs/tools/#test-runner-configuration")
996
996
  parser.parse_file(filename) do |keyword, params|
997
997
  case keyword
998
- when 'REQUIRE_UTILITY'
999
- parser.verify_num_parameters(1, 1, "REQUIRE_UTILITY <filename>")
998
+ # REQUIRE_UTILITY was deprecated > 4.3.0 but left for compatibility purposes
999
+ when 'LOAD_UTILITY', 'REQUIRE_UTILITY'
1000
+ parser.verify_num_parameters(1, 1, "LOAD_UTILITY <filename>")
1000
1001
  begin
1001
1002
  require_utility params[0]
1002
1003
  @utilities << params[0]
@@ -1096,6 +1097,14 @@ module Cosmos
1096
1097
  parser.verify_num_parameters(0, 0, "#{keyword}")
1097
1098
  @@results_writer.metadata = true
1098
1099
 
1100
+ when 'DISABLE_TEST_SUITE_START'
1101
+ parser.verify_num_parameters(0, 0, "#{keyword}")
1102
+ Qt.execute_in_main_thread { @test_runner_chooser.test_suite_start_disabled = true }
1103
+
1104
+ when 'DISABLE_TEST_GROUP_START'
1105
+ parser.verify_num_parameters(0, 0, "#{keyword}")
1106
+ Qt.execute_in_main_thread { @test_runner_chooser.test_group_start_disabled = true }
1107
+
1099
1108
  else
1100
1109
  raise "Unhandled keyword: #{keyword}" if keyword
1101
1110
  end
@@ -1261,12 +1270,9 @@ module Cosmos
1261
1270
  options.height = 700
1262
1271
  options.title = "Test Runner"
1263
1272
  options.auto_size = false
1264
- options.config_file = File.join(Cosmos::USERPATH, 'config', 'tools', 'test_runner', 'test_runner.txt')
1265
1273
  options.server_config_file = CmdTlmServer::DEFAULT_CONFIG_FILE
1274
+ options.config_file = true # config_file is required
1266
1275
  option_parser.separator "Test Runner Specific Options:"
1267
- option_parser.on("-c", "--config FILE", "Use the specified configuration file") do |arg|
1268
- options.config_file = File.join(Cosmos::USERPATH, 'config', 'tools', 'test_runner', arg)
1269
- end
1270
1276
  option_parser.on("-s", "--server FILE", "Use the specified server configuration file for disconnect mode") do |arg|
1271
1277
  options.server_config_file = arg
1272
1278
  end
@@ -1292,6 +1298,5 @@ module Cosmos
1292
1298
  super(option_parser, options)
1293
1299
  end
1294
1300
  end
1295
- end # class TestRunner
1296
-
1297
- end # module Cosmos
1301
+ end
1302
+ end
@@ -54,6 +54,9 @@ module Cosmos
54
54
  # Callback called when the test teardown button is pressed - call(test_suite, test)
55
55
  attr_accessor :test_teardown_callback
56
56
 
57
+ # Whether the suite and group start button is disabled
58
+ attr_reader :test_suite_start_disabled, :test_group_start_disabled
59
+
57
60
  # Constructor
58
61
  def initialize(parent)
59
62
  super(parent)
@@ -65,6 +68,9 @@ module Cosmos
65
68
  setup_button_width = 60
66
69
  teardown_button_width = 60
67
70
 
71
+ @test_suite_start_disabled = false
72
+ @test_group_start_disabled = false
73
+
68
74
  # Test Suite Selection
69
75
  @test_suite_combobox = Qt::ComboBox.new
70
76
  @test_suite_combobox.setSizePolicy(Qt::SizePolicy::Minimum, Qt::SizePolicy::Minimum)
@@ -154,14 +160,20 @@ module Cosmos
154
160
  @test_setup_callback = nil
155
161
  @test_suite_teardown_callback = nil
156
162
  @test_teardown_callback = nil
163
+ end
164
+
165
+ def test_suite_start_disabled=(bool)
166
+ @test_suite_start_disabled = bool
167
+ if @test_suite_start_disabled
168
+ @test_suite_start_button.setEnabled(false)
169
+ end
170
+ end
157
171
 
158
- @test_suite_start_enabled = false
159
- @test_suite_setup_enabled = false
160
- @test_suite_teardown_enabled = false
161
- @test_start_enabled = false
162
- @test_setup_enabled = false
163
- @test_teardown_enabled = false
164
- @test_case_start_enabled = false
172
+ def test_group_start_disabled=(bool)
173
+ @test_group_start_disabled = bool
174
+ if @test_group_start_disabled
175
+ @test_start_button.setEnabled(false)
176
+ end
165
177
  end
166
178
 
167
179
  def select_suite(test_suite)
@@ -282,7 +294,7 @@ module Cosmos
282
294
  @test_suite_teardown_button.setEnabled(false)
283
295
  end
284
296
  end
285
- if @test_suites.keys.empty?
297
+ if @test_suites.keys.empty? || @test_suite_start_disabled
286
298
  @test_suite_start_button.setEnabled(false)
287
299
  else
288
300
  @test_suite_start_button.setEnabled(true)
@@ -311,7 +323,7 @@ module Cosmos
311
323
  @test_teardown_button.setEnabled(false)
312
324
  end
313
325
  end
314
- @test_start_button.setEnabled(true)
326
+ @test_start_button.setEnabled(true) unless @test_group_start_disabled
315
327
  else
316
328
  @test_start_button.setEnabled(false)
317
329
  end
@@ -93,6 +93,7 @@ module Cosmos
93
93
 
94
94
  System.telemetry
95
95
  @search_box.completion_list = System.telemetry.all_item_strings(true, splash)
96
+ # Always create the TlmExtractorConfig but note that it's optional to pass a config file
96
97
  @tlm_extractor_config = TlmExtractorConfig.new(options.config_file)
97
98
  @tlm_extractor_processor = TlmExtractorProcessor.new
98
99
  Qt.execute_in_main_thread(true) do
@@ -453,6 +454,8 @@ module Cosmos
453
454
 
454
455
  def self.post_options_parsed_hook(options)
455
456
  if options.input_files or options.dart
457
+ normalize_config_options(options)
458
+
456
459
  # Process config file
457
460
  raise "Configuration File must be specified for command line processing" unless options.config_file
458
461
 
@@ -500,9 +503,6 @@ module Cosmos
500
503
  options.title = "Telemetry Extractor"
501
504
  options.dart = false
502
505
  option_parser.separator "Telemetry Extractor Specific Options:"
503
- option_parser.on("-c", "--config FILE", "Use the specified configuration file") do |arg|
504
- options.config_file = File.join(Cosmos::USERPATH, 'config', 'tools', 'tlm_extractor', arg)
505
- end
506
506
  option_parser.on("-i", "--input FILE", "Process the specified input file") do |arg|
507
507
  options.input_files ||= []
508
508
  if arg[0..0] != '/' and arg[1..1] != ':'
@@ -16,11 +16,10 @@ module Cosmos
16
16
 
17
17
  # Thread used to gather telemetry in realtime and process it using a TabbedPlotsDefinition
18
18
  class TabbedPlotsRealtimeThread < InterfaceThread
19
-
20
19
  # Create a new TabbedPlotsRealtimeThread
21
20
  def initialize(tabbed_plots_config, connection_success_callback = nil, connection_failed_callback = nil, connection_lost_callback = nil, fatal_exception_callback = nil, replay_mode = false)
22
21
  if replay_mode
23
- interface = TcpipClientInterface.new(System.connect_hosts['REPLAY_PREIDENTIFIED'], nil, System.ports['REPLAY_PREIDENTIFIED'], nil, tabbed_plots_config.cts_timeout, 'PREIDENTIFIED')
22
+ interface = TcpipClientInterface.new(System.connect_hosts['REPLAY_PREIDENTIFIED'], nil, System.ports['REPLAY_PREIDENTIFIED'], nil, nil, 'PREIDENTIFIED')
24
23
  else
25
24
  interface = TcpipClientInterface.new(System.connect_hosts['CTS_PREIDENTIFIED'], nil, System.ports['CTS_PREIDENTIFIED'], nil, tabbed_plots_config.cts_timeout, 'PREIDENTIFIED')
26
25
  end
@@ -52,7 +51,7 @@ module Cosmos
52
51
 
53
52
  # Start interface thread
54
53
  start()
55
- end # def initialize
54
+ end
56
55
 
57
56
  # Callback to the system definition when a packet is received
58
57
  def received_packet_callback(packet)
@@ -65,7 +64,7 @@ module Cosmos
65
64
  stop()
66
65
  Cosmos.kill_thread(self, @process_thread)
67
66
  @process_thread = nil
68
- end # def kill
67
+ end
69
68
 
70
69
  def graceful_kill
71
70
  # Allow the callbacks a chance to update the GUI so that they can die gracefully
@@ -76,7 +75,5 @@ module Cosmos
76
75
  end
77
76
  end
78
77
  end
79
-
80
- end # class TabbedPlotsRealtimeThread
81
-
82
- end # module Cosmos
78
+ end
79
+ end
@@ -24,15 +24,14 @@ require 'cosmos/gui/dialogs/dart_dialog'
24
24
  require 'cosmos/tools/tlm_grapher/tabbed_plots/overview_tabbed_plots'
25
25
 
26
26
  module Cosmos
27
-
28
27
  # Displays multiple plots that perform various analysis on data.
29
28
  class TabbedPlotsTool < QtTool
30
-
31
29
  MINIMUM_LEFT_PANEL_WIDTH = 200
32
30
  DEFAULT_LEFT_PANEL_WIDTH = 250
33
31
 
34
32
  def initialize(options)
35
33
  super(options) # MUST BE FIRST - All code before super is executed twice in RubyQt Based classes
34
+ @options = options
36
35
  @base_title = self.windowTitle
37
36
  Cosmos.load_cosmos_icon("tlm_grapher.png")
38
37
 
@@ -77,9 +76,10 @@ module Cosmos
77
76
  System.telemetry
78
77
 
79
78
  # Create tabbed plots definition
80
- @config_filename = File.join(Cosmos::USERPATH, 'config', 'tools', options.config_dir, options.config_file)
79
+ @config_filename = options.config_file ? options.config_file : ''
81
80
  Qt.execute_in_main_thread(true) do
82
81
  load_configuration()
82
+ toggle_replay_mode() if options.replay
83
83
  end
84
84
 
85
85
  # Unconfigure CosmosConfig to interact with splash screen
@@ -590,9 +590,14 @@ module Cosmos
590
590
  @tabbed_plots.pause
591
591
 
592
592
  if prompt_for_save_if_needed()
593
+ if @config_filename.empty?
594
+ load_filename = @options.config_dir
595
+ else
596
+ load_filename = @config_filename
597
+ end
593
598
  filename = Qt::FileDialog.getOpenFileName(self,
594
599
  "Load Configuration",
595
- @config_filename,
600
+ load_filename,
596
601
  "Config File (*.txt);;All Files (*)")
597
602
  if filename and not filename.empty?
598
603
  @config_filename = filename
@@ -1070,7 +1075,5 @@ module Cosmos
1070
1075
  def realtime_thread_fatal_exception_callback(error)
1071
1076
  Cosmos.handle_fatal_exception(error)
1072
1077
  end # def realtime_thread_fatal_exception_callback
1073
-
1074
- end # class TabbedPlotsTool
1075
-
1076
- end # module Cosmos
1078
+ end
1079
+ end
@@ -16,15 +16,12 @@ end
16
16
 
17
17
  module Cosmos
18
18
 
19
- # TlmGrapher class
20
- #
21
- # This class implements the TlmGrapher Application. This application displays multiple line graphs
22
- # that perform various analysis on housekeeping telemetry.
23
- #
19
+ # Telemetry Grapher displays multiple line graphs that perform various
20
+ # analysis on housekeeping telemetry.
24
21
  class TlmGrapher < TabbedPlotsTool
25
22
 
26
23
  # Runs the application
27
- def self.run (opts = nil, options = nil)
24
+ def self.run(opts = nil, options = nil)
28
25
  Cosmos.catch_fatal_exception do
29
26
  unless options
30
27
  opts, options = create_default_options()
@@ -32,8 +29,6 @@ module Cosmos
32
29
  options.width = 1000
33
30
  options.height = 800
34
31
  options.title = "Telemetry Grapher"
35
- options.config_dir = 'tlm_grapher'
36
- options.config_file = 'tlm_grapher.txt'
37
32
  options.tool_short_name = 'tlmgrapher'
38
33
  options.tabbed_plots_type = 'overview'
39
34
  options.data_object_types = ['HOUSEKEEPING', 'XY','SINGLEXY']
@@ -43,12 +38,10 @@ module Cosmos
43
38
  options.adder_orientation = Qt::Horizontal
44
39
  options.items = []
45
40
  options.start = false
41
+ options.replay = false
46
42
  options.about_string = "TlmGrapher provides realtime and log file graphing abilities to the COSMOS system."
47
43
 
48
44
  opts.separator "Telemetry Grapher Specific Options:"
49
- opts.on("-c", "--config FILE", "Use the specified configuration file") do |arg|
50
- options.config_file = arg
51
- end
52
45
  opts.on("-s", "--start", "Start graphing immediately") do |arg|
53
46
  options.start = true
54
47
  end
@@ -60,6 +53,9 @@ module Cosmos
60
53
  end
61
54
  options.items << split
62
55
  end
56
+ opts.on("--replay", "Start Telemetry Grapher in Replay mode") do
57
+ options.replay = true
58
+ end
63
59
  end
64
60
 
65
61
  super(opts, options)
@@ -97,7 +93,5 @@ module Cosmos
97
93
  plot_index += 1
98
94
  end
99
95
  end
100
-
101
- end # class TlmGrapher
102
-
103
- end # module Cosmos
96
+ end
97
+ end
@@ -23,7 +23,7 @@ module Cosmos
23
23
  # close_all_screens is called
24
24
  @@open_screens = []
25
25
 
26
- attr_accessor :full_name, :width, :height, :window, :replay_flag
26
+ attr_accessor :full_name, :width, :height, :window, :replay_flag, :original_target_name
27
27
 
28
28
  include ClassificationBanner
29
29
 
@@ -340,6 +340,7 @@ module Cosmos
340
340
  # to the stack and that class doesn't have a complete method.
341
341
  current_widget.complete() if current_widget.respond_to? :complete
342
342
  when 'SETTING'
343
+ next unless current_widget
343
344
  parser.verify_num_parameters(1, nil, "#{keyword} <Setting Name> <Setting Values... (optional)>")
344
345
  if parameters.length > 1
345
346
  current_widget.set_setting(parameters[0], parameters[1..-1])
@@ -347,6 +348,7 @@ module Cosmos
347
348
  current_widget.set_setting(parameters[0], [])
348
349
  end
349
350
  when 'SUBSETTING'
351
+ next unless current_widget
350
352
  parser.verify_num_parameters(2, nil, "#{keyword} <Widget Index (0..?)> <Setting Name> <Setting Values... (optional)>")
351
353
  if parameters.length > 2
352
354
  current_widget.set_subsetting(parameters[0], parameters[1], parameters[2..-1])
@@ -59,7 +59,7 @@ module Cosmos
59
59
  def self.load_config(filename)
60
60
  raise "Configuration file #{filename} does not exist." unless filename && File.exist?(filename)
61
61
 
62
- # Find all screen files so we can calculate MD5
62
+ # Find all screen files so we can calculate hashing sum
63
63
  tlmviewer_files = [filename, System.initial_filename]
64
64
  additional_data = ''
65
65
  System.targets.each do |target_name, target|
@@ -79,9 +79,13 @@ module Cosmos
79
79
  end
80
80
  end
81
81
  end
82
- # Calculate MD5 and attempt to load marshal file
83
- md5 = Cosmos.md5_files(tlmviewer_files, additional_data)
84
- marshal_filename = File.join(System.paths['TMP'], "tlmviewer_#{md5.hexdigest}.bin")
82
+ # Calculate the hashing sum and attempt to load marshal file
83
+ hashing_result = Cosmos.hash_files(tlmviewer_files, additional_data, System.hashing_algorithm)
84
+ # Only use at most, 32 characters of the hex
85
+ hash_string = hashing_result.hexdigest
86
+ hash_string = hash_string[-32..-1] if hash_string.length >= 32
87
+
88
+ marshal_filename = File.join(System.paths['TMP'], "tlmviewer_#{hash_string}.bin")
85
89
  config = Cosmos.marshal_load(marshal_filename)
86
90
  unless config
87
91
  # Marshal file load failed - Manually load configuration
@@ -145,6 +149,7 @@ module Cosmos
145
149
  @all_telemetry = System.telemetry.all_item_strings(false, splash)
146
150
 
147
151
  Qt.execute_in_main_thread(true) do
152
+ toggle_replay_mode() if options.replay
148
153
  @search_box.completion_list = @tlm_viewer_config.completion_list
149
154
  @search_box.callback = lambda do |tlm|
150
155
  mapping = @tlm_viewer_config.tlm_to_screen_mapping[tlm]
@@ -546,36 +551,35 @@ module Cosmos
546
551
  options.title = 'Telemetry Viewer'
547
552
  options.screen = nil
548
553
  options.listen = true
549
- options.config_file = nil
550
554
  options.restore_size = false
551
555
  options.production = false
556
+ options.replay = false
557
+ options.config_file = true # config_file is required
552
558
 
553
559
  option_parser.separator "Telemetry Viewer Specific Options:"
554
- option_parser.on("-c", "--config FILE", "Use the specified config file") { |arg| options.config_file = arg }
555
560
  option_parser.on("-s", "--screen SCREEN_NAME", "Start up the specified screen") { |arg| options.screen = arg }
556
561
  option_parser.on("-n", "--nolisten", "Don't listen for requests") do
557
562
  options.listen = false
558
563
  options.title << ' : Not Listening'
559
564
  end
560
- option_parser.on("-p", "--production", "Run TlmServer in production mode which disables the edit buttons.") do |arg|
565
+ option_parser.on("-p", "--production", "Run Telemetry Viewer in production mode which disables the edit buttons.") do |arg|
561
566
  options.production = true
562
567
  end
568
+ option_parser.on("--replay", "Run Telemetry Viewer in Replay mode") do
569
+ options.replay = true
570
+ end
563
571
  option_parser.parse!(ARGV)
564
572
  end
565
573
 
566
574
  if options.screen
575
+ normalize_config_options(options)
567
576
  application = nil
568
577
  begin
569
578
  QtTool.redirect_io
570
579
  System.telemetry
571
580
  application = Qt::Application.new(ARGV)
572
581
  application.addLibraryPath(Qt::PLUGIN_PATH) if Kernel.is_windows?
573
- if options.config_file
574
- filename = File.join(::Cosmos::USERPATH, 'config', 'tools', 'tlm_viewer', options.config_file)
575
- else
576
- filename = File.join(::Cosmos::USERPATH, 'config', 'tools', 'tlm_viewer', 'tlm_viewer.txt')
577
- end
578
- tlm_viewer_config = load_config(filename)
582
+ tlm_viewer_config = load_config(options.config_file)
579
583
  screen_info = tlm_viewer_config.screen_infos[options.screen.upcase]
580
584
  raise "Unknown screen: #{options.screen.upcase}" unless screen_info
581
585
  if not options.auto_position
@@ -583,6 +587,8 @@ module Cosmos
583
587
  else
584
588
  screen_info.screen = Screen.new(screen_info.full_name, screen_info.filename, nil, :REALTIME, screen_info.x_pos, screen_info.y_pos, screen_info.original_target_name, screen_info.substitute, screen_info.force_substitute, true)
585
589
  end
590
+ set_replay_mode(true) if options.replay
591
+ Screen.update_replay_mode
586
592
  application.exec
587
593
  rescue Exception => error
588
594
  unless error.class == SystemExit or error.class == Interrupt